localcosmos-app-kit 0.9.15__py3-none-any.whl → 0.9.16__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. app_kit/admin_urls.py +5 -0
  2. app_kit/appbuilder/TaxonBuilder.py +31 -23
  3. app_kit/appbuilder/__pycache__/TaxonBuilder.cpython-313.pyc +0 -0
  4. app_kit/features/taxon_profiles/templates/taxon_profiles/ajax/delete_all_manually_added_images.html +37 -0
  5. app_kit/features/taxon_profiles/templates/taxon_profiles/manage_taxon_profiles.html +16 -0
  6. app_kit/features/taxon_profiles/tests/__pycache__/test_views.cpython-313.pyc +0 -0
  7. app_kit/features/taxon_profiles/tests/test_views.py +100 -3
  8. app_kit/features/taxon_profiles/urls.py +3 -0
  9. app_kit/features/taxon_profiles/views.py +38 -1
  10. app_kit/forms.py +8 -0
  11. app_kit/locale/de/LC_MESSAGES/django.mo +0 -0
  12. app_kit/locale/de/LC_MESSAGES/django.po +247 -93
  13. app_kit/taxonomy/lazy.py +6 -6
  14. app_kit/templates/app_kit/ajax/list_images_and_licences_content.html +44 -0
  15. app_kit/templates/app_kit/ajax/manage_content_licence.html +25 -0
  16. app_kit/templates/app_kit/list_images_and_licences.html +25 -0
  17. app_kit/templates/app_kit/manage_app.html +10 -1
  18. app_kit/templatetags/app_tags.py +23 -3
  19. app_kit/views.py +61 -2
  20. {localcosmos_app_kit-0.9.15.dist-info → localcosmos_app_kit-0.9.16.dist-info}/METADATA +1 -1
  21. {localcosmos_app_kit-0.9.15.dist-info → localcosmos_app_kit-0.9.16.dist-info}/RECORD +24 -20
  22. {localcosmos_app_kit-0.9.15.dist-info → localcosmos_app_kit-0.9.16.dist-info}/WHEEL +1 -1
  23. {localcosmos_app_kit-0.9.15.dist-info → localcosmos_app_kit-0.9.16.dist-info}/licenses/LICENCE +0 -0
  24. {localcosmos_app_kit-0.9.15.dist-info → localcosmos_app_kit-0.9.16.dist-info}/top_level.txt +0 -0
app_kit/taxonomy/lazy.py CHANGED
@@ -115,14 +115,14 @@ class LazyTaxon(LazyTaxonBase):
115
115
 
116
116
  if db_lazy_taxon.taxon_nuid != self.taxon_nuid:
117
117
  self.changed_taxon_nuid_in_reference = True
118
- self.reference_errors.append(_('Taxon %s has changed its position in %s') % (self, verbose_taxon_source))
118
+ self.reference_errors.append(_('Taxon %(taxon)s has changed its position in %(tree)s') % {'taxon': self, 'tree': verbose_taxon_source})
119
119
 
120
120
  if str(taxon.name_uuid) != str(self.name_uuid):
121
121
  self.changed_name_uuid_in_reference = True
122
- self.reference_errors.append(_('Taxon %s has changed its identifier in %s') % (self, verbose_taxon_source))
122
+ self.reference_errors.append(_('Taxon %(taxon)s has changed its identifier in %(tree)s') % {'taxon': self, 'tree': verbose_taxon_source})
123
123
 
124
124
  if tree_query.count() > 1:
125
- self.reference_errors.append(_('Taxon %s found multiple times in %s') % (self, verbose_taxon_source))
125
+ self.reference_errors.append(_('Taxon %(taxon)s found multiple times in %(tree)s') % {'taxon': self, 'tree': verbose_taxon_source})
126
126
 
127
127
  else:
128
128
  synonyms_model = self.models.TaxonSynonymModel
@@ -135,11 +135,11 @@ class LazyTaxon(LazyTaxonBase):
135
135
  self.reference_synonym = synonym
136
136
  accepted_name = synonym.taxon
137
137
  self.reference_accepted_name = LazyTaxon(instance=accepted_name)
138
- self.reference_errors.append(_('Taxon %s not found as accepted name, but as synonym of %s') % (self,
139
- accepted_name))
138
+ self.reference_errors.append(_('Taxon %(taxon)s not found as accepted name, but as synonym of %(accepted_name)s') % {'taxon': self,
139
+ 'accepted_name': accepted_name})
140
140
 
141
141
  else:
142
- self.reference_errors.append(_('Taxon %s not found in %s') % (self, verbose_taxon_source))
142
+ self.reference_errors.append(_('Taxon %(taxon)s not found in %(tree)s') % {'taxon': self, 'tree': verbose_taxon_source})
143
143
 
144
144
 
