dc: Centralize XML extension
This commit is contained in:
parent
1d0d13fdc6
commit
cddff68f37
1 changed files with 29 additions and 49 deletions
|
@ -45,57 +45,50 @@ class DcBaseExtension(BaseExtension):
|
||||||
def extend_ns(self):
|
def extend_ns(self):
|
||||||
return {'dc' : 'http://purl.org/dc/elements/1.1/'}
|
return {'dc' : 'http://purl.org/dc/elements/1.1/'}
|
||||||
|
|
||||||
def extend_atom(self, atom_feed):
|
def _extend_xml(self, xml_elem):
|
||||||
'''Create an Atom feed xml structure containing all previously set fields.
|
'''Extend xml_elem with set DC fields.
|
||||||
|
|
||||||
:returns: The feed root element
|
:param xml_elem: etree element
|
||||||
'''
|
'''
|
||||||
DCELEMENTS_NS = 'http://purl.org/dc/elements/1.1/'
|
DCELEMENTS_NS = 'http://purl.org/dc/elements/1.1/'
|
||||||
|
|
||||||
feed = atom_feed
|
|
||||||
|
|
||||||
for elem in ['contributor', 'coverage', 'creator', 'date', 'description',
|
for elem in ['contributor', 'coverage', 'creator', 'date', 'description',
|
||||||
'language', 'publisher', 'relation', 'rights', 'source', 'subject',
|
'language', 'publisher', 'relation', 'rights', 'source', 'subject',
|
||||||
'title', 'type']:
|
'title', 'type']:
|
||||||
if hasattr(self, '_dcelem_%s' % elem):
|
if hasattr(self, '_dcelem_%s' % elem):
|
||||||
for val in getattr(self, '_dcelem_%s' % elem) or []:
|
for val in getattr(self, '_dcelem_%s' % elem) or []:
|
||||||
node = etree.SubElement(feed, '{%s}%s' % (DCELEMENTS_NS,elem))
|
node = etree.SubElement(xml_elem, '{%s}%s' % (DCELEMENTS_NS, elem))
|
||||||
node.text = val
|
node.text = val
|
||||||
|
|
||||||
if self._dcelem_format:
|
if self._dcelem_format:
|
||||||
node = etree.SubElement(feed, '{%s}format' % DCELEMENTS_NS)
|
node = etree.SubElement(xml_elem, '{%s}format' % DCELEMENTS_NS)
|
||||||
node.text = format
|
node.text = format
|
||||||
|
|
||||||
if self._dcelem_identifier:
|
if self._dcelem_identifier:
|
||||||
node = etree.SubElement(feed, '{%s}identifier' % DCELEMENTS_NS)
|
node = etree.SubElement(xml_elem, '{%s}identifier' % DCELEMENTS_NS)
|
||||||
node.text = identifier
|
node.text = identifier
|
||||||
|
|
||||||
return feed
|
def extend_atom(self, atom_feed):
|
||||||
|
'''Extend an Atom feed with the set DC fields.
|
||||||
|
|
||||||
|
:param atom_feed: The feed root element
|
||||||
|
:returns: The feed root element
|
||||||
|
'''
|
||||||
|
|
||||||
|
self._extend_xml(atom_feed)
|
||||||
|
|
||||||
|
return atom_feed
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def extend_rss(self, rss_feed):
|
def extend_rss(self, rss_feed):
|
||||||
'''Create an RSS feed xml structure containing all previously set fields.
|
'''Extend a RSS feed with the set DC fields.
|
||||||
|
|
||||||
:returns: Tuple containing the feed root element and the element tree.
|
:param rss_feed: The feed root element
|
||||||
|
:returns: The feed root element.
|
||||||
'''
|
'''
|
||||||
DCELEMENTS_NS = 'http://purl.org/dc/elements/1.1/'
|
|
||||||
channel = rss_feed[0]
|
channel = rss_feed[0]
|
||||||
|
self._extend_xml(channel)
|
||||||
for elem in ['contributor', 'coverage', 'creator', 'date', 'description',
|
|
||||||
'language', 'publisher', 'relation', 'rights', 'source', 'subject',
|
|
||||||
'title', 'type']:
|
|
||||||
if hasattr(self, '_dcelem_%s' % elem):
|
|
||||||
for val in getattr(self, '_dcelem_%s' % elem) or []:
|
|
||||||
node = etree.SubElement(channel, '{%s}%s' % (DCELEMENTS_NS,elem))
|
|
||||||
node.text = val
|
|
||||||
|
|
||||||
if self._dcelem_format:
|
|
||||||
node = etree.SubElement(channel, '{%s}format' % DCELEMENTS_NS)
|
|
||||||
node.text = format
|
|
||||||
|
|
||||||
if self._dcelem_identifier:
|
|
||||||
node = etree.SubElement(channel, '{%s}identifier' % DCELEMENTS_NS)
|
|
||||||
node.text = identifier
|
|
||||||
|
|
||||||
return rss_feed
|
return rss_feed
|
||||||
|
|
||||||
|
@ -418,32 +411,19 @@ class DcEntryExtension(DcBaseExtension):
|
||||||
'''Dublin Core Elements extension for podcasts.
|
'''Dublin Core Elements extension for podcasts.
|
||||||
'''
|
'''
|
||||||
def extend_atom(self, entry):
|
def extend_atom(self, entry):
|
||||||
'''NYI. Differs from RSS Implementation?
|
'''Add dc elements to an atom item. Alters the item itself.
|
||||||
|
|
||||||
|
:param entry: An atom entry element.
|
||||||
|
:returns: The entry element.
|
||||||
'''
|
'''
|
||||||
|
self._extend_xml(entry)
|
||||||
return entry
|
return entry
|
||||||
|
|
||||||
def extend_rss(self, item):
|
def extend_rss(self, item):
|
||||||
'''Add dc elements to a RSS item. Alters the item itself.
|
'''Add dc elements to a RSS item. Alters the item itself.
|
||||||
|
|
||||||
|
:param item: A RSS item element.
|
||||||
:returns: The item element.
|
:returns: The item element.
|
||||||
'''
|
'''
|
||||||
DCELEMENTS_NS = 'http://purl.org/dc/elements/1.1/'
|
self._extend_xml(item)
|
||||||
|
|
||||||
for elem in ['contributor', 'coverage', 'creator', 'date', 'description',
|
|
||||||
'language', 'publisher', 'relation', 'rights', 'source', 'subject',
|
|
||||||
'title', 'type']:
|
|
||||||
if hasattr(self, '_dcelem_%s' % elem):
|
|
||||||
for val in getattr(self, '_dcelem_%s' % elem) or []:
|
|
||||||
node = etree.SubElement(item, '{%s}%s' % (DCELEMENTS_NS,elem))
|
|
||||||
node.text = val
|
|
||||||
|
|
||||||
if self._dcelem_format:
|
|
||||||
node = etree.SubElement(item, '{%s}format' % DCELEMENTS_NS)
|
|
||||||
node.text = format
|
|
||||||
|
|
||||||
if self._dcelem_identifier:
|
|
||||||
node = etree.SubElement(item, '{%s}identifier' % DCELEMENTS_NS)
|
|
||||||
node.text = identifier
|
|
||||||
|
|
||||||
return item
|
return item
|
||||||
|
|
Loading…
Reference in a new issue