Skip to content

Commit 833a653

Browse files
author
Agus Makmun
committed
fix: issue newline #30, implement black, add exclude pattern, etc.
1 parent be3f0ca commit 833a653

File tree

23 files changed

+497
-318
lines changed

23 files changed

+497
-318
lines changed

.github/FUNDING.yml

Lines changed: 0 additions & 5 deletions
This file was deleted.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
name: Bug report
3+
about: Create a bug report
4+
---
5+
6+
<!-- ⚠️ Please search existing issues to avoid creating duplicates. ⚠️ -->
7+
<!-- Describe the bug here. -->
8+
9+
## Details
10+
- OS (Operating System) version:
11+
- Browser and browser version:
12+
- Django version:
13+
- Log viewer version:
14+
15+
### Steps to reproduce
16+
17+
1.
18+
2.

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
blank_issues_enabled: false
2+
contact_links:
3+
- name: Question
4+
url: https://stackoverflow.com/questions/tagged/django-log-viewer
5+
about: Please ask and answer questions here.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
name: Feature request
3+
about: Suggest a feature or enhancement
4+
---
5+
6+
<!-- ⚠️ Please search existing issues to avoid creating duplicates. ⚠️ -->
7+
<!-- Describe the enhancement here. -->

.github/workflows/run-tests.yml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
name: Run tests
2+
3+
on:
4+
push:
5+
branches: [ master ]
6+
7+
pull_request:
8+
branches: [ master ]
9+
10+
jobs:
11+
build:
12+
runs-on: ${{ matrix.os }}
13+
14+
strategy:
15+
matrix:
16+
os: [ macos-latest, ubuntu-latest ]
17+
python-version: [ 3.9, "3.10" ]
18+
django-version: [ 3.1, 3.2, 4.0 ]
19+
20+
steps:
21+
- name: Install system dependencies (windows)
22+
if: matrix.os == 'windows-latest'
23+
uses: msys2/setup-msys2@v2
24+
with:
25+
update: true
26+
install: zlib
27+
28+
- uses: actions/checkout@v2.3.2
29+
30+
- name: Set up Python ${{ matrix.python-version }}
31+
uses: actions/setup-python@v2
32+
with:
33+
python-version: ${{ matrix.python-version }}
34+
35+
- name: Install dependencies
36+
run: |
37+
pip install -q Django==${{ matrix.django-version }}
38+
python -m pip install --upgrade pip
39+
python setup.py install
40+
- name: Test with pytest
41+
run: |
42+
python runtests.py

README.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ Quick start
5050
LOG_VIEWER_MAX_READ_LINES = 1000 # total log lines will be read
5151
LOG_VIEWER_FILE_LIST_MAX_ITEMS_PER_PAGE = 25 # Max log files loaded in Datatable per page
5252
LOG_VIEWER_PATTERNS = ['[INFO]', '[DEBUG]', '[WARNING]', '[ERROR]', '[CRITICAL]']
53+
LOG_VIEWER_EXCLUDE_TEXT_PATTERN = None # String regex expression to exclude the log from line
5354

5455
# Optionally you can set the next variables in order to customize the admin:
5556
LOG_VIEWER_FILE_LIST_TITLE = "Custom title"

log_viewer/locale/en/LC_MESSAGES/django.po

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ msgid ""
88
msgstr ""
99
"Project-Id-Version: PACKAGE VERSION\n"
1010
"Report-Msgid-Bugs-To: \n"
11-
"POT-Creation-Date: 2021-07-06 21:39+0700\n"
11+
"POT-Creation-Date: 2022-08-26 21:45+0700\n"
1212
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -20,34 +20,35 @@ msgstr ""
2020

2121
#: templates/log_viewer/logfile_viewer.html:3
2222
#: templates/log_viewer/logfile_viewer.html:9
23-
#: templates/log_viewer/logfile_viewer.html:35
23+
#: templates/log_viewer/logfile_viewer.html:37
2424
msgid "Django Log Viewer"
2525
msgstr ""
2626

2727
#: templates/log_viewer/logfile_viewer.html:7
2828
msgid "Home"
2929
msgstr ""
3030

31-
#: templates/log_viewer/logfile_viewer.html:37
31+
#: templates/log_viewer/logfile_viewer.html:39
3232
msgid "Download all Log Files"
3333
msgstr ""
3434

35-
#: templates/log_viewer/logfile_viewer.html:38
35+
#: templates/log_viewer/logfile_viewer.html:40
3636
msgid "Download this Log File"
3737
msgstr ""
3838

39-
#: templates/log_viewer/logfile_viewer.html:44
39+
#: templates/log_viewer/logfile_viewer.html:46
4040
msgid "No."
4141
msgstr ""
4242

