Use actual sync for bookmarks.
[wolnelektury.git] / src / social / syncable.py
1 from datetime import datetime
2 from django.utils.timezone import now, utc
3
4
5 class Syncable:
6     @classmethod
7     def sync(cls, user, instance, data):
8         ts = data.get('timestamp')
9         if ts is None:
10             ts = now()
11         else:
12             ts = datetime.fromtimestamp(ts, tz=utc)
13
14         if instance is not None:
15             if ts and ts < instance.reported_timestamp:
16                 return
17
18         if instance is None:
19             if data.get('deleted'):
20                 return
21             instance = cls.create_from_data(user, data)
22             if instance is None:
23                 return
24
25         instance.reported_timestamp = ts
26         for f in cls.syncable_fields:
27             if f in data:
28                 setattr(instance, f, data[f])
29
30         instance.save()
31         return instance
32
33     @property
34     def timestamp(self):
35         return self.updated_at.timestamp()
36     
37     @classmethod
38     def create_from_data(cls, user, data):
39         raise NotImplementedError