Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/epubview/epubinfo.py
diff options
context:
space:
mode:
Diffstat (limited to 'epubview/epubinfo.py')
-rw-r--r--epubview/epubinfo.py90
1 files changed, 90 insertions, 0 deletions
diff --git a/epubview/epubinfo.py b/epubview/epubinfo.py
new file mode 100644
index 0000000..ddf9ad5
--- /dev/null
+++ b/epubview/epubinfo.py
@@ -0,0 +1,90 @@
+import os
+from lxml import etree
+
+
+class EpubInfo(): #TODO: Cover the entire DC range
+ def __init__(self, file):
+ self._tree = etree.parse(file)
+ self._root = self._tree.getroot()
+ self._e_metadata = self._root.find('{http://www.idpf.org/2007/opf}metadata')
+
+ self.title = self._get_title()
+ self.creator = self._get_creator()
+ self.date = self._get_date()
+ self.subject = self._get_subject()
+ self.source = self._get_source()
+ self.rights = self._get_rights()
+ self.identifier = self._get_identifier()
+ self.language = self._get_language()
+
+
+ def _get_data(self, tagname):
+ element = self._e_metadata.find(tagname)
+ return element.text
+
+ def _get_title(self):
+ try:
+ ret = self._get_data('.//{http://purl.org/dc/elements/1.1/}title')
+ except AttributeError:
+ return None
+
+ return ret
+
+ def _get_creator(self):
+ try:
+ ret = self._get_data('.//{http://purl.org/dc/elements/1.1/}creator')
+ except AttributeError:
+ return None
+ return ret
+
+ def _get_date(self):
+ #TODO: iter
+ try:
+ ret = self._get_data('.//{http://purl.org/dc/elements/1.1/}date')
+ except AttributeError:
+ return None
+
+ return ret
+
+ def _get_source(self):
+ try:
+ ret = self._get_data('.//{http://purl.org/dc/elements/1.1/}source')
+ except AttributeError:
+ return None
+
+ return ret
+
+ def _get_rights(self):
+ try:
+ ret = self._get_data('.//{http://purl.org/dc/elements/1.1/}rights')
+ except AttributeError:
+ return None
+
+ return ret
+
+ def _get_identifier(self):
+ #TODO: iter
+ element = self._e_metadata.find('.//{http://purl.org/dc/elements/1.1/}identifier')
+
+ if element is not None:
+ return {'id':element.get('id'), 'value':element.text}
+ else:
+ return None
+
+ def _get_language(self):
+ try:
+ ret = self._get_data('.//{http://purl.org/dc/elements/1.1/}language')
+ except AttributeError:
+ return None
+
+ return ret
+
+ def _get_subject(self):
+ try:
+ subjectlist = []
+ for element in self._e_metadata.iterfind('.//{http://purl.org/dc/elements/1.1/}subject'):
+ subjectlist.append(element.text)
+ except AttributeError:
+ return None
+
+ return subjectlist \ No newline at end of file