145
145
  taxon_latnames_query = self.models.TaxonTreeModel.objects.filter(
@@ -0,0 +1,44 @@
1
+ {% load i18n el_pagination_tags app_tags %}
2
+
3
+ {% paginate 28 registry_entries %}
4
+
5
+ {% show_pages %}
6
+
7
+ <div class="row">
8
+ {% for entry in registry_entries %}
9
+ <div class="col-12 col-md-6 col-lg-3">
10
+ {% get_object_from_licence entry as licenced_object %}
11
+ {% if licenced_object.is_imagestore %}
12
+ <div class="row mb-2">
13
+ <div class="col-6">
14
+ {% if licenced_object.object %}
15
+ <img src="{{ licenced_object.object.source_image.url }}" class="img-thumbnail img-fluid" alt="Content Image">
16
+ {% else %}
17
+ deleted image
18
+ {% endif %}
19
+ </div>
20
+ <div class="col-6 p-1">
21
+ <small>
22
+ {% trans 'Author' %}: {{ entry.creator_name}}<br>
23
+ {% trans 'Licence' %}: {{ entry.licence }} {{ entry.licence_version }}
24
+ {% if entry.creator_link %}
25
+ <br>(<a href="{{ entry.creator_link }}" target="_blank" rel="noopener noreferrer">{% trans 'Link to author' %}</a>)
26
+ {% endif %}
27
+ {% if entry.source_link %}
28
+ <br>(<a href="{{ entry.source_link }}" target="_blank" rel="noopener noreferrer">{% trans 'Link to source' %}</a>)
29
+ {% endif %}
30
+ <br>
31
+ {% if licenced_object.object %}
32
+ <a class="btn btn-xs btn-outline-primary mt-2 xhr" ajax-target="ModalContent" href="{% url 'manage_content_licence' meta_app.id entry.id %}">{% trans 'Edit licence' %}</a>
33
+ {% endif %}
34
+ </small>
35
+ </div>
36
+ </div>
37
+ {% else %}
38
+
39
+ {% endif %}
40
+ </div>
41
+ {% endfor %}
42
+ </div>
43
+
44
+ {% show_pages %}
@@ -0,0 +1,25 @@
1
+ {% extends 'localcosmos_server/modals/modal_form.html' %}
2
+ {% load i18n localcosmos_tags %}
3
+
4
+ {% block action %}
5
+ {% url 'manage_content_licence' meta_app.id registry_entry.id %}
6
+ {% endblock %}
7
+
8
+ {% block title %}
9
+ {% blocktrans %}Manage Licence{% endblocktrans %}
10
+ {% endblock %}
11
+
12
+
13
+ {% block footer %}
14
+ {% include 'localcosmos_server/modals/footers/save.html' %}
15
+ {% endblock %}
16
+
17
+ {% block script %}
18
+ {% if success %}
19
+
20
+ <script>
21
+ $("#LargeModal").modal("hide");
22
+ window.location.reload();
23
+ </script>
24
+ {% endif %}
25
+ {% endblock %}
@@ -0,0 +1,25 @@
1
+ {% extends 'app_kit/base.html' %}
2
+ {% load i18n static app_tags localcosmos_tags %}
3
+
4
+ {% block content %}
5
+ <br>
6
+ <div class="container">
7
+ <div class="row">
8
+ <div class="col-12">
9
+ <br>
10
+ <h3>
11
+ {% trans 'Images and Licences' %}
12
+ </h3>
13
+
14
+ <hr>
15
+ </div>
16
+ </div>
17
+ <div class="row">
18
+ <div class="col-12">
19
+ <div id="images-and-licences-content">
20
+ {% include 'app_kit/ajax/list_images_and_licences_content.html' %}
21
+ </div>
22
+ </div>
23
+ </div>
24
+ </div>
25
+ {% endblock %}
@@ -60,7 +60,16 @@
60
60
 
61
61
 
62
62
  {% block generic_content_specific %}
63
-
63
+ <div>
64
+ <div class="card">
65
+ <div class="card-body">
66
+ <h5 class="card-title">{% trans 'Images and Licences' %}</h5>
67
+ <div>
68
+ <a href="{% url 'list_images_and_licences' meta_app.id %}" class="btn btn-outline-primary">{% trans 'Manage Images and Licences' %}</a>
69
+ </div>
70
+ </div>
71
+ </div>
72
+ </div>
64
73
  {% endblock %}
65
74
 
66
75
  {% block extra_script %}
@@ -9,7 +9,7 @@ from django.contrib.staticfiles import finders
9
9
  from django.db.models import Q
10
10
 
11
11
  from app_kit.models import MetaApp, AppKitExternalMedia
12
- from localcosmos_server.models import EXTERNAL_MEDIA_TYPES
12
+ from localcosmos_server.models import EXTERNAL_MEDIA_TYPES, ServerImageStore
13
13
 
14
14
  from app_kit.features.backbonetaxonomy.models import TaxonRelationship, TaxonRelationshipType
15
15
 
@@ -28,7 +28,7 @@ def ranged(number):
28
28
  return range(1,int(number)+1)
29
29
 
30
30
 
31
- from app_kit.models import ContentImage
31
+ from app_kit.models import ContentImage, ImageStore
32
32
  @register.simple_tag
33
33
  def content_image(instance, image_type=None):
34
34
 
@@ -310,4 +310,24 @@ def render_taxon_relationships(context, meta_app, lazy_taxon):
310
310
  'taxon_relationship_types': relationship_types,
311
311
  }
312
312
 
