JensDiemer 2020-11-01 18:34:24 +01:00
rodzic 36e700f4d0
commit 8685e29a5d
4 zmienionych plików z 106 dodań i 3 usunięć

Wyświetl plik

@ -31,6 +31,7 @@ INSTALLED_APPS = [
'django.contrib.sessions', 'django.contrib.sessions',
'django.contrib.messages', 'django.contrib.messages',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'django.contrib.sites',
'bx_py_utils', # https://github.com/boxine/bx_py_utils 'bx_py_utils', # https://github.com/boxine/bx_py_utils
'import_export', # https://github.com/django-import-export/django-import-export 'import_export', # https://github.com/django-import-export/django-import-export
@ -41,12 +42,14 @@ INSTALLED_APPS = [
'tagulous', # https://github.com/radiac/django-tagulous 'tagulous', # https://github.com/radiac/django-tagulous
'adminsortable2', # https://github.com/jrief/django-admin-sortable2 'adminsortable2', # https://github.com/jrief/django-admin-sortable2
'axes', # https://github.com/jazzband/django-axes 'axes', # https://github.com/jazzband/django-axes
'django_processinfo', # https://github.com/jedie/django-processinfo/
'inventory.apps.InventoryConfig', 'inventory.apps.InventoryConfig',
] ]
ROOT_URLCONF = 'inventory_project.urls' ROOT_URLCONF = 'inventory_project.urls'
WSGI_APPLICATION = 'inventory_project.wsgi.application' WSGI_APPLICATION = 'inventory_project.wsgi.application'
SITE_ID = 1
AUTHENTICATION_BACKENDS = [ AUTHENTICATION_BACKENDS = [
'axes.backends.AxesBackend', 'axes.backends.AxesBackend',
@ -54,6 +57,8 @@ AUTHENTICATION_BACKENDS = [
] ]
MIDDLEWARE = [ MIDDLEWARE = [
'django_processinfo.middlewares.ProcessInfoMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware', 'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware', 'django.middleware.common.CommonMiddleware',
@ -109,6 +114,14 @@ STATIC_ROOT = str(__Path(BASE_PATH, 'static'))
MEDIA_URL = '/media/' MEDIA_URL = '/media/'
MEDIA_ROOT = str(__Path(BASE_PATH, 'media')) MEDIA_ROOT = str(__Path(BASE_PATH, 'media'))
# _____________________________________________________________________________
# django-processinfo
from django_processinfo import app_settings as PROCESSINFO # noqa
PROCESSINFO.ADD_INFO = False # Don't add info in HTML page
# _____________________________________________________________________________ # _____________________________________________________________________________
# Django-dbbackup # Django-dbbackup

Wyświetl plik

@ -1,8 +1,11 @@
import pytest from django.contrib.auth.models import User
from django.test import TestCase from django.test import TestCase
from django_processinfo.models import ProcessInfo, SiteStatistics
from model_bakery import baker
from inventory.permissions import get_or_create_normal_user_group
@pytest.mark.django_db
class AdminAnonymousTests(TestCase): class AdminAnonymousTests(TestCase):
""" """
Anonymous will be redirected to the login page. Anonymous will be redirected to the login page.
@ -15,3 +18,58 @@ class AdminAnonymousTests(TestCase):
def test_login_de(self): def test_login_de(self):
response = self.client.get("/admin/", HTTP_ACCEPT_LANGUAGE="de") response = self.client.get("/admin/", HTTP_ACCEPT_LANGUAGE="de")
self.assertRedirects(response, expected_url="/admin/login/?next=/admin/") self.assertRedirects(response, expected_url="/admin/login/?next=/admin/")
class ProcessinfoAdminTestCase(TestCase):
@classmethod
def setUpTestData(cls):
cls.superuser = baker.make(
User, is_staff=True, is_active=True, is_superuser=True
)
cls.normaluser = baker.make(
User, is_staff=True, is_active=True, is_superuser=False
)
assert cls.normaluser.user_permissions.count() == 0
group = get_or_create_normal_user_group()[0]
cls.normaluser.groups.set([group])
def test_superuser_access(self):
self.client.force_login(self.superuser)
assert SiteStatistics.objects.count() == 0
assert ProcessInfo.objects.count() == 0
response = self.client.get('/admin/django_processinfo/sitestatistics/')
self.assertTemplateUsed(response, 'admin/django_processinfo/change_list.html')
response = response.content.decode("utf-8")
self.assertInHTML('<h2>System information</h2>', response)
self.assertInHTML('<dt>Living processes (current/avg/max)</dt>', response)
assert SiteStatistics.objects.count() == 1
assert ProcessInfo.objects.count() == 1
response = self.client.get('/admin/django_processinfo/processinfo/')
self.assertTemplateUsed(response, 'admin/django_processinfo/change_list.html')
response = response.content.decode("utf-8")
self.assertInHTML('<h2>System information</h2>', response)
self.assertInHTML('<dt>Living processes (current/avg/max)</dt>', response)
assert SiteStatistics.objects.count() == 1
assert ProcessInfo.objects.count() == 1
def test_normal_user_access(self):
self.client.force_login(self.normaluser)
assert SiteStatistics.objects.count() == 0
assert ProcessInfo.objects.count() == 0
response = self.client.get('/admin/django_processinfo/sitestatistics/')
assert response.status_code == 403
response = self.client.get('/admin/django_processinfo/processinfo/')
assert response.status_code == 403
assert SiteStatistics.objects.count() == 1
assert ProcessInfo.objects.count() == 1

32
poetry.lock wygenerowano
Wyświetl plik

@ -324,6 +324,17 @@ category = "main"
optional = false optional = false
python-versions = "*" python-versions = "*"
[[package]]
name = "django-processinfo"
version = "1.0.0"
description = "Django application to collect information about the running server processes."
category = "main"
optional = false
python-versions = ">=3.7,<4.0.0"
[package.dependencies]
Django = "*"
[[package]] [[package]]
name = "django-reversion" name = "django-reversion"
version = "3.0.8" version = "3.0.8"
@ -614,6 +625,17 @@ category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
[[package]]
name = "model-bakery"
version = "1.2.0"
description = "Smart object creation facility for Django."
category = "dev"
optional = false
python-versions = "*"
[package.dependencies]
django = ">=1.11.0"
[[package]] [[package]]
name = "odfpy" name = "odfpy"
version = "1.4.1" version = "1.4.1"
@ -1205,7 +1227,7 @@ postgres = ["psycopg2-binary"]
[metadata] [metadata]
lock-version = "1.1" lock-version = "1.1"
python-versions = ">=3.7,<4.0.0" python-versions = ">=3.7,<4.0.0"
content-hash = "c9de646c31e5e1f0b0ff9b003d6290da61eca039c78aef8e6786894584fa37cf" content-hash = "745c33aa94cad303222f51896f0a9a11abdb4896cb00f87f522fe7eaa8c2325a"
[metadata.files] [metadata.files]
appdirs = [ appdirs = [
@ -1414,6 +1436,10 @@ django-js-asset = [
{file = "django-js-asset-1.2.2.tar.gz", hash = "sha256:c163ae80d2e0b22d8fb598047cd0dcef31f81830e127cfecae278ad574167260"}, {file = "django-js-asset-1.2.2.tar.gz", hash = "sha256:c163ae80d2e0b22d8fb598047cd0dcef31f81830e127cfecae278ad574167260"},
{file = "django_js_asset-1.2.2-py2.py3-none-any.whl", hash = "sha256:8ec12017f26eec524cab436c64ae73033368a372970af4cf42d9354fcb166bdd"}, {file = "django_js_asset-1.2.2-py2.py3-none-any.whl", hash = "sha256:8ec12017f26eec524cab436c64ae73033368a372970af4cf42d9354fcb166bdd"},
] ]
django-processinfo = [
{file = "django-processinfo-1.0.0.tar.gz", hash = "sha256:0df4b3a011a7adb1f6b722964aca4693e79fa003b7f780025cc0d04073f00c49"},
{file = "django_processinfo-1.0.0-py3-none-any.whl", hash = "sha256:829e2937a9fae54ef8c0a3cb5e99a09490cf66252cee498de833377839d7e497"},
]
django-reversion = [ django-reversion = [
{file = "django-reversion-3.0.8.tar.gz", hash = "sha256:49e9930f90322dc6a2754dd26144285cfcc1c5bd0c1c39ca95d5602c5054ae32"}, {file = "django-reversion-3.0.8.tar.gz", hash = "sha256:49e9930f90322dc6a2754dd26144285cfcc1c5bd0c1c39ca95d5602c5054ae32"},
{file = "django_reversion-3.0.8-py3-none-any.whl", hash = "sha256:9cfadeec2df37cb53d795ab79f6792f9eed8e70363dcf3a275dc19a58b971a8f"}, {file = "django_reversion-3.0.8-py3-none-any.whl", hash = "sha256:9cfadeec2df37cb53d795ab79f6792f9eed8e70363dcf3a275dc19a58b971a8f"},
@ -1503,6 +1529,10 @@ mccabe = [
{file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"},
{file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"},
] ]
model-bakery = [
{file = "model_bakery-1.2.0-py2.py3-none-any.whl", hash = "sha256:b25f400b392067f02d841a0ef33e861543c04b1702dc004020bdd50e1dbce05f"},
{file = "model_bakery-1.2.0.tar.gz", hash = "sha256:088698cdf62e5ccedeb97e55ceb966c974cc79e2514928aec9beab27a8c1faf4"},
]
odfpy = [ odfpy = [
{file = "odfpy-1.4.1-py2.7.egg", hash = "sha256:fc3b8d1bc098eba4a0fda865a76d9d1e577c4ceec771426bcb169a82c5e9dfe0"}, {file = "odfpy-1.4.1-py2.7.egg", hash = "sha256:fc3b8d1bc098eba4a0fda865a76d9d1e577c4ceec771426bcb169a82c5e9dfe0"},
{file = "odfpy-1.4.1.tar.gz", hash = "sha256:db766a6e59c5103212f3cc92ec8dd50a0f3a02790233ed0b52148b70d3c438ec"}, {file = "odfpy-1.4.1.tar.gz", hash = "sha256:db766a6e59c5103212f3cc92ec8dd50a0f3a02790233ed0b52148b70d3c438ec"},

Wyświetl plik

@ -40,6 +40,7 @@ uWSGI = "*"
# https://www.djangoproject.com/download/#supported-versions # https://www.djangoproject.com/download/#supported-versions
# v2.2 LTS - extended support until April 2022 # v2.2 LTS - extended support until April 2022
django = "2.2.*" django = "2.2.*"
django-processinfo = "*" # https://github.com/jedie/django-processinfo/
django-debug-toolbar = "*" # http://django-debug-toolbar.readthedocs.io/en/stable/changes.html django-debug-toolbar = "*" # http://django-debug-toolbar.readthedocs.io/en/stable/changes.html
django-import-export = "*" # https://github.com/django-import-export/django-import-export django-import-export = "*" # https://github.com/django-import-export/django-import-export
django-dbbackup = "*" # https://github.com/django-dbbackup/django-dbbackup django-dbbackup = "*" # https://github.com/django-dbbackup/django-dbbackup
@ -72,6 +73,7 @@ flake8 = "*"
flynt = "*" flynt = "*"
autopep8 = "*" autopep8 = "*"
pyupgrade = "*" pyupgrade = "*"
model_bakery = "*" # https://github.com/model-bakers/model_bakery
[tool.poetry.scripts] [tool.poetry.scripts]
manage = "inventory_project.manage:main" manage = "inventory_project.manage:main"