Various Django utility functions
pip install bx_django_utils
bx_django_utils
generally follows the support schedule of Django. The project is tested against officially supported Django versions and their respective supported CPython versions.
However, under special circumstances we may decide to pull support for a specific version early, e.g. if development of the library would be severely limited. Check our tox test matrix for a definitive answer.
Here only a simple list about existing utilities. Please take a look into the sources and tests for deeper informations.
Django Admin extra views: https://github.com/boxine/bx_django_utils/blob/master/bx_django_utils/admin_extra_views/README.md
Activate "ExtraViewAdminSite" by set this as default admin site
-
CustomAdminConfig()
- Change Django Admin Site to ExtraViewAdminSite for the extra views.
-
AdminExtraViewsAppConfig()
- App config to auto discover all extra views.
-
only_staff_user()
- Pass only active staff users. The default condition for all admin extra views.
-
AdminExtraMeta()
- Stores information for pseudo app and pseudo models. -
PseudoApp()
- Represents information about a Django App. Instance must be pass to @register_admin_view()
-
Command()
- Manage command "admin_extra_views": Info about registered admin extra views
-
AdminExtraViewRegistry()
- Hold all information about all admin extra views to expand urls and admin app list. -
register_admin_view()
- Decorator to add a normal view as pseudo App/Model to the admin.
-
ExtraViewAdminSite()
- An AdminSite object encapsulates an instance of the Django admin application, ready
-
AdminExtraViewsTestCase()
- Integrations tests for Admin Extra Views.
-
iter_admin_extra_views_urls()
- Iterate over all registered admin extra view urls. -
reverse_admin_extra_view()
- Get the URL of a Admin Extra View, e.g.: url=reverse_admin_extra_view(YouAdminExtraView)
-
Redirect2AdminExtraView()
- Redirect to a Admin Extra Views.
Helpers to build Admin URLs
-
admin_change_url()
- Shortcut to generate Django admin "change" url for a model instance. -
admin_changelist_url()
- Shortcut to generate Django admin "changelist" url for a model or instance. -
admin_delete_url()
- Shortcut to generate Django admin "delete" url for a model instance. -
admin_history_url()
- Shortcut to generate Django admin "history" url for a model instance. -
admin_model_url()
- Build Admin change, add, changelist, etc. links with optional filter parameters.
-
ExistingCountedListFilter()
- Advanced SimpleListFilter that list only existing filter values with counts. -
NotAllSimpleListFilter()
- Similar to SimpleListFilter, but don't add "All" choice.
Base model/admin/form classes to implement a model with draft/approve versions workflow
-
BaseApproveModelAdmin()
- Base admin class for a draft/approve Model
-
PublishAdminForm()
- Activate models REQUIRED_FIELDS_PUBLIC on approve
-
BaseApproveModel()
- Base model class for approve models and this relation models. -
BaseApproveWorkflowModel()
- Base model for approve workflow models.
-
CachedDataclassBase()
- A Base dataclass that can be easy store/restore to Django cache.
ModelField, FormField and validators for GTIN/UPC/EAN numbers
-
GtinFormField()
- Form field with GTIN validator.
-
GtinModelField()
- GTIN model field
-
GtinValidator()
- Validate GTIN number -
validate_gtin()
- It's the same as stdnum.ean.validate() but also accept ISBN-10
-
RecordingCursorWrapper()
- An implementation of django.db.backends.utils.CursorWrapper.
-
SQLQueryRecorder()
- A context manager that allows recording SQL queries executed during its lifetime.
Feature flags: https://github.com/boxine/bx_django_utils/blob/master/bx_django_utils/feature_flags/README.md
-
ManageFeatureFlagsBaseView()
- Base admin extra view to manage all existing feature flags in admin.
-
FeatureFlag()
- A feature flag that persistent the state into django cache/database.
-
FeatureFlagTestCaseMixin()
- Mixin forTestCase
that will changeFeatureFlag
entries. To make the tests atomic. -
get_feature_flag_states()
- Collects information about all registered feature flags and their current state.
-
if_feature()
- A decorator that only executed the decorated function if the given feature flag is enabled.
-
clean_filename()
- Convert filename to ASCII only via slugify. -
filename2human_name()
- Convert filename to a capitalized name.
-
build_url_parameters()
- Return an encoded string of all given parameters.
-
pformat()
- Betterpretty-print-format
usingDjangoJSONEncoder
with fallback topprint.pformat()
-
human_timedelta()
- Converts a time duration into a friendly text representation. (X ms
,sec
,minutes
etc.)
-
make_json_serializable()
- Convert value to a JSON serializable value, with convert callback for special objects. -
to_json()
- Convert value to JSON via make_json_serializable() and DjangoJSONEncoder()
-
ColorModelField()
- Hex color model field, e.g.: "#0055ff" (It's not a html color picker widget) -
HexColorValidator()
- Hex color validator (seven-character hexadecimal notation, e.g.: "#0055ff")
Utilities to manipulate objects in database via models:
-
CreateOrUpdateResult()
- Result object returned by create_or_update2() with all information about create/save a model. -
FieldUpdate()
- Information about updated model field values. Used for CreateOrUpdateResult.update_info -
InvalidStoreBehavior()
- Exception used in create_or_update() if "store_behavior" contains not existing field names. -
create()
- Create a new model instance with optional validate before create. -
create_or_update()
- Create a new model instance or update a existing one. Deprecated! Use: create_or_update2() -
create_or_update2()
- Create a new model instance or update a existing one and returns CreateOrUpdateResult instance -
update_model_field()
- Default callback for create_or_update2() to set a changed model field value and expand CreateOrUpdateResult
-
remove_filter()
- Remove an applied .filter() from a QuerySet -
remove_model_filter()
- Remove an applied .filter() from a QuerySet if it contains references to the specified model
-
TimetrackingBaseModel()
- Abstract base model that will automaticly set create/update Datetimes.
-
StackTrace()
- Built-in mutable sequence. -
StacktraceAfter()
- Generate a stack trace after a package was visited. -
get_stacktrace()
- Returns a StackTrace object, which is a list of FrameInfo objects.
-
dict_get()
- Returns the wanted member of a dict-like container, or an empty string
-
human_duration()
- Verbose time since template tag, e.g.:<span title="Jan. 1, 2000, noon">2.0 seconds</span>
Utilities / helper for writing tests.
-
AssertQueries()
- Assert executed database queries: Check table names, duplicate/similar Queries.
-
ClearCacheMixin()
- TestCase mixin to clear the Django cache in setUp/tearDown -
MockCache()
- Mock Django cache backend, so it's easy to check/manipulate the cache content
-
ContentTypeCacheFixMixin()
- TestCase mixin to fill the ContentType cache to avoid flaky database queries.
-
MockDatetimeGenerator()
- Mock djangotimezone.now()
with generic time stamps in tests.
Utilities to manage text fixtures in JSON files.
-
BaseFixtures()
- Base class for JSON dump fixtures. -
FixturesRegistry()
- Registry to collect a list of all existing fixture classes. -
RenewAllFixturesBaseCommand()
- A base Django manage command to renew all existing fixture JSON dump files -
SerializerFixtures()
- Helper to store/restore model instances serialized into a JSON file. -
autodiscover()
- Register all fixtures by import all /fixtures//*.py files
-
AssertFormFields()
- Helper to check the existing form fields.
-
HtmlAssertionMixin()
- Unittest mixin class with useful assertments around Django test client tests -
assert_html_response_snapshot()
- Assert a HttpResponse via snapshot file using assert_html_snapshot() from bx_py_utils. -
get_django_name_suffix()
- Returns a short Django version string, useable for snapshot "name_suffix" e.g.: "django42"
-
AssertModelCleanCalled()
- Context manager for assert that full_clean() was called for every model instance. -
CleanMock()
- Track if full_clean() was called.
Use Playwright in Unittest + Fast Django user login
-
PlaywrightConfig()
- PlaywrightTestCase config from environment (PWBROWSER, PWHEADLESS, PWSKIP, PWSLOWMO) -
PlaywrightTestCase()
- StaticLiveServerTestCase with helpers for writing frontend tests using Playwright.
-
assert_permissions()
- Check user permissions. -
assert_user_properties()
- Check a user instance with all properties and password (optional) -
filter_permission_names()
- Generate a Permission model query filtered by names, e.g.: ['<app_label>.', ...] -
make_max_test_user()
- Create a test user with all permissions except the {exclude_permissions} ones. -
make_minimal_test_user()
- Create a test user and set given permissions. -
make_test_user()
- Create a test user and set given permissions.
-
FieldTranslation()
- Dict-like container that maps language codes to a translated string. -
TranslationField()
- A field designed to hold translations for a given set of language codes. -
TranslationFieldAdmin()
- Provides drop-in support for ModelAdmin classes that want to display TranslationFields -
TranslationFormField()
- Default form field for TranslationField. -
TranslationSlugField()
- A unique translation slug field, useful in combination with TranslationField() -
create_or_update_translation_callback()
- Callback for create_or_update2() for TranslationField, that will never remove existing translation. -
expand_languages_codes()
- Build a complete list if language code with and without dialects. -
get_user_priorities()
- Collect usable language codes the current user -
make_unique()
- Flat args and remove duplicate entries while keeping the order intact. -
merge_translations()
- Merge two FieldTranslation and ignore all empty/None values, e.g.: -
remove_empty_translations()
- Remove all empty/None from a FieldTranslation, e.g.: -
user_language_priorities()
- Returns the order in which to attempt resolving translations of a FieldTranslation model field. -
validate_unique_translations()
- Deny creating non-unique translation: Creates ValidationError with change list search for doubled entries.
Automatic local user timezone: https://github.com/boxine/bx_django_utils/blob/master/bx_django_utils/user_timezone/README.md
-
UserTimezoneAppConfig()
- Django app to set the user local time zone.
-
human_timezone_datetime()
- Render a datetime with timezone information.
-
InvalidUserTimeZone()
- Inappropriate argument value (of correct type). -
UserTimezoneMiddleware()
- Activate Timezone by "UserTimeZone" cookie -
validate()
- Validate the UserTimeZone cookie value.
-
humane_timezone_dt()
- Template filter to render a datetime with timezone information.
-
DetermineVersionCommand()
- Write application version determined from git as a command
-
DynamicViewMenu()
- Simple storage for store information about views/urls to build a menu.
To start developing e.g.:
~$ git clone https://github.com/boxine/bx_django_utils.git
~$ cd bx_django_utils
~/bx_django_utils$ make
help List all commands
install-poetry install poetry
install install via poetry
update Update the dependencies as according to the pyproject.toml file
lint Run code formatters and linter
fix-code-style Fix code formatting
tox-listenvs List all tox test environments
tox Run unittests via tox with all environments
test Run unittests
publish Release new version to PyPi
docker-test Run tests in docker
makemessages Make and compile locales message files
start-dev-server Start Django dev. server with the test project
clean Remove created files from the test project (e.g.: SQlite, static files)
playwright-install Install test browser for Playwright tests
playwright-inspector Run Playwright inspector
playwright-tests Run only the Playwright tests
You can start the test project with the Django developing server, e.g.:
~/bx_django_utils$ make start-dev-server
This is a own manage command, that will create migrations files from our test app, migrate, collectstatic and create a super user if no user exists ;)
If you like to start from stretch, just delete related test project files with:
~/bx_django_utils$ make clean
...and start the test server again ;)
MIT. Patches welcome!
We’ve been rethinking the listening experience for kids and have created an ecosystem where haptic and listening experience are combined via smart technology - the Toniebox.
We are constantly looking for engineers to join our team in different areas. If you’d be interested in contributing to our platform, have a look at: https://tonies.com/jobs/