PyInventory 0.21.2__tar.gz → 0.21.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. {pyinventory-0.21.2 → pyinventory-0.21.4}/.editorconfig +0 -4
  2. {pyinventory-0.21.2 → pyinventory-0.21.4}/.gitignore +1 -0
  3. {pyinventory-0.21.2 → pyinventory-0.21.4}/.pre-commit-config.yaml +1 -7
  4. pyinventory-0.21.4/.run/Template Django tests.run.xml +24 -0
  5. pyinventory-0.21.4/.run/Template Python.run.xml +26 -0
  6. pyinventory-0.21.4/.run/manage.py --help.run.xml +25 -0
  7. pyinventory-0.21.4/.run/manage.py update_req.run.xml +25 -0
  8. pyinventory-0.21.4/.run/unittests ___all___.run.xml +24 -0
  9. {pyinventory-0.21.2 → pyinventory-0.21.4}/PKG-INFO +18 -4
  10. {pyinventory-0.21.2 → pyinventory-0.21.4}/README.md +17 -3
  11. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/__init__.py +1 -1
  12. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/admin/base.py +2 -2
  13. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/admin/item.py +11 -5
  14. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/admin/memo.py +3 -3
  15. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/forms.py +4 -2
  16. pyinventory-0.21.4/inventory_project/tests/test_readme_history.py +15 -0
  17. {pyinventory-0.21.2 → pyinventory-0.21.4}/uv.lock +154 -135
  18. pyinventory-0.21.2/.flake8 +0 -7
  19. pyinventory-0.21.2/inventory_project/manage.py +0 -41
  20. pyinventory-0.21.2/inventory_project/publish.py +0 -21
  21. pyinventory-0.21.2/inventory_project/tests/test_readme_history.py +0 -22
  22. {pyinventory-0.21.2 → pyinventory-0.21.4}/.github/workflows/tests.yml +0 -0
  23. {pyinventory-0.21.2 → pyinventory-0.21.4}/.idea/.gitignore +0 -0
  24. {pyinventory-0.21.2 → pyinventory-0.21.4}/.pre-commit-hooks.yaml +0 -0
  25. {pyinventory-0.21.2 → pyinventory-0.21.4}/AUTHORS +0 -0
  26. {pyinventory-0.21.2 → pyinventory-0.21.4}/LICENSE +0 -0
  27. {pyinventory-0.21.2 → pyinventory-0.21.4}/dist/.gitignore +0 -0
  28. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/admin/__init__.py +0 -0
  29. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/admin/location.py +0 -0
  30. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/admin/tagulous_fix.py +0 -0
  31. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/apps.py +0 -0
  32. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/checks.py +0 -0
  33. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/ckeditor_upload.py +0 -0
  34. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/constants.py +0 -0
  35. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/context_processors.py +0 -0
  36. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/locale/ca/LC_MESSAGES/django.mo +0 -0
  37. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/locale/ca/LC_MESSAGES/django.po +0 -0
  38. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/locale/de/LC_MESSAGES/django.mo +0 -0
  39. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/locale/de/LC_MESSAGES/django.po +0 -0
  40. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/locale/en/LC_MESSAGES/django.mo +0 -0
  41. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/locale/en/LC_MESSAGES/django.po +0 -0
  42. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/locale/es/LC_MESSAGES/django.mo +0 -0
  43. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/locale/es/LC_MESSAGES/django.po +0 -0
  44. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/management/__init__.py +0 -0
  45. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/management/commands/__init__.py +0 -0
  46. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/management/commands/seed_data.py +0 -0
  47. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/management/commands/tree.py +0 -0
  48. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/middlewares.py +0 -0
  49. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/migrations/0001_initial.py +0 -0
  50. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/migrations/0002_auto_20201017_2211.py +0 -0
  51. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/migrations/0003_auto_20201024_1830.py +0 -0
  52. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/migrations/0004_item_user_images.py +0 -0
  53. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/migrations/0005_serve_uploads_by_django_tools.py +0 -0
  54. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/migrations/0006_refactor_image_model.py +0 -0
  55. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/migrations/0007_add_file_attachment.py +0 -0
  56. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/migrations/0008_last_check_datetime.py +0 -0
  57. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/migrations/0009_add_memo.py +0 -0
  58. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/migrations/0010_version_protect_models.py +0 -0
  59. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/migrations/0011_parent_tree1.py +0 -0
  60. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/migrations/0012_parent_tree2.py +0 -0
  61. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/migrations/0013_alter_itemmodel_location.py +0 -0
  62. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/migrations/0014_alter_itemmodel_description_and_more.py +0 -0
  63. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/migrations/__init__.py +0 -0
  64. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/models/__init__.py +0 -0
  65. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/models/base.py +0 -0
  66. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/models/item.py +0 -0
  67. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/models/links.py +0 -0
  68. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/models/location.py +0 -0
  69. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/models/memo.py +0 -0
  70. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/parent_tree.py +0 -0
  71. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/permissions.py +0 -0
  72. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/request_dict.py +0 -0
  73. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/signals.py +0 -0
  74. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/string_utils.py +0 -0
  75. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/templates/admin/item/related_items.html +0 -0
  76. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/templates/admin/location/items.html +0 -0
  77. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/tests/__init__.py +0 -0
  78. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/tests/fixtures/__init__.py +0 -0
  79. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/tests/fixtures/users.py +0 -0
  80. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/tests/test_admin_location.py +0 -0
  81. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/tests/test_admin_location_empty_change_list_1.snapshot.html +0 -0
  82. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/tests/test_item_images.py +0 -0
  83. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/tests/test_link_model.py +0 -0
  84. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/tests/test_management_command_seed_data.py +0 -0
  85. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/tests/test_management_command_tree.py +0 -0
  86. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/tests/test_parent_tree.py +0 -0
  87. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory/tests/test_parent_tree_model.py +0 -0
  88. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/__init__.py +0 -0
  89. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/__main__.py +0 -0
  90. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/middlewares.py +0 -0
  91. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/settings/__init__.py +0 -0
  92. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/settings/local.py +0 -0
  93. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/settings/prod.py +0 -0
  94. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/settings/tests.py +0 -0
  95. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/templates/admin/base_site.html +0 -0
  96. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/templates/admin/login.html +0 -0
  97. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/tests/__init__.py +0 -0
  98. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/tests/fixtures.py +0 -0
  99. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/tests/mocks.py +0 -0
  100. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/tests/playwright_utils.py +0 -0
  101. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/tests/test_admin.py +0 -0
  102. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/tests/test_admin_item.py +0 -0
  103. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/tests/test_admin_item_auto_group_items_1.snapshot.html +0 -0
  104. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/tests/test_admin_item_login_1.snapshot.html +0 -0
  105. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/tests/test_admin_item_normal_user_create_minimal_item_1.snapshot.html +0 -0
  106. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/tests/test_admin_item_normal_user_create_minimal_item_2.snapshot.html +0 -0
  107. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/tests/test_admin_memo.py +0 -0
  108. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/tests/test_admin_memo_normal_user_create_minimal_item_1.snapshot.html +0 -0
  109. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/tests/test_admin_superuser_admin_index_1.snapshot.html +0 -0
  110. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/tests/test_inventory_commands.py +0 -0
  111. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/tests/test_inventory_commands_help_1.snapshot.txt +0 -0
  112. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/tests/test_migrations.py +0 -0
  113. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/tests/test_models_item.py +0 -0
  114. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/tests/test_playwright_admin.py +0 -0
  115. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/tests/test_project_setup.py +0 -0
  116. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/urls.py +0 -0
  117. {pyinventory-0.21.2 → pyinventory-0.21.4}/inventory_project/wsgi.py +0 -0
  118. {pyinventory-0.21.2 → pyinventory-0.21.4}/manage.py +0 -0
  119. {pyinventory-0.21.2 → pyinventory-0.21.4}/pyproject.toml +0 -0
