forked from ietf-tools/datatracker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathadmin.py
More file actions
58 lines (50 loc) · 1.99 KB
/
admin.py
File metadata and controls
58 lines (50 loc) · 1.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# Copyright The IETF Trust 2025-2026, All Rights Reserved
from django.contrib import admin
from django.db.models import QuerySet
from django.db.models.functions import Length
from rangefilter.filters import DateRangeQuickSelectListFilterBuilder
from .apps import get_blobdb
from .models import Blob, ResolvedMaterial
from .utils import queue_for_replication
@admin.register(Blob)
class BlobAdmin(admin.ModelAdmin):
list_display = ["bucket", "name", "object_size", "modified", "mtime", "content_type"]
list_filter = [
"bucket",
"content_type",
("modified", DateRangeQuickSelectListFilterBuilder()),
("mtime", DateRangeQuickSelectListFilterBuilder()),
]
search_fields = ["name"]
list_display_links = ["name"]
actions = ["replicate_blob"]
def get_queryset(self, request):
return (
super().get_queryset(request)
.defer("content") # don't load this unless we want it
.annotate(object_size=Length("content")) # accessed via object_size()
)
@admin.display(ordering="object_size")
def object_size(self, instance):
"""Get the size of the object"""
return instance.object_size # annotation added in get_queryset()
@admin.action(description="Replicate blobs")
def replicate_blob(self, request, queryset: QuerySet[Blob]):
blob_count = 0
for blob in queryset.all():
if isinstance(blob, Blob):
queue_for_replication(
bucket=blob.bucket, name=blob.name, using=get_blobdb()
)
blob_count += 1
self.message_user(
request,
f"Queued replication of a total of {blob_count} Blob(s)",
)
@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"]