43-
#: templates/log_viewer/logfile_viewer.html:45
43+
#: templates/log_viewer/logfile_viewer.html:47
4444
msgid "Log entries"
4545
msgstr ""
4646

47-
#: templates/log_viewer/logfile_viewer.html:49
47+
#: templates/log_viewer/logfile_viewer.html:51
48+
#: templates/log_viewer/logfile_viewer.html:62
4849
msgid "No entries!"
4950
msgstr ""
5051

51-
#: templates/log_viewer/logfile_viewer.html:55
52+
#: templates/log_viewer/logfile_viewer.html:57
5253
msgid "Log Files"
5354
msgstr ""

log_viewer/locale/id/LC_MESSAGES/django.po

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ msgid ""
88
msgstr ""
99
"Project-Id-Version: PACKAGE VERSION\n"
1010
"Report-Msgid-Bugs-To: \n"
11-
"POT-Creation-Date: 2021-07-06 21:39+0700\n"
11+
"POT-Creation-Date: 2022-08-26 21:45+0700\n"
1212
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -20,34 +20,35 @@ msgstr ""
2020

2121
#: templates/log_viewer/logfile_viewer.html:3
2222
#: templates/log_viewer/logfile_viewer.html:9
23-
#: templates/log_viewer/logfile_viewer.html:35
23+
#: templates/log_viewer/logfile_viewer.html:37
2424
msgid "Django Log Viewer"
2525
msgstr "Penampil Log Django"
2626

2727
#: templates/log_viewer/logfile_viewer.html:7
2828
msgid "Home"
2929
msgstr "Beranda"
3030

31-
#: templates/log_viewer/logfile_viewer.html:37
31+
#: templates/log_viewer/logfile_viewer.html:39
3232
msgid "Download all Log Files"
3333
msgstr "Unduh seluruh File Log"
3434

35-
#: templates/log_viewer/logfile_viewer.html:38
35+
#: templates/log_viewer/logfile_viewer.html:40
3636
msgid "Download this Log File"
3737
msgstr "Unduh File Log ini"
3838

39-
#: templates/log_viewer/logfile_viewer.html:44
39+
#: templates/log_viewer/logfile_viewer.html:46
4040
msgid "No."
4141
msgstr "No."
4242

43-
#: templates/log_viewer/logfile_viewer.html:45
43+
#: templates/log_viewer/logfile_viewer.html:47
4444
msgid "Log entries"
4545
msgstr "Entri log"
4646

47-
#: templates/log_viewer/logfile_viewer.html:49
47+
#: templates/log_viewer/logfile_viewer.html:51
48+
#: templates/log_viewer/logfile_viewer.html:62
4849
msgid "No entries!"
4950
msgstr "Tidak ada entri!"
5051

51-
#: templates/log_viewer/logfile_viewer.html:55
52+
#: templates/log_viewer/logfile_viewer.html:57
5253
msgid "Log Files"
5354
msgstr "File log"

log_viewer/settings.py

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
1-
# -*- coding: utf-8 -*-
2-
from __future__ import unicode_literals
3-
41
from django.conf import settings
52

6-
LOG_VIEWER_FILES = getattr(settings, 'LOG_VIEWER_FILES', [])
7-
LOG_VIEWER_FILES_PATTERN = getattr(settings, 'LOG_VIEWER_FILES_PATTERN', '*.log*')
8-
LOG_VIEWER_FILES_DIR = getattr(settings, 'LOG_VIEWER_FILES_DIR', 'logs/')
9-
LOG_VIEWER_PAGE_LENGTH = getattr(settings, 'LOG_VIEWER_PAGE_LENGTH', 25)
10-
LOG_VIEWER_MAX_READ_LINES = getattr(settings, 'LOG_VIEWER_MAX_READ_LINES', 1000)
11-
LOG_VIEWER_FILE_LIST_TITLE = getattr(settings, 'LOG_VIEWER_FILE_LIST_TITLE', None)
12-
LOG_VIEWER_FILE_LIST_STYLES = getattr(settings, 'LOG_VIEWER_FILE_LIST_STYLES', None)
13-
LOG_VIEWER_FILE_LIST_MAX_ITEMS_PER_PAGE = getattr(settings, 'LOG_VIEWER_FILE_LIST_MAX_ITEMS_PER_PAGE', 25)
14-
LOG_VIEWER_PATTERNS = getattr(settings, 'LOG_VIEWER_PATTERNS', ['[INFO]', '[DEBUG]', '[WARNING]',
15-
'[ERROR]', '[CRITICAL]'])
3+
LOG_VIEWER_FILES = getattr(settings, "LOG_VIEWER_FILES", [])
4+
LOG_VIEWER_FILES_PATTERN = getattr(settings, "LOG_VIEWER_FILES_PATTERN", "*.log*")
5+
LOG_VIEWER_FILES_DIR = getattr(settings, "LOG_VIEWER_FILES_DIR", "logs/")
6+
LOG_VIEWER_PAGE_LENGTH = getattr(settings, "LOG_VIEWER_PAGE_LENGTH", 25)
7+
LOG_VIEWER_MAX_READ_LINES = getattr(settings, "LOG_VIEWER_MAX_READ_LINES", 1000)
8+
LOG_VIEWER_FILE_LIST_TITLE = getattr(settings, "LOG_VIEWER_FILE_LIST_TITLE", None)
9+
LOG_VIEWER_FILE_LIST_STYLES = getattr(settings, "LOG_VIEWER_FILE_LIST_STYLES", None)
10+
LOG_VIEWER_FILE_LIST_MAX_ITEMS_PER_PAGE = getattr(
11+
settings, "LOG_VIEWER_FILE_LIST_MAX_ITEMS_PER_PAGE", 25
12+
)
13+
LOG_VIEWER_PATTERNS = getattr(
14+
settings,
15+
"LOG_VIEWER_PATTERNS",
16+
["[INFO]", "[DEBUG]", "[WARNING]", "[ERROR]", "[CRITICAL]"],
17+
)
18+
LOG_VIEWER_EXCLUDE_TEXT_PATTERN = getattr(
19+
settings, "LOG_VIEWER_EXCLUDE_TEXT_PATTERN", None
20+
)

