from __future__ import annotations from django.contrib import admin from control_plane.authoring.models import ( BookRun, BookStateVersion, SceneContextCitation, SceneIdeation, Series, SourceDocument, SourceDocumentVersion, SourcePassage, StandaloneScene, Work, ) @admin.register(Series) class SeriesAdmin(admin.ModelAdmin): list_display = ("title", "slug", "updated_at") search_fields = ("title", "slug") @admin.register(Work) class WorkAdmin(admin.ModelAdmin): list_display = ( "title", "series", "work_type", "sequence", "current_book_state", "updated_at", ) list_filter = ("work_type", "series") search_fields = ("title", "slug", "series__title") class SourceDocumentVersionInline(admin.TabularInline): model = SourceDocumentVersion fields = ("version", "authority", "source_path", "source_sha256", "created_at") readonly_fields = fields extra = 0 show_change_link = True @admin.register(SourceDocument) class SourceDocumentAdmin(admin.ModelAdmin): list_display = ("title", "work", "document_type", "logical_key", "updated_at") list_filter = ("document_type", "work__series", "work") search_fields = ("title", "logical_key", "work__title") inlines = (SourceDocumentVersionInline,) def get_readonly_fields(self, request, obj=None): return tuple(field.name for field in self.model._meta.fields) def has_add_permission(self, request): return False def has_delete_permission(self, request, obj=None): return False @admin.register(SourceDocumentVersion) class SourceDocumentVersionAdmin(admin.ModelAdmin): list_display = ("document", "version", "authority", "byte_size", "created_at") list_filter = ("authority", "document__document_type", "document__work") search_fields = ("document__title", "document__logical_key", "source_path", "source_sha256") def get_readonly_fields(self, request, obj=None): return tuple(field.name for field in self.model._meta.fields) def has_add_permission(self, request): return False def has_delete_permission(self, request, obj=None): return False @admin.register(SourcePassage) class SourcePassageAdmin(admin.ModelAdmin): list_display = ("document_version", "ordinal", "start_line", "end_line", "sha256") search_fields = ("content", "document_version__document__logical_key") def get_readonly_fields(self, request, obj=None): return tuple(field.name for field in self.model._meta.fields) def has_add_permission(self, request): return False def has_delete_permission(self, request, obj=None): return False class SceneContextCitationInline(admin.TabularInline): model = SceneContextCitation fields = ("rank", "passage", "score", "reason") readonly_fields = fields extra = 0 @admin.register(StandaloneScene) class StandaloneSceneAdmin(admin.ModelAdmin): list_display = ( "title", "work", "book_state", "book_chapter_key", "revision", "status", "target_words", "word_count", "updated_at", ) list_filter = ("status", "work__series", "work") search_fields = ("title", "scene_key", "brief", "prose") inlines = (SceneContextCitationInline,) def get_readonly_fields(self, request, obj=None): return tuple(field.name for field in self.model._meta.fields) def has_add_permission(self, request): return False def has_delete_permission(self, request, obj=None): return False @admin.register(SceneIdeation) class SceneIdeationAdmin(admin.ModelAdmin): list_display = ( "work", "book_state", "target_book", "candidate_count", "context_pack_sha256", "created_at", ) list_filter = ("work__series", "work") search_fields = ("target_book", "focus", "work__title") def get_readonly_fields(self, request, obj=None): return tuple(field.name for field in self.model._meta.fields) def has_add_permission(self, request): return False def has_delete_permission(self, request, obj=None): return False @admin.register(BookStateVersion) class BookStateVersionAdmin(admin.ModelAdmin): list_display = ("work", "version", "status", "sha256", "created_at") list_filter = ("status", "work__series", "work") search_fields = ("work__title", "sha256", "approved_by") def get_readonly_fields(self, request, obj=None): return tuple(field.name for field in self.model._meta.fields) def has_add_permission(self, request): return False def has_delete_permission(self, request, obj=None): return False @admin.register(BookRun) class BookRunAdmin(admin.ModelAdmin): list_display = ( "book_state", "status", "current_chapter_key", "started_at", "finished_at", "updated_at", ) list_filter = ("status", "book_state__work") search_fields = ("book_state__work__title", "current_chapter_key", "failure_reason") def get_readonly_fields(self, request, obj=None): return tuple(field.name for field in self.model._meta.fields) def has_add_permission(self, request): return False def has_delete_permission(self, request, obj=None): return False