From 7c3bc69b387cd686f0d7509b29d3dd21584f0840 Mon Sep 17 00:00:00 2001 From: jebus Date: Tue, 24 Jun 2025 23:56:45 +1200 Subject: [PATCH] Scenario Import + Gitea PR Test (#1) Co-authored-by: Tim Lorsbach Reviewed-on: https://git.envipath.com/enviPath/enviPy/pulls/1 --- epdb/models.py | 28 ++++++++++- epdb/urls.py | 4 +- epdb/views.py | 65 ++++++++++++++----------- templates/collections/objects_list.html | 2 +- 4 files changed, 66 insertions(+), 33 deletions(-) diff --git a/epdb/models.py b/epdb/models.py index c794934d..fa6da7ed 100644 --- a/epdb/models.py +++ b/epdb/models.py @@ -3,7 +3,7 @@ import json import logging import os from collections import defaultdict -from datetime import datetime, timedelta +from datetime import datetime, timedelta, date from typing import Union, List, Optional from uuid import uuid4 @@ -1343,14 +1343,38 @@ class PluginModel(EPModel): # # # TODO consider Scenario, BaseScenario, RelatedScenario class Scenario(EnviPathModel): package = models.ForeignKey('epdb.Package', verbose_name='Package', on_delete=models.CASCADE, db_index=True) - date = models.DateField(null=True, verbose_name='Study date') + type = models.CharField(max_length=256, null=False, blank=False, default='No date') type = models.CharField(max_length=256, null=False, blank=False, default='Not specified') additional_information = models.JSONField(verbose_name='Additional Information') + @property def url(self): return '{}/scenario/{}'.format(self.package.url, self.uuid) + @staticmethod + @transaction.atomic + def create(package, name, description, date, type, additional_information): + s = Scenario() + s.package = package + s.name = name + s.description = description + s.date = date + s.type = type + s.additional_information = additional_information + + s.save() + + return s + + def add_additional_information(self, data): + pass + + def remove_additional_information(self, data): + pass + + def set_additional_information(self, data): + pass example = { "additionalInformationCollection": { diff --git a/epdb/urls.py b/epdb/urls.py index 9104dc1b..8430aef0 100644 --- a/epdb/urls.py +++ b/epdb/urls.py @@ -59,8 +59,8 @@ urlpatterns = [ # re_path(rf'^package/(?P{UUID})/pathway(?P{UUID})/edge$', v.package_pathway_edges, name='package pathway edge list'), # re_path(rf'^package/(?P{UUID})/pathway(?P{UUID})/edge/(?P{UUID})$', v.package_pathway_edge, name='package pathway edge detail'), # Scenario - # re_path(rf'^package/(?P{UUID})/scenario', v.package_scenarios, name='package scenario list'), - # re_path(rf'^package/(?P{UUID})/scenario/(?P{UUID})$', v.package_scenarios, name='package scenario detail'), + re_path(rf'^package/(?P{UUID})/scenario$', v.package_scenarios, name='package scenario list'), + re_path(rf'^package/(?P{UUID})/scenario/(?P{UUID})$', v.package_scenario, name='package scenario detail'), # Model re_path(rf'^package/(?P{UUID})/model$', v.package_models, name='package model list'), re_path(rf'^package/(?P{UUID})/model/(?P{UUID})$', v.package_model,name='package model detail'), diff --git a/epdb/views.py b/epdb/views.py index e2985350..3fdce399 100644 --- a/epdb/views.py +++ b/epdb/views.py @@ -1007,35 +1007,44 @@ def package_pathway_node(request, package_uuid, pathway_uuid, node_uuid): # # pass # # # # -# # https://envipath.org/package//scenario -# def package_scenarios(request, package_id): -# current_user = _anonymous_or_real(request) -# -# if request.method == 'GET': -# context = get_base_context(request) -# current_package = PackageManager.get_package_by_id(current_user, package_id) -# context['meta']['current_package'] = current_package -# context['object_type'] = 'scenario' -# -# reviewed_scenario_qs = Scenario.objects.none() -# unreviewed_scenario_qs = Scenario.objects.none() -# -# current_package = PackageManager.get_package_by_id(current_user, package_id) -# if current_package.reviewed: -# reviewed_scenario_qs = Scenario.objects.filter(package=current_package).order_by('name') -# else: -# unreviewed_scenario_qs = Scenario.objects.filter(package=current_package).order_by('name') -# -# context['reviewed_objects'] = reviewed_scenario_qs -# context['unreviewed_objects'] = unreviewed_scenario_qs -# -# return render(request, 'collections/objects_list.html', context) -# # -# # -# # # https://envipath.org/package//scenario/ -# # def package_scenario(request, package_id, scenario_id): -# # pass +# https://envipath.org/package//scenario +def package_scenarios(request, package_uuid): + current_user = _anonymous_or_real(request) + current_package = PackageManager.get_package_by_id(current_user, package_uuid) + if request.method == 'GET': + context = get_base_context(request) + context['title'] = f'enviPath - {current_package.name} - Scenarios' + + context['meta']['current_package'] = current_package + context['object_type'] = 'scenario' + context['breadcrumbs'] = breadcrumbs(current_package, 'pathway') + + reviewed_scenario_qs = Scenario.objects.none() + unreviewed_scenario_qs = Scenario.objects.none() + + if current_package.reviewed: + reviewed_scenario_qs = Scenario.objects.filter(package=current_package).order_by('name') + else: + unreviewed_scenario_qs = Scenario.objects.filter(package=current_package).order_by('name') + + if request.GET.get('all'): + return JsonResponse({ + "objects": [ + {"name": pw.name, "url": pw.url, "reviewed": current_package.reviewed} + for pw in (reviewed_scenario_qs if current_package.reviewed else unreviewed_scenario_qs) + ] + }) + + context['reviewed_objects'] = reviewed_scenario_qs + context['unreviewed_objects'] = unreviewed_scenario_qs + + return render(request, 'collections/objects_list.html', context) + + +# https://envipath.org/package//scenario/ +def package_scenario(request, package_uuid, scenario_uuid): + pass ### END UNTESTED diff --git a/templates/collections/objects_list.html b/templates/collections/objects_list.html index eb56ed22..4c4ac16e 100644 --- a/templates/collections/objects_list.html +++ b/templates/collections/objects_list.html @@ -5,7 +5,7 @@ {% if reviewed_objects.count > 50 or unreviewed_objects.count > 50 %} {% if object_type != 'package' %}
-