mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Improve Python-attribute access of metadata XML-attributes.
This commit is contained in:
parent
d50de0b76c
commit
53cbe4814d
@ -52,6 +52,8 @@ def XML(name): return '{%s}%s' % (XML_NS, name)
|
|||||||
def XHTML(name): return '{%s}%s' % (XHTML_NS, name)
|
def XHTML(name): return '{%s}%s' % (XHTML_NS, name)
|
||||||
def OPF(name): return '{%s}%s' % (OPF2_NS, name)
|
def OPF(name): return '{%s}%s' % (OPF2_NS, name)
|
||||||
def DC(name): return '{%s}%s' % (DC11_NS, name)
|
def DC(name): return '{%s}%s' % (DC11_NS, name)
|
||||||
|
def XSI(name): return '{%s}%s' % (XSI_NS, name)
|
||||||
|
def DCTERMS(name): return '{%s}%s' % (DCTERMS_NS, name)
|
||||||
def NCX(name): return '{%s}%s' % (NCX_NS, name)
|
def NCX(name): return '{%s}%s' % (NCX_NS, name)
|
||||||
def SVG(name): return '{%s}%s' % (SVG_NS, name)
|
def SVG(name): return '{%s}%s' % (SVG_NS, name)
|
||||||
def XLINK(name): return '{%s}%s' % (XLINK_NS, name)
|
def XLINK(name): return '{%s}%s' % (XLINK_NS, name)
|
||||||
@ -211,11 +213,14 @@ class DirWriter(object):
|
|||||||
|
|
||||||
|
|
||||||
class Metadata(object):
|
class Metadata(object):
|
||||||
DC_TERMS = set(['contributor', 'coverage', 'creator', 'date', 'description',
|
DC_TERMS = set(['contributor', 'coverage', 'creator', 'date',
|
||||||
'format', 'identifier', 'language', 'publisher', 'relation',
|
'description', 'format', 'identifier', 'language',
|
||||||
'rights', 'source', 'subject', 'title', 'type'])
|
'publisher', 'relation', 'rights', 'source', 'subject',
|
||||||
|
'title', 'type'])
|
||||||
CALIBRE_TERMS = set(['series', 'series_index', 'rating'])
|
CALIBRE_TERMS = set(['series', 'series_index', 'rating'])
|
||||||
OPF_ATTRS = set(['role', 'file-as', 'scheme', 'event'])
|
OPF_ATTRS = {'role': OPF('role'), 'file-as': OPF('file-as'),
|
||||||
|
'scheme': OPF('scheme'), 'event': OPF('event'),
|
||||||
|
'type': XSI('type'), 'id': 'id'}
|
||||||
OPF1_NSMAP = {'dc': DC11_NS, 'oebpackage': OPF1_NS}
|
OPF1_NSMAP = {'dc': DC11_NS, 'oebpackage': OPF1_NS}
|
||||||
OPF2_NSMAP = {'opf': OPF2_NS, 'dc': DC11_NS, 'dcterms': DCTERMS_NS,
|
OPF2_NSMAP = {'opf': OPF2_NS, 'dc': DC11_NS, 'dcterms': DCTERMS_NS,
|
||||||
'xsi': XSI_NS, 'calibre': CALIBRE_NS}
|
'xsi': XSI_NS, 'calibre': CALIBRE_NS}
|
||||||
@ -240,26 +245,24 @@ class Metadata(object):
|
|||||||
for attr, value in attrib.items():
|
for attr, value in attrib.items():
|
||||||
if isprefixname(value):
|
if isprefixname(value):
|
||||||
attrib[attr] = qname(value, nsmap)
|
attrib[attr] = qname(value, nsmap)
|
||||||
if attr in Metadata.OPF_ATTRS:
|
nsattr = Metadata.OPF_ATTRS.get(attr, attr)
|
||||||
attrib[OPF(attr)] = attrib.pop(attr)
|
if attr != nsattr:
|
||||||
|
attrib[nsattr] = attrib.pop(attr)
|
||||||
self.__setattr__ = self._setattr
|
self.__setattr__ = self._setattr
|
||||||
|
|
||||||
def __getattr__(self, name):
|
def __getattr__(self, name):
|
||||||
attr = name.replace('_', '-')
|
attr = name.replace('_', '-')
|
||||||
if attr in Metadata.OPF_ATTRS:
|
if attr in Metadata.OPF_ATTRS:
|
||||||
attr = OPF(attr)
|
attr = Metadata.OPF_ATTRS[attr]
|
||||||
try:
|
return self.attrib.get(attr, None)
|
||||||
return self.attrib[attr]
|
raise AttributeError(
|
||||||
except KeyError:
|
'%r object has no attribute %r' \
|
||||||
raise AttributeError(
|
% (self.__class__.__name__, name))
|
||||||
'%r object has no attribute %r' \
|
|
||||||
% (self.__class__.__name__, name))
|
|
||||||
|
|
||||||
def _setattr(self, name, value):
|
def _setattr(self, name, value):
|
||||||
attr = name.replace('_', '-')
|
attr = name.replace('_', '-')
|
||||||
if attr in Metadata.OPF_ATTRS:
|
if attr in Metadata.OPF_ATTRS:
|
||||||
attr = OPF(attr)
|
attr = Metadata.OPF_ATTRS[attr]
|
||||||
if attr in self.attrib:
|
|
||||||
self.attrib[attr] = value
|
self.attrib[attr] = value
|
||||||
return
|
return
|
||||||
super(Item, self).__setattr__(self, name, value)
|
super(Item, self).__setattr__(self, name, value)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user