313
- return tag_context
313
+ return tag_context
314
+
315
+
316
+ @register.simple_tag()
317
+ def get_object_from_licence(licence_registry_entry):
318
+
319
+ content = licence_registry_entry.content
320
+ content_type = licence_registry_entry.content_type
321
+
322
+ image_store_content_type = ContentType.objects.get_for_model(ImageStore)
323
+ server_image_store_content_type = ContentType.objects.get_for_model(ServerImageStore)
324
+
325
+ licenced_object = {
326
+ 'is_imagestore': False,
327
+ 'object': content,
328
+ }
329
+
330
+ if content_type == image_store_content_type or content_type == server_image_store_content_type:
331
+ licenced_object['is_imagestore'] = True
332
+
333
+ return licenced_object
app_kit/views.py CHANGED
@@ -22,7 +22,7 @@ from .forms import (AddLanguageForm, MetaAppOptionsForm, TagAnyElementForm, Gene
22
22
  CreateGenericContentForm, AddExistingGenericContentForm, TranslateAppForm,
23
23
  EditGenericContentNameForm, ManageContentImageWithTextForm,
24
24
  ZipImportForm, BuildAppForm, CreateAppForm, ManageLocalizedContentImageForm,
25
- TranslateVernacularNamesForm)
25
+ TranslateVernacularNamesForm, ManageContentLicenceForm)
26
26
 
27
27
  from django_tenants.utils import get_tenant_domain_model
28
28
  Domain = get_tenant_domain_model()
@@ -53,6 +53,8 @@ from django.db import connection
53
53
  # activate permission rules
54
54
  from .permission_rules import *
55
55
 
56
+ from content_licencing.models import ContentLicenceRegistry
57
+
56
58
  LOCALCOSMOS_COMMERCIAL_BUILDER = getattr(settings, 'LOCALCOSMOS_COMMERCIAL_BUILDER', True)
57
59
 
58
60
 
@@ -1732,6 +1734,62 @@ class DeleteAppKitExternalMedia(MetaAppMixin, AjaxDeleteView):
1732
1734
  context = super().get_context_data(**kwargs)
1733
1735
  context['external_media_object'] = self.object.content_object
1734
1736
  return context
1737
+
1738
+
1739
+ class ListImagesAndLicences(MetaAppMixin, TemplateView):
1740
+
1741
+ template_name = 'app_kit/list_images_and_licences.html'
1742
+ ajax_template_name = 'app_kit/ajax/list_images_and_licences_content.html'
1743
+
1744
+ def get_context_data(self, **kwargs):
1745
+ context = super().get_context_data(**kwargs)
1746
+ registry_entries = ContentLicenceRegistry.objects.all().order_by('creator_name', 'pk')
1747
+ context['registry_entries'] = registry_entries
1748
+ return context
1749
+
1750
+
1751
+ class ManageContentLicence(MetaAppMixin, LicencingFormViewMixin, FormView):
1752
+
1753
+ form_class = ManageContentLicenceForm
1754
+
1755
+ template_name = 'app_kit/ajax/manage_content_licence.html'
1756
+
1757
+ @method_decorator(ajax_required)
1758
+ def dispatch(self, request, *args, **kwargs):
1759
+ self.set_instance(**kwargs)
1760
+ return super().dispatch(request, *args, **kwargs)
1761
+
1762
+ def set_instance(self, **kwargs):
1763
+ self.licence_registry_entry = ContentLicenceRegistry.objects.get(pk=kwargs['registry_entry_id'])
1764
+
1765
+ def get_form(self, form_class=None):
1766
+ if form_class is None:
1767
+ form_class = self.get_form_class()
1768
+ return form_class(self.licence_registry_entry.model_field, **self.get_form_kwargs())
1769
+
1770
+ def get_initial(self):
1771
+ initial = super().get_initial()
1772
+
1773
+ licencing_initial = self.get_licencing_initial()
1774
+ initial.update(licencing_initial)
1775
+
1776
+ return initial
1777
+
1778
+
1779
+ def get_context_data(self, **kwargs):
1780
+ context = super().get_context_data(**kwargs)
1781
+ context['registry_entry'] = self.licence_registry_entry
1782
+ return context
1783
+
1784
+ def form_valid(self, form):
1785
+ if self.licence_registry_entry.content:
1786
+ self.register_content_licence(form, self.licence_registry_entry.content, self.licence_registry_entry.model_field)
1787
+
1788
+ context = self.get_context_data(**self.kwargs)
1789
+ context['form'] = form
1790
+ context['success'] = True
1791
+ return self.render_to_response(context)
1792
+
1735
1793
 
1736
1794
  # LEGAL
1737
1795
  class IdentityMixin:
@@ -1759,4 +1817,5 @@ class PrivacyStatement(IdentityMixin, TemplateView):
1759
1817
  @method_decorator(csrf_exempt)
1760
1818
  @method_decorator(requires_csrf_token)
1761
1819
  def dispatch(self, request, *args, **kwargs):
1762
- return super().dispatch(request, *args, **kwargs)
1820
+ return super().dispatch(request, *args, **kwargs)
1821
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: localcosmos_app_kit
3
- Version: 0.9.15
3
+ Version: 0.9.16
4
4
  Summary: LocalCosmos App Kit. Web Portal to build Android and iOS apps
5
5
  Home-page: https://github.com/localcosmos/app-kit
6
6
  Author: Thomas Uher
@@ -1,10 +1,10 @@
1
1
  app_kit/__init__.py,sha256=kiJCX4I2Cx21HFl05-DT8ETzQ2Ctr_eHQ_tW8ui7VoA,330
2
2
  app_kit/admin.py,sha256=6RhzQBKMGjPeDmTBlGgJfmhV36wqkrGgt1kWxSUG1nc,225
