server/sources/datafeed.py
changeset 8435 5064b6e0d6f4
parent 8434 39c5bb4dcc59
child 8483 4ba11607d84a
child 8529 1daea1f433c9
equal deleted inserted replaced
8434:39c5bb4dcc59 8435:5064b6e0d6f4
   276     def __init__(self, session, source, sourceuris=None, import_log=None, **kwargs):
   276     def __init__(self, session, source, sourceuris=None, import_log=None, **kwargs):
   277         super(DataFeedParser, self).__init__(session, **kwargs)
   277         super(DataFeedParser, self).__init__(session, **kwargs)
   278         self.source = source
   278         self.source = source
   279         self.sourceuris = sourceuris
   279         self.sourceuris = sourceuris
   280         self.import_log = import_log
   280         self.import_log = import_log
   281         self.stats = {'created': set(),
   281         self.stats = {'created': set(), 'updated': set(), 'checked': set()}
   282                       'updated': set()}
       
   283 
   282 
   284     def normalize_url(self, url):
   283     def normalize_url(self, url):
   285         from cubicweb.sobjects import URL_MAPPING # available after registration
   284         from cubicweb.sobjects import URL_MAPPING # available after registration
   286         for mappedurl in URL_MAPPING:
   285         for mappedurl in URL_MAPPING:
   287             if url.startswith(mappedurl):
   286             if url.startswith(mappedurl):
   357         return entity.eid in self.stats['updated']
   356         return entity.eid in self.stats['updated']
   358 
   357 
   359     def notify_updated(self, entity):
   358     def notify_updated(self, entity):
   360         return self.stats['updated'].add(entity.eid)
   359         return self.stats['updated'].add(entity.eid)
   361 
   360 
       
   361     def notify_checked(self, entity):
       
   362         return self.stats['checked'].add(entity.eid)
       
   363 
   362     def is_deleted(self, extid, etype, eid):
   364     def is_deleted(self, extid, etype, eid):
   363         """return True if the entity of given external id, entity type and eid
   365         """return True if the entity of given external id, entity type and eid
   364         is actually deleted. Always return True by default, put more sensible
   366         is actually deleted. Always return True by default, put more sensible
   365         stuff in sub-classes.
   367         stuff in sub-classes.
   366         """
   368         """
   379 
   381 
   380     def update_if_necessary(self, entity, attrs):
   382     def update_if_necessary(self, entity, attrs):
   381         entity.complete(tuple(attrs))
   383         entity.complete(tuple(attrs))
   382         # check modification date and compare attribute values to only update
   384         # check modification date and compare attribute values to only update
   383         # what's actually needed
   385         # what's actually needed
       
   386         self.notify_checked(entity)
   384         mdate = attrs.get('modification_date')
   387         mdate = attrs.get('modification_date')
   385         if not mdate or mdate > entity.modification_date:
   388         if not mdate or mdate > entity.modification_date:
   386             attrs = dict( (k, v) for k, v in attrs.iteritems()
   389             attrs = dict( (k, v) for k, v in attrs.iteritems()
   387                           if v != getattr(entity, k))
   390                           if v != getattr(entity, k))
   388             if attrs:
   391             if attrs: