From 62e644844835908bd247e059aa5d879160b0f467 Mon Sep 17 00:00:00 2001 From: jebus Date: Thu, 11 Sep 2025 01:18:04 +1200 Subject: [PATCH] [Feature] Legacy Package Import (#106) Fixes #105 Co-authored-by: Tim Lorsbach Reviewed-on: https://git.envipath.com/enviPath/enviPy/pulls/106 --- epdb/logic.py | 8 ++- epdb/management/commands/bootstrap.py | 2 +- epdb/views.py | 21 ++++++- templates/actions/collections/package.html | 6 +- templates/collections/objects_list.html | 55 ++++++++++--------- .../import_legacy_package_modal.html | 42 ++++++++++++++ 6 files changed, 100 insertions(+), 34 deletions(-) create mode 100644 templates/modals/collections/import_legacy_package_modal.html diff --git a/epdb/logic.py b/epdb/logic.py index 99b6f8a5..ec7db334 100644 --- a/epdb/logic.py +++ b/epdb/logic.py @@ -491,7 +491,7 @@ class PackageManager(object): @staticmethod @transaction.atomic - def import_package(data: dict, owner: User, keep_ids=False, add_import_timestamp=True): + def import_package(data: dict, owner: User, keep_ids=False, add_import_timestamp=True, trust_reviewed=False): from uuid import UUID, uuid4 from datetime import datetime from collections import defaultdict @@ -507,7 +507,11 @@ class PackageManager(object): else: pack.name = data['name'] - pack.reviewed = True if data['reviewStatus'] == 'reviewed' else False + if trust_reviewed: + pack.reviewed = True if data['reviewStatus'] == 'reviewed' else False + else: + pack.reviewed = False + pack.description = data['description'] pack.save() diff --git a/epdb/management/commands/bootstrap.py b/epdb/management/commands/bootstrap.py index 4beb3222..0bd250b2 100644 --- a/epdb/management/commands/bootstrap.py +++ b/epdb/management/commands/bootstrap.py @@ -58,7 +58,7 @@ class Command(BaseCommand): return anon, admin, g, jebus def import_package(self, data, owner): - return PackageManager.import_package(data, owner, keep_ids=True, add_import_timestamp=False) + return PackageManager.import_package(data, owner, keep_ids=True, add_import_timestamp=False, trust_reviewed=True) def create_default_setting(self, owner, packages): s = SettingManager.create_setting( diff --git a/epdb/views.py b/epdb/views.py index 5358e34f..76c0a9a6 100644 --- a/epdb/views.py +++ b/epdb/views.py @@ -280,10 +280,24 @@ def packages(request): return render(request, 'collections/objects_list.html', context) elif request.method == 'POST': - hidden = request.POST.get('hidden', None) - if hidden is not None: - pass + + if hidden := request.POST.get('hidden', None): + + if hidden == 'import-legacy-package-json': + f = request.FILES['file'] + + try: + file_data = f.read().decode("utf-8") + data = json.loads(file_data) + + pack = PackageManager.import_package(data, current_user) + return redirect(pack.url) + except UnicodeDecodeError: + return error(request, 'Invalid encoding.', f'Invalid encoding, must be UTF-8') + + else: + return HttpResponseBadRequest() else: package_name = request.POST.get('package-name') package_description = request.POST.get('package-description', s.DEFAULT_VALUES['description']) @@ -784,6 +798,7 @@ def package(request, package_uuid): 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}' diff --git a/templates/actions/collections/package.html b/templates/actions/collections/package.html index b4192e98..0573467e 100644 --- a/templates/actions/collections/package.html +++ b/templates/actions/collections/package.html @@ -1,4 +1,8 @@
  • - New Package + New Package +
  • +
  • + + Import Package (Legacy)
  • \ No newline at end of file diff --git a/templates/collections/objects_list.html b/templates/collections/objects_list.html index 1423112e..6a745294 100644 --- a/templates/collections/objects_list.html +++ b/templates/collections/objects_list.html @@ -18,33 +18,34 @@ {% endif %} -{% block action_modals %} -{% if object_type == 'package' %} -{% include "modals/collections/new_package_modal.html" %} -{% elif object_type == 'compound' %} -{% include "modals/collections/new_compound_modal.html" %} -{% elif object_type == 'rule' %} -{% include "modals/collections/new_rule_modal.html" %} -{% elif object_type == 'reaction' %} -{% include "modals/collections/new_reaction_modal.html" %} -{% elif object_type == 'pathway' %} -{# {% include "modals/collections/new_pathway_modal.html" %} #} -{% elif object_type == 'node' %} -{% include "modals/collections/new_node_modal.html" %} -{% elif object_type == 'edge' %} -{% include "modals/collections/new_edge_modal.html" %} -{% elif object_type == 'scenario' %} -{% include "modals/collections/new_scenario_modal.html" %} -{% elif object_type == 'model' %} -{% include "modals/collections/new_model_modal.html" %} -{% elif object_type == 'setting' %} -{#{% include "modals/collections/new_setting_modal.html" %}#} -{% elif object_type == 'user' %} -
    -{% elif object_type == 'group' %} -{% include "modals/collections/new_group_modal.html" %} -{% endif %} -{% endblock action_modals %} + {% block action_modals %} + {% if object_type == 'package' %} + {% include "modals/collections/new_package_modal.html" %} + {% include "modals/collections/import_legacy_package_modal.html" %} + {% elif object_type == 'compound' %} + {% include "modals/collections/new_compound_modal.html" %} + {% elif object_type == 'rule' %} + {% include "modals/collections/new_rule_modal.html" %} + {% elif object_type == 'reaction' %} + {% include "modals/collections/new_reaction_modal.html" %} + {% elif object_type == 'pathway' %} + {# {% include "modals/collections/new_pathway_modal.html" %} #} + {% elif object_type == 'node' %} + {% include "modals/collections/new_node_modal.html" %} + {% elif object_type == 'edge' %} + {% include "modals/collections/new_edge_modal.html" %} + {% elif object_type == 'scenario' %} + {% include "modals/collections/new_scenario_modal.html" %} + {% elif object_type == 'model' %} + {% include "modals/collections/new_model_modal.html" %} + {% elif object_type == 'setting' %} + {#{% include "modals/collections/new_setting_modal.html" %}#} + {% elif object_type == 'user' %} +
    + {% elif object_type == 'group' %} + {% include "modals/collections/new_group_modal.html" %} + {% endif %} + {% endblock action_modals %}
    diff --git a/templates/modals/collections/import_legacy_package_modal.html b/templates/modals/collections/import_legacy_package_modal.html new file mode 100644 index 00000000..d4101d7d --- /dev/null +++ b/templates/modals/collections/import_legacy_package_modal.html @@ -0,0 +1,42 @@ + +