Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/epubview/epubinfo.py
blob: ddf9ad5c3fec2e73cd7e986bb684d6f07b168621 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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