diff --git a/morss/feeds.py b/morss/feeds.py index e9c5a86..924b588 100644 --- a/morss/feeds.py +++ b/morss/feeds.py @@ -44,18 +44,6 @@ except NameError: basestring = unicode = str -Element = etree.Element - -NSMAP = {'atom': 'http://www.w3.org/2005/Atom', - 'atom03': 'http://purl.org/atom/ns#', - 'media': 'http://search.yahoo.com/mrss/', - 'rdf': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', - 'slash': 'http://purl.org/rss/1.0/modules/slash/', - 'dc': 'http://purl.org/dc/elements/1.1/', - 'content': 'http://purl.org/rss/1.0/modules/content/', - 'rssfake': 'http://purl.org/rss/1.0/'} - - def parse_rules(filename=None): if not filename: filename = os.path.join(os.path.dirname(__file__), 'feedify.ini') @@ -224,6 +212,15 @@ class ParserBase(object): class ParserXML(ParserBase): + NSMAP = {'atom': 'http://www.w3.org/2005/Atom', + 'atom03': 'http://purl.org/atom/ns#', + 'media': 'http://search.yahoo.com/mrss/', + 'rdf': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', + 'slash': 'http://purl.org/rss/1.0/modules/slash/', + 'dc': 'http://purl.org/dc/elements/1.1/', + 'content': 'http://purl.org/rss/1.0/modules/content/', + 'rssfake': 'http://purl.org/rss/1.0/'} + def parse(self, raw): parser = etree.XMLParser(recover=True) return etree.fromstring(raw, parser) @@ -242,8 +239,8 @@ class ParserXML(ParserBase): match = re.search(r'^([^:]+):([^:]+)$', rule) # to match fakerss:content if match: match = match.groups() - if match[0] in NSMAP: - return "{%s}%s" % (NSMAP[match[0]], match[1].lower()) + if match[0] in self.NSMAP: + return "{%s}%s" % (self.NSMAP[match[0]], match[1].lower()) return rule @@ -257,7 +254,7 @@ class ParserXML(ParserBase): def rule_search_all(self, rule): try: - return self.root.xpath(rule, namespaces=NSMAP) + return self.root.xpath(rule, namespaces=self.NSMAP) except etree.XPathEvalError: return [] @@ -405,17 +402,18 @@ class Uniq(object): _id = None def __new__(cls, *args, **kwargs): - # check if an item was already created for it + # check if a wrapper was already created for it # if so, reuse it # if not, create a new one + # note that the item itself (the tree node) is created beforehands tmp_id = cls._gen_id(*args, **kwargs) - if tmp_id is not None and tmp_id in cls._map: + if tmp_id in cls._map: return cls._map[tmp_id] else: obj = object.__new__(cls, *args, **kwargs) - cls._map[obj._id] = obj + cls._map[tmp_id] = obj return obj diff --git a/morss/morss.py b/morss/morss.py index 35b8c42..4719f50 100644 --- a/morss/morss.py +++ b/morss/morss.py @@ -164,8 +164,8 @@ def ItemFix(item, feedurl='/'): item.link = parse_qs(urlparse(item.link).query)['u'][0] log(item.link) - # feedburner - feeds.NSMAP['feedburner'] = 'http://rssnamespace.org/feedburner/ext/1.0' + # feedburner FIXME only works if RSS... + item.NSMAP['feedburner'] = 'http://rssnamespace.org/feedburner/ext/1.0' match = item.rule_str('feedburner:origLink') if match: item.link = match