django-jutil
Collection of small utilities for Django and Django REST framework projects.
Django 3.0 compatible.
Features
- Simplified admin changes history logging (admin_log)
- ModelAdmin with length limited history view (ModelAdminBase)
- Simplified object URL/link generation within admin (admin_obj_link and admin_obj_url)
- Extended admin log with changed field values and user IP (ModelAdminBase)
- Admin file download mixin with file permission checks (AdminFileDownloadMixin)
- User authentication helpers (require_auth, AuthUserMixin)
- Mixin for cached model fields management (CachedFieldsMixin)
- BaseCommand extension which catches, logs and emails errors (SafeCommand)
- Command options for simplified handling of date ranges (add_date_range_arguments, parse_date_range_arguments)
- Various utilities for date ranges generation and iteration (dates.py)
- Utilities for dict sorting and formatting, choices list label fetching (dict.py)
- Simplified email sending via SendGrid API (send_email)
- Various formatting utilities (e.g. XML, timedelta, Decimal)
- Decimal encoder for encoding JSON objects/dictionaries containing Decimal instances (SimpleDecimalEncoder)
- Django middleware for exception logging/emailing (LogExceptionMiddleware)
- Django middleware for language cookie handling (EnsureLanguageCookieMiddleware)
- Django middleware for user.profile.timezone based timezone activation
- Utilities or Django Model handling (e.g. clone_model, get_object_or_none)
- Utilities for parsing booleans and datetime values (using pytz)
- Simple user field based permission checking for REST APIs (permissions.py)
- Geo IP / IP info functions using IPStack API (request.py)
- Download responses (FileSystemFileResponse and CsvFileResponse)
- Simple SMS sending (send_sms)
- Mixin for basic test user setup (DefaultTestSetupMixin)
- Pretty good unit test coverage (tests.py)
- URL modifying/comparison functions (urls.py)
- Validators and filters for various types (validators.py)
- XML Element to/from dict conversions (dict_to_element, xml_to_dict)
- XML file/content pretty formatting (format_xml, format_xml_bytes, format_xml_file, FormattedXmlResponse)
Install
pip install django-jutil
Notes About Features
Extended Admin Logging
jutil.ModelAdminBase supports (by default) extended logging using Django's native LogEntry' change_message
JSON field. Normally Django logs only field verbose names but jutil implementation
logs changed field names and values and user IP as well to the same change_message JSON field.
To actually show output from this extended logging data you need to format change_message using
format_change_message_ex filter. The default ModelAdminBase object history template (jutil/admin/object_history.html) uses it.
Static Code Analysis
The library passes both prospector and mypy checking. To install:
pip install prospector
pip install mypy
To analyze:
prospector
mypy .
Test Code Coverage
coverage run manage.py; coverage report
Notes About Email Configurations
Microsoft 365 (2022)
EMAIL_HOST = "smtp.office365.com"
EMAIL_PORT = 587
EMAIL_HOST_USER = (microsoft 365 email account)
SERVER_EMAIL = EMAIL_HOST_USER
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
EMAIL_HOST_PASSWORD = (email password)
EMAIL_USE_TLS = True
EMAIL_TIMEOUT = 60
SendGrid (2022)
EMAIL_SENDGRID_API_KEY = (api_key)
EMAIL_HOST = "smtp.sendgrid.net"
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = "apikey"
EMAIL_HOST_PASSWORD = (sendgrid api key)
Changes
4.1.1:
- Refactoring: get_date_range_by_name moved from jutil.command to jutil.dates (since usage not tied to cli as is)
4.0.1:
- ZoneInfo support with backports fallback
- Dropped pytz from dependencies (following Django 5.0 example)
3.11.1:
- REMOVED: AdminLogEntryMixin, no longer needed as ModelAdminBase logs everything automatically
- REMOVED: admin_log_changed_fields, no longer needed as ModelAdminBase logs everything automatically
- RENAMED: get_model_keys -> get_model_field_names, for consistent naming with Django
3.7.4:
- Stricter get_media_full_path and is_media_full_path
3.7.3:
- Unit tests
- Get media full path cleanup
3.7.2:
3.7.1:
- Requirements.txt: deleted optional dependency sendgrid, add sendgrid on project level sendgrid>=6.3.1,<7.0.0
- Deleted deprecated auth.require_auth, use auth.get_auth_user and auth.get_auth_user_or_none
- Deleted deprecated dict.choices_label and dict.dict_to_html, use format.choices_label and format.format_dict_as_html
- Deleted deprecated logs.*, use logging directly
- Deleted deprecated object.*, use type-safer alternatives
- Deleted deprecated url_equals and url_host, use urlparse directly
- Removed deprecated testing.*
- Cleaned up parse_datetime, parse_bool, parse_datetime_or_none and parse_bool_or_none
- Simpler cleaned up testing mixin TestSetupMixin
3.6.11:
- Deprecated object.get/set obj attr functions
- Deprecated url equals and url host
- Deprecated testing.DefaultTestSetupMixin
- Separated parse functions /w xxx or none versions for better typing support
- Dropped python-dateutil dependency, added unit tests for get time steps
- Deprecated log event
- Updated send_email_sendgrid docs
- Refactored choices label and dict to html in dict and format, added deprecation warnings
- Added --this-month, --this-week, --this-year to add date range arguments, get date range by name, parse date range arguments
- Require auth refactoring
- Removed AdminFileDownloadMixin - Django 3.1 has new logic for uploaded file URL format making the mixin obsolete
- (origin/master, origin/HEAD, master) README update
3.6.10:
- Unit test fix
- Log entry ordering fix
3.6.9:
3.6.8:
- API testing client to support non-json content
- Parse bool unit test
3.6.7:
- Added format as html json and unit tests
3.6.6:
- Millisecond handling to format timedelta
- Deploy cleanup
- Python-dotenv
3.6.5:
3.6.4:
- Mypy fix
- Unit test improvements, added support for FI ssns before 1900 and after 2000
- Test-coverage tweak
3.6.3:
- Code QA / Prospector fixes
- Added wait object or none and unit test
3.6.2:
3.6.1:
- Cleanup
- Dropped parse sftp connection (as redundant)
- Docs
3.5.3:
- Tweaks to usage of ipware
3.5.2:
3.5.1:
- Upgrade of ipware to newer version
- Dev requirements change of psycopg2
3.4.9:
- Mypy fix
- Added get_ip() wrapper for ipware
3.4.8:
3.4.7:
- Minor refactoring, added unit tests
3.4.6:
- More relaxed typing to admin log
- DB check to build process
3.4.5:
- Format table max col setting fix
- Fixed format table bug, added docs
3.4.4:
- Added User as explicit opt parameter to admin log
3.4.3:
3.4.2:
- Added strip tag fields and unit tests
3.4.1:
- Type checking fixes
- Added middleware unit tests
- Changed ActivateUserProfileTimezone -> ActivateUserProfileTimezoneMiddleware to conform Django naming conventions
- Cleanup, docs
- Test-coverage script tweaks
- Added dependency-check to requirements-dev.txt
- .gitignore tweaks
3.3.6:
- Unit test fix
- Build process cleanup
- Cleanup
- Test-coverage script update
- Added htmlcov to ignore
3.3.5:
- Test fixes
- Admin obj url fix
3.3.4:
3.3.3:
- Code QA
- Unit test improvements
- Updated travis test to python 3.8
3.3.2:
- Added camel case conversion funcs
3.3.1:
- Format timedelta cleanup
- Test-coverage script update
- Unit test fixes
- Re-enabled pytype
3.2.21:
3.2.20:
- Unit test coverage update
- Sendgrid email format fix
3.2.19:
- Added end_of_month() (as in Excel) and unit tests
- L10n
3.2.18:
3.2.17:
3.2.16:
3.2.15:
- CachedFieldsMixin save() TYPE CHECKING fix
3.2.14:
- Type checking fix
- Readme updates
- MANIFEST tweaks
- Pre-release script tweaks
3.2.13:
- Added py.typed marker file
3.2.12:
3.2.11:
- Test coverage update
- Added twine to dev reqs
- Deploy script update
3.2.10:
- Test coverage update
- Mypy support
3.2.9:
- Test coverage update
- Pre-release script tweaks
- Test coverage script tweaks
3.2.8:
- Travis sys import
- Added vanity icons to readme
3.2.7:
- Added sudo apt-get install -y libxml2-utils to travis
3.2.6:
3.2.5:
3.2.4:
3.2.3:
3.2.2:
3.2.1:
3.1.4:
- Test coverage update
- Language cookie to use secure and httponly settings
- Updated LICENSE.txt
3.1.3:
- Test coverage update
- Cleanup
- IBAN generation
3.1.2:
- Test coverage update
- Config tweaks / pytype
3.1.1:
3.0.16:
- Test coverage update
- Code QA pytype tool integration to build process
3.0.15:
- Formatting options to format timedelta as 3h40min14s
3.0.14:
- Test coverage update
- Added helpers for media path handling
3.0.13:
- BIC validator
- Added body and subject to test email
3.0.12:
- Test coverage update
- CsvFileResponse -> CsvResponse to be consistent with naming of other responses
- Separate XmlResponse and XmlFileResponse
3.0.11:
- Test coverage update
- Cleanup
3.0.10:
- Test coverage update
- Cleanup
- Xml formatting error reporting
3.0.9:
- Test coverage update
- Xml content decoding fix on error
- L10n
- Email unit tests
3.0.8:
- Test coverage update
- Test email sending tweaks
- More unit tests
3.0.7:
- Test coverage update
- Pre-release step update
3.0.6:
- Deploy tweaks
- Added coverage report
- Cleanup, deleted format xml (unnecessary since multiple tools for that)
3.0.5:
- Changed SafeCommand to be compatible with BaseCommand on Exception return
3.0.4:
3.0.3:
- Added ucfirst and ucfirst lazy
3.0.2:
- Added format table
- Added test-coverage script
- Docs
3.0.1:
- Prospector 1.2.0 fixes
- Django 3.0 compatibility
2.4.14:
- Unit tests, model changed check
2.4.13:
- Assert tweaks
- File download admin tweaks
- Admin download link fix
2.4.12:
- Support for multiple file fields in AdminFileDownloadMixin
2.4.11:
- Prospector / code QA fixes
- Added SMTP based email support, logging
2.4.10:
2.4.9:
- Deploy cleanup and tweaks
2.4.8:
- Improved testing coverage
- Coverage tweaks
- Added .coverage to .gitignore
- Removed coverage
2.4.7:
- Noqa fixes (prospector)
- Added .coveragerc
- Doc tweaks
- Sftp connection string parsing cleanup
2.4.6:
- Sftp connection string parsing
2.4.5:
2.4.4:
- Added base url support to admin links
2.4.3:
- Disabled sendgrid click tracking by default
2.4.2:
- Updated to use sendgrid v3 api, added cc and bcc support
2.4.1:
- Reg id -> org id name refactoring
2.3.5:
- Format keys option to dict to html
2.3.4:
- Added fi company reg id generator
2.3.3:
- Admin helper stweaks
- Admin file download tweak
- Pre-release process
- Docs
2.3.2:
- Deploy tweaks
- Prospector check to build
- Prospector clean
2.3.1:
2.2.43:
- Etree related refactoring
2.2.42:
2.2.41:
- Updated requirements
- Cleaned up ugettext usage
2.2.40:
- ElementTree cleanup, issues related to isinstance() usage
2.2.39:
- Separate FormattedXmlResponse and FormattedXmlFileResponse
2.2.38:
- Added FormattedXmlResponse
2.2.37:
2.2.36:
- Format xml file improvements
- Advanced xml formatting using xmllint
2.2.35:
- Sweden clearing code fixes
2.2.34:
- Localized actions list sorting
2.2.33:
- Dict to html unit test
- Dict to html fix
2.2.32:
2.2.31:
- Added some sanitizers to validators.py
2.2.30:
- Admin obj link None handling
2.2.29:
- Nordea Sweden clearing code additions
2.2.28:
2.2.27:
2.2.26:
2.2.25:
2.2.24:
2.2.23:
- Nordea/SE clearing number addition
- Deploy cleanup
2.2.22:
- Added changelist view download support to AdminFileDownloadMixin
2.2.21:
- Unit tests
- L10n check
- Cleanup
2.2.20:
- Generic country filtering
- Docs
2.2.19:
- Added one NordeaAB clearing code range
2.2.18:
- Fixed non-xmllint xml data formatting
- Added format xml command
2.2.17:
- Added format xml file helper
2.2.16:
2.2.15:
- Int conversion fix / validators
- Unit test tweaks
- Better unit tests
2.2.13:
- Added missing Nordea AB / Sweden clearing number
- Clarification / swedish clearing code
2.2.12:
- Added admin obj link and admin obj url
2.2.11:
- Sweden clearing code filtering
2.2.10:
- Reduced Swedbank account number length requirement
2.2.9:
2.2.8:
2.2.7:
- Unit test
- Sparbanken Syd account number length
2.2.6:
- Belgium iban data to 4 spaces instead of 8
- Validation of all iban countries
2.2.5:
- Added be iban validator, refactoring validator code a bit
- Doc cleanup
2.2.4:
2.2.3:
2.2.2:
- Unified xml.etree.ElementTree.Element usage
2.2.1:
- Adding BE (Belgium) bic bank to iban bic validators (thanks kutera/master)
2.1.24:
2.1.23:
- Unit test fixes
- Swedish bank const cleanup
2.1.22:
- Swedish bank clearing code fixes
2.1.21:
- Validator return space fix
2.1.20:
- Added ascii filter and unit tests
2.1.19:
- Refactoring
- Swedish bank const php generation
2.1.18:
2.1.17:
- Updated bank constants, added Sweden
2.1.16:
- Added ActivateUserProfileTimezone middleware
2.1.15:
- Upgraded external dependencies, added days to time delta
2.1.14:
- Upgraded external dependencies
2.1.13:
2.1.12:
2.1.11:
- Iso payment ref validator
2.1.10:
2.1.9:
2.1.8:
2.1.7:
- Error message improvements
2.1.6:
- Selective cached fields update
2.1.5:
- Added simple email validator
2.1.4:
- Company reg id validator tweak
2.1.3:
- Dropped separate read/write views since Django supports this natively
2.1.2:
2.1.1:
- Upgraded version to match django version
1.2.11:
- Bank info unit test fix, upgraded libs
1.2.10:
- Admin log convention change: user system username instead of the first user in the system
1.2.9:
- Iban bank info convention change
- Tests
- Version bump
- Iban bank info to return None, None to be more consistent with normal output
1.2.7:
- Replaced freegeoip.net API with ipstack.com
1.2.6:
1.2.5:
- Prev 30d, 60d and 90d time ranges
1.2.4:
1.2.3:
1.2.2:
- Minor version bump
- Admin file download cleanup
1.1.12:
- File download response cleanup
1.1.11:
1.1.10:
- Parse requirements compatibility
1.1.9:
- Gz .gitignore
- Cleanup
- Parse requirements fix
1.1.8:
- Cleanup
- Replaced parse requirements (fix)
1.1.7:
- Replaced parse requirements
1.1.6:
- FI company reg id check filtering
1.1.5:
- Extended FI company reg id acceptance
1.1.4:
1.1.3:
- Renamed passwd -> setpass to avoid name collision with django extensions project
1.1.2:
1.1.1:
1.0.5:
- Removed obsolete SimpleJsonDecoder since Django has better one now
- Language cookie fix
1.0.4:
1.0.3:
1.0.2:
- Unit tests
- Dependency fix
- Twine up
1.0.1:
1.0.0:
- Docs
- Github repository init