diff options
Diffstat (limited to 'python-django-tools.spec')
| -rw-r--r-- | python-django-tools.spec | 1601 |
1 files changed, 1601 insertions, 0 deletions
diff --git a/python-django-tools.spec b/python-django-tools.spec new file mode 100644 index 0000000..f9a0245 --- /dev/null +++ b/python-django-tools.spec @@ -0,0 +1,1601 @@ +%global _empty_manifest_terminate_build 0 +Name: python-django-tools +Version: 0.54.0 +Release: 1 +Summary: miscellaneous tools for Django based projects +License: GPL-3.0-or-later +URL: https://github.com/jedie/django-tools/ +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/a5/43/8479c7e30a5bf6ddbc3c84aec45ec5a31b10e312e2c5a97524f9f287a7a9/django-tools-0.54.0.tar.gz +BuildArch: noarch + +Requires: python3-bleach +Requires: python3-bx_py_utils +Requires: python3-django +Requires: python3-icdiff +Requires: python3-pprintpp + +%description +``` +### SetRequestDebugMiddleware +middleware to add debug bool attribute to request object. +More info: [./debug/README.creole](https://github.com/jedie/django-tools/blob/master/django_tools/debug/README.creole) +### TracebackLogMiddleware +Put traceback in log by call [logging.exception()](https://docs.python.org/3/library/logging.html#logging.Logger.exception) on `process_exception()` +Activate with: +``` +MIDDLEWARE_CLASSES = ( + 'django_tools.middlewares.TracebackLogMiddleware.TracebackLogMiddleware', +) +``` +### FnMatchIps() - Unix shell-style wildcards in INTERNAL_IPS / ALLOWED_HOSTS +settings.py e.g.: +``` +from django_tools.settings_utils import FnMatchIps +INTERNAL_IPS = FnMatchIps(["127.0.0.1", "::1", "192.168.*.*", "10.0.*.*"]) +ALLOWED_HOSTS = FnMatchIps(["127.0.0.1", "::1", "192.168.*.*", "10.0.*.*"]) +``` +### StdoutStderrBuffer() +redirect stdout + stderr to a string buffer. e.g.: +``` +from django_tools.unittest_utils.stdout_redirect import StdoutStderrBuffer +with StdoutStderrBuffer() as buffer: + print("foo") +output = buffer.get_output() # contains "foo\n" +``` +### Management commands +#### permission_info +List all permissions for one django user. +(Needs `'django_tools'` in INSTALLED_APPS) +e.g.: +``` +$ ./manage.py permission_info +No username given! +All existing users are: +foo, bar, john, doe +$ ./manage.py permission_info foo +All permissions for user 'test_editor': + is_active : yes + is_staff : yes + is_superuser : no +[*] admin.add_logentry +[*] admin.change_logentry +[*] admin.delete_logentry +[ ] auth.add_group +[ ] auth.add_permission +[ ] auth.add_user +``` +#### logging_info +Shows a list of all loggers and marks which ones are configured in settings.LOGGING: +``` +$ ./manage.py logging_info +``` +#### nice_diffsettings +Similar to django 'diffsettings', but used pretty-printed representation: +``` +$ ./manage.py nice_diffsettings +``` +#### database_info +Just display some information about the used database and connections: +``` +$ ./manage.py database_info +``` +#### list_models +Just list all existing models in app_label.ModelName format. Useful to use this in 'dumpdata' etc: +``` +$ ./manage.py list_models +``` +### ..all others… +There exist many miscellaneous stuff. Look in the source, luke! +## Backwards-incompatible changes +Old changes archived in git history here: +* [>=v0.47](https://github.com/jedie/django-tools/tree/v0.49.0#backwards-incompatible-changes) +* [>=v0.35](https://github.com/jedie/django-tools/tree/v0.35.0#backwards-incompatible-changes) +### v0.51 +All Selenium helper are deprecated, please migrate to [Playwright](https://playwright.dev/python/) ;) +### v0.50 +Removed old selenium helper function, [deprecated since v0.43](https://github.com/jedie/django-tools/tree/v0.43.0#v043) +Make all Selenium web driver instances persistent for the complete test run session. +This speedup tests and fixed some bugs in Selenium. +This result in the same browser/webdriver settings for all test classes! +## Django compatibility +| django-tools | django version | python | +| ---------------- | -------------- | --------------- | +| >= v0.52.0 | 3.2, 4.0, 4.1 | 3.8, 3.9, 3.10 | +| >= v0.50.0 | 2.2, 3.2, 4.0 | 3.8, 3.9, 3.10 | +| >= v0.49.0 | 2.2, 3.1, 3.2 | 3.7, 3.8, 3.9 | +| >= v0.47.0 | 2.2, 3.0, 3.1 | >= 3.6, pypy3 | +| >= v0.39 | 1.11, 2.0 | 3.5, 3.6, pypy3 | +| >= v0.38.1 | 1.8, 1.11 | 3.5, 3.6, pypy3 | +| >= v0.38.0 | 1.8, 1.11 | 3.5, 3.6 | +| >= v0.37.0 | 1.8, 1.11 | 3.4, 3.5 | +| >= v0.33.0 | 1.8, 1.11 | 2.7, 3.4, 3.5 | +| v0.30.1-v0.32.14 | 1.8, 1.9, 1.10 | 2.7, 3.4, 3.5 | +| v0.30 | 1.8, 1.9 | 2.7, 3.4 | +| v0.29 | 1.6 - 1.8 | 2.7, 3.4 | +| v0.26 | <=1.6 | | +| v0.25 | <=1.4 | | +(See also combinations for [tox in pyproject.toml](https://github.com/jedie/django-tools/blob/master/pyproject.toml)) +## history +* *dev* - [compare v0.54.0...main](https://github.com/jedie/django-tools/compare/v0.54.0...main) + * TBC +* [v0.54.0 - 15.09.2022](https://github.com/jedie/django-tools/compare/v0.53.0...v0.54.0) + * Run [safety](https://github.com/pyupio/safety) in CI pipeline. + * NEW: `SyslogHandler` for easy logging to `syslog` + * Replace creole README with markdown +* [v0.53.0 - 18.08.2022](https://github.com/jedie/django-tools/compare/v0.52.0...v0.53.0) + * NEW: `MassContextManagerBase`, `DenyStdWrite` + Updated: `StdoutStderrBuffer` + * Enhance `run_testserver` command + * Small test project setup updates +* [v0.52.0 - 17.08.2022](https://github.com/jedie/django-tools/compare/v0.51.0...v0.52.0) + * Move `run_testserver` management command from `django_tools_test_app` to `django_tools` and polish it. + * Restrict `AlwaysLoggedInAsSuperUserMiddleware` to the admin. + * Test with Django 3.2, 4.0 and 4.1 +* [v0.51.0 - 26.07.2022](https://github.com/jedie/django-tools/compare/v0.50.0...v0.51.0) + * NEW: `check_editor_config()` to check editor config and line length in projects + * DEPRECATE all Selenium helper, please migrate to Playwright ;) + * NEW: [Playwright](https://playwright.dev/python/) base Unittest class and login helper +* [v0.50.0 - 29.05.2022](https://github.com/jedie/django-tools/compare/v0.49.0...v0.50.0) + * Rename git "master" branch to "main" + * Use [webdriver-manager](https://github.com/SergeyPirogov/webdriver_manager) to setup selenium web drivers + * CHANGE: Now all web driver instances are cached and reused for the complete test run! + * Use [darker](https://github.com/akaihola/darker) for code formatting + * Update test matrix: Add Python 3.10 and Django v4.0 (remove Python 3.7 and Django 3.1) +* v0.49.0 - 22.11.2021 - [compare v0.48.3...v0.49.0](https://github.com/jedie/django-tools/compare/v0.48.3...v0.49.0) + * NEW: `VersionProtectBaseModel` - Protect a model against overwriting a newer entry with an older one, by adding a auto increment version number. + * NEW: `AlwaysLoggedInAsSuperUserMiddleware` useful for local dev server run to auto login into Django Admin + * Enhance Selenium test helpers and [fix #21: Set chrome accept_languages in headless mode](https://github.com/jedie/django-tools/issues/21) + * Update project: Tests, code-style etc. +* v0.48.3 - 20.12.2020 - [compare v0.47.2...v0.48.3](https://github.com/jedie/django-tools/compare/v0.47.2...v0.48.3) + * NEW: `ImageDummy().in_memory_image_file()` useful for e.g.: POST a image upload via Django's test client +* v0.48.2 - 06.12.2020 - [compare v0.47.1...v0.48.2](https://github.com/jedie/django-tools/compare/v0.47.1...v0.48.2) + * Bugfix "Serve User Media File": Create tokens via migrations and handle if tokens not exists +* v0.48.1 - 06.12.2020 - [compare v0.47.0...v0.48.1](https://github.com/jedie/django-tools/compare/v0.47.0...v0.48.1) + * Add migration file to "Serve User Media File" +* v0.48.0 - 06.12.2020 - [compare v0.47.0...v0.48.0](https://github.com/jedie/django-tools/compare/v0.47.0...v0.48.0) + * NEW: "Serve User Media File" reuseable app + * NEW: django_tools.unittest_utils.signals.SignalsContextManager + * Update `installed_apps_utils.get_filtered_apps()` and support app config entries in `settings.INSTALLED_APPS` +* v0.47.0 - 26.11.2020 - [compare v0.46.1...v0.47.0](https://github.com/jedie/django-tools/compare/v0.46.1...v0.47.0) + * updates for newer django versions + * NEW: assert_warnings(), assert_no_warnings() and assert_in_logs() + * remove broken LoggingBuffer() + * update project setup, fix tests and pipelines +* v0.46.1 - 19.02.2020 - [compare v0.46.0...v0.46.1](https://github.com/jedie/django-tools/compare/v0.46.0...v0.46.1) + * less restricted dependency specification + * NEW: `"django_tools.middlewares.LogHeaders.LogRequestHeadersMiddleware"` + * SeleniumChromiumTestCase: set "accept_languages" and disable "headless" mode, see also: [https://github.com/jedie/django-tools/issues/21](https://github.com/jedie/django-tools/issues/21) +* v0.46.0 - 13.02.2020 - [compare v0.45.3...v0.46.0](https://github.com/jedie/django-tools/compare/v0.45.3...v0.46.0) + * `dynamic_site` was removed. Please use e.g.: [django-hosts](https://github.com/jazzband/django-hosts) + * modernize project setup and use `poetry` + * remove `lxml` decency by using [bleach](https://github.com/mozilla/bleach) for `html_utils.html2text` + * update code and code style +* v0.45.3 - 25.08.2019 - [compare v0.45.2...v0.45.3](https://github.com/jedie/django-tools/compare/v0.45.2...v0.45.3) + * Add `excepted_exit_code` to `django_tools.unittest_utils.django_command.DjangoCommandMixin` to it's possible to test errors in manage commands +* v0.45.2 - 26.06.2019 - [compare v0.45.1...v0.45.2](https://github.com/jedie/django-tools/compare/v0.45.1...v0.45.2) + * NEW: `django_tools.log_utils.throttle_admin_email_handler.ThrottledAdminEmailHandler` +* v0.45.1 - 03.04.2019 - [compare v0.45.0...v0.45.1](https://github.com/jedie/django-tools/compare/v0.45.0...v0.45.1) + * Bugfix ValueError in `django_tools.unittest_utils.email.print_mailbox` +* v0.45.0 - 01.04.2019 - [compare v0.44.2...v0.45.0](https://github.com/jedie/django-tools/compare/v0.44.2...v0.45.0) + * NEW: `OverwriteFileSystemStorage` with backup functionality + * NEW: `print_exc_plus()` - traceback with a listing of all the local variables + * NEW: `assert_pformat_equal` with `pprintpp` and `icdiff` + * NEW: `assert_filenames_and_content` +* v0.44.2 - 02.01.2019 - [compare v0.44.1...v0.44.2](https://github.com/jedie/django-tools/compare/v0.44.1...v0.44.2) + * Handle errors like: [https://github.com/andymccurdy/redis-py/issues/995](https://github.com/andymccurdy/redis-py/issues/995) +* v0.44.1 - 02.01.2019 - [compare v0.44.0...v0.44.1](https://github.com/jedie/django-tools/compare/v0.44.0...v0.44.1) + * `LoggingBuffer`: Don't deactivate existing log handler, just append the buffer handler. +* v0.44.0 - 13.12.2018 - [compare v0.43.2...v0.44.0](https://github.com/jedie/django-tools/compare/v0.43.2...v0.44.0) + * NEW: `django_file = ImageDummy().create_django_file_info_image(text="")` e.g.: for attach to `models.ImageField()` + * Make `mockup.ImageDummy()` usable even if django-filer is not installed. + * `mockup.ImageDummy()` default image format changed from png to jpeg + * Cleanup: remove old, since v0.35 deprecated mockup image API +* v0.43.2 - 11.12.2018 - [compare v0.43.1...v0.43.2](https://github.com/jedie/django-tools/compare/v0.43.1...v0.43.2) + * Bugfix Selenium refactor: Use the class with the same functionality if old usage places are used. +* v0.43.1 - 11.12.2018 - [compare v0.43.0...v0.43.1](https://github.com/jedie/django-tools/compare/v0.43.0...v0.43.1) + * Bugfix: Selenium test cases: clear `window.localStorage` after test run +* v0.43.0 - 11.12.2018 - [compare v0.42.4...v0.43.0](https://github.com/jedie/django-tools/compare/v0.42.4...v0.43.0) + * Refactor selenium helpers + * Split selenium test cases: with and without Django StaticLiveServerTestCase + * NEW: Selenium helper to access `window.localStorage` +* v0.42.4 - 12.10.2018 - [compare v0.42.3...v0.42.4](https://github.com/jedie/django-tools/compare/v0.42.3...v0.42.4) + * Add `request` object to `TestUserMixin.login()` (needed for e.g.: django-axes auth backend) +* v0.42.3 - 10.10.2018 - [compare v0.42.2...v0.42.3](https://github.com/jedie/django-tools/compare/v0.42.2...v0.42.3) + * NEW: * `assertments.assert_is_dir`, `assertments.assert_is_file`, `assertments.assert_path_not_exists` +* v0.42.2 - 18.09.2018 - [compare v0.42.1...v0.42.2](https://github.com/jedie/django-tools/compare/v0.42.1...v0.42.2) + * NEW: `assert_installed_apps()` - Check entries in settings.INSTALLED_APPS +* v0.42.1 - 17.09.2018 - [compare v0.42.0...v0.42.1](https://github.com/jedie/django-tools/compare/v0.42.0...v0.42.1) + * NEW: `django_tools.unittest_utils.assertments.assert_language_code` - Check if given language_code is in settings.LANGUAGES +* v0.42.0 - 07.09.2018 - [compare v0.41.0...v0.42.0](https://github.com/jedie/django-tools/compare/v0.41.0...v0.42.0) + * remove all celery stuff + * NEW: `$ ./manage.py logging_info` Shows a list of all loggers and marks which ones are configured in settings.LOGGING + * manage commands `list_models` and `nice_diffsettings` are moved from seperate apps +* v0.41.0 - 28.08.2018 - [compare v0.40.6...v0.41.0](https://github.com/jedie/django-tools/compare/v0.40.6...v0.41.0) + * NEW: `unittest_utils/assertments.py` with some common assert functions + * Remove `@task_always_eager()` decorator +* v0.40.6 - 28.08.2018 - [compare v0.40.5...v0.40.6](https://github.com/jedie/django-tools/compare/v0.40.5...v0.40.6) + * Bugfix `@task_always_eager()` decorator +* v0.40.5 - 27.08.2018 - [compare v0.40.4...v0.40.5](https://github.com/jedie/django-tools/compare/v0.40.4...v0.40.5) + * Bugfix `DjangoCommandMixin.call_manage_py()`: Use the given `manage.py` filename +* v0.40.4 - 21.08.2018 - [compare v0.40.3...v0.40.4](https://github.com/jedie/django-tools/compare/v0.40.3...v0.40.4) + * NEW: `django_tools.debug.delay` to simulate longer processing time by set a delay via GET parameter (see above) +* v0.40.3 - 18.07.2018 - [compare v0.40.2...v0.40.3](https://github.com/jedie/django-tools/compare/v0.40.2...v0.40.3) + * Enhance selenium test cases: + * NEW: `assert_visible_by_id()` + * NEW: `assert_clickable_by_id()` + * NEW: `assert_clickable_by_xpath()` + * add `desired_capabilities` to firefox and chrome test cases + * enable logging in chrome test case + * NEW: `assert_in_browser_log()` in chrome test case +* v0.40.2 - 04.07.2018 - [compare v0.40.1...v0.40.2](https://github.com/jedie/django-tools/compare/v0.40.1...v0.40.2) + * Bugfix selenium Test Case if driver is None + * Bugfix django compatibility +* v0.40.1 - 28.06.2018 - [compare v0.40.0...v0.40.1](https://github.com/jedie/django-tools/compare/v0.40.0...v0.40.1) + * Bugfix selenium test case if executable can't be found. +* v0.40.0 - 15.06.2018 - [compare v0.39.6...v0.40.0](https://github.com/jedie/django-tools/compare/v0.39.6...v0.40.0) + * NEW: selenium chrome and firefox test cases in `django_tools.unittest_utils.selenium_utils` + * Fix test project and add `run_test_project_dev_server.sh` for easy test + * Fixing tests +* v0.39.6 - 04.05.2018 - [compare v0.39.5...v0.39.6](https://github.com/jedie/django-tools/compare/v0.39.5...v0.39.6) + * Enhance model instance unittest code generator +* v0.39.5 - 24.04.2018 - [compare v0.39.4...v0.39.5](https://github.com/jedie/django-tools/compare/v0.39.4...v0.39.5) + * NEW: Model instance unittest code generator (see above) +* v0.39.4 - 06.04.2018 - [compare v0.39.3...v0.39.4](https://github.com/jedie/django-tools/compare/v0.39.3...v0.39.4) + * NEW: `django_tools.unittest_utils.logging_utils.FilterAndLogWarnings` and `django_tools.unittest_utils.logging_utils.CutPathnameLogRecordFactory` +* v0.39.3 - 22.03.2018 - [compare v0.39.2...v0.39.3](https://github.com/jedie/django-tools/compare/v0.39.2...v0.39.3) + * `django_tools.permissions.get_filtered_permissions` has new keyword argument: `exclude_actions` +* v0.39.2 - 22.03.2018 - [compare v0.39.1...v0.39.2](https://github.com/jedie/django-tools/compare/v0.39.1...v0.39.2) + * NEW: `django_tools.parler_utils.parler_fixtures.ParlerDummyGenerator` + * NEW: `django_tools.fixture_tools.languages.iter_languages` +* v0.39.1 - 19.03.2018 - [compare v0.39.0...v0.39.1](https://github.com/jedie/django-tools/compare/v0.39.0...v0.39.1) + * NEW: `django_tools.unittest_utils.email.print_mailbox()` + * minor updates +* v0.39.0 - 02.03.2018 - [compare v0.38.9...v0.39.0](https://github.com/jedie/django-tools/compare/v0.38.9...v0.39.0) + * NEW: Isolated Filesystem decorator / context manager + * Backwards-incompatible change: file renamed `django_tools/unittest_utils/{celery.py => celery_utils.py`} + * Skip run test with Django 1.8 and run tests with Django 1.11 and 2.0 +* v0.38.9 - 05.02.2018 - [compare v0.38.8...v0.38.9](https://github.com/jedie/django-tools/compare/v0.38.8...v0.38.9) + * lowering log level on missing permissions from "error" to "debug" +* v0.38.8 - 05.02.2018 - [compare v0.38.7...v0.38.8](https://github.com/jedie/django-tools/compare/v0.38.7...v0.38.8) + * send mail: use from celery import shared_task instead of djcelery_transactions +* v0.38.7 - 15.01.2018 - [compare v0.38.6...v0.38.7](https://github.com/jedie/django-tools/compare/v0.38.6...v0.38.7) + * Add missing arguments (like "attachments", "cc" etc.) to `django_tools.mail.send_mail.SendMailCelery` +* v0.38.6 - 10.01.2018 - [compare v0.38.4...v0.38.5](https://github.com/jedie/django-tools/compare/v0.38.4...v0.38.5) + * NEW: `./manage.py clear_cache` + * Display POST data in browser debug (`django_tools.unittest_utils.BrowserDebug.debug_response`) +* v0.38.5 - 02.01.2018 - [compare v0.38.4...v0.38.5](https://github.com/jedie/django-tools/compare/v0.38.4...v0.38.5) + * NEW: Helper to assert django message framework output in unittests: + * `BaseUnittestCase.get_messages()`: return a list of all messages + * `BaseTestCase.assertMessages()`: compare messages + * `BaseTestCase.assertResponse()`: has new keyword argument `messages` + * NEW: `BaseUnittestCase.assert_exception_startswith()` +* v0.38.4 - 28.12.2017 - [compare v0.38.3...v0.38.4](https://github.com/jedie/django-tools/compare/v0.38.3...v0.38.4) + * Bugfix attach user group on existing user in: `django_tools.unittest_utils.user.get_or_create_user` +* v0.38.3 - 28.12.2017 - [compare v0.38.2...v0.38.3](https://github.com/jedie/django-tools/compare/v0.38.2...v0.38.3) + * Bugfix: `unittest_utils.user.get_or_create_group` also removes obsolete permissions, too. +* v0.38.2 - 27.12.2017 - [compare v0.38.1...v0.38.2](https://github.com/jedie/django-tools/compare/v0.38.1...v0.38.2) + * NEW: `./manage.py update_permissions` +* v0.38.1 - 21.12.2017 - [compare v0.38.0...v0.38.1](https://github.com/jedie/django-tools/compare/v0.38.0...v0.38.1) + * refactor travis/tox/pytest/coverage stuff + * Tests can be run via `python3 setup.py tox` and/or `python3 setup.py test` + * Test also with pypy3 on Travis CI. +* v0.38.0 - 19.12.2017 - [compare v0.37.0...v0.38.0](https://github.com/jedie/django-tools/compare/v0.37.0...v0.38.0) + * NEW: `django_tools.unittest_utils.user.get_or_create_group` + * NEW: `django_tools.unittest_utils.user.get_or_create_user` + * NEW: `django_tools.unittest_utils.user.get_or_create_user_and_group` + * NEW: `BaseUnittestCase.get_admin_change_url()` and `BaseUnittestCase.get_admin_add_url()` + * NEW: `BaseUnittestCase.assert_startswith()` and `BaseUnittestCase.assert_endswith()` +* v0.37.0 - 11.12.2017 - [compare v0.36.0...v0.37.0](https://github.com/jedie/django-tools/compare/v0.36.0...v0.37.0) + * Skip official support for python v2 (remove from text matrix) + * NEW: `./manage.py permission_info`: Display a list of all permissions for one django user + * NEW: `django_tools.permissions.get_filtered_permissions()` and `django_tools.permissions.pprint_filtered_permissions()` + * `django_tools.settings_utils.InternalIps` was renamed to `FnMatchIps` and can be also used for **ALLOWED_HOSTS** + * Bugfix/Enhance permission helpers +* v0.36.0 - 20.11.2017 - [compare v0.35.0...v0.36.0](https://github.com/jedie/django-tools/compare/v0.35.0...v0.36.0) + * NEW: `./manage.py database_info` + * Bugfix: **ModelPermissionMixin** + * Dynamic Sites is no longer maintained and tests are deactivated. It's currently not compatible with all django versions. +* v0.35.0 - 26.09.2017 - [compare v0.34.0...v0.35.0](https://github.com/jedie/django-tools/compare/v0.34.0...v0.35.0) + * CHANGE: The dummy image generation function in `django_tools.unittest_utils.mockup` has a new API. +* v0.34.0 - 18.09.2017 - [compare v0.33.0...v0.34.0](https://github.com/jedie/django-tools/compare/v0.33.0...v0.34.0) + * CHANGE: The test usernames changed and spaces was replace with underscores e.g.: "staff test user" -> "staff_test_user" + * Bugfix in mockup.create_pil_image: Created images has wrong sizes +* v0.33.0 - 11.07.2017 - [compare v0.32.14...v0.33.0](https://github.com/jedie/django-tools/compare/v0.32.14...v0.33.0) + * Run tests only against Django v1.8 TLS and v1.11 TLS + * For Django 1.11: Add support for new-style middleware - contributed by benkonrath + * NEW: `django_tools.utils.request.create_fake_request()` for easier create a faked request object with `RequestFactory` + * NEW: `django_tools.utils.html_utils.html2text()` - Strip HTML tags with lxml Cleaner + Django 'strip_tags' +* v0.32.14 - 14.06.2017 - [compare v0.32.13...v0.32.14](https://github.com/jedie/django-tools/compare/v0.32.13...v0.32.14) + * Bugfix for Python 2: `mock` backport package is needed and added to `setup.install_requires` +* v0.32.13 - 24.05.2017 - [compare v0.32.12...v0.32.13](https://github.com/jedie/django-tools/compare/v0.32.12...v0.32.13) + * remove some warnings +* v0.32.12 - 04.05.2017 - [compare v0.32.11...v0.32.12](https://github.com/jedie/django-tools/compare/v0.32.11...v0.32.12) + * NEW: `self.assertIn_dedent()` in `django_tools.unittest_utils.unittest_base.BaseUnittestCase` +* v0.32.11 - 02.05.2017 - [compare v0.32.10...v0.32.11](https://github.com/jedie/django-tools/compare/v0.32.10...v0.32.11) + * Fix PyPi package mistake (`.tar.gz` archive contains `.tox` ;) +* v0.32.10 - 02.05.2017 - [compare v0.32.9...v0.32.10](https://github.com/jedie/django-tools/compare/v0.32.9...v0.32.10) + * NEW: `django_tools.mail` to send text+html mails (see above) +* v0.32.9 - 21.03.2017 - [compare v0.32.8...v0.32.9](https://github.com/jedie/django-tools/compare/v0.32.8...v0.32.9) + * Bugfix `DebugCacheLoader` if TemplateDoesNotExist was raised +* v0.32.8 - 16.03.2017 - [compare v0.32.7...v0.32.8](https://github.com/jedie/django-tools/compare/v0.32.7...v0.32.8) + * NEW: `django_tools.template.loader.DebugCacheLoader` to add template name as html comments + * Change temp filename in BrowserDebug and use `django_tools_browserdebug_` prefix + * Bugfix in `django_tools.middlewares.ThreadLocal.ThreadLocalMiddleware` +* v0.32.7 - 10.03.2017 - [compare v0.32.6...v0.32.7](https://github.com/jedie/django-tools/compare/v0.32.6...v0.32.7) + * NEW: `django_tools.permissions` - helper for setup permissions + * NEW: `/unittest_utils/user.py` - helper for creating users (needfull in unittests) +* v0.32.6 - 22.02.2017 - [compare v0.32.5...v0.32.6](https://github.com/jedie/django-tools/compare/v0.32.5...v0.32.6) +* `@task_always_eager()` decorator will set `CELERY_EAGER_PROPAGATES_EXCEPTIONS=True`, too. +* v0.32.5 - 10.02.2017 - [compare v0.32.4...v0.32.5](https://github.com/jedie/django-tools/compare/v0.32.4...v0.32.5) + * NEW: Add `template_name` (optional) to `self.assertResponse()` (check with `assertTemplateUsed()`) +* v0.32.4 - 01.02.2017 - [compare v0.32.3...v0.32.4](https://github.com/jedie/django-tools/compare/v0.32.3...v0.32.4) +* Fix: Set "is_active" for created test users +* v0.32.3 - 25.01.2017 - [compare v0.32.2...v0.32.3](https://github.com/jedie/django-tools/compare/v0.32.2...v0.32.3) + * Fix UnicodeDecodeError in BrowserDebug + * NEW: `@set_string_if_invalid()` decorator + * NEW: `@task_always_eager()` decorator +* v0.32.2 - 13.01.2017 - [compare v0.32.1...v0.32.2](https://github.com/jedie/django-tools/compare/v0.32.1...v0.32.2) + * NEW: django_tools.utils.url.GetDict +* v0.32.1 - 29.12.2016 - [compare v0.32.0...v0.32.1](https://github.com/jedie/django-tools/compare/v0.32.0...v0.32.1) + * NEW: TracebackLogMiddleware +* v0.32.0 - 19.12.2016 - [compare v0.31.0...v0.32.0](https://github.com/jedie/django-tools/compare/v0.31.0...v0.32.0) + * NEW: Management commands: 'nice_diffsettings', 'list_models' + * NEW: @display_admin_error to display silent errors in ModelAdmin.list_display callables. + * NEW: django_tools.template.render.render_template_file + * use [pytest-django](https://pypi.python.org/pypi/pytest-django) + * remove outdated stuff: See 'Backwards-incompatible changes' above. +* v0.31.0 - 03.11.2016 - [compare v0.30.4...v0.31.0](https://github.com/jedie/django-tools/compare/v0.30.4...v0.31.0) + * add Mockup utils to create dummy PIL/django-filer images with Text (see above) + * move tests into `/django_tools_tests/` +* v0.30.4 - 27.10.2016 - [compare v0.30.2...v0.30.4](https://github.com/jedie/django-tools/compare/v0.30.2...v0.30.4) + * add DjangoCommandMixin +* v0.30.2 - 05.10.2016 - [compare v0.30.1...v0.30.2](https://github.com/jedie/django-tools/compare/v0.30.1...v0.30.2) + * Bugfix Python 2 compatibility +* v0.30.1 - 26.08.2016 - [compare v0.30.0...v0.30.1](https://github.com/jedie/django-tools/compare/v0.30.0...v0.30.1) + * add: `django_tools.unittest_utils.disable_migrations.DisableMigrations` (see above) + * run tests also with django v1.10 and Python 3.5 + * use tox +* v0.30.0 - 27.04.2016 - [compare v0.29.5...v0.30.0](https://github.com/jedie/django-tools/compare/v0.29.5...v0.30.0) + * Django 1.9 and Python 3 support contributed by [naegelyd](https://github.com/jedie/django-tools/pull/9) +* v0.29.4 and v0.29.5 - 10.08.2015 - [compare v0.29.3...v0.29.5](https://github.com/jedie/django-tools/compare/v0.29.3...v0.29.5) + * Some bugfixes for django 1.6 support +* v0.29.3 - 10.08.2015 - [compare v0.29.2...v0.29.3](https://github.com/jedie/django-tools/compare/v0.29.2...v0.29.3) + * Clear ThreadLocal request atttribute after response is processed (contributed by Lucas Wiman) +* v0.29.2 - 19.06.2015 - [compare v0.29.1...v0.29.2](https://github.com/jedie/django-tools/compare/v0.29.1...v0.29.2) + * Bugfix in unittest_utils.selenium_utils.selenium2fakes_response + * assertResponse used assertContains from django + * Add QueryLogMiddleware (TODO: add tests) +* v0.29.1 - 17.06.2015 - [compare v0.29.0...v0.29.1](https://github.com/jedie/django-tools/compare/v0.29.0...v0.29.1) + * Bugfixes for Py2 and Py3 + * add StdoutStderrBuffer() +* v0.29.0 - 09.06.2015 - [compare v0.26.0...v0.29.0](https://github.com/jedie/django-tools/compare/v0.26.0...v0.29.0) + * WIP: Refactor unittests (DocTests must be updated for Py3 and more unittests must be written to cover all) + * catch more directory traversal attacks in BaseFilesystemBrowser (and merge code parts) + * Bugfix for "django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet." if using **UpdateInfoBaseModel** + * Bugfixes in **dynamic_site** for django 1.7 + * add: [django_tools.settings_utils.InternalIps](https://github.com/jedie/django-tools/blob/master/django_tools/settings_utils.py) +* v0.28.0 - 12.02.2015 - [compare v0.26.0...v0.28.0](https://github.com/jedie/django-tools/compare/v0.26.0...v0.28.0) + * Work-a-round for import loops + * (new Version number, because of PyPi stress) +* v0.26.0 - 11.02.2015 - [compare v0.25.1...v0.26.0](https://github.com/jedie/django-tools/compare/v0.25.1...v0.26.0) + * Updates for Django 1.6 and Python 3 +* v0.25.1 - 18.11.2013 + * Bugfix: Fall back to "UTF-8" if server send no encoding info +* v0.25.0 - 28.08.2012 + * Rename **cache.clear()** in SmoothCacheBackends to **cache.smooth_update()**, so that reset timestamp is independ from clear the cache. +* v0.24.10 - 24.08.2012 + * Add **SmoothCacheBackends**: [./cache/README.creole](https://github.com/jedie/django-tools/blob/master/django_tools/cache/README.creole) +* v0.24.9 - 24.08.2012 + * Bugfix in per-site cache middleware: set inital count values to None, if counting is disabled. +* v0.24.8 - 24.08.2012 + * Enhanced **per-site cache middleware**: [./cache/README.creole](https://github.com/jedie/django-tools/blob/master/django_tools/cache/README.creole) + * Add **SetRequestDebugMiddleware**: [./debug/README.creole](https://github.com/jedie/django-tools/blob/master/django_tools/debug/README.creole) +* v0.24.7 - 21.08.2012 + * Add the **per-site cache middleware** (see above) + * Add **import lib helper**: [./utils/importlib.py](https://github.com/jedie/django-tools/blob/master/django_tools/utils/importlib.py) +* v0.24.6 - 21.08.2012 + * Add the **filemanager library** (see above) +* v0.24.5 - 06.08.2012 + * Add **Print SQL Queries** context manager. (see above) +* v0.24.4 - 26.07.2012 + * remove date from version string, cause of side-effects e.g.: user clone the repo and has the filter not installed +* v0.24.3 - 25.07.2012 + * "Hardcode" the version string date attachment via [gitattribute filter script](https://github.com/jedie/python-code-snippets/tree/master/CodeSnippets/git) to fix [a reported issues](https://github.com/jedie/django-tools/issues/1) with [pip requirements file bug](https://github.com/pypa/pip/issues/145). +* v0.24.2 - 10.07.2012 + * Split [UpdateInfoBaseModel()](https://github.com/jedie/django-tools/blob/master/django_tools/models.py): So you can only set "createtime", "lastupdatetime" or "createby", "lastupdateby" or both types (This is backwards compatible) +* v0.24.1 - 12.06.2012 + * Bugfix: UsergroupsModelField() and add unittests for it + * Add "normal users" in UsergroupsModelField() + * New: Add create_user() and create_testusers() to BaseTestCase + * Add a test project for the unittests. TODO: use this for all tests +* v0.24.0 - 04.06.2012 + * [Don't use auto_now_add and auto_now in UpdateInfoBaseModel](https://github.com/jedie/django-tools/commit/a3cf1f7b2e9dbe4964306f4793c74f1782f8b2ea) + * Bugfix in [UsergroupsModelField](https://github.com/jedie/django-tools/blob/master/django_tools/limit_to_usergroups.py) +* v0.23.1 + * [Dynamic Site](https://github.com/jedie/django-tools/tree/main/django_tools/dynamic_site#dynamic-site-id) would be only initialised if settings.USE_DYNAMIC_SITE_MIDDLEWARE = True +* v0.23.0 + * Use cryptographic signing tools from django 1.4 in django_tools.utils.client_storage +* v0.22.0 + * Add [static_path.py](https://github.com/jedie/django-tools/blob/master/django_tools/fields/static_path.py) thats used settings.STATIC_ROOT. + * The old [media_path.py](https://github.com/jedie/django-tools/blob/master/django_tools/fields/media_path.py) which used settings.MEDIA_ROOT is deprecated and will be removed in the future. + * auto_add_check_unique_together() can use settings.DATABASES["default"]["ENGINE"], too. +* v0.21.1 + * Bugfixes in [Dynamic Site](https://github.com/jedie/django-tools/tree/main/django_tools/dynamic_site#dynamic-site-id). +* v0.21.0beta + * New: site alias function + * refractory 'DynamicSiteMiddleware' to a own app (**Backwards-incompatible change:** change your settings if you use the old DynamicSiteMiddleware.) +* v0.20.1 + * New: [debug_csrf_failure()](https://github.com/jedie/django-tools/blob/master/django_tools/views/csrf.py) to display the normal debug page and not the minimal csrf debug page. +* v0.20.0 + * Add experimental [DynamicSiteMiddleware](https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/DynamicSite.py), please test it and give feedback. +* v0.19.6 + * Add some south introspection rules for LanguageCodeModelField and jQueryTagModelField + * fallback if message for anonymous user can't created, because django.contrib.messages middleware not used. + * Bugfix in django_tools.utils.messages.StackInfoStorage +* v0.19.5 + * Add [http://bugs.python.org/file22767/hp_fix.diff](http://bugs.python.org/file22767/hp_fix.diff) for [https://github.com/gregmuellegger/django/issues/1](https://github.com/gregmuellegger/django/issues/1) +* v0.19.4 + * Bugfix for PyPy in local_sync_cache get_cache_information(): sys.getsizeof() not implemented on PyPy + * Bugfix in template.filters.chmod_symbol() + * Nicer solution for template.filters.human_duration() +* v0.19.3 + * Add support for https in utils/http.py +* v0.19.2 + * Bugfix in utils/http.py timeout work-a-round +* v0.19.1 + * utils/http.py changes: + * Use a better solution, see: + * Add timeout and add a work-a-round for Python < 2.6 +* v0.19.0 + * NEW: Add utils/http.py with helpers to get a webpage via http GET in unicode + * Change README from textile to creole ;) +* v0.18.2 + * Bugfix: Add missing template in pypi package +* v0.18.0 + * NEW: Add DOM compare from Gregor Müllegger GSoC work into unittest utils. +* v0.17.1 + * Bugfix in “limit_to_usergroups”: Make choices “lazy”: Don’t access the database in _init_ +* v0.17 + * Add the script “upgrade_virtualenv.py” + * Add “limit_to_usergroups” + * Add “local sync cache” + * Add models.UpdateInfoBaseModel + * Update decorators.render_to + * render_to pass keyword arguments to render_to_response() (e.g.: mimetype=“text/plain”) + * new argument “skip_fail” in get_filtered_apps(): If True: raise excaption if app is not importable +* v0.16.4 + * Bugfix: `get_db_prep_save() got an unexpected keyword argument 'connection’` when save a SignSeparatedModelField() +* v0.16.3 + * Update BrowserDebug: Use response.templates instead of response.template and make output nicer +* v0.16.2 + * Merge stack info code and display better stack info on browser debug page +* v0.16.1 + * Update django_tools.utils.messages.StackInfoStorage for django code changes. +* v0.16.0 + * NEW: path model field (check if direcotry exist) +* v0.15.0 + * NEW: Add a flexible URL field (own validator, model- and form-field) +* v0.14.1 + * Bugfix: make path in MediaPathModelField relativ (remove slashes) +* v0.14 + * NEW: django-tagging addon: Display existing tags under a tag field +* v0.13 + * Bugfix UnicodeEncodeError in Browser debug +* v0.12 + * NEW: django_tools.utils.messages.failsafe_message +* v0.11 + * NEW: Store data in a secure cookie, see: utils/client_storage.py +* v0.10.1 + * New: Display used templates in unittest BrowserDebug + * Bugfix: catch if last usermessages exist +* v0.10.0 + * NEW: utils around django messages, see: /django_tools/utils/messages.py +* v0.9.1 + * Bugfix: database column was not created: don’t overwrite get_internal_type() +* v0.9 + * New: stuff in /django_tools/fields/ + * see also backwards-incompatible changes, above! +* v0.8.2 + * New: widgets.SelectMediaPath(): Select a sub directory in settings.MEDIA_ROOT + * New: fields.SignSeparatedField() +* v0.8.1 + * Add “no_args” keyword argument to installed_apps_utils.get_filtered_apps() +* v0.8.0 + * Add model LanguageCode field and form LanguageCode field in Accept-Language header format (RFC 2616) +* v0.7.0 + * Add decorators.py +* v0.6.0 + * Add forms_utils.LimitManyToManyFields, crosspost: [http://www.djangosnippets.org/snippets/1691/](http://www.djangosnippets.org/snippets/1691/) +* v0.5.0 + * Add template/filters.py from PyLucid v0.8.x +* v0.4.0 + * Add experimental “warn_invalid_template_vars” +* v0.3.1 + * Bugfix: Exclude the instance if it was saved in the past. +* v0.3.0 + * Add utils.installed_apps_utils +* v0.2.0 + * Add models_utils, see: [http://www.jensdiemer.de/_command/118/blog/detail/67/](http://www.jensdiemer.de/_command/118/blog/detail/67/) (de) +* v0.1.0 + * first version cut out from PyLucid CMS – [http://www.pylucid.org](http://www.pylucid.org) +## links +| Homepage | [https://github.com/jedie/django-tools](https://github.com/jedie/django-tools) | +| PyPi | [https://pypi.python.org/pypi/django-tools/](https://pypi.python.org/pypi/django-tools/) | +## donation +* [paypal.me/JensDiemer](https://www.paypal.me/JensDiemer) +* [Flattr This!](https://flattr.com/submit/auto?uid=jedie&url=https%3A%2F%2Fgithub.com%2Fjedie%2Fdjango-tools%2F) +* Send [Bitcoins](https://www.bitcoin.org/) to [1823RZ5Md1Q2X5aSXRC5LRPcYdveCiVX6F](https://blockexplorer.com/address/1823RZ5Md1Q2X5aSXRC5LRPcYdveCiVX6F) + +%package -n python3-django-tools +Summary: miscellaneous tools for Django based projects +Provides: python-django-tools +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-django-tools +``` +### SetRequestDebugMiddleware +middleware to add debug bool attribute to request object. +More info: [./debug/README.creole](https://github.com/jedie/django-tools/blob/master/django_tools/debug/README.creole) +### TracebackLogMiddleware +Put traceback in log by call [logging.exception()](https://docs.python.org/3/library/logging.html#logging.Logger.exception) on `process_exception()` +Activate with: +``` +MIDDLEWARE_CLASSES = ( + 'django_tools.middlewares.TracebackLogMiddleware.TracebackLogMiddleware', +) +``` +### FnMatchIps() - Unix shell-style wildcards in INTERNAL_IPS / ALLOWED_HOSTS +settings.py e.g.: +``` +from django_tools.settings_utils import FnMatchIps +INTERNAL_IPS = FnMatchIps(["127.0.0.1", "::1", "192.168.*.*", "10.0.*.*"]) +ALLOWED_HOSTS = FnMatchIps(["127.0.0.1", "::1", "192.168.*.*", "10.0.*.*"]) +``` +### StdoutStderrBuffer() +redirect stdout + stderr to a string buffer. e.g.: +``` +from django_tools.unittest_utils.stdout_redirect import StdoutStderrBuffer +with StdoutStderrBuffer() as buffer: + print("foo") +output = buffer.get_output() # contains "foo\n" +``` +### Management commands +#### permission_info +List all permissions for one django user. +(Needs `'django_tools'` in INSTALLED_APPS) +e.g.: +``` +$ ./manage.py permission_info +No username given! +All existing users are: +foo, bar, john, doe +$ ./manage.py permission_info foo +All permissions for user 'test_editor': + is_active : yes + is_staff : yes + is_superuser : no +[*] admin.add_logentry +[*] admin.change_logentry +[*] admin.delete_logentry +[ ] auth.add_group +[ ] auth.add_permission +[ ] auth.add_user +``` +#### logging_info +Shows a list of all loggers and marks which ones are configured in settings.LOGGING: +``` +$ ./manage.py logging_info +``` +#### nice_diffsettings +Similar to django 'diffsettings', but used pretty-printed representation: +``` +$ ./manage.py nice_diffsettings +``` +#### database_info +Just display some information about the used database and connections: +``` +$ ./manage.py database_info +``` +#### list_models +Just list all existing models in app_label.ModelName format. Useful to use this in 'dumpdata' etc: +``` +$ ./manage.py list_models +``` +### ..all others… +There exist many miscellaneous stuff. Look in the source, luke! +## Backwards-incompatible changes +Old changes archived in git history here: +* [>=v0.47](https://github.com/jedie/django-tools/tree/v0.49.0#backwards-incompatible-changes) +* [>=v0.35](https://github.com/jedie/django-tools/tree/v0.35.0#backwards-incompatible-changes) +### v0.51 +All Selenium helper are deprecated, please migrate to [Playwright](https://playwright.dev/python/) ;) +### v0.50 +Removed old selenium helper function, [deprecated since v0.43](https://github.com/jedie/django-tools/tree/v0.43.0#v043) +Make all Selenium web driver instances persistent for the complete test run session. +This speedup tests and fixed some bugs in Selenium. +This result in the same browser/webdriver settings for all test classes! +## Django compatibility +| django-tools | django version | python | +| ---------------- | -------------- | --------------- | +| >= v0.52.0 | 3.2, 4.0, 4.1 | 3.8, 3.9, 3.10 | +| >= v0.50.0 | 2.2, 3.2, 4.0 | 3.8, 3.9, 3.10 | +| >= v0.49.0 | 2.2, 3.1, 3.2 | 3.7, 3.8, 3.9 | +| >= v0.47.0 | 2.2, 3.0, 3.1 | >= 3.6, pypy3 | +| >= v0.39 | 1.11, 2.0 | 3.5, 3.6, pypy3 | +| >= v0.38.1 | 1.8, 1.11 | 3.5, 3.6, pypy3 | +| >= v0.38.0 | 1.8, 1.11 | 3.5, 3.6 | +| >= v0.37.0 | 1.8, 1.11 | 3.4, 3.5 | +| >= v0.33.0 | 1.8, 1.11 | 2.7, 3.4, 3.5 | +| v0.30.1-v0.32.14 | 1.8, 1.9, 1.10 | 2.7, 3.4, 3.5 | +| v0.30 | 1.8, 1.9 | 2.7, 3.4 | +| v0.29 | 1.6 - 1.8 | 2.7, 3.4 | +| v0.26 | <=1.6 | | +| v0.25 | <=1.4 | | +(See also combinations for [tox in pyproject.toml](https://github.com/jedie/django-tools/blob/master/pyproject.toml)) +## history +* *dev* - [compare v0.54.0...main](https://github.com/jedie/django-tools/compare/v0.54.0...main) + * TBC +* [v0.54.0 - 15.09.2022](https://github.com/jedie/django-tools/compare/v0.53.0...v0.54.0) + * Run [safety](https://github.com/pyupio/safety) in CI pipeline. + * NEW: `SyslogHandler` for easy logging to `syslog` + * Replace creole README with markdown +* [v0.53.0 - 18.08.2022](https://github.com/jedie/django-tools/compare/v0.52.0...v0.53.0) + * NEW: `MassContextManagerBase`, `DenyStdWrite` + Updated: `StdoutStderrBuffer` + * Enhance `run_testserver` command + * Small test project setup updates +* [v0.52.0 - 17.08.2022](https://github.com/jedie/django-tools/compare/v0.51.0...v0.52.0) + * Move `run_testserver` management command from `django_tools_test_app` to `django_tools` and polish it. + * Restrict `AlwaysLoggedInAsSuperUserMiddleware` to the admin. + * Test with Django 3.2, 4.0 and 4.1 +* [v0.51.0 - 26.07.2022](https://github.com/jedie/django-tools/compare/v0.50.0...v0.51.0) + * NEW: `check_editor_config()` to check editor config and line length in projects + * DEPRECATE all Selenium helper, please migrate to Playwright ;) + * NEW: [Playwright](https://playwright.dev/python/) base Unittest class and login helper +* [v0.50.0 - 29.05.2022](https://github.com/jedie/django-tools/compare/v0.49.0...v0.50.0) + * Rename git "master" branch to "main" + * Use [webdriver-manager](https://github.com/SergeyPirogov/webdriver_manager) to setup selenium web drivers + * CHANGE: Now all web driver instances are cached and reused for the complete test run! + * Use [darker](https://github.com/akaihola/darker) for code formatting + * Update test matrix: Add Python 3.10 and Django v4.0 (remove Python 3.7 and Django 3.1) +* v0.49.0 - 22.11.2021 - [compare v0.48.3...v0.49.0](https://github.com/jedie/django-tools/compare/v0.48.3...v0.49.0) + * NEW: `VersionProtectBaseModel` - Protect a model against overwriting a newer entry with an older one, by adding a auto increment version number. + * NEW: `AlwaysLoggedInAsSuperUserMiddleware` useful for local dev server run to auto login into Django Admin + * Enhance Selenium test helpers and [fix #21: Set chrome accept_languages in headless mode](https://github.com/jedie/django-tools/issues/21) + * Update project: Tests, code-style etc. +* v0.48.3 - 20.12.2020 - [compare v0.47.2...v0.48.3](https://github.com/jedie/django-tools/compare/v0.47.2...v0.48.3) + * NEW: `ImageDummy().in_memory_image_file()` useful for e.g.: POST a image upload via Django's test client +* v0.48.2 - 06.12.2020 - [compare v0.47.1...v0.48.2](https://github.com/jedie/django-tools/compare/v0.47.1...v0.48.2) + * Bugfix "Serve User Media File": Create tokens via migrations and handle if tokens not exists +* v0.48.1 - 06.12.2020 - [compare v0.47.0...v0.48.1](https://github.com/jedie/django-tools/compare/v0.47.0...v0.48.1) + * Add migration file to "Serve User Media File" +* v0.48.0 - 06.12.2020 - [compare v0.47.0...v0.48.0](https://github.com/jedie/django-tools/compare/v0.47.0...v0.48.0) + * NEW: "Serve User Media File" reuseable app + * NEW: django_tools.unittest_utils.signals.SignalsContextManager + * Update `installed_apps_utils.get_filtered_apps()` and support app config entries in `settings.INSTALLED_APPS` +* v0.47.0 - 26.11.2020 - [compare v0.46.1...v0.47.0](https://github.com/jedie/django-tools/compare/v0.46.1...v0.47.0) + * updates for newer django versions + * NEW: assert_warnings(), assert_no_warnings() and assert_in_logs() + * remove broken LoggingBuffer() + * update project setup, fix tests and pipelines +* v0.46.1 - 19.02.2020 - [compare v0.46.0...v0.46.1](https://github.com/jedie/django-tools/compare/v0.46.0...v0.46.1) + * less restricted dependency specification + * NEW: `"django_tools.middlewares.LogHeaders.LogRequestHeadersMiddleware"` + * SeleniumChromiumTestCase: set "accept_languages" and disable "headless" mode, see also: [https://github.com/jedie/django-tools/issues/21](https://github.com/jedie/django-tools/issues/21) +* v0.46.0 - 13.02.2020 - [compare v0.45.3...v0.46.0](https://github.com/jedie/django-tools/compare/v0.45.3...v0.46.0) + * `dynamic_site` was removed. Please use e.g.: [django-hosts](https://github.com/jazzband/django-hosts) + * modernize project setup and use `poetry` + * remove `lxml` decency by using [bleach](https://github.com/mozilla/bleach) for `html_utils.html2text` + * update code and code style +* v0.45.3 - 25.08.2019 - [compare v0.45.2...v0.45.3](https://github.com/jedie/django-tools/compare/v0.45.2...v0.45.3) + * Add `excepted_exit_code` to `django_tools.unittest_utils.django_command.DjangoCommandMixin` to it's possible to test errors in manage commands +* v0.45.2 - 26.06.2019 - [compare v0.45.1...v0.45.2](https://github.com/jedie/django-tools/compare/v0.45.1...v0.45.2) + * NEW: `django_tools.log_utils.throttle_admin_email_handler.ThrottledAdminEmailHandler` +* v0.45.1 - 03.04.2019 - [compare v0.45.0...v0.45.1](https://github.com/jedie/django-tools/compare/v0.45.0...v0.45.1) + * Bugfix ValueError in `django_tools.unittest_utils.email.print_mailbox` +* v0.45.0 - 01.04.2019 - [compare v0.44.2...v0.45.0](https://github.com/jedie/django-tools/compare/v0.44.2...v0.45.0) + * NEW: `OverwriteFileSystemStorage` with backup functionality + * NEW: `print_exc_plus()` - traceback with a listing of all the local variables + * NEW: `assert_pformat_equal` with `pprintpp` and `icdiff` + * NEW: `assert_filenames_and_content` +* v0.44.2 - 02.01.2019 - [compare v0.44.1...v0.44.2](https://github.com/jedie/django-tools/compare/v0.44.1...v0.44.2) + * Handle errors like: [https://github.com/andymccurdy/redis-py/issues/995](https://github.com/andymccurdy/redis-py/issues/995) +* v0.44.1 - 02.01.2019 - [compare v0.44.0...v0.44.1](https://github.com/jedie/django-tools/compare/v0.44.0...v0.44.1) + * `LoggingBuffer`: Don't deactivate existing log handler, just append the buffer handler. +* v0.44.0 - 13.12.2018 - [compare v0.43.2...v0.44.0](https://github.com/jedie/django-tools/compare/v0.43.2...v0.44.0) + * NEW: `django_file = ImageDummy().create_django_file_info_image(text="")` e.g.: for attach to `models.ImageField()` + * Make `mockup.ImageDummy()` usable even if django-filer is not installed. + * `mockup.ImageDummy()` default image format changed from png to jpeg + * Cleanup: remove old, since v0.35 deprecated mockup image API +* v0.43.2 - 11.12.2018 - [compare v0.43.1...v0.43.2](https://github.com/jedie/django-tools/compare/v0.43.1...v0.43.2) + * Bugfix Selenium refactor: Use the class with the same functionality if old usage places are used. +* v0.43.1 - 11.12.2018 - [compare v0.43.0...v0.43.1](https://github.com/jedie/django-tools/compare/v0.43.0...v0.43.1) + * Bugfix: Selenium test cases: clear `window.localStorage` after test run +* v0.43.0 - 11.12.2018 - [compare v0.42.4...v0.43.0](https://github.com/jedie/django-tools/compare/v0.42.4...v0.43.0) + * Refactor selenium helpers + * Split selenium test cases: with and without Django StaticLiveServerTestCase + * NEW: Selenium helper to access `window.localStorage` +* v0.42.4 - 12.10.2018 - [compare v0.42.3...v0.42.4](https://github.com/jedie/django-tools/compare/v0.42.3...v0.42.4) + * Add `request` object to `TestUserMixin.login()` (needed for e.g.: django-axes auth backend) +* v0.42.3 - 10.10.2018 - [compare v0.42.2...v0.42.3](https://github.com/jedie/django-tools/compare/v0.42.2...v0.42.3) + * NEW: * `assertments.assert_is_dir`, `assertments.assert_is_file`, `assertments.assert_path_not_exists` +* v0.42.2 - 18.09.2018 - [compare v0.42.1...v0.42.2](https://github.com/jedie/django-tools/compare/v0.42.1...v0.42.2) + * NEW: `assert_installed_apps()` - Check entries in settings.INSTALLED_APPS +* v0.42.1 - 17.09.2018 - [compare v0.42.0...v0.42.1](https://github.com/jedie/django-tools/compare/v0.42.0...v0.42.1) + * NEW: `django_tools.unittest_utils.assertments.assert_language_code` - Check if given language_code is in settings.LANGUAGES +* v0.42.0 - 07.09.2018 - [compare v0.41.0...v0.42.0](https://github.com/jedie/django-tools/compare/v0.41.0...v0.42.0) + * remove all celery stuff + * NEW: `$ ./manage.py logging_info` Shows a list of all loggers and marks which ones are configured in settings.LOGGING + * manage commands `list_models` and `nice_diffsettings` are moved from seperate apps +* v0.41.0 - 28.08.2018 - [compare v0.40.6...v0.41.0](https://github.com/jedie/django-tools/compare/v0.40.6...v0.41.0) + * NEW: `unittest_utils/assertments.py` with some common assert functions + * Remove `@task_always_eager()` decorator +* v0.40.6 - 28.08.2018 - [compare v0.40.5...v0.40.6](https://github.com/jedie/django-tools/compare/v0.40.5...v0.40.6) + * Bugfix `@task_always_eager()` decorator +* v0.40.5 - 27.08.2018 - [compare v0.40.4...v0.40.5](https://github.com/jedie/django-tools/compare/v0.40.4...v0.40.5) + * Bugfix `DjangoCommandMixin.call_manage_py()`: Use the given `manage.py` filename +* v0.40.4 - 21.08.2018 - [compare v0.40.3...v0.40.4](https://github.com/jedie/django-tools/compare/v0.40.3...v0.40.4) + * NEW: `django_tools.debug.delay` to simulate longer processing time by set a delay via GET parameter (see above) +* v0.40.3 - 18.07.2018 - [compare v0.40.2...v0.40.3](https://github.com/jedie/django-tools/compare/v0.40.2...v0.40.3) + * Enhance selenium test cases: + * NEW: `assert_visible_by_id()` + * NEW: `assert_clickable_by_id()` + * NEW: `assert_clickable_by_xpath()` + * add `desired_capabilities` to firefox and chrome test cases + * enable logging in chrome test case + * NEW: `assert_in_browser_log()` in chrome test case +* v0.40.2 - 04.07.2018 - [compare v0.40.1...v0.40.2](https://github.com/jedie/django-tools/compare/v0.40.1...v0.40.2) + * Bugfix selenium Test Case if driver is None + * Bugfix django compatibility +* v0.40.1 - 28.06.2018 - [compare v0.40.0...v0.40.1](https://github.com/jedie/django-tools/compare/v0.40.0...v0.40.1) + * Bugfix selenium test case if executable can't be found. +* v0.40.0 - 15.06.2018 - [compare v0.39.6...v0.40.0](https://github.com/jedie/django-tools/compare/v0.39.6...v0.40.0) + * NEW: selenium chrome and firefox test cases in `django_tools.unittest_utils.selenium_utils` + * Fix test project and add `run_test_project_dev_server.sh` for easy test + * Fixing tests +* v0.39.6 - 04.05.2018 - [compare v0.39.5...v0.39.6](https://github.com/jedie/django-tools/compare/v0.39.5...v0.39.6) + * Enhance model instance unittest code generator +* v0.39.5 - 24.04.2018 - [compare v0.39.4...v0.39.5](https://github.com/jedie/django-tools/compare/v0.39.4...v0.39.5) + * NEW: Model instance unittest code generator (see above) +* v0.39.4 - 06.04.2018 - [compare v0.39.3...v0.39.4](https://github.com/jedie/django-tools/compare/v0.39.3...v0.39.4) + * NEW: `django_tools.unittest_utils.logging_utils.FilterAndLogWarnings` and `django_tools.unittest_utils.logging_utils.CutPathnameLogRecordFactory` +* v0.39.3 - 22.03.2018 - [compare v0.39.2...v0.39.3](https://github.com/jedie/django-tools/compare/v0.39.2...v0.39.3) + * `django_tools.permissions.get_filtered_permissions` has new keyword argument: `exclude_actions` +* v0.39.2 - 22.03.2018 - [compare v0.39.1...v0.39.2](https://github.com/jedie/django-tools/compare/v0.39.1...v0.39.2) + * NEW: `django_tools.parler_utils.parler_fixtures.ParlerDummyGenerator` + * NEW: `django_tools.fixture_tools.languages.iter_languages` +* v0.39.1 - 19.03.2018 - [compare v0.39.0...v0.39.1](https://github.com/jedie/django-tools/compare/v0.39.0...v0.39.1) + * NEW: `django_tools.unittest_utils.email.print_mailbox()` + * minor updates +* v0.39.0 - 02.03.2018 - [compare v0.38.9...v0.39.0](https://github.com/jedie/django-tools/compare/v0.38.9...v0.39.0) + * NEW: Isolated Filesystem decorator / context manager + * Backwards-incompatible change: file renamed `django_tools/unittest_utils/{celery.py => celery_utils.py`} + * Skip run test with Django 1.8 and run tests with Django 1.11 and 2.0 +* v0.38.9 - 05.02.2018 - [compare v0.38.8...v0.38.9](https://github.com/jedie/django-tools/compare/v0.38.8...v0.38.9) + * lowering log level on missing permissions from "error" to "debug" +* v0.38.8 - 05.02.2018 - [compare v0.38.7...v0.38.8](https://github.com/jedie/django-tools/compare/v0.38.7...v0.38.8) + * send mail: use from celery import shared_task instead of djcelery_transactions +* v0.38.7 - 15.01.2018 - [compare v0.38.6...v0.38.7](https://github.com/jedie/django-tools/compare/v0.38.6...v0.38.7) + * Add missing arguments (like "attachments", "cc" etc.) to `django_tools.mail.send_mail.SendMailCelery` +* v0.38.6 - 10.01.2018 - [compare v0.38.4...v0.38.5](https://github.com/jedie/django-tools/compare/v0.38.4...v0.38.5) + * NEW: `./manage.py clear_cache` + * Display POST data in browser debug (`django_tools.unittest_utils.BrowserDebug.debug_response`) +* v0.38.5 - 02.01.2018 - [compare v0.38.4...v0.38.5](https://github.com/jedie/django-tools/compare/v0.38.4...v0.38.5) + * NEW: Helper to assert django message framework output in unittests: + * `BaseUnittestCase.get_messages()`: return a list of all messages + * `BaseTestCase.assertMessages()`: compare messages + * `BaseTestCase.assertResponse()`: has new keyword argument `messages` + * NEW: `BaseUnittestCase.assert_exception_startswith()` +* v0.38.4 - 28.12.2017 - [compare v0.38.3...v0.38.4](https://github.com/jedie/django-tools/compare/v0.38.3...v0.38.4) + * Bugfix attach user group on existing user in: `django_tools.unittest_utils.user.get_or_create_user` +* v0.38.3 - 28.12.2017 - [compare v0.38.2...v0.38.3](https://github.com/jedie/django-tools/compare/v0.38.2...v0.38.3) + * Bugfix: `unittest_utils.user.get_or_create_group` also removes obsolete permissions, too. +* v0.38.2 - 27.12.2017 - [compare v0.38.1...v0.38.2](https://github.com/jedie/django-tools/compare/v0.38.1...v0.38.2) + * NEW: `./manage.py update_permissions` +* v0.38.1 - 21.12.2017 - [compare v0.38.0...v0.38.1](https://github.com/jedie/django-tools/compare/v0.38.0...v0.38.1) + * refactor travis/tox/pytest/coverage stuff + * Tests can be run via `python3 setup.py tox` and/or `python3 setup.py test` + * Test also with pypy3 on Travis CI. +* v0.38.0 - 19.12.2017 - [compare v0.37.0...v0.38.0](https://github.com/jedie/django-tools/compare/v0.37.0...v0.38.0) + * NEW: `django_tools.unittest_utils.user.get_or_create_group` + * NEW: `django_tools.unittest_utils.user.get_or_create_user` + * NEW: `django_tools.unittest_utils.user.get_or_create_user_and_group` + * NEW: `BaseUnittestCase.get_admin_change_url()` and `BaseUnittestCase.get_admin_add_url()` + * NEW: `BaseUnittestCase.assert_startswith()` and `BaseUnittestCase.assert_endswith()` +* v0.37.0 - 11.12.2017 - [compare v0.36.0...v0.37.0](https://github.com/jedie/django-tools/compare/v0.36.0...v0.37.0) + * Skip official support for python v2 (remove from text matrix) + * NEW: `./manage.py permission_info`: Display a list of all permissions for one django user + * NEW: `django_tools.permissions.get_filtered_permissions()` and `django_tools.permissions.pprint_filtered_permissions()` + * `django_tools.settings_utils.InternalIps` was renamed to `FnMatchIps` and can be also used for **ALLOWED_HOSTS** + * Bugfix/Enhance permission helpers +* v0.36.0 - 20.11.2017 - [compare v0.35.0...v0.36.0](https://github.com/jedie/django-tools/compare/v0.35.0...v0.36.0) + * NEW: `./manage.py database_info` + * Bugfix: **ModelPermissionMixin** + * Dynamic Sites is no longer maintained and tests are deactivated. It's currently not compatible with all django versions. +* v0.35.0 - 26.09.2017 - [compare v0.34.0...v0.35.0](https://github.com/jedie/django-tools/compare/v0.34.0...v0.35.0) + * CHANGE: The dummy image generation function in `django_tools.unittest_utils.mockup` has a new API. +* v0.34.0 - 18.09.2017 - [compare v0.33.0...v0.34.0](https://github.com/jedie/django-tools/compare/v0.33.0...v0.34.0) + * CHANGE: The test usernames changed and spaces was replace with underscores e.g.: "staff test user" -> "staff_test_user" + * Bugfix in mockup.create_pil_image: Created images has wrong sizes +* v0.33.0 - 11.07.2017 - [compare v0.32.14...v0.33.0](https://github.com/jedie/django-tools/compare/v0.32.14...v0.33.0) + * Run tests only against Django v1.8 TLS and v1.11 TLS + * For Django 1.11: Add support for new-style middleware - contributed by benkonrath + * NEW: `django_tools.utils.request.create_fake_request()` for easier create a faked request object with `RequestFactory` + * NEW: `django_tools.utils.html_utils.html2text()` - Strip HTML tags with lxml Cleaner + Django 'strip_tags' +* v0.32.14 - 14.06.2017 - [compare v0.32.13...v0.32.14](https://github.com/jedie/django-tools/compare/v0.32.13...v0.32.14) + * Bugfix for Python 2: `mock` backport package is needed and added to `setup.install_requires` +* v0.32.13 - 24.05.2017 - [compare v0.32.12...v0.32.13](https://github.com/jedie/django-tools/compare/v0.32.12...v0.32.13) + * remove some warnings +* v0.32.12 - 04.05.2017 - [compare v0.32.11...v0.32.12](https://github.com/jedie/django-tools/compare/v0.32.11...v0.32.12) + * NEW: `self.assertIn_dedent()` in `django_tools.unittest_utils.unittest_base.BaseUnittestCase` +* v0.32.11 - 02.05.2017 - [compare v0.32.10...v0.32.11](https://github.com/jedie/django-tools/compare/v0.32.10...v0.32.11) + * Fix PyPi package mistake (`.tar.gz` archive contains `.tox` ;) +* v0.32.10 - 02.05.2017 - [compare v0.32.9...v0.32.10](https://github.com/jedie/django-tools/compare/v0.32.9...v0.32.10) + * NEW: `django_tools.mail` to send text+html mails (see above) +* v0.32.9 - 21.03.2017 - [compare v0.32.8...v0.32.9](https://github.com/jedie/django-tools/compare/v0.32.8...v0.32.9) + * Bugfix `DebugCacheLoader` if TemplateDoesNotExist was raised +* v0.32.8 - 16.03.2017 - [compare v0.32.7...v0.32.8](https://github.com/jedie/django-tools/compare/v0.32.7...v0.32.8) + * NEW: `django_tools.template.loader.DebugCacheLoader` to add template name as html comments + * Change temp filename in BrowserDebug and use `django_tools_browserdebug_` prefix + * Bugfix in `django_tools.middlewares.ThreadLocal.ThreadLocalMiddleware` +* v0.32.7 - 10.03.2017 - [compare v0.32.6...v0.32.7](https://github.com/jedie/django-tools/compare/v0.32.6...v0.32.7) + * NEW: `django_tools.permissions` - helper for setup permissions + * NEW: `/unittest_utils/user.py` - helper for creating users (needfull in unittests) +* v0.32.6 - 22.02.2017 - [compare v0.32.5...v0.32.6](https://github.com/jedie/django-tools/compare/v0.32.5...v0.32.6) +* `@task_always_eager()` decorator will set `CELERY_EAGER_PROPAGATES_EXCEPTIONS=True`, too. +* v0.32.5 - 10.02.2017 - [compare v0.32.4...v0.32.5](https://github.com/jedie/django-tools/compare/v0.32.4...v0.32.5) + * NEW: Add `template_name` (optional) to `self.assertResponse()` (check with `assertTemplateUsed()`) +* v0.32.4 - 01.02.2017 - [compare v0.32.3...v0.32.4](https://github.com/jedie/django-tools/compare/v0.32.3...v0.32.4) +* Fix: Set "is_active" for created test users +* v0.32.3 - 25.01.2017 - [compare v0.32.2...v0.32.3](https://github.com/jedie/django-tools/compare/v0.32.2...v0.32.3) + * Fix UnicodeDecodeError in BrowserDebug + * NEW: `@set_string_if_invalid()` decorator + * NEW: `@task_always_eager()` decorator +* v0.32.2 - 13.01.2017 - [compare v0.32.1...v0.32.2](https://github.com/jedie/django-tools/compare/v0.32.1...v0.32.2) + * NEW: django_tools.utils.url.GetDict +* v0.32.1 - 29.12.2016 - [compare v0.32.0...v0.32.1](https://github.com/jedie/django-tools/compare/v0.32.0...v0.32.1) + * NEW: TracebackLogMiddleware +* v0.32.0 - 19.12.2016 - [compare v0.31.0...v0.32.0](https://github.com/jedie/django-tools/compare/v0.31.0...v0.32.0) + * NEW: Management commands: 'nice_diffsettings', 'list_models' + * NEW: @display_admin_error to display silent errors in ModelAdmin.list_display callables. + * NEW: django_tools.template.render.render_template_file + * use [pytest-django](https://pypi.python.org/pypi/pytest-django) + * remove outdated stuff: See 'Backwards-incompatible changes' above. +* v0.31.0 - 03.11.2016 - [compare v0.30.4...v0.31.0](https://github.com/jedie/django-tools/compare/v0.30.4...v0.31.0) + * add Mockup utils to create dummy PIL/django-filer images with Text (see above) + * move tests into `/django_tools_tests/` +* v0.30.4 - 27.10.2016 - [compare v0.30.2...v0.30.4](https://github.com/jedie/django-tools/compare/v0.30.2...v0.30.4) + * add DjangoCommandMixin +* v0.30.2 - 05.10.2016 - [compare v0.30.1...v0.30.2](https://github.com/jedie/django-tools/compare/v0.30.1...v0.30.2) + * Bugfix Python 2 compatibility +* v0.30.1 - 26.08.2016 - [compare v0.30.0...v0.30.1](https://github.com/jedie/django-tools/compare/v0.30.0...v0.30.1) + * add: `django_tools.unittest_utils.disable_migrations.DisableMigrations` (see above) + * run tests also with django v1.10 and Python 3.5 + * use tox +* v0.30.0 - 27.04.2016 - [compare v0.29.5...v0.30.0](https://github.com/jedie/django-tools/compare/v0.29.5...v0.30.0) + * Django 1.9 and Python 3 support contributed by [naegelyd](https://github.com/jedie/django-tools/pull/9) +* v0.29.4 and v0.29.5 - 10.08.2015 - [compare v0.29.3...v0.29.5](https://github.com/jedie/django-tools/compare/v0.29.3...v0.29.5) + * Some bugfixes for django 1.6 support +* v0.29.3 - 10.08.2015 - [compare v0.29.2...v0.29.3](https://github.com/jedie/django-tools/compare/v0.29.2...v0.29.3) + * Clear ThreadLocal request atttribute after response is processed (contributed by Lucas Wiman) +* v0.29.2 - 19.06.2015 - [compare v0.29.1...v0.29.2](https://github.com/jedie/django-tools/compare/v0.29.1...v0.29.2) + * Bugfix in unittest_utils.selenium_utils.selenium2fakes_response + * assertResponse used assertContains from django + * Add QueryLogMiddleware (TODO: add tests) +* v0.29.1 - 17.06.2015 - [compare v0.29.0...v0.29.1](https://github.com/jedie/django-tools/compare/v0.29.0...v0.29.1) + * Bugfixes for Py2 and Py3 + * add StdoutStderrBuffer() +* v0.29.0 - 09.06.2015 - [compare v0.26.0...v0.29.0](https://github.com/jedie/django-tools/compare/v0.26.0...v0.29.0) + * WIP: Refactor unittests (DocTests must be updated for Py3 and more unittests must be written to cover all) + * catch more directory traversal attacks in BaseFilesystemBrowser (and merge code parts) + * Bugfix for "django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet." if using **UpdateInfoBaseModel** + * Bugfixes in **dynamic_site** for django 1.7 + * add: [django_tools.settings_utils.InternalIps](https://github.com/jedie/django-tools/blob/master/django_tools/settings_utils.py) +* v0.28.0 - 12.02.2015 - [compare v0.26.0...v0.28.0](https://github.com/jedie/django-tools/compare/v0.26.0...v0.28.0) + * Work-a-round for import loops + * (new Version number, because of PyPi stress) +* v0.26.0 - 11.02.2015 - [compare v0.25.1...v0.26.0](https://github.com/jedie/django-tools/compare/v0.25.1...v0.26.0) + * Updates for Django 1.6 and Python 3 +* v0.25.1 - 18.11.2013 + * Bugfix: Fall back to "UTF-8" if server send no encoding info +* v0.25.0 - 28.08.2012 + * Rename **cache.clear()** in SmoothCacheBackends to **cache.smooth_update()**, so that reset timestamp is independ from clear the cache. +* v0.24.10 - 24.08.2012 + * Add **SmoothCacheBackends**: [./cache/README.creole](https://github.com/jedie/django-tools/blob/master/django_tools/cache/README.creole) +* v0.24.9 - 24.08.2012 + * Bugfix in per-site cache middleware: set inital count values to None, if counting is disabled. +* v0.24.8 - 24.08.2012 + * Enhanced **per-site cache middleware**: [./cache/README.creole](https://github.com/jedie/django-tools/blob/master/django_tools/cache/README.creole) + * Add **SetRequestDebugMiddleware**: [./debug/README.creole](https://github.com/jedie/django-tools/blob/master/django_tools/debug/README.creole) +* v0.24.7 - 21.08.2012 + * Add the **per-site cache middleware** (see above) + * Add **import lib helper**: [./utils/importlib.py](https://github.com/jedie/django-tools/blob/master/django_tools/utils/importlib.py) +* v0.24.6 - 21.08.2012 + * Add the **filemanager library** (see above) +* v0.24.5 - 06.08.2012 + * Add **Print SQL Queries** context manager. (see above) +* v0.24.4 - 26.07.2012 + * remove date from version string, cause of side-effects e.g.: user clone the repo and has the filter not installed +* v0.24.3 - 25.07.2012 + * "Hardcode" the version string date attachment via [gitattribute filter script](https://github.com/jedie/python-code-snippets/tree/master/CodeSnippets/git) to fix [a reported issues](https://github.com/jedie/django-tools/issues/1) with [pip requirements file bug](https://github.com/pypa/pip/issues/145). +* v0.24.2 - 10.07.2012 + * Split [UpdateInfoBaseModel()](https://github.com/jedie/django-tools/blob/master/django_tools/models.py): So you can only set "createtime", "lastupdatetime" or "createby", "lastupdateby" or both types (This is backwards compatible) +* v0.24.1 - 12.06.2012 + * Bugfix: UsergroupsModelField() and add unittests for it + * Add "normal users" in UsergroupsModelField() + * New: Add create_user() and create_testusers() to BaseTestCase + * Add a test project for the unittests. TODO: use this for all tests +* v0.24.0 - 04.06.2012 + * [Don't use auto_now_add and auto_now in UpdateInfoBaseModel](https://github.com/jedie/django-tools/commit/a3cf1f7b2e9dbe4964306f4793c74f1782f8b2ea) + * Bugfix in [UsergroupsModelField](https://github.com/jedie/django-tools/blob/master/django_tools/limit_to_usergroups.py) +* v0.23.1 + * [Dynamic Site](https://github.com/jedie/django-tools/tree/main/django_tools/dynamic_site#dynamic-site-id) would be only initialised if settings.USE_DYNAMIC_SITE_MIDDLEWARE = True +* v0.23.0 + * Use cryptographic signing tools from django 1.4 in django_tools.utils.client_storage +* v0.22.0 + * Add [static_path.py](https://github.com/jedie/django-tools/blob/master/django_tools/fields/static_path.py) thats used settings.STATIC_ROOT. + * The old [media_path.py](https://github.com/jedie/django-tools/blob/master/django_tools/fields/media_path.py) which used settings.MEDIA_ROOT is deprecated and will be removed in the future. + * auto_add_check_unique_together() can use settings.DATABASES["default"]["ENGINE"], too. +* v0.21.1 + * Bugfixes in [Dynamic Site](https://github.com/jedie/django-tools/tree/main/django_tools/dynamic_site#dynamic-site-id). +* v0.21.0beta + * New: site alias function + * refractory 'DynamicSiteMiddleware' to a own app (**Backwards-incompatible change:** change your settings if you use the old DynamicSiteMiddleware.) +* v0.20.1 + * New: [debug_csrf_failure()](https://github.com/jedie/django-tools/blob/master/django_tools/views/csrf.py) to display the normal debug page and not the minimal csrf debug page. +* v0.20.0 + * Add experimental [DynamicSiteMiddleware](https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/DynamicSite.py), please test it and give feedback. +* v0.19.6 + * Add some south introspection rules for LanguageCodeModelField and jQueryTagModelField + * fallback if message for anonymous user can't created, because django.contrib.messages middleware not used. + * Bugfix in django_tools.utils.messages.StackInfoStorage +* v0.19.5 + * Add [http://bugs.python.org/file22767/hp_fix.diff](http://bugs.python.org/file22767/hp_fix.diff) for [https://github.com/gregmuellegger/django/issues/1](https://github.com/gregmuellegger/django/issues/1) +* v0.19.4 + * Bugfix for PyPy in local_sync_cache get_cache_information(): sys.getsizeof() not implemented on PyPy + * Bugfix in template.filters.chmod_symbol() + * Nicer solution for template.filters.human_duration() +* v0.19.3 + * Add support for https in utils/http.py +* v0.19.2 + * Bugfix in utils/http.py timeout work-a-round +* v0.19.1 + * utils/http.py changes: + * Use a better solution, see: + * Add timeout and add a work-a-round for Python < 2.6 +* v0.19.0 + * NEW: Add utils/http.py with helpers to get a webpage via http GET in unicode + * Change README from textile to creole ;) +* v0.18.2 + * Bugfix: Add missing template in pypi package +* v0.18.0 + * NEW: Add DOM compare from Gregor Müllegger GSoC work into unittest utils. +* v0.17.1 + * Bugfix in “limit_to_usergroups”: Make choices “lazy”: Don’t access the database in _init_ +* v0.17 + * Add the script “upgrade_virtualenv.py” + * Add “limit_to_usergroups” + * Add “local sync cache” + * Add models.UpdateInfoBaseModel + * Update decorators.render_to + * render_to pass keyword arguments to render_to_response() (e.g.: mimetype=“text/plain”) + * new argument “skip_fail” in get_filtered_apps(): If True: raise excaption if app is not importable +* v0.16.4 + * Bugfix: `get_db_prep_save() got an unexpected keyword argument 'connection’` when save a SignSeparatedModelField() +* v0.16.3 + * Update BrowserDebug: Use response.templates instead of response.template and make output nicer +* v0.16.2 + * Merge stack info code and display better stack info on browser debug page +* v0.16.1 + * Update django_tools.utils.messages.StackInfoStorage for django code changes. +* v0.16.0 + * NEW: path model field (check if direcotry exist) +* v0.15.0 + * NEW: Add a flexible URL field (own validator, model- and form-field) +* v0.14.1 + * Bugfix: make path in MediaPathModelField relativ (remove slashes) +* v0.14 + * NEW: django-tagging addon: Display existing tags under a tag field +* v0.13 + * Bugfix UnicodeEncodeError in Browser debug +* v0.12 + * NEW: django_tools.utils.messages.failsafe_message +* v0.11 + * NEW: Store data in a secure cookie, see: utils/client_storage.py +* v0.10.1 + * New: Display used templates in unittest BrowserDebug + * Bugfix: catch if last usermessages exist +* v0.10.0 + * NEW: utils around django messages, see: /django_tools/utils/messages.py +* v0.9.1 + * Bugfix: database column was not created: don’t overwrite get_internal_type() +* v0.9 + * New: stuff in /django_tools/fields/ + * see also backwards-incompatible changes, above! +* v0.8.2 + * New: widgets.SelectMediaPath(): Select a sub directory in settings.MEDIA_ROOT + * New: fields.SignSeparatedField() +* v0.8.1 + * Add “no_args” keyword argument to installed_apps_utils.get_filtered_apps() +* v0.8.0 + * Add model LanguageCode field and form LanguageCode field in Accept-Language header format (RFC 2616) +* v0.7.0 + * Add decorators.py +* v0.6.0 + * Add forms_utils.LimitManyToManyFields, crosspost: [http://www.djangosnippets.org/snippets/1691/](http://www.djangosnippets.org/snippets/1691/) +* v0.5.0 + * Add template/filters.py from PyLucid v0.8.x +* v0.4.0 + * Add experimental “warn_invalid_template_vars” +* v0.3.1 + * Bugfix: Exclude the instance if it was saved in the past. +* v0.3.0 + * Add utils.installed_apps_utils +* v0.2.0 + * Add models_utils, see: [http://www.jensdiemer.de/_command/118/blog/detail/67/](http://www.jensdiemer.de/_command/118/blog/detail/67/) (de) +* v0.1.0 + * first version cut out from PyLucid CMS – [http://www.pylucid.org](http://www.pylucid.org) +## links +| Homepage | [https://github.com/jedie/django-tools](https://github.com/jedie/django-tools) | +| PyPi | [https://pypi.python.org/pypi/django-tools/](https://pypi.python.org/pypi/django-tools/) | +## donation +* [paypal.me/JensDiemer](https://www.paypal.me/JensDiemer) +* [Flattr This!](https://flattr.com/submit/auto?uid=jedie&url=https%3A%2F%2Fgithub.com%2Fjedie%2Fdjango-tools%2F) +* Send [Bitcoins](https://www.bitcoin.org/) to [1823RZ5Md1Q2X5aSXRC5LRPcYdveCiVX6F](https://blockexplorer.com/address/1823RZ5Md1Q2X5aSXRC5LRPcYdveCiVX6F) + +%package help +Summary: Development documents and examples for django-tools +Provides: python3-django-tools-doc +%description help +``` +### SetRequestDebugMiddleware +middleware to add debug bool attribute to request object. +More info: [./debug/README.creole](https://github.com/jedie/django-tools/blob/master/django_tools/debug/README.creole) +### TracebackLogMiddleware +Put traceback in log by call [logging.exception()](https://docs.python.org/3/library/logging.html#logging.Logger.exception) on `process_exception()` +Activate with: +``` +MIDDLEWARE_CLASSES = ( + 'django_tools.middlewares.TracebackLogMiddleware.TracebackLogMiddleware', +) +``` +### FnMatchIps() - Unix shell-style wildcards in INTERNAL_IPS / ALLOWED_HOSTS +settings.py e.g.: +``` +from django_tools.settings_utils import FnMatchIps +INTERNAL_IPS = FnMatchIps(["127.0.0.1", "::1", "192.168.*.*", "10.0.*.*"]) +ALLOWED_HOSTS = FnMatchIps(["127.0.0.1", "::1", "192.168.*.*", "10.0.*.*"]) +``` +### StdoutStderrBuffer() +redirect stdout + stderr to a string buffer. e.g.: +``` +from django_tools.unittest_utils.stdout_redirect import StdoutStderrBuffer +with StdoutStderrBuffer() as buffer: + print("foo") +output = buffer.get_output() # contains "foo\n" +``` +### Management commands +#### permission_info +List all permissions for one django user. +(Needs `'django_tools'` in INSTALLED_APPS) +e.g.: +``` +$ ./manage.py permission_info +No username given! +All existing users are: +foo, bar, john, doe +$ ./manage.py permission_info foo +All permissions for user 'test_editor': + is_active : yes + is_staff : yes + is_superuser : no +[*] admin.add_logentry +[*] admin.change_logentry +[*] admin.delete_logentry +[ ] auth.add_group +[ ] auth.add_permission +[ ] auth.add_user +``` +#### logging_info +Shows a list of all loggers and marks which ones are configured in settings.LOGGING: +``` +$ ./manage.py logging_info +``` +#### nice_diffsettings +Similar to django 'diffsettings', but used pretty-printed representation: +``` +$ ./manage.py nice_diffsettings +``` +#### database_info +Just display some information about the used database and connections: +``` +$ ./manage.py database_info +``` +#### list_models +Just list all existing models in app_label.ModelName format. Useful to use this in 'dumpdata' etc: +``` +$ ./manage.py list_models +``` +### ..all others… +There exist many miscellaneous stuff. Look in the source, luke! +## Backwards-incompatible changes +Old changes archived in git history here: +* [>=v0.47](https://github.com/jedie/django-tools/tree/v0.49.0#backwards-incompatible-changes) +* [>=v0.35](https://github.com/jedie/django-tools/tree/v0.35.0#backwards-incompatible-changes) +### v0.51 +All Selenium helper are deprecated, please migrate to [Playwright](https://playwright.dev/python/) ;) +### v0.50 +Removed old selenium helper function, [deprecated since v0.43](https://github.com/jedie/django-tools/tree/v0.43.0#v043) +Make all Selenium web driver instances persistent for the complete test run session. +This speedup tests and fixed some bugs in Selenium. +This result in the same browser/webdriver settings for all test classes! +## Django compatibility +| django-tools | django version | python | +| ---------------- | -------------- | --------------- | +| >= v0.52.0 | 3.2, 4.0, 4.1 | 3.8, 3.9, 3.10 | +| >= v0.50.0 | 2.2, 3.2, 4.0 | 3.8, 3.9, 3.10 | +| >= v0.49.0 | 2.2, 3.1, 3.2 | 3.7, 3.8, 3.9 | +| >= v0.47.0 | 2.2, 3.0, 3.1 | >= 3.6, pypy3 | +| >= v0.39 | 1.11, 2.0 | 3.5, 3.6, pypy3 | +| >= v0.38.1 | 1.8, 1.11 | 3.5, 3.6, pypy3 | +| >= v0.38.0 | 1.8, 1.11 | 3.5, 3.6 | +| >= v0.37.0 | 1.8, 1.11 | 3.4, 3.5 | +| >= v0.33.0 | 1.8, 1.11 | 2.7, 3.4, 3.5 | +| v0.30.1-v0.32.14 | 1.8, 1.9, 1.10 | 2.7, 3.4, 3.5 | +| v0.30 | 1.8, 1.9 | 2.7, 3.4 | +| v0.29 | 1.6 - 1.8 | 2.7, 3.4 | +| v0.26 | <=1.6 | | +| v0.25 | <=1.4 | | +(See also combinations for [tox in pyproject.toml](https://github.com/jedie/django-tools/blob/master/pyproject.toml)) +## history +* *dev* - [compare v0.54.0...main](https://github.com/jedie/django-tools/compare/v0.54.0...main) + * TBC +* [v0.54.0 - 15.09.2022](https://github.com/jedie/django-tools/compare/v0.53.0...v0.54.0) + * Run [safety](https://github.com/pyupio/safety) in CI pipeline. + * NEW: `SyslogHandler` for easy logging to `syslog` + * Replace creole README with markdown +* [v0.53.0 - 18.08.2022](https://github.com/jedie/django-tools/compare/v0.52.0...v0.53.0) + * NEW: `MassContextManagerBase`, `DenyStdWrite` + Updated: `StdoutStderrBuffer` + * Enhance `run_testserver` command + * Small test project setup updates +* [v0.52.0 - 17.08.2022](https://github.com/jedie/django-tools/compare/v0.51.0...v0.52.0) + * Move `run_testserver` management command from `django_tools_test_app` to `django_tools` and polish it. + * Restrict `AlwaysLoggedInAsSuperUserMiddleware` to the admin. + * Test with Django 3.2, 4.0 and 4.1 +* [v0.51.0 - 26.07.2022](https://github.com/jedie/django-tools/compare/v0.50.0...v0.51.0) + * NEW: `check_editor_config()` to check editor config and line length in projects + * DEPRECATE all Selenium helper, please migrate to Playwright ;) + * NEW: [Playwright](https://playwright.dev/python/) base Unittest class and login helper +* [v0.50.0 - 29.05.2022](https://github.com/jedie/django-tools/compare/v0.49.0...v0.50.0) + * Rename git "master" branch to "main" + * Use [webdriver-manager](https://github.com/SergeyPirogov/webdriver_manager) to setup selenium web drivers + * CHANGE: Now all web driver instances are cached and reused for the complete test run! + * Use [darker](https://github.com/akaihola/darker) for code formatting + * Update test matrix: Add Python 3.10 and Django v4.0 (remove Python 3.7 and Django 3.1) +* v0.49.0 - 22.11.2021 - [compare v0.48.3...v0.49.0](https://github.com/jedie/django-tools/compare/v0.48.3...v0.49.0) + * NEW: `VersionProtectBaseModel` - Protect a model against overwriting a newer entry with an older one, by adding a auto increment version number. + * NEW: `AlwaysLoggedInAsSuperUserMiddleware` useful for local dev server run to auto login into Django Admin + * Enhance Selenium test helpers and [fix #21: Set chrome accept_languages in headless mode](https://github.com/jedie/django-tools/issues/21) + * Update project: Tests, code-style etc. +* v0.48.3 - 20.12.2020 - [compare v0.47.2...v0.48.3](https://github.com/jedie/django-tools/compare/v0.47.2...v0.48.3) + * NEW: `ImageDummy().in_memory_image_file()` useful for e.g.: POST a image upload via Django's test client +* v0.48.2 - 06.12.2020 - [compare v0.47.1...v0.48.2](https://github.com/jedie/django-tools/compare/v0.47.1...v0.48.2) + * Bugfix "Serve User Media File": Create tokens via migrations and handle if tokens not exists +* v0.48.1 - 06.12.2020 - [compare v0.47.0...v0.48.1](https://github.com/jedie/django-tools/compare/v0.47.0...v0.48.1) + * Add migration file to "Serve User Media File" +* v0.48.0 - 06.12.2020 - [compare v0.47.0...v0.48.0](https://github.com/jedie/django-tools/compare/v0.47.0...v0.48.0) + * NEW: "Serve User Media File" reuseable app + * NEW: django_tools.unittest_utils.signals.SignalsContextManager + * Update `installed_apps_utils.get_filtered_apps()` and support app config entries in `settings.INSTALLED_APPS` +* v0.47.0 - 26.11.2020 - [compare v0.46.1...v0.47.0](https://github.com/jedie/django-tools/compare/v0.46.1...v0.47.0) + * updates for newer django versions + * NEW: assert_warnings(), assert_no_warnings() and assert_in_logs() + * remove broken LoggingBuffer() + * update project setup, fix tests and pipelines +* v0.46.1 - 19.02.2020 - [compare v0.46.0...v0.46.1](https://github.com/jedie/django-tools/compare/v0.46.0...v0.46.1) + * less restricted dependency specification + * NEW: `"django_tools.middlewares.LogHeaders.LogRequestHeadersMiddleware"` + * SeleniumChromiumTestCase: set "accept_languages" and disable "headless" mode, see also: [https://github.com/jedie/django-tools/issues/21](https://github.com/jedie/django-tools/issues/21) +* v0.46.0 - 13.02.2020 - [compare v0.45.3...v0.46.0](https://github.com/jedie/django-tools/compare/v0.45.3...v0.46.0) + * `dynamic_site` was removed. Please use e.g.: [django-hosts](https://github.com/jazzband/django-hosts) + * modernize project setup and use `poetry` + * remove `lxml` decency by using [bleach](https://github.com/mozilla/bleach) for `html_utils.html2text` + * update code and code style +* v0.45.3 - 25.08.2019 - [compare v0.45.2...v0.45.3](https://github.com/jedie/django-tools/compare/v0.45.2...v0.45.3) + * Add `excepted_exit_code` to `django_tools.unittest_utils.django_command.DjangoCommandMixin` to it's possible to test errors in manage commands +* v0.45.2 - 26.06.2019 - [compare v0.45.1...v0.45.2](https://github.com/jedie/django-tools/compare/v0.45.1...v0.45.2) + * NEW: `django_tools.log_utils.throttle_admin_email_handler.ThrottledAdminEmailHandler` +* v0.45.1 - 03.04.2019 - [compare v0.45.0...v0.45.1](https://github.com/jedie/django-tools/compare/v0.45.0...v0.45.1) + * Bugfix ValueError in `django_tools.unittest_utils.email.print_mailbox` +* v0.45.0 - 01.04.2019 - [compare v0.44.2...v0.45.0](https://github.com/jedie/django-tools/compare/v0.44.2...v0.45.0) + * NEW: `OverwriteFileSystemStorage` with backup functionality + * NEW: `print_exc_plus()` - traceback with a listing of all the local variables + * NEW: `assert_pformat_equal` with `pprintpp` and `icdiff` + * NEW: `assert_filenames_and_content` +* v0.44.2 - 02.01.2019 - [compare v0.44.1...v0.44.2](https://github.com/jedie/django-tools/compare/v0.44.1...v0.44.2) + * Handle errors like: [https://github.com/andymccurdy/redis-py/issues/995](https://github.com/andymccurdy/redis-py/issues/995) +* v0.44.1 - 02.01.2019 - [compare v0.44.0...v0.44.1](https://github.com/jedie/django-tools/compare/v0.44.0...v0.44.1) + * `LoggingBuffer`: Don't deactivate existing log handler, just append the buffer handler. +* v0.44.0 - 13.12.2018 - [compare v0.43.2...v0.44.0](https://github.com/jedie/django-tools/compare/v0.43.2...v0.44.0) + * NEW: `django_file = ImageDummy().create_django_file_info_image(text="")` e.g.: for attach to `models.ImageField()` + * Make `mockup.ImageDummy()` usable even if django-filer is not installed. + * `mockup.ImageDummy()` default image format changed from png to jpeg + * Cleanup: remove old, since v0.35 deprecated mockup image API +* v0.43.2 - 11.12.2018 - [compare v0.43.1...v0.43.2](https://github.com/jedie/django-tools/compare/v0.43.1...v0.43.2) + * Bugfix Selenium refactor: Use the class with the same functionality if old usage places are used. +* v0.43.1 - 11.12.2018 - [compare v0.43.0...v0.43.1](https://github.com/jedie/django-tools/compare/v0.43.0...v0.43.1) + * Bugfix: Selenium test cases: clear `window.localStorage` after test run +* v0.43.0 - 11.12.2018 - [compare v0.42.4...v0.43.0](https://github.com/jedie/django-tools/compare/v0.42.4...v0.43.0) + * Refactor selenium helpers + * Split selenium test cases: with and without Django StaticLiveServerTestCase + * NEW: Selenium helper to access `window.localStorage` +* v0.42.4 - 12.10.2018 - [compare v0.42.3...v0.42.4](https://github.com/jedie/django-tools/compare/v0.42.3...v0.42.4) + * Add `request` object to `TestUserMixin.login()` (needed for e.g.: django-axes auth backend) +* v0.42.3 - 10.10.2018 - [compare v0.42.2...v0.42.3](https://github.com/jedie/django-tools/compare/v0.42.2...v0.42.3) + * NEW: * `assertments.assert_is_dir`, `assertments.assert_is_file`, `assertments.assert_path_not_exists` +* v0.42.2 - 18.09.2018 - [compare v0.42.1...v0.42.2](https://github.com/jedie/django-tools/compare/v0.42.1...v0.42.2) + * NEW: `assert_installed_apps()` - Check entries in settings.INSTALLED_APPS +* v0.42.1 - 17.09.2018 - [compare v0.42.0...v0.42.1](https://github.com/jedie/django-tools/compare/v0.42.0...v0.42.1) + * NEW: `django_tools.unittest_utils.assertments.assert_language_code` - Check if given language_code is in settings.LANGUAGES +* v0.42.0 - 07.09.2018 - [compare v0.41.0...v0.42.0](https://github.com/jedie/django-tools/compare/v0.41.0...v0.42.0) + * remove all celery stuff + * NEW: `$ ./manage.py logging_info` Shows a list of all loggers and marks which ones are configured in settings.LOGGING + * manage commands `list_models` and `nice_diffsettings` are moved from seperate apps +* v0.41.0 - 28.08.2018 - [compare v0.40.6...v0.41.0](https://github.com/jedie/django-tools/compare/v0.40.6...v0.41.0) + * NEW: `unittest_utils/assertments.py` with some common assert functions + * Remove `@task_always_eager()` decorator +* v0.40.6 - 28.08.2018 - [compare v0.40.5...v0.40.6](https://github.com/jedie/django-tools/compare/v0.40.5...v0.40.6) + * Bugfix `@task_always_eager()` decorator +* v0.40.5 - 27.08.2018 - [compare v0.40.4...v0.40.5](https://github.com/jedie/django-tools/compare/v0.40.4...v0.40.5) + * Bugfix `DjangoCommandMixin.call_manage_py()`: Use the given `manage.py` filename +* v0.40.4 - 21.08.2018 - [compare v0.40.3...v0.40.4](https://github.com/jedie/django-tools/compare/v0.40.3...v0.40.4) + * NEW: `django_tools.debug.delay` to simulate longer processing time by set a delay via GET parameter (see above) +* v0.40.3 - 18.07.2018 - [compare v0.40.2...v0.40.3](https://github.com/jedie/django-tools/compare/v0.40.2...v0.40.3) + * Enhance selenium test cases: + * NEW: `assert_visible_by_id()` + * NEW: `assert_clickable_by_id()` + * NEW: `assert_clickable_by_xpath()` + * add `desired_capabilities` to firefox and chrome test cases + * enable logging in chrome test case + * NEW: `assert_in_browser_log()` in chrome test case +* v0.40.2 - 04.07.2018 - [compare v0.40.1...v0.40.2](https://github.com/jedie/django-tools/compare/v0.40.1...v0.40.2) + * Bugfix selenium Test Case if driver is None + * Bugfix django compatibility +* v0.40.1 - 28.06.2018 - [compare v0.40.0...v0.40.1](https://github.com/jedie/django-tools/compare/v0.40.0...v0.40.1) + * Bugfix selenium test case if executable can't be found. +* v0.40.0 - 15.06.2018 - [compare v0.39.6...v0.40.0](https://github.com/jedie/django-tools/compare/v0.39.6...v0.40.0) + * NEW: selenium chrome and firefox test cases in `django_tools.unittest_utils.selenium_utils` + * Fix test project and add `run_test_project_dev_server.sh` for easy test + * Fixing tests +* v0.39.6 - 04.05.2018 - [compare v0.39.5...v0.39.6](https://github.com/jedie/django-tools/compare/v0.39.5...v0.39.6) + * Enhance model instance unittest code generator +* v0.39.5 - 24.04.2018 - [compare v0.39.4...v0.39.5](https://github.com/jedie/django-tools/compare/v0.39.4...v0.39.5) + * NEW: Model instance unittest code generator (see above) +* v0.39.4 - 06.04.2018 - [compare v0.39.3...v0.39.4](https://github.com/jedie/django-tools/compare/v0.39.3...v0.39.4) + * NEW: `django_tools.unittest_utils.logging_utils.FilterAndLogWarnings` and `django_tools.unittest_utils.logging_utils.CutPathnameLogRecordFactory` +* v0.39.3 - 22.03.2018 - [compare v0.39.2...v0.39.3](https://github.com/jedie/django-tools/compare/v0.39.2...v0.39.3) + * `django_tools.permissions.get_filtered_permissions` has new keyword argument: `exclude_actions` +* v0.39.2 - 22.03.2018 - [compare v0.39.1...v0.39.2](https://github.com/jedie/django-tools/compare/v0.39.1...v0.39.2) + * NEW: `django_tools.parler_utils.parler_fixtures.ParlerDummyGenerator` + * NEW: `django_tools.fixture_tools.languages.iter_languages` +* v0.39.1 - 19.03.2018 - [compare v0.39.0...v0.39.1](https://github.com/jedie/django-tools/compare/v0.39.0...v0.39.1) + * NEW: `django_tools.unittest_utils.email.print_mailbox()` + * minor updates +* v0.39.0 - 02.03.2018 - [compare v0.38.9...v0.39.0](https://github.com/jedie/django-tools/compare/v0.38.9...v0.39.0) + * NEW: Isolated Filesystem decorator / context manager + * Backwards-incompatible change: file renamed `django_tools/unittest_utils/{celery.py => celery_utils.py`} + * Skip run test with Django 1.8 and run tests with Django 1.11 and 2.0 +* v0.38.9 - 05.02.2018 - [compare v0.38.8...v0.38.9](https://github.com/jedie/django-tools/compare/v0.38.8...v0.38.9) + * lowering log level on missing permissions from "error" to "debug" +* v0.38.8 - 05.02.2018 - [compare v0.38.7...v0.38.8](https://github.com/jedie/django-tools/compare/v0.38.7...v0.38.8) + * send mail: use from celery import shared_task instead of djcelery_transactions +* v0.38.7 - 15.01.2018 - [compare v0.38.6...v0.38.7](https://github.com/jedie/django-tools/compare/v0.38.6...v0.38.7) + * Add missing arguments (like "attachments", "cc" etc.) to `django_tools.mail.send_mail.SendMailCelery` +* v0.38.6 - 10.01.2018 - [compare v0.38.4...v0.38.5](https://github.com/jedie/django-tools/compare/v0.38.4...v0.38.5) + * NEW: `./manage.py clear_cache` + * Display POST data in browser debug (`django_tools.unittest_utils.BrowserDebug.debug_response`) +* v0.38.5 - 02.01.2018 - [compare v0.38.4...v0.38.5](https://github.com/jedie/django-tools/compare/v0.38.4...v0.38.5) + * NEW: Helper to assert django message framework output in unittests: + * `BaseUnittestCase.get_messages()`: return a list of all messages + * `BaseTestCase.assertMessages()`: compare messages + * `BaseTestCase.assertResponse()`: has new keyword argument `messages` + * NEW: `BaseUnittestCase.assert_exception_startswith()` +* v0.38.4 - 28.12.2017 - [compare v0.38.3...v0.38.4](https://github.com/jedie/django-tools/compare/v0.38.3...v0.38.4) + * Bugfix attach user group on existing user in: `django_tools.unittest_utils.user.get_or_create_user` +* v0.38.3 - 28.12.2017 - [compare v0.38.2...v0.38.3](https://github.com/jedie/django-tools/compare/v0.38.2...v0.38.3) + * Bugfix: `unittest_utils.user.get_or_create_group` also removes obsolete permissions, too. +* v0.38.2 - 27.12.2017 - [compare v0.38.1...v0.38.2](https://github.com/jedie/django-tools/compare/v0.38.1...v0.38.2) + * NEW: `./manage.py update_permissions` +* v0.38.1 - 21.12.2017 - [compare v0.38.0...v0.38.1](https://github.com/jedie/django-tools/compare/v0.38.0...v0.38.1) + * refactor travis/tox/pytest/coverage stuff + * Tests can be run via `python3 setup.py tox` and/or `python3 setup.py test` + * Test also with pypy3 on Travis CI. +* v0.38.0 - 19.12.2017 - [compare v0.37.0...v0.38.0](https://github.com/jedie/django-tools/compare/v0.37.0...v0.38.0) + * NEW: `django_tools.unittest_utils.user.get_or_create_group` + * NEW: `django_tools.unittest_utils.user.get_or_create_user` + * NEW: `django_tools.unittest_utils.user.get_or_create_user_and_group` + * NEW: `BaseUnittestCase.get_admin_change_url()` and `BaseUnittestCase.get_admin_add_url()` + * NEW: `BaseUnittestCase.assert_startswith()` and `BaseUnittestCase.assert_endswith()` +* v0.37.0 - 11.12.2017 - [compare v0.36.0...v0.37.0](https://github.com/jedie/django-tools/compare/v0.36.0...v0.37.0) + * Skip official support for python v2 (remove from text matrix) + * NEW: `./manage.py permission_info`: Display a list of all permissions for one django user + * NEW: `django_tools.permissions.get_filtered_permissions()` and `django_tools.permissions.pprint_filtered_permissions()` + * `django_tools.settings_utils.InternalIps` was renamed to `FnMatchIps` and can be also used for **ALLOWED_HOSTS** + * Bugfix/Enhance permission helpers +* v0.36.0 - 20.11.2017 - [compare v0.35.0...v0.36.0](https://github.com/jedie/django-tools/compare/v0.35.0...v0.36.0) + * NEW: `./manage.py database_info` + * Bugfix: **ModelPermissionMixin** + * Dynamic Sites is no longer maintained and tests are deactivated. It's currently not compatible with all django versions. +* v0.35.0 - 26.09.2017 - [compare v0.34.0...v0.35.0](https://github.com/jedie/django-tools/compare/v0.34.0...v0.35.0) + * CHANGE: The dummy image generation function in `django_tools.unittest_utils.mockup` has a new API. +* v0.34.0 - 18.09.2017 - [compare v0.33.0...v0.34.0](https://github.com/jedie/django-tools/compare/v0.33.0...v0.34.0) + * CHANGE: The test usernames changed and spaces was replace with underscores e.g.: "staff test user" -> "staff_test_user" + * Bugfix in mockup.create_pil_image: Created images has wrong sizes +* v0.33.0 - 11.07.2017 - [compare v0.32.14...v0.33.0](https://github.com/jedie/django-tools/compare/v0.32.14...v0.33.0) + * Run tests only against Django v1.8 TLS and v1.11 TLS + * For Django 1.11: Add support for new-style middleware - contributed by benkonrath + * NEW: `django_tools.utils.request.create_fake_request()` for easier create a faked request object with `RequestFactory` + * NEW: `django_tools.utils.html_utils.html2text()` - Strip HTML tags with lxml Cleaner + Django 'strip_tags' +* v0.32.14 - 14.06.2017 - [compare v0.32.13...v0.32.14](https://github.com/jedie/django-tools/compare/v0.32.13...v0.32.14) + * Bugfix for Python 2: `mock` backport package is needed and added to `setup.install_requires` +* v0.32.13 - 24.05.2017 - [compare v0.32.12...v0.32.13](https://github.com/jedie/django-tools/compare/v0.32.12...v0.32.13) + * remove some warnings +* v0.32.12 - 04.05.2017 - [compare v0.32.11...v0.32.12](https://github.com/jedie/django-tools/compare/v0.32.11...v0.32.12) + * NEW: `self.assertIn_dedent()` in `django_tools.unittest_utils.unittest_base.BaseUnittestCase` +* v0.32.11 - 02.05.2017 - [compare v0.32.10...v0.32.11](https://github.com/jedie/django-tools/compare/v0.32.10...v0.32.11) + * Fix PyPi package mistake (`.tar.gz` archive contains `.tox` ;) +* v0.32.10 - 02.05.2017 - [compare v0.32.9...v0.32.10](https://github.com/jedie/django-tools/compare/v0.32.9...v0.32.10) + * NEW: `django_tools.mail` to send text+html mails (see above) +* v0.32.9 - 21.03.2017 - [compare v0.32.8...v0.32.9](https://github.com/jedie/django-tools/compare/v0.32.8...v0.32.9) + * Bugfix `DebugCacheLoader` if TemplateDoesNotExist was raised +* v0.32.8 - 16.03.2017 - [compare v0.32.7...v0.32.8](https://github.com/jedie/django-tools/compare/v0.32.7...v0.32.8) + * NEW: `django_tools.template.loader.DebugCacheLoader` to add template name as html comments + * Change temp filename in BrowserDebug and use `django_tools_browserdebug_` prefix + * Bugfix in `django_tools.middlewares.ThreadLocal.ThreadLocalMiddleware` +* v0.32.7 - 10.03.2017 - [compare v0.32.6...v0.32.7](https://github.com/jedie/django-tools/compare/v0.32.6...v0.32.7) + * NEW: `django_tools.permissions` - helper for setup permissions + * NEW: `/unittest_utils/user.py` - helper for creating users (needfull in unittests) +* v0.32.6 - 22.02.2017 - [compare v0.32.5...v0.32.6](https://github.com/jedie/django-tools/compare/v0.32.5...v0.32.6) +* `@task_always_eager()` decorator will set `CELERY_EAGER_PROPAGATES_EXCEPTIONS=True`, too. +* v0.32.5 - 10.02.2017 - [compare v0.32.4...v0.32.5](https://github.com/jedie/django-tools/compare/v0.32.4...v0.32.5) + * NEW: Add `template_name` (optional) to `self.assertResponse()` (check with `assertTemplateUsed()`) +* v0.32.4 - 01.02.2017 - [compare v0.32.3...v0.32.4](https://github.com/jedie/django-tools/compare/v0.32.3...v0.32.4) +* Fix: Set "is_active" for created test users +* v0.32.3 - 25.01.2017 - [compare v0.32.2...v0.32.3](https://github.com/jedie/django-tools/compare/v0.32.2...v0.32.3) + * Fix UnicodeDecodeError in BrowserDebug + * NEW: `@set_string_if_invalid()` decorator + * NEW: `@task_always_eager()` decorator +* v0.32.2 - 13.01.2017 - [compare v0.32.1...v0.32.2](https://github.com/jedie/django-tools/compare/v0.32.1...v0.32.2) + * NEW: django_tools.utils.url.GetDict +* v0.32.1 - 29.12.2016 - [compare v0.32.0...v0.32.1](https://github.com/jedie/django-tools/compare/v0.32.0...v0.32.1) + * NEW: TracebackLogMiddleware +* v0.32.0 - 19.12.2016 - [compare v0.31.0...v0.32.0](https://github.com/jedie/django-tools/compare/v0.31.0...v0.32.0) + * NEW: Management commands: 'nice_diffsettings', 'list_models' + * NEW: @display_admin_error to display silent errors in ModelAdmin.list_display callables. + * NEW: django_tools.template.render.render_template_file + * use [pytest-django](https://pypi.python.org/pypi/pytest-django) + * remove outdated stuff: See 'Backwards-incompatible changes' above. +* v0.31.0 - 03.11.2016 - [compare v0.30.4...v0.31.0](https://github.com/jedie/django-tools/compare/v0.30.4...v0.31.0) + * add Mockup utils to create dummy PIL/django-filer images with Text (see above) + * move tests into `/django_tools_tests/` +* v0.30.4 - 27.10.2016 - [compare v0.30.2...v0.30.4](https://github.com/jedie/django-tools/compare/v0.30.2...v0.30.4) + * add DjangoCommandMixin +* v0.30.2 - 05.10.2016 - [compare v0.30.1...v0.30.2](https://github.com/jedie/django-tools/compare/v0.30.1...v0.30.2) + * Bugfix Python 2 compatibility +* v0.30.1 - 26.08.2016 - [compare v0.30.0...v0.30.1](https://github.com/jedie/django-tools/compare/v0.30.0...v0.30.1) + * add: `django_tools.unittest_utils.disable_migrations.DisableMigrations` (see above) + * run tests also with django v1.10 and Python 3.5 + * use tox +* v0.30.0 - 27.04.2016 - [compare v0.29.5...v0.30.0](https://github.com/jedie/django-tools/compare/v0.29.5...v0.30.0) + * Django 1.9 and Python 3 support contributed by [naegelyd](https://github.com/jedie/django-tools/pull/9) +* v0.29.4 and v0.29.5 - 10.08.2015 - [compare v0.29.3...v0.29.5](https://github.com/jedie/django-tools/compare/v0.29.3...v0.29.5) + * Some bugfixes for django 1.6 support +* v0.29.3 - 10.08.2015 - [compare v0.29.2...v0.29.3](https://github.com/jedie/django-tools/compare/v0.29.2...v0.29.3) + * Clear ThreadLocal request atttribute after response is processed (contributed by Lucas Wiman) +* v0.29.2 - 19.06.2015 - [compare v0.29.1...v0.29.2](https://github.com/jedie/django-tools/compare/v0.29.1...v0.29.2) + * Bugfix in unittest_utils.selenium_utils.selenium2fakes_response + * assertResponse used assertContains from django + * Add QueryLogMiddleware (TODO: add tests) +* v0.29.1 - 17.06.2015 - [compare v0.29.0...v0.29.1](https://github.com/jedie/django-tools/compare/v0.29.0...v0.29.1) + * Bugfixes for Py2 and Py3 + * add StdoutStderrBuffer() +* v0.29.0 - 09.06.2015 - [compare v0.26.0...v0.29.0](https://github.com/jedie/django-tools/compare/v0.26.0...v0.29.0) + * WIP: Refactor unittests (DocTests must be updated for Py3 and more unittests must be written to cover all) + * catch more directory traversal attacks in BaseFilesystemBrowser (and merge code parts) + * Bugfix for "django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet." if using **UpdateInfoBaseModel** + * Bugfixes in **dynamic_site** for django 1.7 + * add: [django_tools.settings_utils.InternalIps](https://github.com/jedie/django-tools/blob/master/django_tools/settings_utils.py) +* v0.28.0 - 12.02.2015 - [compare v0.26.0...v0.28.0](https://github.com/jedie/django-tools/compare/v0.26.0...v0.28.0) + * Work-a-round for import loops + * (new Version number, because of PyPi stress) +* v0.26.0 - 11.02.2015 - [compare v0.25.1...v0.26.0](https://github.com/jedie/django-tools/compare/v0.25.1...v0.26.0) + * Updates for Django 1.6 and Python 3 +* v0.25.1 - 18.11.2013 + * Bugfix: Fall back to "UTF-8" if server send no encoding info +* v0.25.0 - 28.08.2012 + * Rename **cache.clear()** in SmoothCacheBackends to **cache.smooth_update()**, so that reset timestamp is independ from clear the cache. +* v0.24.10 - 24.08.2012 + * Add **SmoothCacheBackends**: [./cache/README.creole](https://github.com/jedie/django-tools/blob/master/django_tools/cache/README.creole) +* v0.24.9 - 24.08.2012 + * Bugfix in per-site cache middleware: set inital count values to None, if counting is disabled. +* v0.24.8 - 24.08.2012 + * Enhanced **per-site cache middleware**: [./cache/README.creole](https://github.com/jedie/django-tools/blob/master/django_tools/cache/README.creole) + * Add **SetRequestDebugMiddleware**: [./debug/README.creole](https://github.com/jedie/django-tools/blob/master/django_tools/debug/README.creole) +* v0.24.7 - 21.08.2012 + * Add the **per-site cache middleware** (see above) + * Add **import lib helper**: [./utils/importlib.py](https://github.com/jedie/django-tools/blob/master/django_tools/utils/importlib.py) +* v0.24.6 - 21.08.2012 + * Add the **filemanager library** (see above) +* v0.24.5 - 06.08.2012 + * Add **Print SQL Queries** context manager. (see above) +* v0.24.4 - 26.07.2012 + * remove date from version string, cause of side-effects e.g.: user clone the repo and has the filter not installed +* v0.24.3 - 25.07.2012 + * "Hardcode" the version string date attachment via [gitattribute filter script](https://github.com/jedie/python-code-snippets/tree/master/CodeSnippets/git) to fix [a reported issues](https://github.com/jedie/django-tools/issues/1) with [pip requirements file bug](https://github.com/pypa/pip/issues/145). +* v0.24.2 - 10.07.2012 + * Split [UpdateInfoBaseModel()](https://github.com/jedie/django-tools/blob/master/django_tools/models.py): So you can only set "createtime", "lastupdatetime" or "createby", "lastupdateby" or both types (This is backwards compatible) +* v0.24.1 - 12.06.2012 + * Bugfix: UsergroupsModelField() and add unittests for it + * Add "normal users" in UsergroupsModelField() + * New: Add create_user() and create_testusers() to BaseTestCase + * Add a test project for the unittests. TODO: use this for all tests +* v0.24.0 - 04.06.2012 + * [Don't use auto_now_add and auto_now in UpdateInfoBaseModel](https://github.com/jedie/django-tools/commit/a3cf1f7b2e9dbe4964306f4793c74f1782f8b2ea) + * Bugfix in [UsergroupsModelField](https://github.com/jedie/django-tools/blob/master/django_tools/limit_to_usergroups.py) +* v0.23.1 + * [Dynamic Site](https://github.com/jedie/django-tools/tree/main/django_tools/dynamic_site#dynamic-site-id) would be only initialised if settings.USE_DYNAMIC_SITE_MIDDLEWARE = True +* v0.23.0 + * Use cryptographic signing tools from django 1.4 in django_tools.utils.client_storage +* v0.22.0 + * Add [static_path.py](https://github.com/jedie/django-tools/blob/master/django_tools/fields/static_path.py) thats used settings.STATIC_ROOT. + * The old [media_path.py](https://github.com/jedie/django-tools/blob/master/django_tools/fields/media_path.py) which used settings.MEDIA_ROOT is deprecated and will be removed in the future. + * auto_add_check_unique_together() can use settings.DATABASES["default"]["ENGINE"], too. +* v0.21.1 + * Bugfixes in [Dynamic Site](https://github.com/jedie/django-tools/tree/main/django_tools/dynamic_site#dynamic-site-id). +* v0.21.0beta + * New: site alias function + * refractory 'DynamicSiteMiddleware' to a own app (**Backwards-incompatible change:** change your settings if you use the old DynamicSiteMiddleware.) +* v0.20.1 + * New: [debug_csrf_failure()](https://github.com/jedie/django-tools/blob/master/django_tools/views/csrf.py) to display the normal debug page and not the minimal csrf debug page. +* v0.20.0 + * Add experimental [DynamicSiteMiddleware](https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/DynamicSite.py), please test it and give feedback. +* v0.19.6 + * Add some south introspection rules for LanguageCodeModelField and jQueryTagModelField + * fallback if message for anonymous user can't created, because django.contrib.messages middleware not used. + * Bugfix in django_tools.utils.messages.StackInfoStorage +* v0.19.5 + * Add [http://bugs.python.org/file22767/hp_fix.diff](http://bugs.python.org/file22767/hp_fix.diff) for [https://github.com/gregmuellegger/django/issues/1](https://github.com/gregmuellegger/django/issues/1) +* v0.19.4 + * Bugfix for PyPy in local_sync_cache get_cache_information(): sys.getsizeof() not implemented on PyPy + * Bugfix in template.filters.chmod_symbol() + * Nicer solution for template.filters.human_duration() +* v0.19.3 + * Add support for https in utils/http.py +* v0.19.2 + * Bugfix in utils/http.py timeout work-a-round +* v0.19.1 + * utils/http.py changes: + * Use a better solution, see: + * Add timeout and add a work-a-round for Python < 2.6 +* v0.19.0 + * NEW: Add utils/http.py with helpers to get a webpage via http GET in unicode + * Change README from textile to creole ;) +* v0.18.2 + * Bugfix: Add missing template in pypi package +* v0.18.0 + * NEW: Add DOM compare from Gregor Müllegger GSoC work into unittest utils. +* v0.17.1 + * Bugfix in “limit_to_usergroups”: Make choices “lazy”: Don’t access the database in _init_ +* v0.17 + * Add the script “upgrade_virtualenv.py” + * Add “limit_to_usergroups” + * Add “local sync cache” + * Add models.UpdateInfoBaseModel + * Update decorators.render_to + * render_to pass keyword arguments to render_to_response() (e.g.: mimetype=“text/plain”) + * new argument “skip_fail” in get_filtered_apps(): If True: raise excaption if app is not importable +* v0.16.4 + * Bugfix: `get_db_prep_save() got an unexpected keyword argument 'connection’` when save a SignSeparatedModelField() +* v0.16.3 + * Update BrowserDebug: Use response.templates instead of response.template and make output nicer +* v0.16.2 + * Merge stack info code and display better stack info on browser debug page +* v0.16.1 + * Update django_tools.utils.messages.StackInfoStorage for django code changes. +* v0.16.0 + * NEW: path model field (check if direcotry exist) +* v0.15.0 + * NEW: Add a flexible URL field (own validator, model- and form-field) +* v0.14.1 + * Bugfix: make path in MediaPathModelField relativ (remove slashes) +* v0.14 + * NEW: django-tagging addon: Display existing tags under a tag field +* v0.13 + * Bugfix UnicodeEncodeError in Browser debug +* v0.12 + * NEW: django_tools.utils.messages.failsafe_message +* v0.11 + * NEW: Store data in a secure cookie, see: utils/client_storage.py +* v0.10.1 + * New: Display used templates in unittest BrowserDebug + * Bugfix: catch if last usermessages exist +* v0.10.0 + * NEW: utils around django messages, see: /django_tools/utils/messages.py +* v0.9.1 + * Bugfix: database column was not created: don’t overwrite get_internal_type() +* v0.9 + * New: stuff in /django_tools/fields/ + * see also backwards-incompatible changes, above! +* v0.8.2 + * New: widgets.SelectMediaPath(): Select a sub directory in settings.MEDIA_ROOT + * New: fields.SignSeparatedField() +* v0.8.1 + * Add “no_args” keyword argument to installed_apps_utils.get_filtered_apps() +* v0.8.0 + * Add model LanguageCode field and form LanguageCode field in Accept-Language header format (RFC 2616) +* v0.7.0 + * Add decorators.py +* v0.6.0 + * Add forms_utils.LimitManyToManyFields, crosspost: [http://www.djangosnippets.org/snippets/1691/](http://www.djangosnippets.org/snippets/1691/) +* v0.5.0 + * Add template/filters.py from PyLucid v0.8.x +* v0.4.0 + * Add experimental “warn_invalid_template_vars” +* v0.3.1 + * Bugfix: Exclude the instance if it was saved in the past. +* v0.3.0 + * Add utils.installed_apps_utils +* v0.2.0 + * Add models_utils, see: [http://www.jensdiemer.de/_command/118/blog/detail/67/](http://www.jensdiemer.de/_command/118/blog/detail/67/) (de) +* v0.1.0 + * first version cut out from PyLucid CMS – [http://www.pylucid.org](http://www.pylucid.org) +## links +| Homepage | [https://github.com/jedie/django-tools](https://github.com/jedie/django-tools) | +| PyPi | [https://pypi.python.org/pypi/django-tools/](https://pypi.python.org/pypi/django-tools/) | +## donation +* [paypal.me/JensDiemer](https://www.paypal.me/JensDiemer) +* [Flattr This!](https://flattr.com/submit/auto?uid=jedie&url=https%3A%2F%2Fgithub.com%2Fjedie%2Fdjango-tools%2F) +* Send [Bitcoins](https://www.bitcoin.org/) to [1823RZ5Md1Q2X5aSXRC5LRPcYdveCiVX6F](https://blockexplorer.com/address/1823RZ5Md1Q2X5aSXRC5LRPcYdveCiVX6F) + +%prep +%autosetup -n django-tools-0.54.0 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-django-tools -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Tue Apr 11 2023 Python_Bot <Python_Bot@openeuler.org> - 0.54.0-1 +- Package Spec generated |