3
- app_kit/admin_urls.py,sha256=R7IJ2ZMQRGEBKGkmSuDLtmNFhqwP55Y_yF79eig7M6M,9323
3
+ app_kit/admin_urls.py,sha256=QULsIyrrhiH5Cxr58-vvrD2PnRGir5dYRO0_kYgccEU,9633
4
4
  app_kit/apps.py,sha256=ZjMEcU1EVFkXzL1rYRkB3STC-I3ZKeGIi7QsRhudDpE,88
5
5
  app_kit/context_processors.py,sha256=a206olavyckiIOO9kwAoslSKwMZf8l92-sk5w4VaKZw,713
6
6
  app_kit/definitions.py,sha256=qPfyqMKr71qvBgOj8M7j_7ZbMlFo5sdvfQUUAL0IBBU,82
7
- app_kit/forms.py,sha256=LbmNJtLiSS4G0Rs3doywnU1imPPZ0EPO3LDx75cWm24,20005
7
+ app_kit/forms.py,sha256=09xz8t7j7opzAXkBAkSjpjAUFygXHXsSjD62515gRxI,20281
8
8
  app_kit/generic.py,sha256=NZDUpyX9Il3NN-kIXwDJGd30s_keRjt2dlAXHEuWfNE,5224
9
9
  app_kit/generic_content_validation.py,sha256=d9zM35OaOV382GMRSnIBQXzRcqiPDIaE03OAWtoHgQ4,1146
10
10
  app_kit/generic_content_zip_import.py,sha256=LOkLgSNHEZDJHqa2P2ngRVinFefPGQFWKyEZyf4A6uQ,38495
@@ -18,7 +18,7 @@ app_kit/urls.py,sha256=LbC2phhp1fw4LWQN2Voy4QDtOBGq2f2WNmYb4APeGC8,511
18
18
  app_kit/utils.py,sha256=GYljQ6av1u82QzY9JugDeL6enfMSzaozPTk959ngpl0,6725
19
19
  app_kit/validators.py,sha256=KkCo50Vs9Kc9Pl4-KgkYIo0evwoHB7_SzkMQm27Lx3c,698
20
20
  app_kit/view_mixins.py,sha256=Ht6i6P7m1cFafYpNzJ2xrD3GwJpgppRwsSKQfM9aYxM,1320
21
- app_kit/views.py,sha256=S4Nm5F4_e9sTba-dTnoNOuGYyFaRB_AET2g2V5NpZVI,61098
21
+ app_kit/views.py,sha256=GqF-oMw7fLgPrgohq80dtfdPl5nZt8xeFwtDz3YNhiI,63202
22
22
  app_kit/app_kit_api/__init__.py,sha256=ZHly-ZuMEfMC8Aw_y3aR5ovob7nelArdaSjawJLuxOw,64
23
23
  app_kit/app_kit_api/admin.py,sha256=dCntbI8CI_EtDpbPr7eFsjjzyAweU44ZF0S-VjW8eP4,287
24
24
  app_kit/app_kit_api/apps.py,sha256=XHq_7ePVs53aM6-y8y-vc0MGLNA_w2beZ78h12TJqrE,103
@@ -40,7 +40,7 @@ app_kit/appbuilder/AppPreviewBuilder.py,sha256=C0oSh_i1Cx4vLW01T0qJeo-MrtqqjD72H
40
40
  app_kit/appbuilder/AppReleaseBuilder.py,sha256=Xh1G8DI5azLLA1_uE-S_4HQDACs2xqxbA87bBGhdBeo,131151
41
41
  app_kit/appbuilder/ContentImageBuilder.py,sha256=k9YdH2d5oIyfbeoA9H_DaUigc1SQ69WnXFy9e00DdfA,7332
42
42
  app_kit/appbuilder/GBIFlib.py,sha256=iGj01hrk0iG-qjEkPM8ez_lNKL_zJedPTS3oUZDd8vg,989
43
- app_kit/appbuilder/TaxonBuilder.py,sha256=kzEzlE7pDfK5yBOc1lYuxguBOuzKesK3i8qxdZ90rgA,15424
43
+ app_kit/appbuilder/TaxonBuilder.py,sha256=4c9tDVxWoHIXiy3z-hHku2OXceQDJDjrehvm8spXtuE,15983
44
44
  app_kit/appbuilder/__init__.py,sha256=PIqSBvR4NFND1zb_KOryk3PFZ5yhiGwaZIZSRSTp1JY,152
45
45
  app_kit/appbuilder/precompile_fulltree.py,sha256=Lrf5j0xGY2FgpuuWdUrfef1ZlLs-GntFYpngtZ5pTF0,2005
46
46
  app_kit/appbuilder/JSONBuilders/BackboneTaxonomyJSONBuilder.py,sha256=worozLAgqxKJSdBzQ45zlCL3l4BnpZAYX-Dl4SfmwUs,6488
@@ -90,7 +90,7 @@ app_kit/appbuilder/__pycache__/ContentImageBuilder.cpython-313.pyc,sha256=K6b-Gl
90
90
  app_kit/appbuilder/__pycache__/GBIFlib.cpython-311.pyc,sha256=NNB_AHGQnN0ld82WuJHxGn5RthLO_fGkpVAfAHaDyMU,1945
91
91
  app_kit/appbuilder/__pycache__/GBIFlib.cpython-313.pyc,sha256=13SE5Ayqrg8n90KGWbLE7rQ-UPaU2Q0XbY5dQENpXTA,1962
