kopia lustrzana https://github.com/jedie/PyInventory
				
				
				
			
						commit
						c0367d5000
					
				| 
						 | 
				
			
			@ -166,6 +166,8 @@ To make a new release, do this:
 | 
			
		|||
 | 
			
		||||
[comment]: <> (✂✂✂ auto generated history start ✂✂✂)
 | 
			
		||||
 | 
			
		||||
* [**dev**](https://github.com/jedie/PyInventory/compare/v0.21.0...main)
 | 
			
		||||
  * 2025-04-30 - Update requirements and some small code parts
 | 
			
		||||
* [v0.21.0](https://github.com/jedie/PyInventory/compare/v0.20.1...v0.21.0)
 | 
			
		||||
  * 2025-03-23 - Bugfix publish: setuptools missing
 | 
			
		||||
  * 2025-03-23 - Migrate "pip-tools" -> "uv" and remove tox
 | 
			
		||||
| 
						 | 
				
			
			@ -176,6 +178,9 @@ To make a new release, do this:
 | 
			
		|||
  * 2024-09-05 - Project updates
 | 
			
		||||
  * 2024-01-16 - Use typeguard in tests
 | 
			
		||||
  * 2024-01-16 - Update requirements
 | 
			
		||||
 | 
			
		||||
<details><summary>Expand older history entries ...</summary>
 | 
			
		||||
 | 
			
		||||
* [v0.19.3](https://github.com/jedie/PyInventory/compare/v0.19.2...v0.19.3)
 | 
			
		||||
  * 2023-11-01 - Auto generate README history
 | 
			
		||||
  * 2023-11-01 - Update requirements
 | 
			
		||||
| 
						 | 
				
			
			@ -184,9 +189,6 @@ To make a new release, do this:
 | 
			
		|||
  * 2023-10-08 - Use playwrigth manage command from manage-django-project
 | 
			
		||||
  * 2023-09-24 - Update test snapshot files
 | 
			
		||||
  * 2023-09-24 - Add playwright CLI wrapper command
 | 
			
		||||
 | 
			
		||||
<details><summary>Expand older history entries ...</summary>
 | 
			
		||||
 | 
			
		||||
* [v0.19.2](https://github.com/jedie/PyInventory/compare/v0.19.1...v0.19.2)
 | 
			
		||||
  * 2023-08-17 - Bugfix packaging by adding "requests" as normal dependencies
 | 
			
		||||
  * 2023-08-17 - Bugfix packageing by adding "requests" as normal dependencies
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ logger = logging.getLogger(__name__)
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
def get_filename(filename, request):
 | 
			
		||||
    random_string = get_random_string()
 | 
			
		||||
    random_string = get_random_string(length=12)
 | 
			
		||||
    filename = clean_filename(filename)
 | 
			
		||||
    filename = f'{random_string}/{filename}'
 | 
			
		||||
    logger.info(f'Upload filename: {filename!r}')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -148,7 +148,6 @@ LANGUAGE_CODE = 'en'
 | 
			
		|||
 | 
			
		||||
LANGUAGES = [('ca', _('Catalan')), ('de', _('German')), ('en', _('English')), ('es', _('Spanish'))]
 | 
			
		||||
USE_I18N = True
 | 
			
		||||
USE_L10N = True
 | 
			
		||||
TIME_ZONE = 'Europe/Paris'
 | 
			
		||||
USE_TZ = True
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,11 +12,11 @@ class AdminAnonymousTests(HtmlAssertionMixin, TestCase):
 | 
			
		|||
    """
 | 
			
		||||
 | 
			
		||||
    def test_login_en(self):
 | 
			
		||||
        response = self.client.get('/admin/', secure=True, HTTP_ACCEPT_LANGUAGE='en')
 | 
			
		||||
        response = self.client.get('/admin/', secure=True, headers={"accept-language": 'en'})
 | 
			
		||||
        self.assertRedirects(response, expected_url='/admin/login/?next=/admin/', fetch_redirect_response=False)
 | 
			
		||||
 | 
			
		||||
    def test_login_de(self):
 | 
			
		||||
        response = self.client.get('/admin/', secure=True, HTTP_ACCEPT_LANGUAGE='de')
 | 
			
		||||
        response = self.client.get('/admin/', secure=True, headers={"accept-language": 'de'})
 | 
			
		||||
        self.assertRedirects(response, expected_url='/admin/login/?next=/admin/', fetch_redirect_response=False)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +33,7 @@ class AdminLoggedinTests(HtmlAssertionMixin, TestCase):
 | 
			
		|||
    def test_staff_admin_index(self):
 | 
			
		||||
        self.client.force_login(self.staffuser)
 | 
			
		||||
 | 
			
		||||
        response = self.client.get("/admin/", secure=True, HTTP_ACCEPT_LANGUAGE="en")
 | 
			
		||||
        response = self.client.get("/admin/", secure=True, headers={"accept-language": "en"})
 | 
			
		||||
        self.assert_html_parts(
 | 
			
		||||
            response,
 | 
			
		||||
            parts=(
 | 
			
		||||
| 
						 | 
				
			
			@ -47,7 +47,7 @@ class AdminLoggedinTests(HtmlAssertionMixin, TestCase):
 | 
			
		|||
 | 
			
		||||
    def test_superuser_admin_index(self):
 | 
			
		||||
        self.client.force_login(self.superuser)
 | 
			
		||||
        response = self.client.get("/admin/", secure=True, HTTP_ACCEPT_LANGUAGE="en")
 | 
			
		||||
        response = self.client.get("/admin/", secure=True, headers={"accept-language": "en"})
 | 
			
		||||
        self.assert_html_parts(
 | 
			
		||||
            response,
 | 
			
		||||
            parts=(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,7 +44,7 @@ ITEM_FORM_DEFAULTS = tuple(ITEM_FORM_DEFAULTS.items())
 | 
			
		|||
class AdminAnonymousTests(HtmlAssertionMixin, TestCase):
 | 
			
		||||
    def test_login(self):
 | 
			
		||||
        # HTTP -> HTTPS redirect:
 | 
			
		||||
        response = self.client.get('/admin/', HTTP_ACCEPT_LANGUAGE='en')
 | 
			
		||||
        response = self.client.get('/admin/', headers={"accept-language": 'en'})
 | 
			
		||||
        self.assertRedirects(
 | 
			
		||||
            response,
 | 
			
		||||
            expected_url='https://testserver/admin/',
 | 
			
		||||
| 
						 | 
				
			
			@ -52,14 +52,16 @@ class AdminAnonymousTests(HtmlAssertionMixin, TestCase):
 | 
			
		|||
            fetch_redirect_response=False,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        response = self.client.get(path='/admin/inventory/itemmodel/add/', secure=True, HTTP_ACCEPT_LANGUAGE='en')
 | 
			
		||||
        response = self.client.get(
 | 
			
		||||
            path='/admin/inventory/itemmodel/add/', secure=True, headers={"accept-language": 'en'}
 | 
			
		||||
        )
 | 
			
		||||
        self.assertRedirects(
 | 
			
		||||
            response, expected_url='/admin/login/?next=/admin/inventory/itemmodel/add/', fetch_redirect_response=False
 | 
			
		||||
        )
 | 
			
		||||
        with mock.patch.object(
 | 
			
		||||
            CsrfTokenNode, 'render', return_value='MockedCsrfTokenNode'
 | 
			
		||||
        ), MockInventoryVersionString():
 | 
			
		||||
            response = self.client.get(path='/admin/login/', secure=True, HTTP_ACCEPT_LANGUAGE='en')
 | 
			
		||||
            response = self.client.get(path='/admin/login/', secure=True, headers={"accept-language": 'en'})
 | 
			
		||||
            self.assert_html_parts(
 | 
			
		||||
                response,
 | 
			
		||||
                parts=(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,7 +16,7 @@ from inventory_project.tests.mocks import MockInventoryVersionString
 | 
			
		|||
 | 
			
		||||
class AdminAnonymousTests(TestCase):
 | 
			
		||||
    def test_login(self):
 | 
			
		||||
        response = self.client.get('/admin/inventory/memomodel/add/', secure=True, HTTP_ACCEPT_LANGUAGE='en')
 | 
			
		||||
        response = self.client.get('/admin/inventory/memomodel/add/', secure=True, headers={"accept-language": 'en'})
 | 
			
		||||
        self.assertRedirects(
 | 
			
		||||
            response,
 | 
			
		||||
            expected_url='/admin/login/?next=/admin/inventory/memomodel/add/',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
from django.conf import settings
 | 
			
		||||
from django.conf.urls import include
 | 
			
		||||
from django.contrib import admin
 | 
			
		||||
from django.urls import path, re_path
 | 
			
		||||
from django.urls import include, path
 | 
			
		||||
from django.views.generic import RedirectView
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -9,7 +8,7 @@ admin.autodiscover()
 | 
			
		|||
 | 
			
		||||
urlpatterns = [  # Don't use i18n_patterns() here
 | 
			
		||||
    path('admin/', admin.site.urls),
 | 
			
		||||
    re_path(r'^$', RedirectView.as_view(pattern_name='admin:index')),
 | 
			
		||||
    path('', RedirectView.as_view(pattern_name='admin:index')),
 | 
			
		||||
    path('tinymce/', include('tinymce.urls')),  # TODO: check permissions?
 | 
			
		||||
    path(settings.MEDIA_URL.lstrip('/'), include('django_tools.serve_media_app.urls')),
 | 
			
		||||
]
 | 
			
		||||
| 
						 | 
				
			
			@ -18,4 +17,4 @@ urlpatterns = [  # Don't use i18n_patterns() here
 | 
			
		|||
if settings.DEBUG:
 | 
			
		||||
    import debug_toolbar
 | 
			
		||||
 | 
			
		||||
    urlpatterns = [re_path(r'^__debug__/', include(debug_toolbar.urls))] + urlpatterns
 | 
			
		||||
    urlpatterns = [path('__debug__/', include(debug_toolbar.urls))] + urlpatterns
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,8 @@ authors = [
 | 
			
		|||
keywords=['inventory','django']
 | 
			
		||||
requires-python = ">=3.11"
 | 
			
		||||
dependencies = [
 | 
			
		||||
    "django",  # https://docs.djangoproject.com
 | 
			
		||||
    # Stay with Django v5.1.x until https://github.com/radiac/django-tagulous/issues/187 is fixed
 | 
			
		||||
    "django!=5.2.0",  # https://docs.djangoproject.com
 | 
			
		||||
 | 
			
		||||
    "colorlog",  # https://github.com/borntyping/python-colorlog
 | 
			
		||||
    "gunicorn",  # https://github.com/benoimyproject.wsgitc/gunicorn
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue