diff options
Diffstat (limited to 'pydis_site/apps')
| -rw-r--r-- | pydis_site/apps/api/admin.py | 31 | ||||
| -rw-r--r-- | pydis_site/apps/api/models/log_entry.py | 13 | ||||
| -rw-r--r-- | pydis_site/apps/api/tests/test_models.py | 40 | 
3 files changed, 73 insertions, 11 deletions
diff --git a/pydis_site/apps/api/admin.py b/pydis_site/apps/api/admin.py index c3784317..2c41d624 100644 --- a/pydis_site/apps/api/admin.py +++ b/pydis_site/apps/api/admin.py @@ -1,18 +1,39 @@  from django.contrib import admin  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.""" + +    readonly_fields = ( +        'application', +        'logger_name', +        'timestamp', +        'level', +        'module', +        'line', +        'message' +    ) + +  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/models/log_entry.py b/pydis_site/apps/api/models/log_entry.py index acd7953a..55a022d7 100644 --- a/pydis_site/apps/api/models/log_entry.py +++ b/pydis_site/apps/api/models/log_entry.py @@ -1,9 +1,15 @@ +import textwrap +  from django.db import models  from django.utils import timezone  from pydis_site.apps.api.models.utils import ModelReprMixin +# Used to shorten the timestamp length in the Django Admin. +TIMESTAMP_WITH_SECONDS_LENGTH = len('YYYY-MM-DD HH:MM:SS') + +  class LogEntry(ModelReprMixin, models.Model):      """A log entry generated by one of the PyDis applications.""" @@ -48,3 +54,10 @@ class LogEntry(ModelReprMixin, models.Model):      message = models.TextField(          help_text="The textual content of the log line."      ) + +    def __str__(self) -> str: +        timestamp = str(self.timestamp)[:TIMESTAMP_WITH_SECONDS_LENGTH] +        message = textwrap.shorten(self.message, width=140) +        level = self.level[:4].upper() + +        return f'{timestamp} | {self.application} | {level} | {message}' diff --git a/pydis_site/apps/api/tests/test_models.py b/pydis_site/apps/api/tests/test_models.py index 2120b056..6011ba21 100644 --- a/pydis_site/apps/api/tests/test_models.py +++ b/pydis_site/apps/api/tests/test_models.py @@ -1,13 +1,21 @@ -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, DocumentationLink, -    Infraction, Message, -    MessageDeletionContext, ModelReprMixin, -    OffTopicChannelName, Reminder, -    Role, Tag, User +    DeletedMessage, +    DocumentationLink, +    Infraction, +    LogEntry, +    Message, +    MessageDeletionContext, +    ModelReprMixin, +    OffTopicChannelName, +    Reminder, +    Role, +    Tag, +    User  ) @@ -25,6 +33,26 @@ class ReprMixinTests(SimpleTestCase):          self.assertEqual(repr(self.klass), expected) +class LogEntryStringDunderTests(SimpleTestCase): +    def setUp(self): +        self.entry = LogEntry( +            application='bot', +            logger_name='bot.rules.antispam', +            timestamp=timezone.now(), +            level='debug', +            module='bot.rules.antispam', +            line=44, +            message="One day computers might become useful." +        ) + +    def test_str_shows_content(self): +        tokens = str(self.entry).split(' | ') +        _timestamp, app, level, message = tokens +        self.assertEqual(app, 'bot') +        self.assertEqual(level, 'DEBU'), +        self.assertEqual(message, "One day computers might become useful.") + +  class StringDunderMethodTests(SimpleTestCase):      def setUp(self):          self.objects = (  |