diff --git a/epdb/models.py b/epdb/models.py index 5d7a69ad..eed66553 100644 --- a/epdb/models.py +++ b/epdb/models.py @@ -204,9 +204,14 @@ class ScenarioMixin(models.Model): class Meta: abstract = True +class License(models.Model): + link = models.URLField(blank=False, null=False, verbose_name='link') + image_link = models.URLField(blank=False, null=False, verbose_name='Image link') + class Package(EnviPathModel): reviewed = models.BooleanField(verbose_name='Reviewstatus', default=False) + license = models.ForeignKey('epdb.License', on_delete=models.SET_NULL, blank=True, null=True, verbose_name='License') def __str__(self): return f"{self.name} (pk={self.pk})" diff --git a/epdb/views.py b/epdb/views.py index 4244529b..5e113205 100644 --- a/epdb/views.py +++ b/epdb/views.py @@ -1,5 +1,6 @@ import json import logging +from typing import List, Dict, Any from django.conf import settings as s from django.contrib.auth import get_user_model @@ -11,7 +12,7 @@ from utilities.chem import FormatConverter, IndigoUtils from .logic import GroupManager, PackageManager, UserManager, SettingManager from .models import Package, GroupPackagePermission, Group, CompoundStructure, Compound, Reaction, Rule, Pathway, Node, \ EPModel, EnviFormer, MLRelativeReasoning, RuleBaseRelativeReasoning, Scenario, SimpleAmbitRule, APIToken, \ - UserPackagePermission, Permission + UserPackagePermission, Permission, License, User logger = logging.getLogger(__name__) @@ -20,7 +21,7 @@ def log_post_params(request): logger.debug(f"{k}\t{v}") -def get_base_context(request): +def get_base_context(request) -> Dict[str, Any]: current_user = _anonymous_or_real(request) ctx = { @@ -47,7 +48,7 @@ def _anonymous_or_real(request): return get_user_model().objects.get(username='anonymous') -def breadcrumbs(first_level_object=None, second_level_namespace=None, second_level_object=None): +def breadcrumbs(first_level_object=None, second_level_namespace=None, second_level_object=None) -> List[Dict[str, str]]: bread = [ {'Home': s.SERVER_URL}, {'Package': s.SERVER_URL + '/package'}, @@ -130,6 +131,8 @@ def compounds(request): for p in PackageManager.get_reviewed_packages(): reviewed_compound_qs |= Compound.objects.filter(package=p) + reviewed_compound_qs = reviewed_compound_qs.order_by('name') + if request.GET.get('all'): return JsonResponse({ "objects": [ @@ -138,7 +141,7 @@ def compounds(request): ] }) - context['reviewed_objects'] = reviewed_compound_qs.order_by('name') + context['reviewed_objects'] = reviewed_compound_qs return render(request, 'collections/objects_list.html', context) elif request.method == 'POST': @@ -162,7 +165,9 @@ def rules(request): reviewed_rule_qs = Rule.objects.none() for p in PackageManager.get_reviewed_packages(): - reviewed_rule_qs |= Rule.objects.filter(package=p).order_by('name') + reviewed_rule_qs |= Rule.objects.filter(package=p) + + reviewed_rule_qs = reviewed_rule_qs.order_by('name') if request.GET.get('all'): return JsonResponse({ @@ -198,6 +203,8 @@ def reactions(request): for p in PackageManager.get_reviewed_packages(): reviewed_reaction_qs |= Reaction.objects.filter(package=p).order_by('name') + reviewed_reaction_qs = reviewed_reaction_qs.order_by('name') + if request.GET.get('all'): return JsonResponse({ "objects": [ @@ -233,6 +240,8 @@ def pathways(request): for p in PackageManager.get_reviewed_packages(): reviewed_pathway_qs |= Pathway.objects.filter(package=p).order_by('name') + reviewed_pathway_qs = reviewed_pathway_qs.order_by('name') + if request.GET.get('all'): return JsonResponse({ "objects": [ @@ -268,6 +277,8 @@ def scenarios(request): for p in PackageManager.get_reviewed_packages(): reviewed_scenario_qs |= Scenario.objects.filter(package=p).order_by('name') + reviewed_scenario_qs = reviewed_scenario_qs.order_by('name') + if request.GET.get('all'): return JsonResponse({ "objects": [ @@ -311,6 +322,8 @@ def models(request): for p in PackageManager.get_reviewed_packages(): reviewed_model_qs |= EPModel.objects.filter(package=p).order_by('name') + reviewed_model_qs = reviewed_model_qs.order_by('name') + if request.GET.get('all'): return JsonResponse({ "objects": [ @@ -535,11 +548,11 @@ def package(request, package_uuid): if s.DEBUG: for k, v in request.POST.items(): - print(k, v) + logger.debug(f"{k}\t{v}") if hidden := request.POST.get('hidden', None): if hidden == 'delete-package': - print(current_package.delete()) + logger.debug(current_package.delete()) return redirect(s.SERVER_URL + '/package') else: return HttpResponseBadRequest() @@ -552,6 +565,9 @@ def package(request, package_uuid): write = request.POST.get('write') == 'on' owner = request.POST.get('owner') == 'on' + license = request.POST.get('license') + license_link = request.POST.get('license-link') + license_image_link = request.POST.get('license-image-link') if new_package_name: current_package.name = new_package_name @@ -579,9 +595,32 @@ def package(request, package_uuid): PackageManager.update_permissions(current_user, current_package, grantee, max_perm) return redirect(current_package.url) + elif license is not None: + if license == 'no-license': + if current_package.license is not None: + current_package.license.delete() + + current_package.license = None + current_package.save() + return redirect(current_package.url) + else: + if current_package.license is not None: + current_package.license.delete() + + l = License() + l.link = license_link + l.image_link = license_image_link + l.save() + + current_package.license = l + current_package.save() + + return redirect(current_package.url) else: return HttpResponseBadRequest() + else: + return HttpResponseBadRequest() # https://envipath.org/package//compound def package_compounds(request, package_uuid): @@ -960,9 +999,9 @@ def package_pathways(request, package_uuid): # https://envipath.org/package//pathway/ def package_pathway(request, package_uuid, pathway_uuid): - current_user = _anonymous_or_real(request) - current_package = PackageManager.get_package_by_id(current_user, package_uuid) - current_pathway = Pathway.objects.get(package=current_package, uuid=pathway_uuid) + current_user: User = _anonymous_or_real(request) + current_package: Package = PackageManager.get_package_by_id(current_user, package_uuid) + current_pathway: Pathway = Pathway.objects.get(package=current_package, uuid=pathway_uuid) if request.method == 'GET': diff --git a/templates/actions/objects/package.html b/templates/actions/objects/package.html index 4565fc79..d2e1dfa2 100644 --- a/templates/actions/objects/package.html +++ b/templates/actions/objects/package.html @@ -6,6 +6,10 @@ Edit Permissions +
  • + + License +
  • Delete Package diff --git a/templates/modals/objects/set_license_modal.html b/templates/modals/objects/set_license_modal.html new file mode 100644 index 00000000..c1771f57 --- /dev/null +++ b/templates/modals/objects/set_license_modal.html @@ -0,0 +1,153 @@ + + \ No newline at end of file diff --git a/templates/objects/package.html b/templates/objects/package.html index 85e4a7bd..62a15db7 100644 --- a/templates/objects/package.html +++ b/templates/objects/package.html @@ -5,6 +5,7 @@ {% block action_modals %} {% include "modals/objects/edit_package_modal.html" %} {% include "modals/objects/edit_package_permissions_modal.html" %} + {% include "modals/objects/set_license_modal.html" %} {% include "modals/objects/delete_package_modal.html" %} {% endblock action_modals %} @@ -50,5 +51,24 @@ + + {% if package.license %} +

    +
    +
    +
    + License +
    +
    +
    +
    + + + +
    +
    +
    + {% endif %} + {% endblock content %}