log_viewer/tests/tests.py

Lines changed: 52 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,75 @@
1+
import types
2+
import tempfile
3+
from itertools import islice
4+
15
from django.urls import reverse
26
from django.test import TestCase, Client
37
from django.contrib.auth import get_user_model
48

9+
from ..utils import get_log_files, readlines_reverse
10+
511
User = get_user_model()
612

713

814
class TestLogsViewer(TestCase):
9-
1015
def setUp(self):
1116
self.user = User.objects.create_user(
12-
username='john',
13-
password='Foobar@1234',
17+
username="john",
18+
password="Foobar@1234",
1419
is_active=True,
1520
is_staff=True,
16-
is_superuser=True
21+
is_superuser=True,
1722
)
1823
self.client_login = Client()
1924
self.client_login.force_login(self.user)
2025
self.client_anon = Client()
21-
self.url = reverse('log_file_view')
26+
self.url = reverse("log_file_view")
2227

2328
def test_redirection(self):
2429
response = self.client_anon.get(self.url)
2530
self.assertEqual(response.status_code, 302)
2631

2732
def test_logs_viewer(self):
28-
# response = self.client_login.get(self.url)
29-
# self.assertEqual(response.status_code, 200)
30-
# self.assertContains(response, 'Django Log Viewer')
31-
# self.assertTemplateUsed(response, 'log_viewer/logfile_viewer.html')
33+
response = self.client_login.get(self.url)
34+
self.assertEqual(response.status_code, 200)
35+
self.assertContains(response, "Django Log Viewer")
36+
self.assertTemplateUsed(response, "log_viewer/logfile_viewer.html")
37+
38+
def test_get_log_files(self):
39+
with tempfile.TemporaryDirectory() as log_dir:
40+
open("%s/default.log" % log_dir, "a").close()
41+
result = get_log_files(log_dir, 1, 1)
42+
self.assertEqual(
43+
result,
44+
{
45+
"logs": {
46+
"": ["default.log"],
47+
},
48+
"next_page_files": 2,
49+
"last_files": True,
50+
},
51+
)
52+
53+
def test_readlines_reverse(self):
54+
with tempfile.TemporaryDirectory() as log_dir:
55+
with open("%s/default.log" % log_dir, "w") as qfile:
56+
qfile.write(
57+
"[WARNING] 2022-08-26 13:02:46,070 django.request: Not Found: /404/"
58+
)
59+
qfile.write(
60+
"[ERROR] 2022-08-26 13:02:50,962 django.request: Internal Server Error: /admin/"
61+
)
62+
qfile.write(
63+
"[INFO] 2022-08-26 13:02:36,604 django.utils.autoreload: Watching for file changes"
64+
)
65+
qfile.close()
3266

33-
# FIXME: django.urls.exceptions.NoReverseMatch: 'admin' is not a registered namespace
34-
...
67+
with open(
68+
"%s/default.log" % log_dir, encoding="utf8", errors="ignore"
69+
) as qfile:
70+
lines = readlines_reverse(qfile, exclude=None)
71+
lines_string = " ".join(map(str, lines))
72+
self.assertTrue(isinstance(lines, types.GeneratorType))
73+
self.assertIn("[WARNING]", lines_string)
74+
self.assertIn("[ERROR]", lines_string)
75+
self.assertIn("[INFO]", lines_string)

0 commit comments

Comments
 (0)