92
92
  app_kit/appbuilder/__pycache__/TaxonBuilder.cpython-311.pyc,sha256=7JVnCo4-CVmaX_EIzU05is5ySaqWPA86QBlFM-B4Trw,16273
93
- app_kit/appbuilder/__pycache__/TaxonBuilder.cpython-313.pyc,sha256=5tsgpQnOXFPJMr9vzgFcp8oRu0TmQSvFEc5daPk7eIM,16578
93
+ app_kit/appbuilder/__pycache__/TaxonBuilder.cpython-313.pyc,sha256=mxUE3vbiXd4R9F3iFOdPIAuZySRhBJ6KIeGllVJp4Uw,16957
94
94
  app_kit/appbuilder/__pycache__/__init__.cpython-311.pyc,sha256=KkcyxSIx1hiGZkOwMG8qWGJQ-RPacWMKpfpnP-naNv4,388
95
95
  app_kit/appbuilder/__pycache__/__init__.cpython-313.pyc,sha256=iHwg7gUn2XzOOz0SNmIeY6GVMxTcc5NKM3gzSz4pLnA,329
96
96
  app_kit/appbuilder/app/frontends/Multiverse/settings.json,sha256=dCcy0ZGor57YhlrPUJVj-IADrF413gBBWFUfletZW6g,2026
@@ -400,8 +400,8 @@ app_kit/features/taxon_profiles/admin.py,sha256=suMo4x8I3JBxAFBVIdE-5qnqZ6JAZV0F
400
400
  app_kit/features/taxon_profiles/apps.py,sha256=c0nynglV50B8qvXTnu7v6LZHT6N5nOTayOasKICAAJE,119
401
401
  app_kit/features/taxon_profiles/forms.py,sha256=T5mU0QGhG_fSNppzuzTxjxb078VA4IckOPOaP7nM5fE,16998
402
402
  app_kit/features/taxon_profiles/models.py,sha256=xYDHT_KI_xatFUwYYnkogXeqd70kr9Dp8YVum8hzvRw,24214
403
- app_kit/features/taxon_profiles/urls.py,sha256=2zaYLWb3mQyf5qlkWi1559gHeYr_eurSGfp6maVWIzc,10546
404
- app_kit/features/taxon_profiles/views.py,sha256=2z6SgIztgJ0x3vsYTa1oY5Ct4c9nEkj2Ag0asR6I5tI,59810
403
+ app_kit/features/taxon_profiles/urls.py,sha256=wamGUfN5cpCvYEfNnTTbdqBt1GeFQbybmzsG7_KtpvA,10814
404
+ app_kit/features/taxon_profiles/views.py,sha256=WCA2C8D6eyghFg42CRBQZlyvcy_UWf2iDcZPwOcRzSc,61245
405
405
  app_kit/features/taxon_profiles/zip_import.py,sha256=aYFEtaMjn5Qebj0eaOeM-WVdvMUDymH4wUOnhAItN9I,29883
406
406
  app_kit/features/taxon_profiles/migrations/0001_initial.py,sha256=aknHwoaZMBwDWMnp7dftXToVGuyN4f9xy3epQSqGkxQ,3659
407
407
  app_kit/features/taxon_profiles/migrations/0002_taxontext_long_text.py,sha256=FN2GAdO4paIgX8FpREoLk7cihlHRRaehVY7_Ve0K97w,383
@@ -419,7 +419,7 @@ app_kit/features/taxon_profiles/migrations/0013_alter_taxonprofile_options_and_m
419
419
  app_kit/features/taxon_profiles/migrations/0014_alter_taxonprofile_unique_together_and_more.py,sha256=wPO0TfoU_I9_BBLOSe3gvzMzEeGpxP5exnwuGT_ngUU,2501
420
420
  app_kit/features/taxon_profiles/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
421
421
  app_kit/features/taxon_profiles/templates/taxon_profiles/manage_taxon_profile.html,sha256=9uqOz0oQuA8Yxyg1yTSZs0RCWpjASOS6mIZgJm6uJFQ,11184
422
- app_kit/features/taxon_profiles/templates/taxon_profiles/manage_taxon_profiles.html,sha256=JdJQISSMbyXFc9X2xPzwTcP1Ae3Hut87HRyk0s6MgMU,8730
422
+ app_kit/features/taxon_profiles/templates/taxon_profiles/manage_taxon_profiles.html,sha256=NJGnmoa5da40e-hUpZAG2V-UZGqf_oxAd8bIABfuaKw,9304
423
423
  app_kit/features/taxon_profiles/templates/taxon_profiles/manage_taxon_texts.html,sha256=q1Do_NKTwkQ8sHWY4Zx4CXaWbpfFBGxn6_8Uc3N4EVA,1353
424
424
  app_kit/features/taxon_profiles/templates/taxon_profiles/ajax/backbone_taxa_taxonlist.html,sha256=6zEHqwPnU0bJJmyQqkXxWw90D0IQ1WPtm4sCCKXFJMQ,656
425
425
  app_kit/features/taxon_profiles/templates/taxon_profiles/ajax/batch_change_taxon_profiles_publication_status.html,sha256=4v7a305Z0YSXgABho64S8JH5hQ62dvzU8kjXiZ4U6MU,655
