Atom: support for <link rel="relative">

Not very clean. Clean work would require full rewrite of xgetCreate & maybe the whole item "selection" system
master
pictuga 2013-12-04 20:12:52 +01:00
parent e2512dba0c
commit 71e4d597f8
1 changed files with 9 additions and 6 deletions

View File

@ -96,12 +96,15 @@ class FeedBase(object):
def xgetCreate(self, table): def xgetCreate(self, table):
""" Returns an element, and creates it when not present """ """ Returns an element, and creates it when not present """
tag = table[self.tag] value = table[self.tag]
match = self.xget(tag) if not isinstance(value, tuple):
value = (value, value)
new, xpath = value
match = self.xget(xpath)
if match is not None: if match is not None:
return match return match
else: else:
element = etree.Element(tagNS(tag)) element = etree.Element(tagNS(new))
self.root.append(element) self.root.append(element)
return element return element
@ -592,11 +595,11 @@ class FeedItemAtom(FeedItem):
def getLink(self): def getLink(self):
return self.xget('atom:link/@href|atom03:link/@href') return self.xget('(atom:link|atom03:link)[@rel="alternate" or not(@rel)]/@href')
def setLink(self, value): def setLink(self, value):
table = { 'atom:feed': 'atom:link', table = { 'atom:feed': ('atom:link', 'atom:link[@rel="alternate" or not(@rel)]'),
'atom03:feed': 'atom03:link'} 'atom03:feed': ('atom03:link', 'atom03:link[@rel="alternate" or not(@rel)]')}
element = self.xgetCreate(table) element = self.xgetCreate(table)
element.attrib['href'] = value element.attrib['href'] = value