refactor of license django model #119

This commit is contained in:
Liam Brydon
2025-11-10 14:51:44 +13:00
parent e26d5a21e3
commit 42b1e77fb9
7 changed files with 45 additions and 25 deletions

View File

@ -20,7 +20,7 @@ from .models import (
Setting,
ExternalDatabase,
ExternalIdentifier,
JobLog,
JobLog, License,
)
@ -62,6 +62,10 @@ class EnviFormerAdmin(EPAdmin):
pass
class LicenseAdmin(admin.ModelAdmin):
list_display = ["cc_string", "link", "image_link"]
class CompoundAdmin(EPAdmin):
pass
@ -118,6 +122,7 @@ admin.site.register(JobLog, JobLogAdmin)
admin.site.register(Package, PackageAdmin)
admin.site.register(MLRelativeReasoning, MLRelativeReasoningAdmin)
admin.site.register(EnviFormer, EnviFormerAdmin)
admin.site.register(License, LicenseAdmin)
admin.site.register(Compound, CompoundAdmin)
admin.site.register(CompoundStructure, CompoundStructureAdmin)
admin.site.register(SimpleAmbitRule, SimpleAmbitRuleAdmin)

View File

@ -11,11 +11,14 @@ from epdb.models import (
EnviFormer,
Permission,
User,
ExternalDatabase,
ExternalDatabase, License,
)
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument("-ol", "--only-licenses", action="store_true", help="Only create licenses.")
def create_users(self):
# Anonymous User
if not User.objects.filter(email="anon@envipath.com").exists():
@ -83,6 +86,16 @@ class Command(BaseCommand):
return anon, admin, g, user0
def create_licenses(self):
"""Create the six default licenses supported by enviPath"""
cc_strings = ["by", "by-nc", "by-nc-nd", "by-nc-sa", "by-nd", "by-sa"]
for cc_string in cc_strings:
new_license = License()
new_license.cc_string = cc_string
new_license.link = f"https://creativecommons.org/licenses/{cc_string}/4.0/"
new_license.image_link = f"https://licensebuttons.net/l/{cc_string}/4.0/88x31.png"
new_license.save()
def import_package(self, data, owner):
return PackageManager.import_legacy_package(
data, owner, keep_ids=True, add_import_timestamp=False, trust_reviewed=True
@ -158,6 +171,9 @@ class Command(BaseCommand):
@transaction.atomic
def handle(self, *args, **options):
# Create users
self.create_licenses()
if options.get("only_licenses", False):
return
anon, admin, g, user0 = self.create_users()
self.populate_common_external_databases()

View File

@ -648,6 +648,7 @@ class ScenarioMixin(models.Model):
class License(models.Model):
cc_string = models.TextField(blank=False, null=False, verbose_name="CC string")
link = models.URLField(blank=False, null=False, verbose_name="link")
image_link = models.URLField(blank=False, null=False, verbose_name="Image link")

View File

@ -1047,9 +1047,7 @@ 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")
cc_string = request.POST.get("license")
if new_package_name:
current_package.name = new_package_name
@ -1077,24 +1075,13 @@ 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()
elif cc_string is not None:
if cc_string == "no-license":
current_package.license = None
current_package.save()
return redirect(current_package.url)
else:
if current_package.license is not None:
current_package.license.delete()
license = License()
license.link = license_link
license.image_link = license_image_link
license.save()
current_package.license = license
current_package.license = License.objects.get(cc_string=cc_string)
current_package.save()
return redirect(current_package.url)

View File

@ -52,8 +52,6 @@
</div>
</div>
<input type="hidden" id="license" name="license">
<input type="hidden" id="license-link" name="license-link">
<input type="hidden" id="license-image-link" name="license-image-link">
</form>
</div>
<div class="modal-footer">
@ -128,8 +126,6 @@ function cc() {
$('#ccfig').append(img_tpl);
$('#license').val(ccstr);
$('#license-link').val(link);
$('#license-image-link').val(imageLink);
} else {
$('#ccfig').empty();
$('#set_license_form_submit').prop('disabled', true);

View File

@ -4,7 +4,7 @@ from django.test import TestCase, tag
from django.urls import reverse
from epdb.logic import UserManager
from epdb.models import Package, UserPackagePermission, Permission, GroupPackagePermission, Group
from epdb.models import Package, UserPackagePermission, Permission, GroupPackagePermission, Group, License
class PackageViewTest(TestCase):
@ -30,6 +30,14 @@ class PackageViewTest(TestCase):
is_active=True,
)
cc_strings = ["by", "by-nc", "by-nc-nd", "by-nc-sa", "by-nd", "by-sa"]
for cc_string in cc_strings:
new_license = License()
new_license.cc_string = cc_string
new_license.link = f"https://creativecommons.org/licenses/{cc_string}/4.0/"
new_license.image_link = f"https://licensebuttons.net/l/{cc_string}/4.0/88x31.png"
new_license.save()
def setUp(self):
self.client.force_login(self.user1)
@ -188,7 +196,13 @@ class PackageViewTest(TestCase):
self.client.post(package_url, {"license": "no-license"})
self.assertIsNone(p.license)
# TODO test others
cc_strings = ["by", "by-nc", "by-nc-nd", "by-nc-sa", "by-nd", "by-sa"]
for cc_string in cc_strings:
self.client.post(package_url, {"license": cc_string})
# Without this, the instance of p doesn't have the license. However, the one retrieved with get does
p = Package.objects.get(url=package_url)
self.assertEqual(p.license.link, f"https://creativecommons.org/licenses/{cc_string}/4.0/")
def test_delete_package(self):
response = self.client.post(

View File

@ -714,6 +714,7 @@ class PackageImporter:
license_obj, _ = License.objects.get_or_create(
name=license_data["name"],
defaults={
"cc_string": license_data.get("cc_string", ""),
"link": license_data.get("link", ""),
"image_link": license_data.get("image_link", ""),
},