From 9752fd8468a0f37a8831026f14e87290d0f7d211 Mon Sep 17 00:00:00 2001 From: Greg Kempe Date: Tue, 15 Oct 2024 16:29:31 +0200 Subject: [PATCH] move ratification code into peachjam --- africanlii/admin.py | 23 +----- africanlii/forms.py | 11 --- africanlii/resources.py | 75 ------------------- .../africanlii/member_state_detail.html | 2 +- .../peachjam/layouts/document_detail.html | 32 -------- peachjam/admin.py | 22 ++++++ peachjam/forms.py | 9 +++ peachjam/resources.py | 74 ++++++++++++++++++ .../peachjam}/_ratification_table.html | 0 .../templates/peachjam}/_ratifications.html | 0 .../peachjam/layouts/document_detail.html | 22 ++++++ 11 files changed, 129 insertions(+), 141 deletions(-) delete mode 100644 africanlii/resources.py delete mode 100644 africanlii/templates/peachjam/layouts/document_detail.html rename {africanlii/templates/africanlii => peachjam/templates/peachjam}/_ratification_table.html (100%) rename {africanlii/templates/africanlii => peachjam/templates/peachjam}/_ratifications.html (100%) diff --git a/africanlii/admin.py b/africanlii/admin.py index ac515a653..ff1a308de 100644 --- a/africanlii/admin.py +++ b/africanlii/admin.py @@ -1,33 +1,12 @@ -from countries_plus.models import Country from django.contrib import admin -from africanlii.forms import RatificationForm from africanlii.models import ( AfricanUnionInstitution, AfricanUnionOrgan, MemberState, RegionalEconomicCommunity, ) -from africanlii.resources import RatificationResource -from peachjam.admin import EntityProfileInline, ImportExportMixin -from peachjam.models import Ratification, RatificationCountry - - -class RatificationCountryAdmin(admin.TabularInline): - model = RatificationCountry - extra = 1 - - def formfield_for_foreignkey(self, db_field, request, **kwargs): - if db_field.name == "country": - kwargs["queryset"] = Country.objects.filter(continent="AF") - return super().formfield_for_foreignkey(db_field, request, **kwargs) - - -@admin.register(Ratification) -class RatificationAdmin(ImportExportMixin, admin.ModelAdmin): - inlines = (RatificationCountryAdmin,) - form = RatificationForm - resource_class = RatificationResource +from peachjam.admin import EntityProfileInline @admin.register(AfricanUnionOrgan) diff --git a/africanlii/forms.py b/africanlii/forms.py index 0f3505879..419593c29 100644 --- a/africanlii/forms.py +++ b/africanlii/forms.py @@ -1,8 +1,4 @@ -from dal import autocomplete -from django import forms - from peachjam.forms import BaseDocumentFilterForm -from peachjam.models import Ratification class ESDocumentFilterForm(BaseDocumentFilterForm): @@ -56,10 +52,3 @@ def filter_faceted_search(self, search): search.add_filter("jurisdiction", jurisdictions) return search - - -class RatificationForm(forms.ModelForm): - class Meta: - model = Ratification - fields = "__all__" - widgets = {"work": autocomplete.ModelSelect2(url="autocomplete-works")} diff --git a/africanlii/resources.py b/africanlii/resources.py deleted file mode 100644 index e120ff737..000000000 --- a/africanlii/resources.py +++ /dev/null @@ -1,75 +0,0 @@ -from countries_plus.models import Country -from import_export import fields, resources, widgets - -from peachjam.models import Ratification, RatificationCountry, Work - - -class RatificationField(widgets.ForeignKeyWidget): - def clean(self, value, row=None, *args, **kwargs): - if not value: - raise ValueError("work frbr_uri is required") - work = Work.objects.filter(frbr_uri=value).first() - if not work: - raise ValueError(f'work with frbr_uri "{value}" not found') - ratification = Ratification.objects.update_or_create( - work=work, - defaults={ - "source_url": row.get("source_url"), - "last_updated": row.get("last_updated"), - }, - )[0] - return ratification - - -class CountryField(widgets.ForeignKeyWidget): - def clean(self, value, row=None, *args, **kwargs): - if not value: - raise ValueError("country code is required") - country = Country.objects.filter(iso=value.upper()).first() - if not country: - raise ValueError(f'country with iso "{value}" not found') - return country - - -class RatificationResource(resources.ModelResource): - work = fields.Field( - column_name="work", - attribute="ratification", - widget=RatificationField(Ratification, field="work__frbr_uri"), - ) - country = fields.Field( - attribute="country", - column_name="country", - widget=CountryField(Country, field="name"), - ) - ratification_date = fields.Field( - attribute="ratification_date", - column_name="ratification_date", - widget=widgets.DateWidget(), - ) - deposit_date = fields.Field( - attribute="deposit_date", - column_name="deposit_date", - widget=widgets.DateWidget(), - ) - signature_date = fields.Field( - attribute="signature_date", - column_name="signature_date", - widget=widgets.DateWidget(), - ) - source_url = fields.Field( - attribute="source_url", column_name="source_url", widget=widgets.CharWidget() - ) - last_updated = fields.Field( - attribute="last_updated", - column_name="last_updated", - widget=widgets.DateWidget(), - ) - - class Meta: - model = RatificationCountry - exclude = ("id", "ratification") - import_id_fields = ( - "work", - "country", - ) diff --git a/africanlii/templates/africanlii/member_state_detail.html b/africanlii/templates/africanlii/member_state_detail.html index 4458dfff1..027a43ab2 100644 --- a/africanlii/templates/africanlii/member_state_detail.html +++ b/africanlii/templates/africanlii/member_state_detail.html @@ -35,7 +35,7 @@ {% endblock %} {% block document-table %} {% if ratification_countries %} - {% include 'africanlii/_ratification_table.html' %} + {% include 'peachjam/_ratification_table.html' %} {% else %}

