%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 25 2023 Python_Bot - 0.54.0-1 - Package Spec generated