@@ -428,6 +428,7 @@ app_kit/features/taxon_profiles/templates/taxon_profiles/ajax/change_taxon_profi
428
428
  app_kit/features/taxon_profiles/templates/taxon_profiles/ajax/collected_taxon_images.html,sha256=a6HQJ6p4QMSpDqYraentxFyGmIxs-5uypFbWIyoR4q8,3654
429
429
  app_kit/features/taxon_profiles/templates/taxon_profiles/ajax/collected_taxon_traits.html,sha256=PkA7sGNPBFQ_t1Pb4X1avCd_n9SVFKedN0BIsYyB0Eg,2470
430
430
  app_kit/features/taxon_profiles/templates/taxon_profiles/ajax/create_taxon_profile.html,sha256=TylM_rq_aARbxzBgLZ8iGO6BNMFiGCue9-4saUZdS4c,1092
431
+ app_kit/features/taxon_profiles/templates/taxon_profiles/ajax/delete_all_manually_added_images.html,sha256=_zOaLGeVD3AKPmIzwRTr-eHi0Lo38dOTsSzYI-Oz_rE,1022
431
432
  app_kit/features/taxon_profiles/templates/taxon_profiles/ajax/delete_navigation_entry.html,sha256=kCNgH9qiAvF5Y3XP6UPA-XZeFb0Uw2CZakkYY-JjZD0,226
432
433
  app_kit/features/taxon_profiles/templates/taxon_profiles/ajax/delete_navigation_entry_taxon.html,sha256=xn3CFCzn1qZS5tM76GeQn4-2_WL4zLo5OxUTAD47XiQ,410
433
434
  app_kit/features/taxon_profiles/templates/taxon_profiles/ajax/delete_navigation_image.html,sha256=NY9VNsS6ZPIx9rjdikOg-SnNgvJn75xYglZRWMUkyMQ,309
@@ -462,7 +463,7 @@ app_kit/features/taxon_profiles/templatetags/taxon_profile_tags.py,sha256=nfriKw
462
463
  app_kit/features/taxon_profiles/tests/common.py,sha256=r27zMWP3LhUCLNv2nSnbLZSb2S0JyT4EwV7b1ZcEPrI,1589
463
464
  app_kit/features/taxon_profiles/tests/test_forms.py,sha256=tQ4NHGxZz2dzae16tu0JXazTqEskzdv473Ni_ncUaUA,16374
464
465
  app_kit/features/taxon_profiles/tests/test_models.py,sha256=-gj-EHBWuFG1mxoOMnwSY2lo0azevO00p0yS-txKcHI,33605
465
- app_kit/features/taxon_profiles/tests/test_views.py,sha256=UDDpf55RgKr2IJAeOnm9lmbaWazhWYJMzhhb-k7r7eQ,82742
466
+ app_kit/features/taxon_profiles/tests/test_views.py,sha256=8jgvwNe2j79CcoR-FXBI6x9ZnzzxhZLTbX_LGZDgauQ,85993
466
467
  app_kit/features/taxon_profiles/tests/test_zip_import.py,sha256=IkW_Of1Dgb3j0aIKoWsUMQajPAX2aQeR31vCUn7N3d4,27185
467
468
  app_kit/features/taxon_profiles/tests/__pycache__/common.cpython-311.pyc,sha256=VPg2JQrdcN4hlBj-fGZvvyBb1F79FRk9QI5Wd3HlN04,2573
468
469
  app_kit/features/taxon_profiles/tests/__pycache__/common.cpython-313.pyc,sha256=mZa0QDG_CtG8ZTIiQMWSqeBuRzSo8kKqAumsGzZUEus,2397
@@ -471,10 +472,10 @@ app_kit/features/taxon_profiles/tests/__pycache__/test_forms.cpython-313.pyc,sha
471
472
  app_kit/features/taxon_profiles/tests/__pycache__/test_models.cpython-311.pyc,sha256=lSdWjfvqyZfdOGYW43vTHLg0Lt9uN-b82qfLNq4G8oY,27401
472
473
  app_kit/features/taxon_profiles/tests/__pycache__/test_models.cpython-313.pyc,sha256=Yh5pGcitUJjxGCfpgLknzn_9pBxK2iBoHXz8jXmtQyY,37911
473
474
  app_kit/features/taxon_profiles/tests/__pycache__/test_views.cpython-311.pyc,sha256=LP0Ax_996RBcO7iKOAXLfuPYBkescBUMQage7UNx6eU,94047
474
- app_kit/features/taxon_profiles/tests/__pycache__/test_views.cpython-313.pyc,sha256=FmqIpsndhvVZGjERCEtwMdTlBIp6f4d-V2KUB_2dC3A,120478
475
+ app_kit/features/taxon_profiles/tests/__pycache__/test_views.cpython-313.pyc,sha256=v10_fLVPmVHlQusn-wEobwC5JstZLzfnevMJB7k9VkI,124656
475
476
  app_kit/features/taxon_profiles/tests/__pycache__/test_zip_import.cpython-313.pyc,sha256=nfMAbWoVuc43-Gn2dHkmGbvu1J0mppy_9X82vXDUsGw,35276
