""" Custom AdminSite for OpenClaw — adds Daily Report to sidebar. """ from django.contrib.admin import AdminSite from django.contrib.admin.sites import AdminSite from django.urls import path from openclaw.admin_new_views import daily_report_list_view, daily_report_detail_view class OpenClawAdminSite(AdminSite): site_header = "OpenClaw Archive" site_title = "OpenClaw Admin" index_title = "Agent Sessions" def get_urls(self): urls = super().get_urls() custom_urls = [ path( "daily/", self.admin_view(daily_report_list_view), name="openclaw_daily", ), path( "daily-reports/", self.admin_view(daily_report_list_view), name="openclaw_daily_reports", ), path( "daily-reports//--/", self.admin_view(daily_report_detail_view), name="openclaw_daily_report_detail", ), ] return custom_urls + urls def get_app_list(self, request, app_label=None): """ Inject 'Daily Reports' as a sidebar app item, before the OpenClaw app. """ app_list = super().get_app_list(request, app_label) # Our custom item to inject daily_reports_item = { "name": "Daily Reports", "app_label": "openclaw_daily", "app_url": "/admin/daily-reports/", "models": [ { "name": "Daily Reports", "object_name": "DailyReports", "admin_url": "/admin/daily-reports/", "view_only": True, }, ], } # Insert at the top of the app list app_list.insert(0, daily_reports_item) return app_list openclaw_admin_site = OpenClawAdminSite(name="openclaw_admin") # Re-register models with this custom site from openclaw.admin import SessionAdmin, MessageAdmin, ToolCallAdmin from openclaw.models import Session, Message, ToolCall openclaw_admin_site.register(Session, SessionAdmin) openclaw_admin_site.register(Message, MessageAdmin) openclaw_admin_site.register(ToolCall, ToolCallAdmin)