Skip to content

Commit 34f78c4

Browse files
committed
feat: Store creator for new TaskResults
1 parent 5a93e15 commit 34f78c4

7 files changed

Lines changed: 47 additions & 1 deletion

File tree

uvdat/core/admin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ class NetworkNodeAdmin(admin.ModelAdmin):
140140

141141
@admin.register(TaskResult)
142142
class TaskResultAdmin(admin.ModelAdmin):
143-
list_display = ["id", "task_type", "inputs"]
143+
list_display = ["id", "creator", "task_type", "inputs"]
144144

145145

146146
@admin.register(ViewState)
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Generated by Django 6.0.5 on 2026-07-20 13:25
2+
3+
from __future__ import annotations
4+
5+
from django.conf import settings
6+
from django.db import migrations, models
7+
import django.db.models.deletion
8+
9+
10+
class Migration(migrations.Migration):
11+
dependencies = [
12+
("core", "0023_task_subscribers"),
13+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14+
]
15+
16+
operations = [
17+
migrations.AddField(
18+
model_name="taskresult",
19+
name="creator",
20+
field=models.ForeignKey(
21+
null=True,
22+
on_delete=django.db.models.deletion.CASCADE,
23+
related_name="task_results",
24+
to=settings.AUTH_USER_MODEL,
25+
),
26+
),
27+
]

uvdat/core/models/dataset.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ def spawn_conversion_task(
107107
"region_options": region_options,
108108
},
109109
status="Initializing task...",
110+
creator=self.owner,
110111
)
111112
convert_dataset_signature.delay(result_id=result.id)
112113
return result

uvdat/core/models/task_result.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ class TaskResult(models.Model):
2929
error = models.TextField(blank=True, default="")
3030
created = models.DateTimeField(auto_now_add=True, editable=False)
3131
completed = models.DateTimeField(null=True)
32+
creator = models.ForeignKey(
33+
User, related_name="task_results", null=True, on_delete=models.CASCADE
34+
)
3235
subscribers = models.ManyToManyField(User, related_name="task_subscriptions", blank=True)
3336

3437
project_filter_path = "project"

uvdat/core/rest/analytics.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@ def run(self, request, project_id: int, task_type: str, **kwargs):
107107
except AnalysisInputError as e:
108108
return Response(str(e), status=400)
109109
result = analysis_type.run_task(project=project, **request.data)
110+
result.creator = request.user
111+
result.save()
110112
return Response(
111113
uvdat_serializers.TaskResultSerializer(result).data,
112114
status=200,

uvdat/core/tests/test_analytics.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,18 @@ def test_rest_run_analysis_task_no_inputs(authenticated_api_client, user, projec
5757
assert "not provided" in resp.json()
5858

5959

60+
@pytest.mark.django_db
61+
def test_rest_run_analysis_task_creator(authenticated_api_client, user, project):
62+
project.set_followers([user])
63+
resp = authenticated_api_client.post(
64+
f"/api/v1/analytics/project/{project.id}/types/create_road_network/run/",
65+
# Smallest town in America, only 7 nodes
66+
{"location": "Monowi, Nebraska"},
67+
)
68+
assert resp.status_code == 200
69+
assert resp.json()["creator"] == user.id
70+
71+
6072
@pytest.mark.django_db
6173
def test_rest_subscribe_to_running_task(authenticated_api_client, user, project, mailoutbox):
6274
project.set_followers([user])

web/src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,7 @@ export interface TaskResult {
425425
created: string;
426426
completed: string;
427427
subscribers: number[];
428+
creator: number;
428429
}
429430

430431
export interface FloatingPanelConfig {

0 commit comments

Comments
 (0)