Migrate "pip-tools" -> "uv" and remove tox

pull/188/head
JensDiemer 2025-03-23 12:35:37 +01:00
rodzic f013895d10
commit e795779b4f
23 zmienionych plików z 2350 dodań i 2032 usunięć

Wyświetl plik

@ -12,12 +12,12 @@ on:
jobs:
test:
name: 'Python ${{ matrix.python-version }} Django ${{ matrix.django-version }}'
name: 'Python ${{ matrix.python-version }}'
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ['3.12', '3.11']
python-version: ['3.13', '3.12', '3.11']
steps:
- name: Checkout
run: |
@ -32,7 +32,7 @@ jobs:
with:
python-version: '${{ matrix.python-version }}'
cache: 'pip' # caching pip dependencies
cache-dependency-path: '**/requirements.*.txt'
cache-dependency-path: 'uv.lock'
- name: 'Bootstrap'
# The first manage.py call will create the .venv
@ -47,7 +47,7 @@ jobs:
run: |
./manage.py --help
- name: 'pip-audit'
- name: 'Run pip-audit'
run: |
./manage.py pip_audit
@ -56,10 +56,10 @@ jobs:
PYTHONUNBUFFERED: 1
PYTHONWARNINGS: always
run: |
./manage.py tox -e $(echo py${{ matrix.python-version }} | tr -d .)
./manage.py test
- name: 'Upload coverage report'
uses: codecov/codecov-action@v4
uses: codecov/codecov-action@v5
# https://github.com/marketplace/actions/codecov
with:
fail_ci_if_error: false

61
.gitignore vendored
Wyświetl plik

@ -2,8 +2,9 @@
*.egg-info
__pycache__
/dist/
/coverage.json
/coverage.xml
/build/
/coverage.*
*.orig
!.github
!.editorconfig
@ -21,59 +22,13 @@ __pycache__
**/static/*
**/media/*
*.sqlite3
*.json
# Include "ignored" *.json:
!**/fixtures/*.json
# Django
# Include all test snapshot files:
!**/*.snapshot.*
secret.txt
# Coverage HTML Report files:
htmlcov
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.tox
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
db.sqlite3
coverage_html/
coverage.xml
*,cover
# Translations
*.pot
# Django stuff:
*.log
# Sphinx documentation
docs/_build/
# PyBuilder
target/

Wyświetl plik

@ -1,12 +1,13 @@
# pre-commit plugin configuration
# See https://pre-commit.com for more information
default_install_hook_types:
- pre-commit
- prepare-commit-msg
- post-commit
- post-rewrite
- pre-push
repos:
- repo: https://github.com/jedie/cli-base-utilities
rev: v0.11.0
rev: v0.17.0
hooks:
- id: update-readme-history

Wyświetl plik

@ -1,7 +1,7 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@ -645,7 +645,7 @@ the "copyright" line and a pointer to where the full notice is found.
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
<https://www.gnu.org/licenses/why-not-lgpl.html>.

Wyświetl plik

