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