@@ -15,9 +15,5 @@ insert_final_newline = false
15
15
  [*.py]
16
16
  max_line_length = 119
17
17
 
18
- [{Makefile,**.mk}]
19
- indent_style = tab
20
- insert_final_newline = false
21
-
22
18
  [{*.yaml,*.yml}]
23
19
  indent_size = 2
@@ -7,6 +7,7 @@ __pycache__
7
7
  *.orig
8
8
 
9
9
  !.github
10
+ !.run
10
11
  !.editorconfig
11
12
  !.flake8
12
13
  !.gitignore
@@ -1,13 +1,7 @@
1
1
  # pre-commit plugin configuration
2
2
  # See https://pre-commit.com for more information
3
- default_install_hook_types:
4
- - prepare-commit-msg
5
- - post-commit
6
- - post-rewrite
7
- - pre-push
8
-
9
3
  repos:
10
4
  - repo: https://github.com/jedie/cli-base-utilities
11
- rev: v0.23.0
5
+ rev: v0.23.3
12
6
  hooks:
13
7
  - id: update-readme-history
@@ -0,0 +1,24 @@
1
+ <component name="ProjectRunConfigurationManager">
2
+ <configuration default="true" type="DjangoTestsConfigurationType">
3
+ <module name="PyInventory" />
4
+ <option name="ENV_FILES" value="" />
5
+ <option name="INTERPRETER_OPTIONS" value="" />
6
+ <option name="PARENT_ENVS" value="true" />
7
+ <envs>
8
+ <env name="PYTHONUNBUFFERED" value="1" />
9
+ <env name="DJANGO_SETTINGS_MODULE" value="inventory_project.settings.tests" />
10
+ </envs>
11
+ <option name="SDK_HOME" value="" />
12
+ <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
13
+ <option name="IS_MODULE_SDK" value="true" />
14
+ <option name="ADD_CONTENT_ROOTS" value="false" />
15
+ <option name="ADD_SOURCE_ROOTS" value="false" />
16
+ <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
17
+ <option name="TARGET" value="" />
18
+ <option name="SETTINGS_FILE" value="" />
19
+ <option name="CUSTOM_SETTINGS" value="false" />
20
+ <option name="USE_OPTIONS" value="false" />
21
+ <option name="OPTIONS" value="" />
22
+ <method v="2" />
23
+ </configuration>
24
+ </component>
@@ -0,0 +1,26 @@
1
+ <component name="ProjectRunConfigurationManager">
2
+ <configuration default="true" type="PythonConfigurationType" factoryName="Python">
3
+ <module name="PyInventory" />
4
+ <option name="ENV_FILES" value="" />
5
+ <option name="INTERPRETER_OPTIONS" value="" />
6
+ <option name="PARENT_ENVS" value="true" />
7
+ <envs>
8
+ <env name="PYTHONUNBUFFERED" value="1" />
9
+ </envs>
10
+ <option name="SDK_HOME" value="" />
11
+ <option name="SDK_NAME" value="Python 3.12 (pyinventory_ynh)" />
12
+ <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
13
+ <option name="IS_MODULE_SDK" value="false" />
14
+ <option name="ADD_CONTENT_ROOTS" value="false" />
15
+ <option name="ADD_SOURCE_ROOTS" value="false" />
16
+ <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
17
+ <option name="SCRIPT_NAME" value="" />
18
+ <option name="PARAMETERS" value="" />
19
+ <option name="SHOW_COMMAND_LINE" value="false" />
20
+ <option name="EMULATE_TERMINAL" value="true" />
21
+ <option name="MODULE_MODE" value="false" />
22
+ <option name="REDIRECT_INPUT" value="false" />
23
+ <option name="INPUT_FILE" value="" />
24
+ <method v="2" />
25
+ </configuration>
26
+ </component>
@@ -0,0 +1,25 @@
1
+ <component name="ProjectRunConfigurationManager">
2
+ <configuration default="false" name="manage.py --help" type="PythonConfigurationType" factoryName="Python">
3
+ <module name="PyInventory" />
4
+ <option name="ENV_FILES" value="" />
5
+ <option name="INTERPRETER_OPTIONS" value="" />
6
+ <option name="PARENT_ENVS" value="true" />
7
+ <envs>
8
+ <env name="PYTHONUNBUFFERED" value="1" />
9
+ </envs>
10
+ <option name="SDK_HOME" value="" />
11
+ <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
12
+ <option name="IS_MODULE_SDK" value="true" />
13
+ <option name="ADD_CONTENT_ROOTS" value="true" />
14
+ <option name="ADD_SOURCE_ROOTS" value="true" />
15
+ <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
16
+ <option name="SCRIPT_NAME" value="$PROJECT_DIR$/manage.py" />
17
+ <option name="PARAMETERS" value="--help" />
18
+ <option name="SHOW_COMMAND_LINE" value="false" />
19
+ <option name="EMULATE_TERMINAL" value="true" />
20
+ <option name="MODULE_MODE" value="false" />
21
+ <option name="REDIRECT_INPUT" value="false" />
22
+ <option name="INPUT_FILE" value="" />
23
+ <method v="2" />
24
+ </configuration>
25
+ </component>
@@ -0,0 +1,25 @@
1
+ <component name="ProjectRunConfigurationManager">
2
+ <configuration default="false" name="manage.py update_req" type="PythonConfigurationType" factoryName="Python">
3
+ <module name="PyInventory" />
4
+ <option name="ENV_FILES" value="" />
5
+ <option name="INTERPRETER_OPTIONS" value="" />
6
+ <option name="PARENT_ENVS" value="true" />
7
+ <envs>
8
+ <env name="PYTHONUNBUFFERED" value="1" />
9
+ </envs>
10
+ <option name="SDK_HOME" value="" />
11
+ <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
12
+ <option name="IS_MODULE_SDK" value="true" />
13
+ <option name="ADD_CONTENT_ROOTS" value="true" />
14
+ <option name="ADD_SOURCE_ROOTS" value="true" />
15
+ <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
16
+ <option name="SCRIPT_NAME" value="$PROJECT_DIR$/manage.py" />
17
+ <option name="PARAMETERS" value="update_req" />
18
+ <option name="SHOW_COMMAND_LINE" value="false" />
19
+ <option name="EMULATE_TERMINAL" value="true" />
20
+ <option name="MODULE_MODE" value="false" />
21
+ <option name="REDIRECT_INPUT" value="false" />
22
+ <option name="INPUT_FILE" value="" />
23
+ <method v="2" />
24
+ </configuration>
25
+ </component>
@@ -0,0 +1,24 @@
1
+ <component name="ProjectRunConfigurationManager">
2
+ <configuration default="false" name="unittests ***all***" type="DjangoTestsConfigurationType">
3
+ <module name="PyInventory" />
4
+ <option name="ENV_FILES" value="" />
5
+ <option name="INTERPRETER_OPTIONS" value="" />
6
+ <option name="PARENT_ENVS" value="true" />
7
+ <envs>
8
+ <env name="PYTHONUNBUFFERED" value="1" />
9
+ <env name="DJANGO_SETTINGS_MODULE" value="inventory_project.settings.tests" />
10
+ </envs>
11
+ <option name="SDK_HOME" value="" />
12
+ <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
13
+ <option name="IS_MODULE_SDK" value="true" />
14
+ <option name="ADD_CONTENT_ROOTS" value="false" />
15
+ <option name="ADD_SOURCE_ROOTS" value="false" />
16
+ <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
17
+ <option name="TARGET" value="" />
18
+ <option name="SETTINGS_FILE" value="" />
19
+ <option name="CUSTOM_SETTINGS" value="false" />
20
+ <option name="USE_OPTIONS" value="false" />
21
+ <option name="OPTIONS" value="" />
22
+ <method v="2" />
23
+ </configuration>
24
+ </component>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyInventory
3
- Version: 0.21.2
3
+ Version: 0.21.4
4
4
  Summary: Web based management to catalog things including state and location etc. using Python/Django.