@ -166,6 +166,8 @@ To make a new release, do this:
[comment]: <> (✂✂✂ auto generated history start ✂✂✂)
* [v0.21.0](https://github.com/jedie/PyInventory/compare/v0.20.1...v0.21.0)
* 2025-03-23 - Migrate "pip-tools" -> "uv" and remove tox
* [v0.20.1](https://github.com/jedie/PyInventory/compare/v0.20.0...v0.20.1)
* 2024-09-05 - switched to https://github.com/jazzband/django-tinymce/
* [v0.20.0](https://github.com/jedie/PyInventory/compare/v0.19.3...v0.20.0)
@ -181,12 +183,12 @@ 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
* [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
<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
* [v0.19.1](https://github.com/jedie/PyInventory/compare/v0.19.0...v0.19.1)
* 2023-08-17 - Update requirements
* 2023-08-17 - Update from project template

Wyświetl plik

@ -7,5 +7,6 @@
:license: GNU GPL v3 or above, see LICENSE for more details.
"""
__version__ = '0.20.1'
# See https://packaging.python.org/en/latest/specifications/version-specifiers/
__version__ = '0.21.0'
__author__ = 'Jens Diemer <PyInventory@jensdiemer.de>'

Wyświetl plik

@ -1,18 +1,10 @@
"""
https://docs.djangoproject.com/en/2.0/ref/applications/#configuring-applications-ref
created 14.20.2020 by Jens Diemer <opensource@jensdiemer.de>
:copyleft: 2020 by the PyInventory team, see AUTHORS for more details.
:license: GNU GPL v3 or above, see LICENSE for more details.
"""
from django.apps import AppConfig as BaseAppConfig
from django.apps import AppConfig
class InventoryConfig(AppConfig):
name = "inventory"
verbose_name = "Inventory"
class AppConfig(BaseAppConfig):
name = 'inventory'
verbose_name = 'Inventory'
def ready(self):
import inventory.checks # noqa
import inventory.signals # noqa

Wyświetl plik

Wyświetl plik

@ -0,0 +1,55 @@
import os
import unittest.util
from pathlib import Path
import django
from bx_py_utils.test_utils.deny_requests import deny_any_real_request
from manage_django_project.config import project_info
from rich import print
from typeguard import install_import_hook
import inventory
# Check type annotations via typeguard in all tests:
install_import_hook(packages=('inventory', 'inventory_project'))
PROJECT_ROOT = Path(inventory.__file__).parent.parent
def pre_configure_tests() -> None:
print(f'Configure unittests via "load_tests Protocol" from {Path(__file__).relative_to(Path.cwd())}')
# Hacky way to display more "assert"-Context in failing tests:
_MIN_MAX_DIFF = unittest.util._MAX_LENGTH - unittest.util._MIN_DIFF_LEN
unittest.util._MAX_LENGTH = int(os.environ.get('UNITTEST_MAX_LENGTH', 300))
unittest.util._MIN_DIFF_LEN = unittest.util._MAX_LENGTH - _MIN_MAX_DIFF
# Deny any request via docket/urllib3 because tests they should mock all requests:
deny_any_real_request()
def init_django4unittests() -> None:
"""
Make it possible to run tests via:
.venv/bin/python -m unittest
by setup Django with test settings
"""
project_info.initialize()
DJANGO_SETTINGS_MODULE: str = project_info.config.test_settings
print(f'Force {DJANGO_SETTINGS_MODULE=}')
os.environ['DJANGO_SETTINGS_MODULE'] = DJANGO_SETTINGS_MODULE
django.setup()
def load_tests(loader, tests, pattern):
"""
Use unittest "load_tests Protocol" as a hook to setup test environment before running tests.
https://docs.python.org/3/library/unittest.html#load-tests-protocol
"""
pre_configure_tests()
init_django4unittests()
return loader.discover(start_dir=Path(__file__).parent, pattern=pattern)

Wyświetl plik

@ -1,12 +1,5 @@
from pathlib import Path
from bx_py_utils.path import assert_is_dir
import inventory
PACKAGE_ROOT = Path(inventory.__file__).parent.parent
assert_is_dir(PACKAGE_ROOT / 'inventory')
# Just the same version as the real project:
__version__ = inventory.__version__

Wyświetl plik

@ -26,8 +26,6 @@ INTERNAL_IPS = ('127.0.0.1', '0.0.0.0', 'localhost')
ALLOWED_HOSTS = INTERNAL_IPS
SECURE_SSL_REDIRECT = False
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',

Wyświetl plik

@ -65,7 +65,8 @@ INSTALLED_APPS = [
'django_tools.serve_media_app.apps.UserMediaFilesConfig',
# https://github.com/jedie/django-tools/tree/master/django_tools/model_version_protect
'django_tools.model_version_protect.apps.ModelVersionProtectConfig',
'inventory.apps.InventoryConfig',
#
'inventory.apps.AppConfig',
]
ROOT_URLCONF = 'inventory_project.urls'

Wyświetl plik

@ -7,6 +7,9 @@ import os
from inventory_project.settings.prod import * # noqa
ALLOWED_HOSTS = ['testserver']
# _____________________________________________________________________________
# Manage Django Project

Wyświetl plik

@ -1,31 +0,0 @@
import os
import unittest.util
from pathlib import Path
from bx_py_utils.test_utils.deny_requests import deny_any_real_request
from typeguard import install_import_hook
# Check type annotations via typeguard in all tests:
install_import_hook(packages=('inventory', 'inventory_project'))
def pre_configure_tests() -> None:
print(f'Configure unittests via "load_tests Protocol" from {Path(__file__).relative_to(Path.cwd())}')
# Hacky way to display more "assert"-Context in failing tests:
_MIN_MAX_DIFF = unittest.util._MAX_LENGTH - unittest.util._MIN_DIFF_LEN
unittest.util._MAX_LENGTH = int(os.environ.get('UNITTEST_MAX_LENGTH', 300))
unittest.util._MIN_DIFF_LEN = unittest.util._MAX_LENGTH - _MIN_MAX_DIFF
# Deny any request via docket/urllib3 because tests they should mock all requests:
deny_any_real_request()
def load_tests(loader, tests, pattern):
"""
Use unittest "load_tests Protocol" as a hook to setup test environment before running tests.
https://docs.python.org/3/library/unittest.html#load-tests-protocol
"""
pre_configure_tests()
return loader.discover(start_dir=Path(__file__).parent, pattern=pattern)

Wyświetl plik

@ -6,10 +6,10 @@
<form enctype="multipart/form-data" id="itemmodel_form" method="post" novalidate="">
MockedCsrfTokenNode
<div>
<fieldset aria-labelledby="fieldset-0-internals-0-heading" class="module aligned collapse">
<fieldset aria-labelledby="fieldset-0-0-heading" class="module aligned collapse">
<details>
<summary>
<h2 class="fieldset-heading" id="fieldset-0-internals-0-heading">
<h2 class="fieldset-heading" id="fieldset-0-0-heading">
Internals
</h2>
</summary>
@ -65,10 +65,10 @@
</div>
</details>
</fieldset>
<fieldset aria-labelledby="fieldset-0-meta-1-heading" class="module aligned collapse">
<fieldset aria-labelledby="fieldset-0-1-heading" class="module aligned collapse">
<details>
<summary>
<h2 class="fieldset-heading" id="fieldset-0-meta-1-heading">
<h2 class="fieldset-heading" id="fieldset-0-1-heading">
Meta
</h2>
</summary>
@ -108,8 +108,8 @@
</div>
</details>
</fieldset>
<fieldset aria-labelledby="fieldset-0-basic-2-heading" class="module aligned">
<h2 class="fieldset-heading" id="fieldset-0-basic-2-heading">
<fieldset aria-labelledby="fieldset-0-2-heading" class="module aligned">
<h2 class="fieldset-heading" id="fieldset-0-2-heading">
Basic
</h2>
<div class="form-row field-kind">
@ -268,10 +268,10 @@
</div>
</div>
</fieldset>
<fieldset aria-labelledby="fieldset-0-related-items-3-heading" class="module aligned collapse">
<fieldset aria-labelledby="fieldset-0-3-heading" class="module aligned collapse">
<details>
<summary>
<h2 class="fieldset-heading" id="fieldset-0-related-items-3-heading">
<h2 class="fieldset-heading" id="fieldset-0-3-heading">
Related items
</h2>
</summary>
@ -289,10 +289,10 @@
</div>
</details>
</fieldset>
<fieldset aria-labelledby="fieldset-0-lent-4-heading" class="module aligned collapse">
<fieldset aria-labelledby="fieldset-0-4-heading" class="module aligned collapse">
<details>
<summary>
<h2 class="fieldset-heading" id="fieldset-0-lent-4-heading">
<h2 class="fieldset-heading" id="fieldset-0-4-heading">
Lent
</h2>
</summary>
@ -344,10 +344,10 @@
</div>
</details>
</fieldset>
<fieldset aria-labelledby="fieldset-0-received-5-heading" class="module aligned collapse">
<fieldset aria-labelledby="fieldset-0-5-heading" class="module aligned collapse">
<details>
<summary>
<h2 class="fieldset-heading" id="fieldset-0-received-5-heading">
<h2 class="fieldset-heading" id="fieldset-0-5-heading">
Received
</h2>
</summary>
@ -395,10 +395,10 @@
</div>
</details>
</fieldset>
<fieldset aria-labelledby="fieldset-0-handed-over-6-heading" class="module aligned collapse">
<fieldset aria-labelledby="fieldset-0-6-heading" class="module aligned collapse">
<details>
<summary>
<h2 class="fieldset-heading" id="fieldset-0-handed-over-6-heading">
<h2 class="fieldset-heading" id="fieldset-0-6-heading">
Handed over
</h2>
</summary>

Wyświetl plik

@ -219,10 +219,10 @@
Version error: Overwrite version 2 with 1 is forbidden!
</li>
</ul>
<fieldset aria-labelledby="fieldset-0-internals-0-heading" class="module aligned collapse">
<fieldset aria-labelledby="fieldset-0-0-heading" class="module aligned collapse">
<details>
<summary>
<h2 class="fieldset-heading" id="fieldset-0-internals-0-heading">
<h2 class="fieldset-heading" id="fieldset-0-0-heading">
Internals
</h2>
</summary>
@ -288,10 +288,10 @@
</div>
</details>
</fieldset>
<fieldset aria-labelledby="fieldset-0-meta-1-heading" class="module aligned collapse">
<fieldset aria-labelledby="fieldset-0-1-heading" class="module aligned collapse">
<details>
<summary>
<h2 class="fieldset-heading" id="fieldset-0-meta-1-heading">
<h2 class="fieldset-heading" id="fieldset-0-1-heading">
Meta
</h2>
</summary>
@ -331,8 +331,8 @@
</div>
</details>
</fieldset>
<fieldset aria-labelledby="fieldset-0-basic-2-heading" class="module aligned">
<h2 class="fieldset-heading" id="fieldset-0-basic-2-heading">
<fieldset aria-labelledby="fieldset-0-2-heading" class="module aligned">
<h2 class="fieldset-heading" id="fieldset-0-2-heading">
Basic
</h2>
<div class="form-row field-kind">
@ -498,10 +498,10 @@
</div>
</div>
</fieldset>
<fieldset aria-labelledby="fieldset-0-related-items-3-heading" class="module aligned collapse">
<fieldset aria-labelledby="fieldset-0-3-heading" class="module aligned collapse">
<details>
<summary>
<h2 class="fieldset-heading" id="fieldset-0-related-items-3-heading">
<h2 class="fieldset-heading" id="fieldset-0-3-heading">
Related items
</h2>
</summary>
@ -542,10 +542,10 @@
</div>
</details>
</fieldset>
<fieldset aria-labelledby="fieldset-0-lent-4-heading" class="module aligned collapse">
<fieldset aria-labelledby="fieldset-0-4-heading" class="module aligned collapse">
<details>
<summary>
<h2 class="fieldset-heading" id="fieldset-0-lent-4-heading">
<h2 class="fieldset-heading" id="fieldset-0-4-heading">
Lent
</h2>
</summary>
@ -597,10 +597,10 @@
</div>
</details>
</fieldset>
<fieldset aria-labelledby="fieldset-0-received-5-heading" class="module aligned collapse">
<fieldset aria-labelledby="fieldset-0-5-heading" class="module aligned collapse">
<details>
<summary>
<h2 class="fieldset-heading" id="fieldset-0-received-5-heading">
<h2 class="fieldset-heading" id="fieldset-0-5-heading">
Received
</h2>
</summary>
@ -648,10 +648,10 @@
</div>
</details>
</fieldset>
<fieldset aria-labelledby="fieldset-0-handed-over-6-heading" class="module aligned collapse">
<fieldset aria-labelledby="fieldset-0-6-heading" class="module aligned collapse">
<details>
<summary>
<h2 class="fieldset-heading" id="fieldset-0-handed-over-6-heading">
<h2 class="fieldset-heading" id="fieldset-0-6-heading">
Handed over
</h2>
</summary>

Wyświetl plik

@ -6,10 +6,10 @@
<form enctype="multipart/form-data" id="memomodel_form" method="post" novalidate="">
MockedCsrfTokenNode
<div>
<fieldset aria-labelledby="fieldset-0-internals-0-heading" class="module aligned collapse">
<fieldset aria-labelledby="fieldset-0-0-heading" class="module aligned collapse">
<details>
<summary>
<h2 class="fieldset-heading" id="fieldset-0-internals-0-heading">
<h2 class="fieldset-heading" id="fieldset-0-0-heading">
Internals
</h2>
</summary>
@ -65,10 +65,10 @@
</div>
</details>
</fieldset>
<fieldset aria-labelledby="fieldset-0-meta-1-heading" class="module aligned collapse">
<fieldset aria-labelledby="fieldset-0-1-heading" class="module aligned collapse">
<details>
<summary>
<h2 class="fieldset-heading" id="fieldset-0-meta-1-heading">
<h2 class="fieldset-heading" id="fieldset-0-1-heading">
Meta
</h2>
</summary>
@ -108,8 +108,8 @@
</div>
</details>
</fieldset>
<fieldset aria-labelledby="fieldset-0-basic-2-heading" class="module aligned">
<h2 class="fieldset-heading" id="fieldset-0-basic-2-heading">
<fieldset aria-labelledby="fieldset-0-2-heading" class="module aligned">
<h2 class="fieldset-heading" id="fieldset-0-2-heading">
Basic
</h2>
<div class="form-row field-name">

Wyświetl plik

@ -34,15 +34,19 @@ dbshell makemessages sqlflush test
diffsettings makemigrations sqlmigrate testserver
dumpdata migrate sqlsequencereset
import_export
=============
export import
inventory
=========
seed_data tree
manage_django_project
=====================
code_style pip_audit publish update_req
coverage playwright run_dev_server update_test_snapshot_files
install project_info tox
code_style nox project_info update_req
coverage pip_audit publish update_test_snapshot_files
install playwright run_dev_server
reversion
=========

Wyświetl plik

@ -8,6 +8,7 @@
"""
import hashlib
import os
import shlex
import signal
import subprocess
@ -34,7 +35,7 @@ else:
sys.exit(-1)
assert sys.version_info >= (3, 10), f'Python version {sys.version_info} is too old!'
assert sys.version_info >= (3, 11), f'Python version {sys.version_info} is too old!'
if sys.platform == 'win32': # wtf
@ -51,9 +52,9 @@ VENV_PATH = BASE_PATH / '.venv'
BIN_PATH = VENV_PATH / BIN_NAME
PYTHON_PATH = BIN_PATH / f'python3{FILE_EXT}'
PIP_PATH = BIN_PATH / f'pip{FILE_EXT}'
PIP_SYNC_PATH = BIN_PATH / f'pip-sync{FILE_EXT}'
UV_PATH = BIN_PATH / f'uv{FILE_EXT}'
DEP_LOCK_PATH = BASE_PATH / 'requirements.dev.txt'
DEP_LOCK_PATH = BASE_PATH / 'uv.lock'
DEP_HASH_PATH = VENV_PATH / '.dep_hash'
# script file defined in pyproject.toml as [console_scripts]
@ -99,23 +100,26 @@ def main(argv):
builder = venv.EnvBuilder(symlinks=True, upgrade=True, with_pip=True)
builder.create(env_dir=VENV_PATH)
# Set environment variable for uv to use '.venv-app' as project environment:
os.environ['UV_PROJECT_ENVIRONMENT'] = str(VENV_PATH.absolute())
if not PROJECT_SHELL_SCRIPT.is_file() or not venv_up2date():
# Update pip
verbose_check_call(PYTHON_PATH, '-m', 'pip', 'install', '-U', 'pip')
# Install pip-tools
verbose_check_call(PYTHON_PATH, '-m', 'pip', 'install', '-U', 'pip-tools')
# Install uv
verbose_check_call(PYTHON_PATH, '-m', 'pip', 'install', '-U', 'uv')
# install requirements via "pip-sync"
verbose_check_call(PIP_SYNC_PATH, str(DEP_LOCK_PATH))
# install requirements
verbose_check_call(UV_PATH, 'sync', '--frozen')
# install project
verbose_check_call(PIP_PATH, 'install', '--no-deps', '-e', '.')
store_dep_hash()
# Activate git pre-commit hooks:
verbose_check_call(PYTHON_PATH, '-m', 'pre_commit', 'install')
verbose_check_call(PYTHON_PATH, '-m', 'pre_commit', 'autoupdate')
store_dep_hash()
signal.signal(signal.SIGINT, noop_sigint_handler) # ignore "Interrupt from keyboard" signals

Wyświetl plik

@ -30,21 +30,21 @@ dependencies = [
"django-debug-toolbar", # http://django-debug-toolbar.readthedocs.io/en/stable/changes.html
"bx_py_utils", # https://github.com/boxine/bx_py_utils
"bx_django_utils", # https://github.com/boxine/bx_django_utils
"django-axes", # https://github.com/jazzband/django-axes
]
[project.optional-dependencies]
[dependency-groups]
dev = [
"django-debug-toolbar", # http://django-debug-toolbar.readthedocs.io/en/stable/changes.html
"manage_django_project", # https://github.com/jedie/manage_django_project
# TODO: "autocron", # https://github.com/kbr/autocron
"cmd2_ext_test", # https://github.com/python-cmd2/cmd2/tree/master/plugins/ext_test
"playwright", # https://playwright.dev/python/docs/intro
"beautifulsoup4", # https://www.crummy.com/software/BeautifulSoup/
'lxml', # https://github.com/lxml/lxml
"uv", # https://github.com/astral-sh/uv
"playwright", # https://github.com/microsoft/playwright-python
"tblib", # https://github.com/ionelmc/python-tblib
"pip-tools", # https://github.com/jazzband/pip-tools/
"tox", # https://github.com/tox-dev/tox
"coverage", # https://github.com/nedbat/coveragepy
"autopep8", # https://github.com/hhatto/autopep8
"pyupgrade", # https://github.com/asottile/pyupgrade
@ -56,8 +56,8 @@ dev = [
"pip-audit", # https://github.com/pypa/pip-audit
"mypy", # https://github.com/python/mypy
"twine", # https://github.com/pypa/twine
"typeguard", # https://github.com/agronholm/typeguard/
"pre-commit", # https://github.com/pre-commit/pre-commit
"typeguard", # https://github.com/agronholm/typeguard/
# https://github.com/akaihola/darker
# https://github.com/ikamensh/flynt
@ -68,11 +68,6 @@ dev = [
"model_bakery", # https://github.com/model-bakers/model_bakery
"requests-mock", # https://github.com/jamielennox/requests-mock
"django-override-storage", # https://github.com/danifus/django-override-storage
# Work-a-round for: https://github.com/jazzband/pip-tools/issues/1866
# see also: https://github.com/jazzband/pip-tools/issues/994#issuecomment-1321226661
# backports.tarfile is needed for python <3.12
'backports.tarfile', # via jaraco-context -> keyring -> twine
]
[project.urls]
@ -151,7 +146,7 @@ branch = true
parallel = true
concurrency = ["multiprocessing"]
source = ['.']
command_line = '-m inventory_project test --shuffle --parallel --buffer'
command_line = '-m unittest --verbose --locals --buffer'
[tool.coverage.report]
omit = ['.*', '*/tests/*', '*/migrations/*']
@ -165,26 +160,6 @@ exclude_lines = [
'if __name__ == .__main__.:',
]
[tool.tox] # https://tox.wiki/en/latest/config.html#pyproject-toml
legacy_tox_ini = """
[tox]
isolated_build = True
envlist = py{312,311}
skip_missing_interpreters = True
[testenv]
passenv = *
skip_install = true
commands_pre =
pip install -U pip
pip install -U pip-tools
pip-sync requirements.dev.txt
commands =
{envpython} -m coverage run --context='{envname}'
"""
[tool.mypy]
warn_unused_configs = true
ignore_missing_imports = true
@ -201,6 +176,7 @@ cookiecutter_template = "https://github.com/jedie/cookiecutter_templates/"
cookiecutter_directory = "managed-django-project"
applied_migrations = [
"141b3e4", # 2024-09-05T17:53:31+02:00
"a36dd75", # 2025-03-23T11:39:23+01:00
]
[manageprojects.cookiecutter_context.cookiecutter]
@ -208,7 +184,7 @@ full_name = "Jens Diemer"
github_username = "jedie"
author_email = "PyInventory@jensdiemer.de"
package_name = "inventory"
package_version = "0.18.0"
package_version = "0.21.0"
package_description = "Web based management to catalog things including state and location etc. using Python/Django."
package_url = "https://github.com/jedie/PyInventory"
issues_url = "https://github.com/jedie/PyInventory/issues"

Plik diff jest za duży Load Diff

Wyświetl plik

@ -1,340 +0,0 @@
#
# This file is autogenerated by pip-compile with Python 3.12
# by the following command:
#
# ./manage.py update_req
#
asgiref==3.8.1 \
--hash=sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47 \
--hash=sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590
# via django
bleach==6.1.0 \
--hash=sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe \
--hash=sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6
# via django-tools
bx-django-utils==79 \
--hash=sha256:cb66087d4e9396281acf5a4394b749cff3062b66082d5726f6a8a342fdd35d0e \
--hash=sha256:d50b10ace24b0b363574542faecf04a81029e2fec6d6e6525fe063ed06238e04
# via
# PyInventory (pyproject.toml)
# django-tools
bx-py-utils==101 \
--hash=sha256:2aa295cde55da99b77f5f2f8b5bf8c0bec7e0046511832989ecbb1a43183cf75 \
--hash=sha256:eece1f0b1e3c091d38f3013984056b05f43c6a0fd716489cf337d89df802ab59
# via
# PyInventory (pyproject.toml)
# bx-django-utils
# django-tools
certifi==2024.8.30 \
--hash=sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8 \
--hash=sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9
# via requests
charset-normalizer==3.3.2 \
--hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \
--hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \
--hash=sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 \
--hash=sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 \
--hash=sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 \
--hash=sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 \
--hash=sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 \
--hash=sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e \
--hash=sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 \
--hash=sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 \
--hash=sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 \
--hash=sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 \
--hash=sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f \
--hash=sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 \
--hash=sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 \
--hash=sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a \
--hash=sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 \
--hash=sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc \
--hash=sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 \
--hash=sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 \
--hash=sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc \
--hash=sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce \
--hash=sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d \
--hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e \
--hash=sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 \
--hash=sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 \
--hash=sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 \
--hash=sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d \
--hash=sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a \
--hash=sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 \
--hash=sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 \
--hash=sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d \
--hash=sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 \
--hash=sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed \
--hash=sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 \
--hash=sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac \
--hash=sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 \
--hash=sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 \
--hash=sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab \
--hash=sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 \
--hash=sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 \
--hash=sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db \
--hash=sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f \
--hash=sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 \
--hash=sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 \
--hash=sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c \
--hash=sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d \
--hash=sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 \
--hash=sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa \
--hash=sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a \
--hash=sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 \
--hash=sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b \
--hash=sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 \
--hash=sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c \
--hash=sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 \
--hash=sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 \
--hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \
--hash=sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 \
--hash=sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 \
--hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \
--hash=sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 \
--hash=sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f \
--hash=sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d \
--hash=sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 \
--hash=sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a \
--hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \
--hash=sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 \
--hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \
--hash=sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 \
--hash=sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 \
--hash=sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 \
--hash=sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 \
--hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \
--hash=sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c \
--hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \
--hash=sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 \
--hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \
--hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \
--hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \
--hash=sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c \
--hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \
--hash=sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 \
--hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \
--hash=sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b \
--hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \
--hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \
--hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \
--hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \
--hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \
--hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561
# via requests
colorlog==6.8.2 \
--hash=sha256:3e3e079a41feb5a1b64f978b5ea4f46040a94f11f0e8bbb8261e3dbbeca64d44 \
--hash=sha256:4dcbb62368e2800cb3c5abd348da7e53f6c362dda502ec27c560b2e58a66bd33
# via
# PyInventory (pyproject.toml)
# django-tools
diff-match-patch==20230430 \
--hash=sha256:953019cdb9c9d2c9e47b5b12bcff3cf4746fc4598eb406076fa1fc27e6a1f15c \
--hash=sha256:dce43505fb7b1b317de7195579388df0746d90db07015ed47a85e5e44930ef93
# via
# django-import-export
# django-reversion-compare
django==5.1.1 \
--hash=sha256:021ffb7fdab3d2d388bc8c7c2434eb9c1f6f4d09e6119010bbb1694dda286bc2 \
--hash=sha256:71603f27dac22a6533fb38d83072eea9ddb4017fead6f67f2562a40402d61c3f
# via
# PyInventory (pyproject.toml)
# bx-django-utils
# django-admin-sortable2
# django-dbbackup
# django-debug-toolbar
# django-import-export
# django-reversion
# django-reversion-compare
# django-tagulous
# django-tinymce
# django-tools
django-admin-sortable2==2.2.2 \
--hash=sha256:efb28eed633e3a008c6938a887096a9887a213628a39458dc748d654f8f12d5c \
--hash=sha256:fc6b62ac1e5f4c95001742d568a2c1ce371bafe9d79d809fc55779fba955e498
# via PyInventory (pyproject.toml)
django-dbbackup==4.2.1 \
--hash=sha256:157a2ec10d482345cd75092e510ac40d6e2ee6084604a1d17abe178c2f06bc69 \
--hash=sha256:b23265600ead0780ca781b1b4b594949aaa8a20d74f08701f91ee9d7eb1f08cd
# via PyInventory (pyproject.toml)
django-debug-toolbar==4.4.6 \
--hash=sha256:36e421cb908c2f0675e07f9f41e3d1d8618dc386392ec82d23bcfcd5d29c7044 \
--hash=sha256:3beb671c9ec44ffb817fad2780667f172bd1c067dbcabad6268ce39a81335f45
# via PyInventory (pyproject.toml)
django-import-export==4.1.1 \
--hash=sha256:16ecc5a9f0df46bde6eb278a3e65ebda0ee1db55656f36440e9fb83f40ab85a3 \
--hash=sha256:730ae2443a02b1ba27d8dba078a27ae9123adfcabb78161b4f130843607b3df9
# via PyInventory (pyproject.toml)
django-reversion==5.1.0 \
--hash=sha256:084d4f117d9e2b4e8dfdfaad83ebb34410a03eed6071c96089e6811fdea82ad3 \
--hash=sha256:3309821e5b6fceedcce6b6975f1a9c7fab6ae7c7d0e1276a90e345946fa0dcb8
# via django-reversion-compare
django-reversion-compare==0.17.0 \
--hash=sha256:02d13ed7994d24d505671d84a005c6f99d13ed92531fa457c63245b518f835ff \
--hash=sha256:bfb036f32943965d01132809f94b853531cf6c9e3607b8894149c82fe68eddaa
# via PyInventory (pyproject.toml)
django-tagulous==2.1.0 \
--hash=sha256:5ebba5a51f049f6df5f9d2a30eef431c0bf7cd35758aa0a42fc3351be4d239cd \
--hash=sha256:f629b54ad720052092785b0dce056dc6a68c7b63f8126075af9c25848b250bfd
# via PyInventory (pyproject.toml)
django-tinymce==4.1.0 \
--hash=sha256:02e3b70e940fd299f0fbef4315aee5c185664e1eb8cd396b176963954e4357c9 \
--hash=sha256:9804836e6d2b08de3b03a27c100f8c2e9633549913eff8b323678a10cd48b94e
# via PyInventory (pyproject.toml)
django-tools==0.56.2 \
--hash=sha256:29c25be814d74cd9f554d7d45bc205f5570e5feaa4232cbd09cc913c46b20c07 \
--hash=sha256:88a192f2873f0411b99ee1aba04f2779133284cd18a5c78976e8e4605ba5d7f7
# via PyInventory (pyproject.toml)
gunicorn==23.0.0 \
--hash=sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d \
--hash=sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec
# via
# PyInventory (pyproject.toml)
# django-tools
icdiff==2.0.7 \
--hash=sha256:f05d1b3623223dd1c70f7848da7d699de3d9a2550b902a8234d9026292fb5762 \
--hash=sha256:f79a318891adbf59a45e3a7694f5e1f18c5407065264637072ac8363b759866f
# via django-tools
idna==3.8 \
--hash=sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac \
--hash=sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603
# via requests
markdown-it-py==3.0.0 \
--hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \
--hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb
# via rich
mdurl==0.1.2 \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
# via markdown-it-py
packaging==24.1 \
--hash=sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002 \
--hash=sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124
# via gunicorn
pillow==10.4.0 \
--hash=sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885 \
--hash=sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea \
--hash=sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df \
--hash=sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5 \
--hash=sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c \
--hash=sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d \
--hash=sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd \
--hash=sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06 \
--hash=sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908 \
--hash=sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a \
--hash=sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be \
--hash=sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0 \
--hash=sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b \
--hash=sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80 \
--hash=sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a \
--hash=sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e \
--hash=sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9 \
--hash=sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696 \
--hash=sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b \
--hash=sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309 \
--hash=sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e \
--hash=sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab \
--hash=sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d \
--hash=sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060 \
--hash=sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d \
--hash=sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d \
--hash=sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4 \
--hash=sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3 \
--hash=sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6 \
--hash=sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb \
--hash=sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94 \
--hash=sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b \
--hash=sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496 \
--hash=sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0 \
--hash=sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319 \
--hash=sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b \
--hash=sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856 \
--hash=sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef \
--hash=sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680 \
--hash=sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b \
--hash=sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42 \
--hash=sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e \
--hash=sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597 \
--hash=sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a \
--hash=sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8 \
--hash=sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3 \
--hash=sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736 \
--hash=sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da \
--hash=sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126 \
--hash=sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd \
--hash=sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5 \
--hash=sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b \
--hash=sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026 \
--hash=sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b \
--hash=sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc \
--hash=sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46 \
--hash=sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2 \
--hash=sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c \
--hash=sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe \
--hash=sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984 \
--hash=sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a \
--hash=sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70 \
--hash=sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca \
--hash=sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b \
--hash=sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91 \
--hash=sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3 \
--hash=sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84 \
--hash=sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1 \
--hash=sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5 \
--hash=sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be \
--hash=sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f \
--hash=sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc \
--hash=sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9 \
--hash=sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e \
--hash=sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141 \
--hash=sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef \
--hash=sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22 \
--hash=sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27 \
--hash=sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e \
--hash=sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1
# via PyInventory (pyproject.toml)
pprintpp==0.4.0 \
--hash=sha256:b6b4dcdd0c0c0d75e4d7b2f21a9e933e5b2ce62b26e1a54537f9651ae5a5c01d \
--hash=sha256:ea826108e2c7f49dc6d66c752973c3fc9749142a798d6b254e1e301cfdbc6403
# via django-tools
pygments==2.18.0 \
--hash=sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199 \
--hash=sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a
# via rich
python-stdnum==1.20 \
--hash=sha256:111008e10391d54fb2afad2a10df70d5cb0c6c0a7ec82fec6f022cb8712961d3 \
--hash=sha256:ad2a2cf2eb025de408210235f36b4ae31252de3186240ccaa8126e117cb82690
# via bx-django-utils
pytz==2024.1 \
--hash=sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812 \
--hash=sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319
# via django-dbbackup
requests==2.32.3 \
--hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \
--hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6
# via PyInventory (pyproject.toml)
rich==13.8.0 \
--hash=sha256:2e85306a063b9492dffc86278197a60cbece75bcb766022f3436f567cae11bdc \
--hash=sha256:a5ac1f1cd448ade0d59cc3356f7db7a7ccda2c8cbae9c7a90c28ff463d3e91f4
# via django-reversion-compare
six==1.16.0 \
--hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \
--hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254
# via bleach
sqlparse==0.5.1 \
--hash=sha256:773dcbf9a5ab44a090f3441e2180efe2560220203dc2f8c0b0fa141e18b505e4 \
--hash=sha256:bb6b4df465655ef332548e24f08e205afc81b9ab86cb1c45657a7ff173a3a00e
# via
# django
# django-debug-toolbar
tablib==3.5.0 \
--hash=sha256:9821caa9eca6062ff7299fa645e737aecff982e6b2b42046928a6413c8dabfd9 \
--hash=sha256:f6661dfc45e1d4f51fa8a6239f9c8349380859a5bfaa73280645f046d6c96e33
# via django-import-export
urllib3==2.2.2 \
--hash=sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472 \
--hash=sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168
# via requests
webencodings==0.5.1 \
--hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \
--hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923
# via bleach

2194
uv.lock 100644

Plik diff jest za duży Load Diff