mirror of
https://github.com/etesync/server
synced 2024-11-22 08:48:07 +00:00
Split cstoken and stoken to be different concepts
The stokens are really just integrity checks for items, and are really just tied to what revision we expected to have first what we have. So we will rename stoken to lastRev or something, and have them completely separate. A partial revert of e22a49f982046e875d4e1c5007a91353527d7a0f
This commit is contained in:
parent
6e7ad92a12
commit
8eee280bbb
@ -41,13 +41,13 @@ class Collection(models.Model):
|
||||
def main_item(self):
|
||||
return self.items.get(uid=None)
|
||||
|
||||
@cached_property
|
||||
@property
|
||||
def content(self):
|
||||
return self.main_item.content
|
||||
|
||||
@property
|
||||
def stoken(self):
|
||||
return self.main_item.stoken
|
||||
return self.content.uid
|
||||
|
||||
@cached_property
|
||||
def cstoken(self):
|
||||
@ -78,7 +78,7 @@ class CollectionItem(models.Model):
|
||||
|
||||
@property
|
||||
def stoken(self):
|
||||
return self.content.stoken.uid
|
||||
return self.content.uid
|
||||
|
||||
|
||||
def chunk_directory_path(instance, filename):
|
||||
|
@ -67,24 +67,6 @@ from .serializers import (
|
||||
User = get_user_model()
|
||||
|
||||
|
||||
def get_fresh_stoken(obj):
|
||||
try:
|
||||
del obj.main_item
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
return obj.stoken
|
||||
|
||||
|
||||
def get_fresh_item_stoken(obj):
|
||||
try:
|
||||
del obj.content
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
return obj.stoken
|
||||
|
||||
|
||||
class BaseViewSet(viewsets.ModelViewSet):
|
||||
authentication_classes = tuple(app_settings.API_AUTHENTICATORS)
|
||||
permission_classes = tuple(app_settings.API_PERMISSIONS)
|
||||
@ -173,18 +155,18 @@ class CollectionViewSet(BaseViewSet):
|
||||
serializer.is_valid(raise_exception=True)
|
||||
self.perform_update(serializer)
|
||||
|
||||
return Response({'stoken': get_fresh_stoken(instance)})
|
||||
return Response({})
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
serializer = self.serializer_class(data=request.data, context=self.get_serializer_context())
|
||||
if serializer.is_valid():
|
||||
try:
|
||||
instance = serializer.save(owner=self.request.user)
|
||||
serializer.save(owner=self.request.user)
|
||||
except IntegrityError:
|
||||
content = {'code': 'integrity_error'}
|
||||
return Response(content, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
return Response({'stoken': get_fresh_stoken(instance)}, status=status.HTTP_201_CREATED)
|
||||
return Response({}, status=status.HTTP_201_CREATED)
|
||||
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
@ -298,7 +280,7 @@ class CollectionItemViewSet(BaseViewSet):
|
||||
queryset, cstoken_rev = self.filter_by_cstoken(request, queryset)
|
||||
|
||||
uids, stokens = zip(*[(item['uid'], item.get('stoken')) for item in serializer.validated_data])
|
||||
revs = CollectionItemRevision.objects.filter(stoken__uid__in=stokens, current=True)
|
||||
revs = CollectionItemRevision.objects.filter(uid__in=stokens, current=True)
|
||||
queryset = queryset.filter(uid__in=uids).exclude(revisions__in=revs)
|
||||
|
||||
queryset, new_cstoken = self.get_queryset_cstoken(queryset)
|
||||
@ -338,7 +320,6 @@ class CollectionItemViewSet(BaseViewSet):
|
||||
return Response(content, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
ret = {
|
||||
"data": [get_fresh_item_stoken(item) for item in items],
|
||||
}
|
||||
return Response(ret, status=status.HTTP_200_OK)
|
||||
|
||||
@ -377,7 +358,6 @@ class CollectionItemViewSet(BaseViewSet):
|
||||
return Response(content, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
ret = {
|
||||
"data": [get_fresh_item_stoken(item) for item in items],
|
||||
}
|
||||
return Response(ret, status=status.HTTP_200_OK)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user