476
- app_kit/locale/de/LC_MESSAGES/django.mo,sha256=fTw3rJS1tD_Gb6tThtkn3Eg1WU-pb8H_-zsR2dFFB8k,88242
477
- app_kit/locale/de/LC_MESSAGES/django.po,sha256=iMFizpMmxDUXl8msXPxPrc71uzs66xmiVi87Aj_hsBU,175656
477
+ app_kit/locale/de/LC_MESSAGES/django.mo,sha256=tSX2dudjFlnL9Vgr8ueLZQ3AxyAzFR6vQtkSRTd3FTs,89194
478
+ app_kit/locale/de/LC_MESSAGES/django.po,sha256=4gLbkP8aCbPWx4stAUFce2OadMQtk_CcNnXdE8MMXnQ,179096
478
479
  app_kit/locale/en/LC_MESSAGES/django.mo,sha256=N1pb17IfLd0ASiKO8d68-B4ygSpDkhKOCs8YTzMXQo0,380
479
480
  app_kit/locale/en/LC_MESSAGES/django.po,sha256=jhD_BqtvCqoH-3NeWsLZy9v4DJ3vGYt1U3M6vpOU-FU,94673
480
481
  app_kit/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1751,7 +1752,7 @@ app_kit/taxonomy/admin.py,sha256=suMo4x8I3JBxAFBVIdE-5qnqZ6JAZV0FESABHOSc-vg,63
1751
1752
  app_kit/taxonomy/apps.py,sha256=Obl-J7-a-DsyR-zPYwVfzZh-NFXFVEOiQmKBXldPsRA,149
1752
1753
  app_kit/taxonomy/fields.py,sha256=JrI4Q-3WskNUZ955N0Ryb38RO8VPHUAzol0LZha92Xw,208
1753
1754
  app_kit/taxonomy/forms.py,sha256=qc9WoxhxINL-wseHTF3nhoRovuI-3X2eOPKhgX1RRWc,1621
1754
- app_kit/taxonomy/lazy.py,sha256=AYdGBMeic2m6ok_Nc7ucQDs8XNevJzYgQUDSJl_GdN0,15496
1755
+ app_kit/taxonomy/lazy.py,sha256=b1wzHAKj7Ab16D5ZU0xsNLWNH37-WSqa_9FcahDH-AE,15664
1755
1756
  app_kit/taxonomy/models.py,sha256=3d5RCnD3OdcnEkGaXhP_HvCBCEz20tq2qWbuBOyYV2M,10375
1756
1757
  app_kit/taxonomy/signals.py,sha256=FZHsEUkWN0h7rQN22e8I8MTeP6HfBAzChBTko2PQEHE,1193
1757
1758
  app_kit/taxonomy/urls.py,sha256=q7kE4C7cvgnKH40cUJ1q26MeuAmS7w5fFIJfQiIAgTo,668
@@ -1822,9 +1823,10 @@ app_kit/templates/app_kit/base.html,sha256=TrrkrMPcuPTN0ynBP7-EHBZqc-Zdi6_zuiWxz
1822
1823
  app_kit/templates/app_kit/build_app.html,sha256=uveR0NpQcRC4Vo8yLHMAhmnKMi1F1hg4VRyd9DKz4NQ,14106
1823
1824
  app_kit/templates/app_kit/content_images.html,sha256=lStH3sxMjY6Gp3aa8knLayGXANJEz7chW4ALcs-8vWI,164
1824
1825
  app_kit/templates/app_kit/home.html,sha256=G4yt7BPIjjWXwj6TGRRazEhq05XYLYP5ZFRjmSgBxGA,239
1826
+ app_kit/templates/app_kit/list_images_and_licences.html,sha256=SQ4nsl3BfXN9X8vfeQzDGy5Bfh2nHyTIIbY6ba_SB4c,573
1825
1827
  app_kit/templates/app_kit/list_manage_apps.html,sha256=XhKq2uv1haG3XPtzMbElHfLwiiKw2aUUAnco803uV28,789
1826
1828
  app_kit/templates/app_kit/list_manage_generic_content.html,sha256=VL6-JgwiGWTzTAA7Lv9pJV8u_bcNu2Hg1zFyXHY9fFI,751
1827
- app_kit/templates/app_kit/manage_app.html,sha256=yInlZ8n-RlzSpV2Agvf3MtSjlbiudmuv-ri4gO_Tdvw,2959
1829
+ app_kit/templates/app_kit/manage_app.html,sha256=g6YLwoqNvRo49TNEr0zjVIMXQO3RNWBnSOtZ9-rD6t0,3260
1828
1830
  app_kit/templates/app_kit/manage_app_design.html,sha256=TSDF1vbn31MmBzmV1VnLDpOnHPDMELXKSPZuSo1GK6Q,374
1829
1831
  app_kit/templates/app_kit/manage_generic_content.html,sha256=P6DxKyspU0AJdCKdUjXMEYw4frh_VfE_KJziWYUxKN0,3987
1830
1832
  app_kit/templates/app_kit/start_new_app.html,sha256=MQgQbnOwiaBgyv0JpeHXil1OC9khcDcNtf9CvykTYr8,835
@@ -1854,8 +1856,10 @@ app_kit/templates/app_kit/ajax/external_media_list.html,sha256=1csYZaJohYC8TgyLl
1854
1856
  app_kit/templates/app_kit/ajax/form_extended_with_content_image.html,sha256=BO8TbrN3fWWCqkIZXFGuT6x-tamcy9NqKGXBnWmh1Ok,479
1855
1857
  app_kit/templates/app_kit/ajax/get_content_image_suggestions.html,sha256=u4LssjM3wwDZTceUPBbXgiJewc0v8TBLvdvKu_5ir8w,1087
