From 9ed89ee32093404a2dd0c65707538b92a88db12b Mon Sep 17 00:00:00 2001 From: Jennifer Richards Date: Mon, 20 Oct 2025 16:38:46 -0300 Subject: [PATCH 1/2] refactor: move ResolvedMaterial to blobdb app --- ietf/blobdb/admin.py | 11 +++++++++- .../migrations/0002_resolvedmaterial.py} | 2 +- ietf/blobdb/models.py | 20 +++++++++++++++++++ ietf/meeting/admin.py | 14 +------------ ietf/meeting/models.py | 20 ------------------- ietf/meeting/resources.py | 19 +----------------- ietf/meeting/utils.py | 2 +- ietf/meeting/views.py | 3 ++- 8 files changed, 36 insertions(+), 55 deletions(-) rename ietf/{meeting/migrations/0017_resolvedmaterial_and_more.py => blobdb/migrations/0002_resolvedmaterial.py} (95%) diff --git a/ietf/blobdb/admin.py b/ietf/blobdb/admin.py index f4cd002e07..3e1a2a311f 100644 --- a/ietf/blobdb/admin.py +++ b/ietf/blobdb/admin.py @@ -3,7 +3,7 @@ from django.db.models.functions import Length from rangefilter.filters import DateRangeQuickSelectListFilterBuilder -from .models import Blob +from .models import Blob, ResolvedMaterial @admin.register(Blob) @@ -29,3 +29,12 @@ def get_queryset(self, request): def object_size(self, instance): """Get the size of the object""" return instance.object_size # annotation added in get_queryset() + + +@admin.register(ResolvedMaterial) +class ResolvedMaterialAdmin(admin.ModelAdmin): + model = ResolvedMaterial + list_display = ["name", "meeting_number", "bucket", "blob"] + list_filter = ["meeting_number", "bucket"] + search_fields = ["name", "blob"] + ordering = ["name"] diff --git a/ietf/meeting/migrations/0017_resolvedmaterial_and_more.py b/ietf/blobdb/migrations/0002_resolvedmaterial.py similarity index 95% rename from ietf/meeting/migrations/0017_resolvedmaterial_and_more.py rename to ietf/blobdb/migrations/0002_resolvedmaterial.py index 4a46c0c3ff..2fcfdbca4c 100644 --- a/ietf/meeting/migrations/0017_resolvedmaterial_and_more.py +++ b/ietf/blobdb/migrations/0002_resolvedmaterial.py @@ -6,7 +6,7 @@ class Migration(migrations.Migration): dependencies = [ - ("meeting", "0016_alter_meeting_country_alter_meeting_time_zone"), + ("blobdb", "0001_initial"), ] operations = [ diff --git a/ietf/blobdb/models.py b/ietf/blobdb/models.py index 8f423d9f6c..fa7831f203 100644 --- a/ietf/blobdb/models.py +++ b/ietf/blobdb/models.py @@ -96,3 +96,23 @@ def _emit_blob_change_event(self, using=None): ), using=using, ) + + +class ResolvedMaterial(models.Model): + # A Document name can be 255 characters; allow this name to be a bit longer + name = models.CharField(max_length=300, help_text="Name to resolve") + meeting_number = models.CharField( + max_length=64, help_text="Meeting material is related to" + ) + bucket = models.CharField(max_length=255, help_text="Resolved bucket name") + blob = models.CharField(max_length=300, help_text="Resolved blob name") + + class Meta: + constraints = [ + models.UniqueConstraint( + fields=["name", "meeting_number"], name="unique_name_per_meeting" + ) + ] + + def __str__(self): + return f"{self.name}@{self.meeting_number} -> {self.bucket}:{self.blob}" diff --git a/ietf/meeting/admin.py b/ietf/meeting/admin.py index 248838df18..b6cb025c09 100644 --- a/ietf/meeting/admin.py +++ b/ietf/meeting/admin.py @@ -9,7 +9,7 @@ SchedTimeSessAssignment, ResourceAssociation, FloorPlan, UrlResource, SessionPresentation, ImportantDate, SlideSubmission, SchedulingEvent, BusinessConstraint, ProceedingsMaterial, MeetingHost, Registration, RegistrationTicket, - AttendanceTypeName, ResolvedMaterial) + AttendanceTypeName) class UrlResourceAdmin(admin.ModelAdmin): @@ -286,15 +286,3 @@ class RegistrationTicketAdmin(admin.ModelAdmin): def display_meeting(self, instance): return instance.registration.meeting.number display_meeting.short_description = "Meeting" # type: ignore # https://github.com/python/mypy/issues/2087 - -admin.site.register(RegistrationTicket, RegistrationTicketAdmin) - - -class ResolvedMaterialAdmin(admin.ModelAdmin): - model = ResolvedMaterial - list_display = ["name", "meeting_number", "bucket", "blob"] - list_filter = ["meeting_number", "bucket"] - search_fields = ["name", "blob"] - ordering = ["name"] - -admin.site.register(ResolvedMaterial, ResolvedMaterialAdmin) diff --git a/ietf/meeting/models.py b/ietf/meeting/models.py index c80544220b..1af553a188 100644 --- a/ietf/meeting/models.py +++ b/ietf/meeting/models.py @@ -957,26 +957,6 @@ def __str__(self): return u"%s -> %s-%s" % (self.session, self.document.name, self.rev) -class ResolvedMaterial(models.Model): - # A Document name can be 255 characters; allow this name to be a bit longer - name = models.CharField(max_length=300, help_text="Name to resolve") - meeting_number = models.CharField( - max_length=64, help_text="Meeting material is related to" - ) - bucket = models.CharField(max_length=255, help_text="Resolved bucket name") - blob = models.CharField(max_length=300, help_text="Resolved blob name") - - class Meta: - constraints = [ - models.UniqueConstraint( - fields=["name", "meeting_number"], name="unique_name_per_meeting" - ) - ] - - def __str__(self): - return f"{self.name}@{self.meeting_number} -> {self.bucket}:{self.blob}" - - constraint_cache_uses = 0 constraint_cache_initials = 0 diff --git a/ietf/meeting/resources.py b/ietf/meeting/resources.py index 57be4487b6..88562a88fe 100644 --- a/ietf/meeting/resources.py +++ b/ietf/meeting/resources.py @@ -19,7 +19,7 @@ SchedulingEvent, BusinessConstraint, ProceedingsMaterial, MeetingHost, Attended, - Registration, RegistrationTicket, ResolvedMaterial) + Registration, RegistrationTicket) from ietf.name.resources import MeetingTypeNameResource class MeetingResource(ModelResource): @@ -476,20 +476,3 @@ class Meta: "registration": ALL_WITH_RELATIONS, } api.meeting.register(RegistrationTicketResource()) - - -class ResolvedMaterialResource(ModelResource): - class Meta: - queryset = ResolvedMaterial.objects.all() - serializer = api.Serializer() - cache = SimpleCache() - #resource_name = 'resolvedmaterial' - ordering = ['id', ] - filtering = { - "id": ALL, - "name": ALL, - "meeting_number": ALL, - "bucket": ALL, - "blob": ALL, - } -api.meeting.register(ResolvedMaterialResource()) diff --git a/ietf/meeting/utils.py b/ietf/meeting/utils.py index bf56a8be73..719c604e70 100644 --- a/ietf/meeting/utils.py +++ b/ietf/meeting/utils.py @@ -41,8 +41,8 @@ Registration, Meeting, RegistrationTicket, - ResolvedMaterial, ) +from ietf.blobdb.models import ResolvedMaterial from ietf.doc.models import ( Document, State, diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index 35ec2a2f44..38696a51b9 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -71,7 +71,8 @@ from ietf.ietfauth.utils import role_required, has_role, user_is_person from ietf.mailtrigger.utils import gather_address_lists from ietf.meeting.models import Meeting, Session, Schedule, FloorPlan, \ - SessionPresentation, TimeSlot, SlideSubmission, Attended, ResolvedMaterial + SessionPresentation, TimeSlot, SlideSubmission, Attended +from ..blobdb.models import ResolvedMaterial from ietf.meeting.models import ImportantDate, SessionStatusName, SchedulingEvent, SchedTimeSessAssignment, Room, TimeSlotTypeName from ietf.meeting.models import Registration from ietf.meeting.forms import ( CustomDurationField, SwapDaysForm, SwapTimeslotsForm, ImportMinutesForm, From 487ed270a1165dc4409a26c4147ee0f987dd4d1c Mon Sep 17 00:00:00 2001 From: Jennifer Richards Date: Mon, 20 Oct 2025 16:54:03 -0300 Subject: [PATCH 2/2] fix: undo accidental removal --- ietf/meeting/admin.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ietf/meeting/admin.py b/ietf/meeting/admin.py index b6cb025c09..d886a9a4b6 100644 --- a/ietf/meeting/admin.py +++ b/ietf/meeting/admin.py @@ -286,3 +286,5 @@ class RegistrationTicketAdmin(admin.ModelAdmin): def display_meeting(self, instance): return instance.registration.meeting.number display_meeting.short_description = "Meeting" # type: ignore # https://github.com/python/mypy/issues/2087 + +admin.site.register(RegistrationTicket, RegistrationTicketAdmin)