forked from enviPath/enviPy
[Feature] Legacy Package Import (#106)
Fixes #105 Co-authored-by: Tim Lorsbach <tim@lorsba.ch> Reviewed-on: enviPath/enviPy#106
This commit is contained in:
@ -491,7 +491,7 @@ class PackageManager(object):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@transaction.atomic
|
@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 uuid import UUID, uuid4
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
@ -507,7 +507,11 @@ class PackageManager(object):
|
|||||||
else:
|
else:
|
||||||
pack.name = data['name']
|
pack.name = data['name']
|
||||||
|
|
||||||
|
if trust_reviewed:
|
||||||
pack.reviewed = True if data['reviewStatus'] == 'reviewed' else False
|
pack.reviewed = True if data['reviewStatus'] == 'reviewed' else False
|
||||||
|
else:
|
||||||
|
pack.reviewed = False
|
||||||
|
|
||||||
pack.description = data['description']
|
pack.description = data['description']
|
||||||
pack.save()
|
pack.save()
|
||||||
|
|
||||||
|
|||||||
@ -58,7 +58,7 @@ class Command(BaseCommand):
|
|||||||
return anon, admin, g, jebus
|
return anon, admin, g, jebus
|
||||||
|
|
||||||
def import_package(self, data, owner):
|
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):
|
def create_default_setting(self, owner, packages):
|
||||||
s = SettingManager.create_setting(
|
s = SettingManager.create_setting(
|
||||||
|
|||||||
@ -280,10 +280,24 @@ def packages(request):
|
|||||||
return render(request, 'collections/objects_list.html', context)
|
return render(request, 'collections/objects_list.html', context)
|
||||||
|
|
||||||
elif request.method == 'POST':
|
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:
|
else:
|
||||||
package_name = request.POST.get('package-name')
|
package_name = request.POST.get('package-name')
|
||||||
package_description = request.POST.get('package-description', s.DEFAULT_VALUES['description'])
|
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)
|
current_package = PackageManager.get_package_by_id(current_user, package_uuid)
|
||||||
|
|
||||||
if request.method == 'GET':
|
if request.method == 'GET':
|
||||||
|
|
||||||
context = get_base_context(request)
|
context = get_base_context(request)
|
||||||
context['title'] = f'enviPath - {current_package.name}'
|
context['title'] = f'enviPath - {current_package.name}'
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,8 @@
|
|||||||
<li>
|
<li>
|
||||||
<a role="button" data-toggle="modal" data-target="#new_package_modal">
|
<a role="button" data-toggle="modal" data-target="#new_package_modal">
|
||||||
<span class="glyphicon glyphicon-plus"></span>New Package</a>
|
<span class="glyphicon glyphicon-plus"></span> New Package</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a role="button" data-toggle="modal" data-target="#import_legacy_package_modal">
|
||||||
|
<span class="glyphicon glyphicon-import"></span> Import Package (Legacy)</a>
|
||||||
</li>
|
</li>
|
||||||
@ -18,33 +18,34 @@
|
|||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% block action_modals %}
|
{% block action_modals %}
|
||||||
{% if object_type == 'package' %}
|
{% if object_type == 'package' %}
|
||||||
{% include "modals/collections/new_package_modal.html" %}
|
{% include "modals/collections/new_package_modal.html" %}
|
||||||
{% elif object_type == 'compound' %}
|
{% include "modals/collections/import_legacy_package_modal.html" %}
|
||||||
{% include "modals/collections/new_compound_modal.html" %}
|
{% elif object_type == 'compound' %}
|
||||||
{% elif object_type == 'rule' %}
|
{% include "modals/collections/new_compound_modal.html" %}
|
||||||
{% include "modals/collections/new_rule_modal.html" %}
|
{% elif object_type == 'rule' %}
|
||||||
{% elif object_type == 'reaction' %}
|
{% include "modals/collections/new_rule_modal.html" %}
|
||||||
{% include "modals/collections/new_reaction_modal.html" %}
|
{% elif object_type == 'reaction' %}
|
||||||
{% elif object_type == 'pathway' %}
|
{% include "modals/collections/new_reaction_modal.html" %}
|
||||||
{# {% include "modals/collections/new_pathway_modal.html" %} #}
|
{% elif object_type == 'pathway' %}
|
||||||
{% elif object_type == 'node' %}
|
{# {% include "modals/collections/new_pathway_modal.html" %} #}
|
||||||
{% include "modals/collections/new_node_modal.html" %}
|
{% elif object_type == 'node' %}
|
||||||
{% elif object_type == 'edge' %}
|
{% include "modals/collections/new_node_modal.html" %}
|
||||||
{% include "modals/collections/new_edge_modal.html" %}
|
{% elif object_type == 'edge' %}
|
||||||
{% elif object_type == 'scenario' %}
|
{% include "modals/collections/new_edge_modal.html" %}
|
||||||
{% include "modals/collections/new_scenario_modal.html" %}
|
{% elif object_type == 'scenario' %}
|
||||||
{% elif object_type == 'model' %}
|
{% include "modals/collections/new_scenario_modal.html" %}
|
||||||
{% include "modals/collections/new_model_modal.html" %}
|
{% elif object_type == 'model' %}
|
||||||
{% elif object_type == 'setting' %}
|
{% include "modals/collections/new_model_modal.html" %}
|
||||||
{#{% include "modals/collections/new_setting_modal.html" %}#}
|
{% elif object_type == 'setting' %}
|
||||||
{% elif object_type == 'user' %}
|
{#{% include "modals/collections/new_setting_modal.html" %}#}
|
||||||
<div></div>
|
{% elif object_type == 'user' %}
|
||||||
{% elif object_type == 'group' %}
|
<div></div>
|
||||||
{% include "modals/collections/new_group_modal.html" %}
|
{% elif object_type == 'group' %}
|
||||||
{% endif %}
|
{% include "modals/collections/new_group_modal.html" %}
|
||||||
{% endblock action_modals %}
|
{% endif %}
|
||||||
|
{% endblock action_modals %}
|
||||||
|
|
||||||
<div class="panel-group" id="reviewListAccordion">
|
<div class="panel-group" id="reviewListAccordion">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
|
|||||||
@ -0,0 +1,42 @@
|
|||||||
|
<div class="modal fade" tabindex="-1" id="import_legacy_package_modal" role="dialog"
|
||||||
|
aria-labelledby="import_legacy_package_modal" aria-hidden="true">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal">
|
||||||
|
<span aria-hidden="true">×</span>
|
||||||
|
<span class="sr-only">Close</span>
|
||||||
|
</button>
|
||||||
|
<h4 class="modal-title">Import Package from legacy System</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<p>Create a Package based on the JSON Export of the legacy system.</p>
|
||||||
|
<form id="import-legacy-package-modal-form" accept-charset="UTF-8" data-remote="true" method="post"
|
||||||
|
enctype="multipart/form-data">
|
||||||
|
{% csrf_token %}
|
||||||
|
<p>
|
||||||
|
<label class="btn btn-primary" for="jsonFile">
|
||||||
|
<input id="jsonFile" name="file" type="file" style="display:none;"
|
||||||
|
onchange="$('#upload-file-info').html(this.files[0].name)">
|
||||||
|
Choose JSON File
|
||||||
|
</label>
|
||||||
|
<span class="label label-info" id="upload-file-info"></span>
|
||||||
|
<input type="hidden" value="import-legacy-package-json" name="hidden" readonly="">
|
||||||
|
</p>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<a id="import-legacy-package-modal-form-submit" class="btn btn-primary" href="#">Submit</a>
|
||||||
|
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
$('#import-legacy-package-modal-form-submit').on('click', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
$('#import-legacy-package-modal-form').submit();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
Reference in New Issue
Block a user