Skip to content

Commit

Permalink
move ratification code into peachjam
Browse files Browse the repository at this point in the history
  • Loading branch information
longhotsummer committed Oct 15, 2024
1 parent 058050f commit 9752fd8
Show file tree
Hide file tree
Showing 11 changed files with 129 additions and 141 deletions.
23 changes: 1 addition & 22 deletions africanlii/admin.py
Original file line number Diff line number Diff line change
@@ -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)
Expand Down
11 changes: 0 additions & 11 deletions africanlii/forms.py
Original file line number Diff line number Diff line change
@@ -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):
Expand Down Expand Up @@ -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")}
75 changes: 0 additions & 75 deletions africanlii/resources.py

This file was deleted.

2 changes: 1 addition & 1 deletion africanlii/templates/africanlii/member_state_detail.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
{% endblock %}
{% block document-table %}
{% if ratification_countries %}
{% include 'africanlii/_ratification_table.html' %}
{% include 'peachjam/_ratification_table.html' %}
{% else %}
<p>{% trans 'No documents found.' %}</p>
{% endif %}
Expand Down
32 changes: 0 additions & 32 deletions africanlii/templates/peachjam/layouts/document_detail.html

This file was deleted.

22 changes: 22 additions & 0 deletions peachjam/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -35,6 +36,7 @@
JudgmentUploadForm,
NewDocumentFormMixin,
PublicationFileForm,
RatificationForm,
SourceFileForm,
)
from peachjam.models import (
Expand Down Expand Up @@ -79,6 +81,8 @@
PeachJamSettings,
Predicate,
PublicationFile,
Ratification,
RatificationCountry,
Relationship,
SavedDocument,
SourceFile,
Expand All @@ -96,6 +100,7 @@
GazetteResource,
GenericDocumentResource,
JudgmentResource,
RatificationResource,
UserResource,
)
from peachjam.tasks import extract_citations as extract_citations_task
Expand Down Expand Up @@ -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,
Expand Down
9 changes: 9 additions & 0 deletions peachjam/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -21,6 +22,7 @@
Folder,
PeachJamSettings,
PublicationFile,
Ratification,
SavedDocument,
SourceFile,
pj_settings,
Expand Down Expand Up @@ -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")}
74 changes: 74 additions & 0 deletions peachjam/resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,11 @@
Locality,
MatterType,
Outcome,
Ratification,
RatificationCountry,
SourceFile,
Taxonomy,
Work,
citations_processor,
)
from peachjam.pipelines import DOC_MIMETYPES
Expand Down Expand Up @@ -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",
)
22 changes: 22 additions & 0 deletions peachjam/templates/peachjam/layouts/document_detail.html
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,20 @@ <h1>{{ document.title }}</h1>
</button>
</li>
{% endif %}
{% if document.work.ratification %}
<li class="nav-item" role="presentation">
<button class="nav-link"
data-bs-toggle="tab"
data-bs-target="#ratifications-tab"
type="button"
role="tab"
aria-controls="ratifications-tab"
aria-selected="false">
{% trans "Ratifications" %}
<span class="badge bg-secondary">{{ document.work.ratification.n_ratified }}</span>
</button>
</li>
{% endif %}
{% endblock %}
</ul>
</div>
Expand Down Expand Up @@ -442,6 +456,14 @@ <h5>
<div class="container">{% include 'peachjam/_case_histories.html' %}</div>
</div>
{% endif %}
{% if document.work.ratification %}
<div class="tab-pane fade"
id="ratifications-tab"
role="tabpanel"
aria-labelledby="ratifications-tab">
<div class="container">{% include 'peachjam/_ratifications.html' with ratification=document.work.ratification %}</div>
</div>
{% endif %}
{% endblock %}
</div>
{% if perms.peachjam.add_relationship %}{{ predicates_json|json_script:"predicates" }}{% endif %}
Expand Down

0 comments on commit 9752fd8

Please sign in to comment.