From 6ecce641c20c61a185d153e9a8e9ac9bea6d8295 Mon Sep 17 00:00:00 2001 From: Juan Puerto <=> Date: Tue, 11 Feb 2025 14:27:56 -0500 Subject: [PATCH] feat: Add datetime_(last_job_launch/last_modified) --- ...space_datetime_last_job_launch_and_more.py | 23 +++++++++++++++++++ src/user_workspaces_server/models.py | 5 +++- .../views/workspace_view.py | 6 +++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 src/user_workspaces_server/migrations/0018_workspace_datetime_last_job_launch_and_more.py diff --git a/src/user_workspaces_server/migrations/0018_workspace_datetime_last_job_launch_and_more.py b/src/user_workspaces_server/migrations/0018_workspace_datetime_last_job_launch_and_more.py new file mode 100644 index 0000000..02ac3e4 --- /dev/null +++ b/src/user_workspaces_server/migrations/0018_workspace_datetime_last_job_launch_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 5.1.3 on 2025-02-11 19:27 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('user_workspaces_server', '0017_sharedworkspacemapping_datetime_share_created'), + ] + + operations = [ + migrations.AddField( + model_name='workspace', + name='datetime_last_job_launch', + field=models.DateTimeField(null=True), + ), + migrations.AddField( + model_name='workspace', + name='datetime_last_modified', + field=models.DateTimeField(null=True), + ), + ] diff --git a/src/user_workspaces_server/models.py b/src/user_workspaces_server/models.py index 6e2e2e4..fbf5c5b 100644 --- a/src/user_workspaces_server/models.py +++ b/src/user_workspaces_server/models.py @@ -1,7 +1,6 @@ from django.contrib.auth.models import User from django.db import models - class Workspace(models.Model): class Status(models.TextChoices): IDLE = "idle" @@ -15,6 +14,8 @@ class Status(models.TextChoices): file_path = models.CharField(max_length=64, default="") disk_space = models.BigIntegerField(default=0) datetime_created = models.DateTimeField() + datetime_last_modified = models.DateTimeField(null=True) + datetime_last_job_launch = models.DateTimeField(null=True) workspace_details = models.JSONField() status = models.CharField(max_length=64, default=Status.IDLE, choices=Status.choices) default_job_type = models.CharField(max_length=64, null=True) @@ -34,6 +35,8 @@ def get_dict_fields(): "description", "disk_space", "datetime_created", + "datetime_last_modified", + "datetime_last_job_launch", "workspace_details", "status", "default_job_type", diff --git a/src/user_workspaces_server/views/workspace_view.py b/src/user_workspaces_server/views/workspace_view.py index 9a03243..2bac051 100644 --- a/src/user_workspaces_server/views/workspace_view.py +++ b/src/user_workspaces_server/views/workspace_view.py @@ -19,6 +19,7 @@ logger = logging.getLogger(__name__) +# TODO: Changes to guard for non-accepted shared workspaces class WorkspaceView(APIView): permission_classes = [IsAuthenticated] @@ -225,6 +226,7 @@ def put(self, request, workspace_id, put_type=None): } ] + workspace.datetime_last_modified = datetime.now() workspace.save() logger.info(workspace.workspace_details) @@ -325,6 +327,7 @@ def put(self, request, workspace_id, put_type=None): ) workspace.status = models.Workspace.Status.ACTIVE + workspace.datetime_last_job_launch = datetime.now() workspace.save() return JsonResponse( @@ -345,6 +348,9 @@ def put(self, request, workspace_id, put_type=None): async_update_workspace(workspace.pk) + workspace.datetime_last_modified = datetime.now() + workspace.save() + return JsonResponse({"message": "Successful upload.", "success": True}) else: raise WorkspaceClientException("Invalid PUT type passed.")