5
5
  Project-URL: Documentation, https://github.com/jedie/PyInventory
6
6
  Project-URL: Source, https://github.com/jedie/PyInventory
@@ -196,20 +196,34 @@ To make a new release, do this:
196
196
 
197
197
  [comment]: <> (✂✂✂ auto generated history start ✂✂✂)
198
198
 
199
+ * [v0.21.4](https://github.com/jedie/PyInventory/compare/v0.21.3...v0.21.4)
200
+ * 2025-09-21 - Because of PyPi download errors: release as v0.21.4
201
+ * [v0.21.3](https://github.com/jedie/PyInventory/compare/v0.21.2...v0.21.3)
202
+ * 2025-09-21 - Enhance change list filters by using RelatedOnlyFieldListFilter
203
+ * 2025-09-21 - Update requirements
204
+ * 2025-09-21 - Bugfix Memo changelist ordering
205
+ * 2025-09-20 - Code cleanup: Use format_html() with kwargs
206
+ * 2025-09-20 - Add type hints
207
+ * 2025-09-20 - Cleanup: We didn't have make files
208
+ * 2025-09-20 - Cleanup: Remove obsolete files
209
+ * 2025-09-20 - Add PyCharm run configs
210
+ * 2025-09-20 - pre-commit: remove "default_install_hook_types"
211
+ * 2025-09-20 - Remove obsolete config files
212
+ * 2025-09-20 - Update ReadmeHistoryTestCase
199
213
  * [v0.21.2](https://github.com/jedie/PyInventory/compare/v0.21.1...v0.21.2)
200
214
  * 2025-09-09 - Update project, e.g.: Darker -> Ruff and fix tests
201
215
  * 2025-05-01 - Fix local dev server: Don't enforce https
202
216
  * [v0.21.1](https://github.com/jedie/PyInventory/compare/v0.21.0...v0.21.1)
203
217
  * 2025-05-01 - Replace setuptools with hatchling
204
218
  * 2025-04-30 - Update requirements and some small code parts
219
+
220
+ <details><summary>Expand older history entries ...</summary>
221
+
205
222
  * [v0.21.0](https://github.com/jedie/PyInventory/compare/v0.20.1...v0.21.0)
206
223
  * 2025-03-23 - Bugfix publish: setuptools missing
207
224
  * 2025-03-23 - Migrate "pip-tools" -> "uv" and remove tox
208
225
  * [v0.20.1](https://github.com/jedie/PyInventory/compare/v0.20.0...v0.20.1)
209
226
  * 2024-09-05 - switched to https://github.com/jazzband/django-tinymce/
210
-
211
- <details><summary>Expand older history entries ...</summary>
212
-
213
227
  * [v0.20.0](https://github.com/jedie/PyInventory/compare/v0.19.3...v0.20.0)
214
228
  * 2024-09-05 - Replace django-ckeditor with django-prose-editor and fix tests
215
229
  * 2024-09-05 - Project updates
@@ -166,20 +166,34 @@ To make a new release, do this:
166
166
 
167
167
  [comment]: <> (✂✂✂ auto generated history start ✂✂✂)
168
168
 
169
+ * [v0.21.4](https://github.com/jedie/PyInventory/compare/v0.21.3...v0.21.4)
170
+ * 2025-09-21 - Because of PyPi download errors: release as v0.21.4
171
+ * [v0.21.3](https://github.com/jedie/PyInventory/compare/v0.21.2...v0.21.3)
172
+ * 2025-09-21 - Enhance change list filters by using RelatedOnlyFieldListFilter
173
+ * 2025-09-21 - Update requirements
174
+ * 2025-09-21 - Bugfix Memo changelist ordering
175
+ * 2025-09-20 - Code cleanup: Use format_html() with kwargs
176
+ * 2025-09-20 - Add type hints
177
+ * 2025-09-20 - Cleanup: We didn't have make files
178
+ * 2025-09-20 - Cleanup: Remove obsolete files
179
+ * 2025-09-20 - Add PyCharm run configs
180
+ * 2025-09-20 - pre-commit: remove "default_install_hook_types"
181
+ * 2025-09-20 - Remove obsolete config files
182
+ * 2025-09-20 - Update ReadmeHistoryTestCase
169
183
  * [v0.21.2](https://github.com/jedie/PyInventory/compare/v0.21.1...v0.21.2)
170
184
  * 2025-09-09 - Update project, e.g.: Darker -> Ruff and fix tests
171
185
  * 2025-05-01 - Fix local dev server: Don't enforce https
172
186
  * [v0.21.1](https://github.com/jedie/PyInventory/compare/v0.21.0...v0.21.1)
173
187
  * 2025-05-01 - Replace setuptools with hatchling
174
188
  * 2025-04-30 - Update requirements and some small code parts
189
+
190
+ <details><summary>Expand older history entries ...</summary>
191
+
175
192
  * [v0.21.0](https://github.com/jedie/PyInventory/compare/v0.20.1...v0.21.0)
176
193
  * 2025-03-23 - Bugfix publish: setuptools missing
177
194
  * 2025-03-23 - Migrate "pip-tools" -> "uv" and remove tox
178
195
  * [v0.20.1](https://github.com/jedie/PyInventory/compare/v0.20.0...v0.20.1)
179
196
  * 2024-09-05 - switched to https://github.com/jazzband/django-tinymce/
180
-
181
- <details><summary>Expand older history entries ...</summary>
182
-
183
197
  * [v0.20.0](https://github.com/jedie/PyInventory/compare/v0.19.3...v0.20.0)
184
198
  * 2024-09-05 - Replace django-ckeditor with django-prose-editor and fix tests
185
199
  * 2024-09-05 - Project updates
@@ -8,5 +8,5 @@
8
8
  """
9
9
 
10
10
  # See https://packaging.python.org/en/latest/specifications/version-specifiers/
11
- __version__ = '0.21.2'
11
+ __version__ = '0.21.4'
12
12
  __author__ = 'Jens Diemer <PyInventory@jensdiemer.de>'
@@ -49,7 +49,7 @@ class BaseUserAdmin(CompareVersionAdmin):
49
49
  if request.user.is_superuser:
50
50
  # Superuser sees entries from all users -> Add "By user" filter
51
51
  list_filter = list(list_filter)
52
- list_filter.insert(0, 'user')
52
+ list_filter.insert(0, ('user', admin.RelatedOnlyFieldListFilter))
53
53
 
54
54
  return list_filter
55
55
 
@@ -67,7 +67,7 @@ class BaseUserAdmin(CompareVersionAdmin):
67
67
  class BaseImageModelInline(UserInlineMixin, SortableInlineAdminMixin, admin.TabularInline):
68
68
  def preview(self, instance):
69
69
  return format_html(
70
- (
70
+ format_string=(
71
71
  '<a href="{url}" title="{name}"'
72
72
  ' target="_blank" class="image_file_input_preview">'
73
73
  '<img style="width:9em;" src="{url}"></a>'
@@ -71,10 +71,10 @@ class ItemModelAdmin(TagulousModelAdminFix, ImportExportMixin, SortableAdminMixi
71
71
  item = path[-1]
72
72
  url = reverse('admin:inventory_itemmodel_change', args=[obj.pk])
73
73
  return format_html(
74
- '<a href="{}">{}<strong>{}</strong></a>',
75
- url,
76
- prefixes,
77
- item,
74
+ format_string='<a href="{url}">{prefixes}<strong>{item}</strong></a>',
75
+ url=url,
76
+ prefixes=prefixes,
77
+ item=item,
78
78
  )
79
79
 
80
80
  def get_queryset(self, request):
@@ -94,7 +94,13 @@ class ItemModelAdmin(TagulousModelAdminFix, ImportExportMixin, SortableAdminMixi
94
94
  list_display = ('producer', 'item', 'kind', 'location', 'received_date', 'update_dt')
95
95
  ordering = ('path_str',)
96
96
  list_display_links = ()
97
- list_filter = (LimitTreeDepthListFilter, 'kind', 'location', 'producer', 'tags')
97
+ list_filter = (
98
+ LimitTreeDepthListFilter,
99
+ ('kind', admin.RelatedOnlyFieldListFilter),
100
+ ('location', admin.RelatedOnlyFieldListFilter),
101
+ ('producer', admin.RelatedOnlyFieldListFilter),
102
+ ('tags', admin.RelatedOnlyFieldListFilter),
103
+ )
98
104
  search_fields = ('name', 'description', 'kind__name', 'tags__name')
99
105
  fieldsets = (
100
106
  (
@@ -1,7 +1,7 @@
1
1
  import logging
2
2
 
3
3
  import tagulous
4
- from adminsortable2.admin import SortableAdminMixin, SortableInlineAdminMixin
4
+ from adminsortable2.admin import SortableAdminBase, SortableInlineAdminMixin
5
5
  from django.contrib import admin
6
6
  from django.utils.translation import gettext_lazy as _
7
7
  from import_export.admin import ImportExportMixin
@@ -35,7 +35,7 @@ class MemoModelResource(ModelResource):
35
35
 
36
36
 
37
37
  @admin.register(MemoModel)
38
- class MemoModelAdmin(TagulousModelAdminFix, ImportExportMixin, SortableAdminMixin, BaseUserAdmin):
38
+ class MemoModelAdmin(TagulousModelAdminFix, ImportExportMixin, SortableAdminBase, BaseUserAdmin):
39
39
  def get_max_order(self, request, obj=None):
40
40
  # Work-a-round for: https://github.com/jrief/django-admin-sortable2/issues/341
41
41
  return 0
@@ -44,7 +44,7 @@ class MemoModelAdmin(TagulousModelAdminFix, ImportExportMixin, SortableAdminMixi
44
44
  list_display = ('name', 'update_dt')
45
45
  ordering = ('-update_dt',)
46
46
  list_display_links = ('name',)
47
- list_filter = ('tags',)
47
+ list_filter = (('tags', admin.RelatedOnlyFieldListFilter),)
48
48
  search_fields = ('name', 'memo', 'tags__name')
49
49
  fieldsets = (
50
50
  (
@@ -1,5 +1,7 @@
1
1
  from django import forms
2
2
  from django.core.exceptions import FieldDoesNotExist
3
+ from django.db.models import QuerySet
4
+ from django.db.models.options import Options
3
5
 
4
6
  from inventory.request_dict import get_request_dict
5
7
 
@@ -17,8 +19,8 @@ class OnlyUserRelationsModelForm(forms.ModelForm):
17
19
  if not hasattr(formfield, 'queryset'):
18
20
  continue
19
21
 
20
- queryset = formfield.queryset
21
- opts = queryset.model._meta
22
+ queryset: QuerySet = formfield.queryset
23
+ opts: Options = queryset.model._meta
22
24
  try:
23
25
  opts.get_field('user')
24
26
  except FieldDoesNotExist:
@@ -0,0 +1,15 @@
1
+ from unittest import TestCase, skipIf
2
+
3
+ from cli_base.cli_tools.constants import GITHUB_ACTION
4
+ from cli_base.cli_tools.git_history import update_readme_history
5
+
6
+
7
+ class ReadmeHistoryTestCase(TestCase):
8
+ @skipIf(
9
+ # After a release the history may be "changed" because of version bump.
10
+ # We should not block merge requests because of this.
11
+ GITHUB_ACTION,
12
+ reason='Skip on github actions',
13
+ )
14
+ def test_readme_history(self):
15
+ update_readme_history(raise_update_error=True)