# HG changeset patch # User Sylvain Thénault <sylvain.thenault@logilab.fr> # Date 1281081752 -7200 # Fri Aug 06 10:02:32 2010 +0200 # Node ID 72715685d5e365cd9736298053dffc2bb341eca8 # Parent 852e7c11f252da0df14195b4c8a2eba947a9416f make feedparser,rdflib,datafeed only recommands diff --git a/sobjects.py b/sobjects.py --- a/sobjects.py +++ b/sobjects.py @@ -5,14 +5,25 @@ from datetime import datetime from lxml.html import fromstring, tostring -import feedparser -import rdflib + +try: + import feedparser +except ImportError: + feedparser = None -from cubes.datafeed.sobjects import DataFeedParser +try: + import rdflib +except ImportError: + rdflib = None +else: + RDF = rdflib.Namespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#') + SIOC = rdflib.Namespace('http://rdfs.org/sioc/ns#') + DCTERMS = rdflib.Namespace('http://purl.org/dc/terms/') -RDF = rdflib.Namespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#') -SIOC = rdflib.Namespace('http://rdfs.org/sioc/ns#') -DCTERMS = rdflib.Namespace('http://purl.org/dc/terms/') +try: + from cubes.datafeed.sobjects import DataFeedParser +except ImportError: + DataFeedParser = None def get_subject(g, pred, obj): subjects = list(g.subjects(pred, obj)) @@ -135,50 +146,54 @@ AVATAR_CACHE[screen_name] = user['profile_image_url'] return AVATAR_CACHE[screen_name] -class BlogPostParser(DataFeedParser): - __abstract__ = True - entity_type = 'BlogEntry' +if DataFeedParser is not None: + class BlogPostParser(DataFeedParser): + __abstract__ = True + entity_type = 'BlogEntry' + + def process(self, url): + for item in self.parse(url): + author = item.pop('author', None) + avatar = item.pop('avatar', None) + euri = self.sget_entity('ExternalUri', uri=item.pop('uri')) + if euri.same_as: + sys.stdout.write('.') + post = self.update_blogpost(euri.same_as[0], item) + else: + sys.stdout.write('+') + post = self.create_blogpost(item, euri) + if author: + account = self.sget_entity('UserAccount', name=author) + self.sget_relation(post.eid, 'has_creator', account.eid) + if avatar: + auri = self.sget_entity('ExternalUri', uri=avatar) + self.sget_relation(account.eid, 'has_avatar', auri.eid) + sys.stdout.flush() - def process(self, url): - for item in self.parse(url): - author = item.pop('author', None) - avatar = item.pop('avatar', None) - euri = self.sget_entity('ExternalUri', uri=item.pop('uri')) - if euri.same_as: - sys.stdout.write('.') - post = self.update_blogpost(euri.same_as[0], item) - else: - sys.stdout.write('+') - post = self.create_blogpost(item, euri) - if author: - account = self.sget_entity('UserAccount', name=author) - self.sget_relation(post.eid, 'has_creator', account.eid) - if avatar: - auri = self.sget_entity('ExternalUri', uri=avatar) - self.sget_relation(account.eid, 'has_avatar', auri.eid) - sys.stdout.flush() + def create_blogpost(self, item, uri): + entity = self._cw.create_entity(self.entity_type, **item) + entity.set_relations(same_as=uri) + return entity + + def update_blogpost(self, entity, item): + entity.set_attributes(**item) + return entity - def create_blogpost(self, item, uri): - entity = self._cw.create_entity(self.entity_type, **item) - entity.set_relations(same_as=uri) - return entity - - def update_blogpost(self, entity, item): - entity.set_attributes(**item) - return entity + if rdflib is not None: + class BlogPostSiocParser(BlogPostParser): + __regid__ = 'blogpost-sioc' + parse = staticmethod(parse_blogpost_sioc) -class BlogPostSiocParser(BlogPostParser): - __regid__ = 'blogpost-sioc' - parse = staticmethod(parse_blogpost_sioc) + if feedparser is not None: + class BlogPostRSSParser(BlogPostParser): + __regid__ = 'blogpost-rss' + parse = staticmethod(parse_blogpost_rss) -class BlogPostRSSParser(BlogPostParser): - __regid__ = 'blogpost-rss' - parse = staticmethod(parse_blogpost_rss) + class MicroBlogPostRSSParser(BlogPostParser): + __regid__ = 'microblogpost-rss' + entity_type = 'MicroBlogEntry' + parse = staticmethod(parse_microblogpost_rss) -class MicroBlogPostRSSParser(BlogPostParser): - __regid__ = 'microblogpost-rss' - entity_type = 'MicroBlogEntry' - parse = staticmethod(parse_microblogpost_rss) if __name__ == '__main__': import sys @@ -189,4 +204,3 @@ parser = globals()[name] pprint(list(parser(url))) -