{% trans 'No documents found.' %}

{% endif %} diff --git a/africanlii/templates/peachjam/layouts/document_detail.html b/africanlii/templates/peachjam/layouts/document_detail.html deleted file mode 100644 index 8bf912777..000000000 --- a/africanlii/templates/peachjam/layouts/document_detail.html +++ /dev/null @@ -1,32 +0,0 @@ -{% extends 'peachjam/layouts/document_detail.html' %} -{% load i18n %} -{% block document-tabs %} - {{ block.super }} - {% if document.work.ratification %} - - {% endif %} -{% endblock %} -{% block document-tab-panes %} - {{ block.super }} - {% if document.work.ratification %} -
-
- {% include 'africanlii/_ratifications.html' with ratification=document.work.ratification %} -
-
- {% endif %} -{% endblock %} diff --git a/peachjam/admin.py b/peachjam/admin.py index b69fa81b7..00e337a41 100644 --- a/peachjam/admin.py +++ b/peachjam/admin.py @@ -4,6 +4,7 @@ from background_task.models import Task from ckeditor.widgets import CKEditorWidget +from countries_plus.models import Country from dal import autocomplete from django import forms from django.conf import settings @@ -35,6 +36,7 @@ JudgmentUploadForm, NewDocumentFormMixin, PublicationFileForm, + RatificationForm, SourceFileForm, ) from peachjam.models import ( @@ -79,6 +81,8 @@ PeachJamSettings, Predicate, PublicationFile, + Ratification, + RatificationCountry, Relationship, SavedDocument, SourceFile, @@ -96,6 +100,7 @@ GazetteResource, GenericDocumentResource, JudgmentResource, + RatificationResource, UserResource, ) from peachjam.tasks import extract_citations as extract_citations_task @@ -1358,6 +1363,23 @@ class AttorneyAdmin(ImportExportMixin, admin.ModelAdmin): list_display = ("name", "description") +class RatificationCountryAdmin(admin.StackedInline): + model = RatificationCountry + extra = 1 + + def formfield_for_foreignkey(self, db_field, request, **kwargs): + if db_field.name == "country": + kwargs["queryset"] = Country.objects.filter(continent="AF") + return super().formfield_for_foreignkey(db_field, request, **kwargs) + + +@admin.register(Ratification) +class RatificationAdmin(ImportExportMixin, admin.ModelAdmin): + inlines = (RatificationCountryAdmin,) + form = RatificationForm + resource_class = RatificationResource + + admin.site.register( [ CitationLink, diff --git a/peachjam/forms.py b/peachjam/forms.py index 362c1069c..3ba00952d 100644 --- a/peachjam/forms.py +++ b/peachjam/forms.py @@ -2,6 +2,7 @@ from allauth.account.forms import LoginForm, SignupForm from countries_plus.models import Country +from dal import autocomplete from django import forms from django.conf import settings from django.contrib.auth import get_user_model @@ -21,6 +22,7 @@ Folder, PeachJamSettings, PublicationFile, + Ratification, SavedDocument, SourceFile, pj_settings, @@ -393,3 +395,10 @@ def __init__(self, *args, **kwargs): self.fields[ "jurisdiction" ].queryset = PeachJamSettings.load().document_jurisdictions.all() + + +class RatificationForm(forms.ModelForm): + class Meta: + model = Ratification + fields = "__all__" + widgets = {"work": autocomplete.ModelSelect2(url="autocomplete-works")} diff --git a/peachjam/resources.py b/peachjam/resources.py index d8d809873..bd8b1d1c7 100644 --- a/peachjam/resources.py +++ b/peachjam/resources.py @@ -50,8 +50,11 @@ Locality, MatterType, Outcome, + Ratification, + RatificationCountry, SourceFile, Taxonomy, + Work, citations_processor, ) from peachjam.pipelines import DOC_MIMETYPES @@ -719,3 +722,74 @@ class AttorneyResource(resources.ModelResource): class Meta: model = Attorney + + +class RatificationField(ForeignKeyWidget): + def clean(self, value, row=None, *args, **kwargs): + if not value: + raise ValueError("work frbr_uri is required") + work = Work.objects.filter(frbr_uri=value).first() + if not work: + raise ValueError(f'work with frbr_uri "{value}" not found') + ratification = Ratification.objects.update_or_create( + work=work, + defaults={ + "source_url": row.get("source_url"), + "last_updated": row.get("last_updated"), + }, + )[0] + return ratification + + +class CountryField(ForeignKeyWidget): + def clean(self, value, row=None, *args, **kwargs): + if not value: + raise ValueError("country code is required") + country = Country.objects.filter(iso=value.upper()).first() + if not country: + raise ValueError(f'country with iso "{value}" not found') + return country + + +class RatificationResource(resources.ModelResource): + work = fields.Field( + column_name="work", + attribute="ratification", + widget=RatificationField(Ratification, field="work__frbr_uri"), + ) + country = fields.Field( + attribute="country", + column_name="country", + widget=CountryField(Country, field="name"), + ) + ratification_date = fields.Field( + attribute="ratification_date", + column_name="ratification_date", + widget=DateWidget(), + ) + deposit_date = fields.Field( + attribute="deposit_date", + column_name="deposit_date", + widget=DateWidget(), + ) + signature_date = fields.Field( + attribute="signature_date", + column_name="signature_date", + widget=DateWidget(), + ) + source_url = fields.Field( + attribute="source_url", column_name="source_url", widget=CharWidget() + ) + last_updated = fields.Field( + attribute="last_updated", + column_name="last_updated", + widget=DateWidget(), + ) + + class Meta: + model = RatificationCountry + exclude = ("id", "ratification") + import_id_fields = ( + "work", + "country", + ) diff --git a/africanlii/templates/africanlii/_ratification_table.html b/peachjam/templates/peachjam/_ratification_table.html similarity index 100% rename from africanlii/templates/africanlii/_ratification_table.html rename to peachjam/templates/peachjam/_ratification_table.html diff --git a/africanlii/templates/africanlii/_ratifications.html b/peachjam/templates/peachjam/_ratifications.html similarity index 100% rename from africanlii/templates/africanlii/_ratifications.html rename to peachjam/templates/peachjam/_ratifications.html diff --git a/peachjam/templates/peachjam/layouts/document_detail.html b/peachjam/templates/peachjam/layouts/document_detail.html index 0ef88bf56..f31959788 100644 --- a/peachjam/templates/peachjam/layouts/document_detail.html +++ b/peachjam/templates/peachjam/layouts/document_detail.html @@ -128,6 +128,20 @@

{{ document.title }}

{% endif %} + {% if document.work.ratification %} + + {% endif %} {% endblock %} @@ -442,6 +456,14 @@
{% include 'peachjam/_case_histories.html' %}
{% endif %} + {% if document.work.ratification %} +
+
{% include 'peachjam/_ratifications.html' with ratification=document.work.ratification %}
+
+ {% endif %} {% endblock %} {% if perms.peachjam.add_relationship %}{{ predicates_json|json_script:"predicates" }}{% endif %}