From 72c05204eb8498ceaffe16bc71c2f2192dc698cf Mon Sep 17 00:00:00 2001 From: kartikvirendrar Date: Tue, 2 Apr 2024 20:24:53 +0530 Subject: [PATCH 01/10] added updated_at versioning for autosave --- backend/tasks/models.py | 2 +- backend/tasks/views.py | 42 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/backend/tasks/models.py b/backend/tasks/models.py index 7fac09c7a..cd4815873 100644 --- a/backend/tasks/models.py +++ b/backend/tasks/models.py @@ -230,7 +230,7 @@ class Annotation(models.Model): auto_now_add=True, verbose_name="annotation_created_at" ) updated_at = models.DateTimeField( - auto_now=True, verbose_name="annotation_updated_at" + verbose_name="annotation_updated_at" ) lead_time = models.FloatField(default=0.0, verbose_name="annotation_lead_time") parent_annotation = models.ForeignKey( diff --git a/backend/tasks/views.py b/backend/tasks/views.py index 43517ac06..31cc2f574 100644 --- a/backend/tasks/views.py +++ b/backend/tasks/views.py @@ -1786,6 +1786,20 @@ def partial_update(self, request, pk=None): if auto_save: update_fields_list = ["result", "lead_time", "updated_at"] + if "last_updated_at" in request.data: + dt_object = datetime.strptime(request.data["last_updated_at"], "%Y-%m-%dT%H:%M:%S.%fZ") + output_datetime = dt_object.strftime("%Y-%m-%d %H:%M:%S.%f+00:00") + if str(output_datetime) != str(annotation_obj.updated_at): + return Response( + { + "message": "Sorry, someone else has updated this data. Please refresh and try again." + }, + status=status.HTTP_400_BAD_REQUEST, + ) + if "updated_at" in request.data: + annotation_obj.updated_at = request.data["updated_at"] + else: + annotation_obj.updated_at = datetime.now() if "cl_format" in request.query_params: ( annotation_obj.result, @@ -1915,6 +1929,20 @@ def partial_update(self, request, pk=None): if auto_save: update_fields_list = ["result", "lead_time", "updated_at"] + if "last_updated_at" in request.data: + dt_object = datetime.strptime(request.data["last_updated_at"], "%Y-%m-%dT%H:%M:%S.%fZ") + output_datetime = dt_object.strftime("%Y-%m-%d %H:%M:%S.%f+00:00") + if str(output_datetime) != str(annotation_obj.updated_at): + return Response( + { + "message": "Sorry, someone else has updated this data. Please refresh and try again." + }, + status=status.HTTP_400_BAD_REQUEST, + ) + if "updated_at" in request.data: + annotation_obj.updated_at = request.data["updated_at"] + else: + annotation_obj.updated_at = datetime.now() if "cl_format" in request.query_params: ( annotation_obj.result, @@ -2110,6 +2138,20 @@ def partial_update(self, request, pk=None): if auto_save: update_fields_list = ["result", "lead_time", "updated_at"] + if "last_updated_at" in request.data: + dt_object = datetime.strptime(request.data["last_updated_at"], "%Y-%m-%dT%H:%M:%S.%fZ") + output_datetime = dt_object.strftime("%Y-%m-%d %H:%M:%S.%f+00:00") + if str(output_datetime) != str(annotation_obj.updated_at): + return Response( + { + "message": "Sorry, someone else has updated this data. Please refresh and try again." + }, + status=status.HTTP_400_BAD_REQUEST, + ) + if "updated_at" in request.data: + annotation_obj.updated_at = request.data["updated_at"] + else: + annotation_obj.updated_at = datetime.now() if "cl_format" in request.query_params: ( annotation_obj.result, From 8b2f233ee52870a107dc76a00dad58c48e22af43 Mon Sep 17 00:00:00 2001 From: kartikvirendrar Date: Tue, 2 Apr 2024 20:39:33 +0530 Subject: [PATCH 02/10] added updated_at versioning for autosave --- backend/tasks/models.py | 4 +--- backend/tasks/views.py | 12 +++++++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/backend/tasks/models.py b/backend/tasks/models.py index cd4815873..d016b4964 100644 --- a/backend/tasks/models.py +++ b/backend/tasks/models.py @@ -229,9 +229,7 @@ class Annotation(models.Model): created_at = models.DateTimeField( auto_now_add=True, verbose_name="annotation_created_at" ) - updated_at = models.DateTimeField( - verbose_name="annotation_updated_at" - ) + updated_at = models.DateTimeField(verbose_name="annotation_updated_at") lead_time = models.FloatField(default=0.0, verbose_name="annotation_lead_time") parent_annotation = models.ForeignKey( "self", diff --git a/backend/tasks/views.py b/backend/tasks/views.py index 31cc2f574..70466fb54 100644 --- a/backend/tasks/views.py +++ b/backend/tasks/views.py @@ -1787,7 +1787,9 @@ def partial_update(self, request, pk=None): if auto_save: update_fields_list = ["result", "lead_time", "updated_at"] if "last_updated_at" in request.data: - dt_object = datetime.strptime(request.data["last_updated_at"], "%Y-%m-%dT%H:%M:%S.%fZ") + dt_object = datetime.strptime( + request.data["last_updated_at"], "%Y-%m-%dT%H:%M:%S.%fZ" + ) output_datetime = dt_object.strftime("%Y-%m-%d %H:%M:%S.%f+00:00") if str(output_datetime) != str(annotation_obj.updated_at): return Response( @@ -1930,7 +1932,9 @@ def partial_update(self, request, pk=None): if auto_save: update_fields_list = ["result", "lead_time", "updated_at"] if "last_updated_at" in request.data: - dt_object = datetime.strptime(request.data["last_updated_at"], "%Y-%m-%dT%H:%M:%S.%fZ") + dt_object = datetime.strptime( + request.data["last_updated_at"], "%Y-%m-%dT%H:%M:%S.%fZ" + ) output_datetime = dt_object.strftime("%Y-%m-%d %H:%M:%S.%f+00:00") if str(output_datetime) != str(annotation_obj.updated_at): return Response( @@ -2139,7 +2143,9 @@ def partial_update(self, request, pk=None): if auto_save: update_fields_list = ["result", "lead_time", "updated_at"] if "last_updated_at" in request.data: - dt_object = datetime.strptime(request.data["last_updated_at"], "%Y-%m-%dT%H:%M:%S.%fZ") + dt_object = datetime.strptime( + request.data["last_updated_at"], "%Y-%m-%dT%H:%M:%S.%fZ" + ) output_datetime = dt_object.strftime("%Y-%m-%d %H:%M:%S.%f+00:00") if str(output_datetime) != str(annotation_obj.updated_at): return Response( From 0cd3dd23a8bb6a98b0028b70ef0a3d0f33da5b38 Mon Sep 17 00:00:00 2001 From: kartikvirendrar Date: Wed, 10 Apr 2024 08:46:15 +0530 Subject: [PATCH 03/10] added new field version_updated_at --- .../migrations/0046_merge_20240403_1156.py | 14 ++++++++++++++ .../0049_annotation_version_updated_at.py | 18 ++++++++++++++++++ backend/tasks/models.py | 3 +++ 3 files changed, 35 insertions(+) create mode 100644 backend/dataset/migrations/0046_merge_20240403_1156.py create mode 100644 backend/tasks/migrations/0049_annotation_version_updated_at.py diff --git a/backend/dataset/migrations/0046_merge_20240403_1156.py b/backend/dataset/migrations/0046_merge_20240403_1156.py new file mode 100644 index 000000000..73c6088a2 --- /dev/null +++ b/backend/dataset/migrations/0046_merge_20240403_1156.py @@ -0,0 +1,14 @@ +# Generated by Django 3.2.23 on 2024-04-03 11:56 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('dataset', '0045_alter_ocrdocument_ocr_domain'), + ('dataset', '0045_auto_20240321_0949'), + ] + + operations = [ + ] diff --git a/backend/tasks/migrations/0049_annotation_version_updated_at.py b/backend/tasks/migrations/0049_annotation_version_updated_at.py new file mode 100644 index 000000000..47c4b0052 --- /dev/null +++ b/backend/tasks/migrations/0049_annotation_version_updated_at.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.23 on 2024-04-04 06:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('tasks', '0048_alter_annotation_unique_together'), + ] + + operations = [ + migrations.AddField( + model_name='annotation', + name='version_updated_at', + field=models.DateTimeField(default='2000-01-01T00:00:00.000Z', verbose_name='annotation_version_updated_at'), + ), + ] diff --git a/backend/tasks/models.py b/backend/tasks/models.py index 7fac09c7a..3d75a8c87 100644 --- a/backend/tasks/models.py +++ b/backend/tasks/models.py @@ -232,6 +232,9 @@ class Annotation(models.Model): updated_at = models.DateTimeField( auto_now=True, verbose_name="annotation_updated_at" ) + version_updated_at = models.DateTimeField( + default="2000-01-01T00:00:00.000Z", verbose_name="annotation_version_updated_at" + ) lead_time = models.FloatField(default=0.0, verbose_name="annotation_lead_time") parent_annotation = models.ForeignKey( "self", From 0c49de1cf3228f87f2804d4fcf9d73a233bc6339 Mon Sep 17 00:00:00 2001 From: kartikvirendrar Date: Wed, 10 Apr 2024 08:48:00 +0530 Subject: [PATCH 04/10] added new field version_updated_at --- .../dataset/migrations/0046_merge_20240403_1156.py | 8 +++----- .../migrations/0049_annotation_version_updated_at.py | 12 +++++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/backend/dataset/migrations/0046_merge_20240403_1156.py b/backend/dataset/migrations/0046_merge_20240403_1156.py index 73c6088a2..db21599f4 100644 --- a/backend/dataset/migrations/0046_merge_20240403_1156.py +++ b/backend/dataset/migrations/0046_merge_20240403_1156.py @@ -4,11 +4,9 @@ class Migration(migrations.Migration): - dependencies = [ - ('dataset', '0045_alter_ocrdocument_ocr_domain'), - ('dataset', '0045_auto_20240321_0949'), + ("dataset", "0045_alter_ocrdocument_ocr_domain"), + ("dataset", "0045_auto_20240321_0949"), ] - operations = [ - ] + operations = [] diff --git a/backend/tasks/migrations/0049_annotation_version_updated_at.py b/backend/tasks/migrations/0049_annotation_version_updated_at.py index 47c4b0052..3765a196c 100644 --- a/backend/tasks/migrations/0049_annotation_version_updated_at.py +++ b/backend/tasks/migrations/0049_annotation_version_updated_at.py @@ -4,15 +4,17 @@ class Migration(migrations.Migration): - dependencies = [ - ('tasks', '0048_alter_annotation_unique_together'), + ("tasks", "0048_alter_annotation_unique_together"), ] operations = [ migrations.AddField( - model_name='annotation', - name='version_updated_at', - field=models.DateTimeField(default='2000-01-01T00:00:00.000Z', verbose_name='annotation_version_updated_at'), + model_name="annotation", + name="version_updated_at", + field=models.DateTimeField( + default="2000-01-01T00:00:00.000Z", + verbose_name="annotation_version_updated_at", + ), ), ] From 34b0a6c6629227283464f8510008100cbbc28ef5 Mon Sep 17 00:00:00 2001 From: kartikvirendrar Date: Thu, 11 Apr 2024 19:59:47 +0530 Subject: [PATCH 05/10] added checks for autosave versioning --- backend/tasks/views.py | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/backend/tasks/views.py b/backend/tasks/views.py index 70466fb54..cc3d6a33b 100644 --- a/backend/tasks/views.py +++ b/backend/tasks/views.py @@ -1791,17 +1791,19 @@ def partial_update(self, request, pk=None): request.data["last_updated_at"], "%Y-%m-%dT%H:%M:%S.%fZ" ) output_datetime = dt_object.strftime("%Y-%m-%d %H:%M:%S.%f+00:00") - if str(output_datetime) != str(annotation_obj.updated_at): + if str(output_datetime) != str(annotation_obj.version_updated_at): return Response( { - "message": "Sorry, someone else has updated this data. Please refresh and try again." + "message": "Annotation got updated, please refresh and try again." }, status=status.HTTP_400_BAD_REQUEST, ) - if "updated_at" in request.data: - annotation_obj.updated_at = request.data["updated_at"] - else: - annotation_obj.updated_at = datetime.now() + else: + annotation_obj.version_updated_at = ( + request.data["version_updated_at"] + or annotation_obj.version_updated_at + ) + update_fields_list.append("version_updated_at") if "cl_format" in request.query_params: ( annotation_obj.result, @@ -1936,17 +1938,19 @@ def partial_update(self, request, pk=None): request.data["last_updated_at"], "%Y-%m-%dT%H:%M:%S.%fZ" ) output_datetime = dt_object.strftime("%Y-%m-%d %H:%M:%S.%f+00:00") - if str(output_datetime) != str(annotation_obj.updated_at): + if str(output_datetime) != str(annotation_obj.version_updated_at): return Response( { - "message": "Sorry, someone else has updated this data. Please refresh and try again." + "message": "Annotation got updated, please refresh and try again." }, status=status.HTTP_400_BAD_REQUEST, ) - if "updated_at" in request.data: - annotation_obj.updated_at = request.data["updated_at"] - else: - annotation_obj.updated_at = datetime.now() + else: + annotation_obj.version_updated_at = ( + request.data["version_updated_at"] + or annotation_obj.version_updated_at + ) + update_fields_list.append("version_updated_at") if "cl_format" in request.query_params: ( annotation_obj.result, @@ -2147,17 +2151,19 @@ def partial_update(self, request, pk=None): request.data["last_updated_at"], "%Y-%m-%dT%H:%M:%S.%fZ" ) output_datetime = dt_object.strftime("%Y-%m-%d %H:%M:%S.%f+00:00") - if str(output_datetime) != str(annotation_obj.updated_at): + if str(output_datetime) != str(annotation_obj.version_updated_at): return Response( { - "message": "Sorry, someone else has updated this data. Please refresh and try again." + "message": "Annotation got updated, please refresh and try again." }, status=status.HTTP_400_BAD_REQUEST, ) - if "updated_at" in request.data: - annotation_obj.updated_at = request.data["updated_at"] - else: - annotation_obj.updated_at = datetime.now() + else: + annotation_obj.version_updated_at = ( + request.data["version_updated_at"] + or annotation_obj.version_updated_at + ) + update_fields_list.append("version_updated_at") if "cl_format" in request.query_params: ( annotation_obj.result, From 3f1fe5963a5af1f4d285bda3316ecdce1ab2c8e4 Mon Sep 17 00:00:00 2001 From: kartikvirendrar Date: Thu, 11 Apr 2024 20:02:35 +0530 Subject: [PATCH 06/10] updated version_updated_at field --- ...0050_alter_annotation_version_updated_at.py | 18 ++++++++++++++++++ backend/tasks/models.py | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 backend/tasks/migrations/0050_alter_annotation_version_updated_at.py diff --git a/backend/tasks/migrations/0050_alter_annotation_version_updated_at.py b/backend/tasks/migrations/0050_alter_annotation_version_updated_at.py new file mode 100644 index 000000000..22efcdd0e --- /dev/null +++ b/backend/tasks/migrations/0050_alter_annotation_version_updated_at.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.23 on 2024-04-11 14:30 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('tasks', '0049_annotation_version_updated_at'), + ] + + operations = [ + migrations.AlterField( + model_name='annotation', + name='version_updated_at', + field=models.DateTimeField(default='2000-01-01T00:00:00.000001Z', verbose_name='annotation_version_updated_at'), + ), + ] diff --git a/backend/tasks/models.py b/backend/tasks/models.py index 3d75a8c87..6087e1f95 100644 --- a/backend/tasks/models.py +++ b/backend/tasks/models.py @@ -233,7 +233,7 @@ class Annotation(models.Model): auto_now=True, verbose_name="annotation_updated_at" ) version_updated_at = models.DateTimeField( - default="2000-01-01T00:00:00.000Z", verbose_name="annotation_version_updated_at" + default="2000-01-01T00:00:00.000001Z", verbose_name="annotation_version_updated_at" ) lead_time = models.FloatField(default=0.0, verbose_name="annotation_lead_time") parent_annotation = models.ForeignKey( From 6280f379d608cb56ece5ceb9bb98c53b1de60ac0 Mon Sep 17 00:00:00 2001 From: kartikvirendrar Date: Thu, 11 Apr 2024 20:02:47 +0530 Subject: [PATCH 07/10] updated version_updated_at field --- .../0050_alter_annotation_version_updated_at.py | 12 +++++++----- backend/tasks/models.py | 3 ++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/backend/tasks/migrations/0050_alter_annotation_version_updated_at.py b/backend/tasks/migrations/0050_alter_annotation_version_updated_at.py index 22efcdd0e..0e763cb72 100644 --- a/backend/tasks/migrations/0050_alter_annotation_version_updated_at.py +++ b/backend/tasks/migrations/0050_alter_annotation_version_updated_at.py @@ -4,15 +4,17 @@ class Migration(migrations.Migration): - dependencies = [ - ('tasks', '0049_annotation_version_updated_at'), + ("tasks", "0049_annotation_version_updated_at"), ] operations = [ migrations.AlterField( - model_name='annotation', - name='version_updated_at', - field=models.DateTimeField(default='2000-01-01T00:00:00.000001Z', verbose_name='annotation_version_updated_at'), + model_name="annotation", + name="version_updated_at", + field=models.DateTimeField( + default="2000-01-01T00:00:00.000001Z", + verbose_name="annotation_version_updated_at", + ), ), ] diff --git a/backend/tasks/models.py b/backend/tasks/models.py index 6087e1f95..eed6e73db 100644 --- a/backend/tasks/models.py +++ b/backend/tasks/models.py @@ -233,7 +233,8 @@ class Annotation(models.Model): auto_now=True, verbose_name="annotation_updated_at" ) version_updated_at = models.DateTimeField( - default="2000-01-01T00:00:00.000001Z", verbose_name="annotation_version_updated_at" + default="2000-01-01T00:00:00.000001Z", + verbose_name="annotation_version_updated_at", ) lead_time = models.FloatField(default=0.0, verbose_name="annotation_lead_time") parent_annotation = models.ForeignKey( From b55908f6b731db81d461706635631551f13eb654 Mon Sep 17 00:00:00 2001 From: kartikvirendrar Date: Tue, 16 Apr 2024 11:40:58 +0530 Subject: [PATCH 08/10] added versioning for annotations --- ...051_alter_annotation_version_updated_at.py | 18 ++++ backend/tasks/models.py | 2 +- backend/tasks/views.py | 92 +++++++------------ 3 files changed, 54 insertions(+), 58 deletions(-) create mode 100644 backend/tasks/migrations/0051_alter_annotation_version_updated_at.py diff --git a/backend/tasks/migrations/0051_alter_annotation_version_updated_at.py b/backend/tasks/migrations/0051_alter_annotation_version_updated_at.py new file mode 100644 index 000000000..ee1540b6a --- /dev/null +++ b/backend/tasks/migrations/0051_alter_annotation_version_updated_at.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.23 on 2024-04-16 04:51 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('tasks', '0050_alter_annotation_version_updated_at'), + ] + + operations = [ + migrations.AlterField( + model_name='annotation', + name='version_updated_at', + field=models.DateTimeField(default='2000-01-01T00:00:00.100000Z', verbose_name='annotation_version_updated_at'), + ), + ] diff --git a/backend/tasks/models.py b/backend/tasks/models.py index eed6e73db..48b43647a 100644 --- a/backend/tasks/models.py +++ b/backend/tasks/models.py @@ -233,7 +233,7 @@ class Annotation(models.Model): auto_now=True, verbose_name="annotation_updated_at" ) version_updated_at = models.DateTimeField( - default="2000-01-01T00:00:00.000001Z", + default="2000-01-01T00:00:00.100000Z", verbose_name="annotation_version_updated_at", ) lead_time = models.FloatField(default=0.0, verbose_name="annotation_lead_time") diff --git a/backend/tasks/views.py b/backend/tasks/views.py index cc3d6a33b..dec7932f7 100644 --- a/backend/tasks/views.py +++ b/backend/tasks/views.py @@ -1776,6 +1776,26 @@ def partial_update(self, request, pk=None): self.populate_task_data_language_and_domain( annotation_obj.task, language, ocr_domain ) + + if "last_updated_at" in request.data: + try: + dt_object = datetime.strptime( + request.data["last_updated_at"], "%Y-%m-%dT%H:%M:%S.%fZ" + ) + output_datetime = dt_object.strftime("%Y-%m-%d %H:%M:%S.%f+00:00") + except: + dt_object = datetime.strptime( + request.data["last_updated_at"], "%Y-%m-%dT%H:%M:%SZ" + ) + output_datetime = dt_object.strftime("%Y-%m-%d %H:%M:%S+00:00") + if str(output_datetime) != str(annotation_obj.version_updated_at): + return Response( + { + "message": "Annotation got updated, please refresh and try again." + }, + status=status.HTTP_400_BAD_REQUEST, + ) + # Base annotation update if annotation_obj.annotation_type == ANNOTATOR_ANNOTATION: if request.user not in task.annotation_users.all(): @@ -1785,25 +1805,11 @@ def partial_update(self, request, pk=None): # need to add few filters here if auto_save: - update_fields_list = ["result", "lead_time", "updated_at"] - if "last_updated_at" in request.data: - dt_object = datetime.strptime( - request.data["last_updated_at"], "%Y-%m-%dT%H:%M:%S.%fZ" - ) - output_datetime = dt_object.strftime("%Y-%m-%d %H:%M:%S.%f+00:00") - if str(output_datetime) != str(annotation_obj.version_updated_at): - return Response( - { - "message": "Annotation got updated, please refresh and try again." - }, - status=status.HTTP_400_BAD_REQUEST, - ) - else: - annotation_obj.version_updated_at = ( - request.data["version_updated_at"] - or annotation_obj.version_updated_at - ) - update_fields_list.append("version_updated_at") + update_fields_list = ["result", "lead_time", "updated_at", "version_updated_at"] + annotation_obj.version_updated_at = ( + request.data["version_updated_at"] + or annotation_obj.version_updated_at + ) if "cl_format" in request.query_params: ( annotation_obj.result, @@ -1932,25 +1938,11 @@ def partial_update(self, request, pk=None): return Response(ret_dict, status=ret_status) if auto_save: - update_fields_list = ["result", "lead_time", "updated_at"] - if "last_updated_at" in request.data: - dt_object = datetime.strptime( - request.data["last_updated_at"], "%Y-%m-%dT%H:%M:%S.%fZ" - ) - output_datetime = dt_object.strftime("%Y-%m-%d %H:%M:%S.%f+00:00") - if str(output_datetime) != str(annotation_obj.version_updated_at): - return Response( - { - "message": "Annotation got updated, please refresh and try again." - }, - status=status.HTTP_400_BAD_REQUEST, - ) - else: - annotation_obj.version_updated_at = ( - request.data["version_updated_at"] - or annotation_obj.version_updated_at - ) - update_fields_list.append("version_updated_at") + update_fields_list = ["result", "lead_time", "updated_at", "version_updated_at"] + annotation_obj.version_updated_at = ( + request.data["version_updated_at"] + or annotation_obj.version_updated_at + ) if "cl_format" in request.query_params: ( annotation_obj.result, @@ -2145,25 +2137,11 @@ def partial_update(self, request, pk=None): return Response(ret_dict, status=ret_status) if auto_save: - update_fields_list = ["result", "lead_time", "updated_at"] - if "last_updated_at" in request.data: - dt_object = datetime.strptime( - request.data["last_updated_at"], "%Y-%m-%dT%H:%M:%S.%fZ" - ) - output_datetime = dt_object.strftime("%Y-%m-%d %H:%M:%S.%f+00:00") - if str(output_datetime) != str(annotation_obj.version_updated_at): - return Response( - { - "message": "Annotation got updated, please refresh and try again." - }, - status=status.HTTP_400_BAD_REQUEST, - ) - else: - annotation_obj.version_updated_at = ( - request.data["version_updated_at"] - or annotation_obj.version_updated_at - ) - update_fields_list.append("version_updated_at") + update_fields_list = ["result", "lead_time", "updated_at", "version_updated_at"] + annotation_obj.version_updated_at = ( + request.data["version_updated_at"] + or annotation_obj.version_updated_at + ) if "cl_format" in request.query_params: ( annotation_obj.result, From 2726952f9383e2eb87a31c556e0cd238ecc760a9 Mon Sep 17 00:00:00 2001 From: kartikvirendrar Date: Tue, 16 Apr 2024 11:44:53 +0530 Subject: [PATCH 09/10] added versioning for annotations --- ...051_alter_annotation_version_updated_at.py | 12 +++++---- backend/tasks/views.py | 25 +++++++++++++++---- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/backend/tasks/migrations/0051_alter_annotation_version_updated_at.py b/backend/tasks/migrations/0051_alter_annotation_version_updated_at.py index ee1540b6a..9e9840464 100644 --- a/backend/tasks/migrations/0051_alter_annotation_version_updated_at.py +++ b/backend/tasks/migrations/0051_alter_annotation_version_updated_at.py @@ -4,15 +4,17 @@ class Migration(migrations.Migration): - dependencies = [ - ('tasks', '0050_alter_annotation_version_updated_at'), + ("tasks", "0050_alter_annotation_version_updated_at"), ] operations = [ migrations.AlterField( - model_name='annotation', - name='version_updated_at', - field=models.DateTimeField(default='2000-01-01T00:00:00.100000Z', verbose_name='annotation_version_updated_at'), + model_name="annotation", + name="version_updated_at", + field=models.DateTimeField( + default="2000-01-01T00:00:00.100000Z", + verbose_name="annotation_version_updated_at", + ), ), ] diff --git a/backend/tasks/views.py b/backend/tasks/views.py index dec7932f7..1e613dc5c 100644 --- a/backend/tasks/views.py +++ b/backend/tasks/views.py @@ -1776,7 +1776,7 @@ def partial_update(self, request, pk=None): self.populate_task_data_language_and_domain( annotation_obj.task, language, ocr_domain ) - + if "last_updated_at" in request.data: try: dt_object = datetime.strptime( @@ -1795,7 +1795,7 @@ def partial_update(self, request, pk=None): }, status=status.HTTP_400_BAD_REQUEST, ) - + # Base annotation update if annotation_obj.annotation_type == ANNOTATOR_ANNOTATION: if request.user not in task.annotation_users.all(): @@ -1805,7 +1805,12 @@ def partial_update(self, request, pk=None): # need to add few filters here if auto_save: - update_fields_list = ["result", "lead_time", "updated_at", "version_updated_at"] + update_fields_list = [ + "result", + "lead_time", + "updated_at", + "version_updated_at", + ] annotation_obj.version_updated_at = ( request.data["version_updated_at"] or annotation_obj.version_updated_at @@ -1938,7 +1943,12 @@ def partial_update(self, request, pk=None): return Response(ret_dict, status=ret_status) if auto_save: - update_fields_list = ["result", "lead_time", "updated_at", "version_updated_at"] + update_fields_list = [ + "result", + "lead_time", + "updated_at", + "version_updated_at", + ] annotation_obj.version_updated_at = ( request.data["version_updated_at"] or annotation_obj.version_updated_at @@ -2137,7 +2147,12 @@ def partial_update(self, request, pk=None): return Response(ret_dict, status=ret_status) if auto_save: - update_fields_list = ["result", "lead_time", "updated_at", "version_updated_at"] + update_fields_list = [ + "result", + "lead_time", + "updated_at", + "version_updated_at", + ] annotation_obj.version_updated_at = ( request.data["version_updated_at"] or annotation_obj.version_updated_at From 720b86e43a0cbd48ba23730319eed765d3eb145e Mon Sep 17 00:00:00 2001 From: kartikvirendrar Date: Tue, 16 Apr 2024 14:50:54 +0530 Subject: [PATCH 10/10] added versioning for annotations --- .../0049_annotation_version_updated_at.py | 4 ++-- ...050_alter_annotation_version_updated_at.py | 20 ------------------- ...051_alter_annotation_version_updated_at.py | 20 ------------------- backend/tasks/models.py | 2 +- 4 files changed, 3 insertions(+), 43 deletions(-) delete mode 100644 backend/tasks/migrations/0050_alter_annotation_version_updated_at.py delete mode 100644 backend/tasks/migrations/0051_alter_annotation_version_updated_at.py diff --git a/backend/tasks/migrations/0049_annotation_version_updated_at.py b/backend/tasks/migrations/0049_annotation_version_updated_at.py index 3765a196c..d5a680b7e 100644 --- a/backend/tasks/migrations/0049_annotation_version_updated_at.py +++ b/backend/tasks/migrations/0049_annotation_version_updated_at.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.23 on 2024-04-04 06:16 +# Generated by Django 3.2.23 on 2024-04-16 09:17 from django.db import migrations, models @@ -13,7 +13,7 @@ class Migration(migrations.Migration): model_name="annotation", name="version_updated_at", field=models.DateTimeField( - default="2000-01-01T00:00:00.000Z", + default="2000-01-01T00:00:00Z", verbose_name="annotation_version_updated_at", ), ), diff --git a/backend/tasks/migrations/0050_alter_annotation_version_updated_at.py b/backend/tasks/migrations/0050_alter_annotation_version_updated_at.py deleted file mode 100644 index 0e763cb72..000000000 --- a/backend/tasks/migrations/0050_alter_annotation_version_updated_at.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.2.23 on 2024-04-11 14:30 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("tasks", "0049_annotation_version_updated_at"), - ] - - operations = [ - migrations.AlterField( - model_name="annotation", - name="version_updated_at", - field=models.DateTimeField( - default="2000-01-01T00:00:00.000001Z", - verbose_name="annotation_version_updated_at", - ), - ), - ] diff --git a/backend/tasks/migrations/0051_alter_annotation_version_updated_at.py b/backend/tasks/migrations/0051_alter_annotation_version_updated_at.py deleted file mode 100644 index 9e9840464..000000000 --- a/backend/tasks/migrations/0051_alter_annotation_version_updated_at.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.2.23 on 2024-04-16 04:51 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("tasks", "0050_alter_annotation_version_updated_at"), - ] - - operations = [ - migrations.AlterField( - model_name="annotation", - name="version_updated_at", - field=models.DateTimeField( - default="2000-01-01T00:00:00.100000Z", - verbose_name="annotation_version_updated_at", - ), - ), - ] diff --git a/backend/tasks/models.py b/backend/tasks/models.py index 48b43647a..fcd8437b9 100644 --- a/backend/tasks/models.py +++ b/backend/tasks/models.py @@ -233,7 +233,7 @@ class Annotation(models.Model): auto_now=True, verbose_name="annotation_updated_at" ) version_updated_at = models.DateTimeField( - default="2000-01-01T00:00:00.100000Z", + default="2000-01-01T00:00:00Z", verbose_name="annotation_version_updated_at", ) lead_time = models.FloatField(default=0.0, verbose_name="annotation_lead_time")