376 self.warning('delete %s %s entities', len(eids), etype) |
376 self.warning('delete %s %s entities', len(eids), etype) |
377 session.execute('DELETE %s X WHERE X eid IN (%s)' |
377 session.execute('DELETE %s X WHERE X eid IN (%s)' |
378 % (etype, ','.join(eids))) |
378 % (etype, ','.join(eids))) |
379 |
379 |
380 def update_if_necessary(self, entity, attrs): |
380 def update_if_necessary(self, entity, attrs): |
381 self.notify_updated(entity) |
|
382 entity.complete(tuple(attrs)) |
381 entity.complete(tuple(attrs)) |
383 # check modification date and compare attribute values to only update |
382 # check modification date and compare attribute values to only update |
384 # what's actually needed |
383 # what's actually needed |
385 mdate = attrs.get('modification_date') |
384 mdate = attrs.get('modification_date') |
386 if not mdate or mdate > entity.modification_date: |
385 if not mdate or mdate > entity.modification_date: |
387 attrs = dict( (k, v) for k, v in attrs.iteritems() |
386 attrs = dict( (k, v) for k, v in attrs.iteritems() |
388 if v != getattr(entity, k)) |
387 if v != getattr(entity, k)) |
389 if attrs: |
388 if attrs: |
390 entity.set_attributes(**attrs) |
389 entity.set_attributes(**attrs) |
391 |
390 self.notify_updated(entity) |
392 |
391 |
393 class DataFeedXMLParser(DataFeedParser): |
392 class DataFeedXMLParser(DataFeedParser): |
394 |
393 |
395 def process(self, url, raise_on_error=False): |
394 def process(self, url, raise_on_error=False): |
396 """IDataFeedParser main entry point""" |
395 """IDataFeedParser main entry point""" |