1856
1858
  app_kit/templates/app_kit/ajax/get_translation.html,sha256=XGWLLrBLqB6U4LvbsL1nh2gKjl3WD2NzqUES2GeCrYE,479
1859
+ app_kit/templates/app_kit/ajax/list_images_and_licences_content.html,sha256=S9L5QSrqfsCQb9JrojpuBGiPtv8nObgtobID1kAP74w,1998
1857
1860
  app_kit/templates/app_kit/ajax/localized_content_image_form.html,sha256=H0a3F53LbaSVluuavgYwT6OUgg8ivpETFpS-OnUOFCI,1332
1858
1861
  app_kit/templates/app_kit/ajax/manage_app_languages.html,sha256=IpRKVlWA2hJFIgAqn5RuFuiNoFbAs_AnUCpLao-b9w8,1361
1862
+ app_kit/templates/app_kit/ajax/manage_content_licence.html,sha256=9fFnKlZuqjZPqCc_2gIToOB5Jrr6o1C2rvPMrz4OLHY,541
1859
1863
  app_kit/templates/app_kit/ajax/manage_external_media.html,sha256=vcyN04Fwfb9v6mMybGj-ch_xykIaDJOIdUjrpO12js0,1316
1860
1864
  app_kit/templates/app_kit/ajax/manage_feature.html,sha256=h9E8BMcGesqNsZAVyH2oPSqpSCYr_A_zeSwjuwF_jaM,1792
1861
1865
  app_kit/templates/app_kit/ajax/manage_object_order.html,sha256=hNPSA7fzDtWK8kVz1oB04sPoS7Bx8C0cAXCWe0KtOYM,1733
@@ -1876,7 +1880,7 @@ app_kit/templates/app_kit/legal/privacy_statement.html,sha256=2kcInnplDScckKSxE5
1876
1880
  app_kit/templates/app_kit/scripts/deepl_translation_script.html,sha256=JfXDsl0WeFMuXBAVJk7pSM9KHJ43pCPKbUXnBTeD3mI,3180
1877
1881
  app_kit/templates/app_kit/snippets/ckeditor_js_snippet.html,sha256=7GFVjVHJ2z_lRNJlglze64cSx099HypePeLklMKtAmk,1394
1878
1882
  app_kit/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1879
- app_kit/templatetags/app_tags.py,sha256=6GWxHWEpMeeTE2Nh2Xnfh3eGzJr6HxySyAZbBh7ft2k,8909
1883
+ app_kit/templatetags/app_tags.py,sha256=yPL6QeWKsS0KlMUczW1XoHqWyGs436UUdK3GdtFcf9Y,9569
1880
1884
  app_kit/tests/cases.py,sha256=OGjZnENc5aIxPB0T2LxZagCD87om0hImU-aDF5WlBU8,2693
1881
1885
  app_kit/tests/common.py,sha256=KxGYN73HxNPyMrJxelXsN0NA5btQkleWoqTu87jUue8,12293
1882
1886
  app_kit/tests/mixins.py,sha256=K0iR7WSgPOKj3nFRDrm6b61EztaRcdunLlf4pEWshVw,18210
@@ -1930,8 +1934,8 @@ app_kit/tests/__pycache__/test_models.cpython-313.pyc,sha256=Lmv3BfjLs5Fg-olJeMl
1930
1934
  app_kit/tests/__pycache__/test_utils.cpython-313.pyc,sha256=GX3REqZygi2eO_A2F2_KtYi7hg54X5QPtCTCGWuxGpM,14054
1931
1935
  app_kit/tests/__pycache__/test_views.cpython-311.pyc,sha256=NDJR40TcMm-bXXC-wV7OgH1sGR3N7psSWYiUirkkrjU,133242
1932
1936
  app_kit/tests/__pycache__/test_views.cpython-313.pyc,sha256=q851UqIZFCCTfQb1lF4SVxV1j_Vu1hJdOlpckmrGX28,125363
1933
- localcosmos_app_kit-0.9.15.dist-info/licenses/LICENCE,sha256=VnxALPSxXoU59rlNeRdJtwS_nU79IFpVWsZZCQUM4Mw,1086
1934
- localcosmos_app_kit-0.9.15.dist-info/METADATA,sha256=yDdxYGcyPAUgA12vpp3qdL34v-GuRD7b5KXUXFA-9UQ,1388
1935
- localcosmos_app_kit-0.9.15.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1936
- localcosmos_app_kit-0.9.15.dist-info/top_level.txt,sha256=F6H4pEBkCvUR_iwQHIy4K1iby-jzfWg3CTym5XJKeys,8
1937
- localcosmos_app_kit-0.9.15.dist-info/RECORD,,
1937
+ localcosmos_app_kit-0.9.16.dist-info/licenses/LICENCE,sha256=VnxALPSxXoU59rlNeRdJtwS_nU79IFpVWsZZCQUM4Mw,1086
1938
+ localcosmos_app_kit-0.9.16.dist-info/METADATA,sha256=dFda2jrSES7m8CBqR8DaaQnUQIfY-n_-Jseazqzr--Y,1388
1939
+ localcosmos_app_kit-0.9.16.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
1940
+ localcosmos_app_kit-0.9.16.dist-info/top_level.txt,sha256=F6H4pEBkCvUR_iwQHIy4K1iby-jzfWg3CTym5XJKeys,8
1941
+ localcosmos_app_kit-0.9.16.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5