aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Mark <[email protected]>2019-10-11 13:00:45 -0700
committerGravatar GitHub <[email protected]>2019-10-11 13:00:45 -0700
commit7278f754b9080e1e0e51ad4477040346641785d8 (patch)
treef79cef7544facdbfb3abcdfe3183096a4fd8a7ac
parentMerge pull request #269 from python-discord/migrate-nominations-to-nomination... (diff)
parentDeny manual `LogEntry` creation. (diff)
Merge pull request #281 from python-discord/simple-admin-log-entry-view
Allow viewing log entries in the Django Admin.
-rw-r--r--pydis_site/apps/api/admin.py55
-rw-r--r--pydis_site/apps/api/migrations/0045_add_plural_name_for_log_entry.py17
-rw-r--r--pydis_site/apps/api/models/log_entry.py5
-rw-r--r--pydis_site/apps/api/tests/test_models.py3
4 files changed, 74 insertions, 6 deletions
diff --git a/pydis_site/apps/api/admin.py b/pydis_site/apps/api/admin.py
index c3784317..059f52eb 100644
--- a/pydis_site/apps/api/admin.py
+++ b/pydis_site/apps/api/admin.py
@@ -1,18 +1,63 @@
+from typing import Optional
+
from django.contrib import admin
+from django.http import HttpRequest
from .models import (
- BotSetting, DeletedMessage,
- DocumentationLink, Infraction,
- MessageDeletionContext, Nomination,
- OffTopicChannelName, Role,
- Tag, User
+ BotSetting,
+ DeletedMessage,
+ DocumentationLink,
+ Infraction,
+ LogEntry,
+ MessageDeletionContext,
+ Nomination,
+ OffTopicChannelName,
+ Role,
+ Tag,
+ User
)
+class LogEntryAdmin(admin.ModelAdmin):
+ """Allows viewing logs in the Django Admin without allowing edits."""
+
+ actions = None
+ list_display = ('timestamp', 'application', 'level', 'message')
+ fieldsets = (
+ ('Overview', {'fields': ('timestamp', 'application', 'logger_name')}),
+ ('Metadata', {'fields': ('level', 'module', 'line')}),
+ ('Contents', {'fields': ('message',)})
+ )
+ list_filter = ('application', 'level', 'timestamp')
+ search_fields = ('message',)
+ readonly_fields = (
+ 'application',
+ 'logger_name',
+ 'timestamp',
+ 'level',
+ 'module',
+ 'line',
+ 'message'
+ )
+
+ def has_add_permission(self, request: HttpRequest) -> bool:
+ """Deny manual LogEntry creation."""
+ return False
+
+ def has_delete_permission(
+ self,
+ request: HttpRequest,
+ obj: Optional[LogEntry] = None
+ ) -> bool:
+ """Deny LogEntry deletion."""
+ return False
+
+
admin.site.register(BotSetting)
admin.site.register(DeletedMessage)
admin.site.register(DocumentationLink)
admin.site.register(Infraction)
+admin.site.register(LogEntry, LogEntryAdmin)
admin.site.register(MessageDeletionContext)
admin.site.register(Nomination)
admin.site.register(OffTopicChannelName)
diff --git a/pydis_site/apps/api/migrations/0045_add_plural_name_for_log_entry.py b/pydis_site/apps/api/migrations/0045_add_plural_name_for_log_entry.py
new file mode 100644
index 00000000..6b9933d8
--- /dev/null
+++ b/pydis_site/apps/api/migrations/0045_add_plural_name_for_log_entry.py
@@ -0,0 +1,17 @@
+# Generated by Django 2.2.3 on 2019-10-11 17:48
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('api', '0044_migrate_nominations_from_infraction_to_nomination_model'),
+ ]
+
+ operations = [
+ migrations.AlterModelOptions(
+ name='logentry',
+ options={'verbose_name_plural': 'Log entries'},
+ ),
+ ]
diff --git a/pydis_site/apps/api/models/log_entry.py b/pydis_site/apps/api/models/log_entry.py
index acd7953a..488af48e 100644
--- a/pydis_site/apps/api/models/log_entry.py
+++ b/pydis_site/apps/api/models/log_entry.py
@@ -48,3 +48,8 @@ class LogEntry(ModelReprMixin, models.Model):
message = models.TextField(
help_text="The textual content of the log line."
)
+
+ class Meta:
+ """Customizes the default generated plural name to valid English."""
+
+ verbose_name_plural = 'Log entries'
diff --git a/pydis_site/apps/api/tests/test_models.py b/pydis_site/apps/api/tests/test_models.py
index aaf12045..bce76942 100644
--- a/pydis_site/apps/api/tests/test_models.py
+++ b/pydis_site/apps/api/tests/test_models.py
@@ -1,6 +1,7 @@
-from datetime import datetime as dt, timezone
+from datetime import datetime as dt
from django.test import SimpleTestCase
+from django.utils import timezone
from ..models import (
DeletedMessage,