Files
VacatureRadar/apps/sources/admin.py
2026-07-22 05:12:07 +02:00

105 lines
3.2 KiB
Python

from django.contrib import admin
from .models import (
EmailMessageRecord,
MailboxConnection,
RawDocument,
Source,
SourceLease,
SourceOriginState,
SourcePolicyReview,
SourceRobotsCache,
SourceRun,
)
@admin.register(MailboxConnection)
class MailboxConnectionAdmin(admin.ModelAdmin):
list_display = (
"platform",
"provider",
"username",
"enabled",
"poll_interval_minutes",
"last_success_at",
"next_poll_at",
)
list_filter = ("platform", "provider", "enabled")
search_fields = ("username",)
exclude = ("encrypted_password", "lease_token")
@admin.register(Source)
class SourceAdmin(admin.ModelAdmin):
list_display = (
"name",
"domain",
"source_type",
"status",
"policy",
"last_success_at",
"failure_count",
"next_run_at",
)
list_filter = ("source_type", "status", "policy", "strict_mode")
search_fields = ("name", "domain", "base_url")
@admin.register(SourceRun)
class SourceRunAdmin(admin.ModelAdmin):
list_display = ("source", "status", "started_at", "finished_at", "extracted_count")
list_filter = ("status", "error_category")
readonly_fields = [field.name for field in SourceRun._meta.fields]
@admin.register(SourcePolicyReview)
class SourcePolicyReviewAdmin(admin.ModelAdmin):
list_display = (
"source",
"decision",
"scope",
"actor",
"expires_at",
"created_at",
)
list_filter = ("decision", "scope", "expires_at")
search_fields = ("source__name", "source__domain", "actor__username", "reason")
readonly_fields = [field.name for field in SourcePolicyReview._meta.fields]
@admin.register(SourceRobotsCache)
class SourceRobotsCacheAdmin(admin.ModelAdmin):
list_display = ("origin", "expires_at", "byte_length", "updated_at", "error")
list_filter = ("error",)
search_fields = ("origin",)
readonly_fields = [field.name for field in SourceRobotsCache._meta.fields]
@admin.register(SourceLease)
class SourceLeaseAdmin(admin.ModelAdmin):
list_display = ("source", "token", "worker_id", "expires_at", "updated_at")
search_fields = ("source__name", "source__domain", "worker_id")
readonly_fields = [field.name for field in SourceLease._meta.fields]
@admin.register(SourceOriginState)
class SourceOriginStateAdmin(admin.ModelAdmin):
list_display = ("domain", "next_allowed_at", "updated_at")
search_fields = ("domain",)
readonly_fields = [field.name for field in SourceOriginState._meta.fields]
@admin.register(RawDocument)
class RawDocumentAdmin(admin.ModelAdmin):
list_display = ("source", "kind", "http_status", "byte_length", "quarantined", "created_at")
list_filter = ("kind", "quarantined", "http_status")
search_fields = ("url", "final_url", "content_hash")
readonly_fields = [field.name for field in RawDocument._meta.fields]
@admin.register(EmailMessageRecord)
class EmailMessageRecordAdmin(admin.ModelAdmin):
list_display = ("subject", "sender", "received_at", "processed", "created_at")
list_filter = ("processed", "mailbox")
search_fields = ("subject", "sender", "message_id")