accrete 0.0.39__tar.gz → 0.0.40__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {accrete-0.0.39 → accrete-0.0.40}/PKG-INFO +1 -1
- {accrete-0.0.39 → accrete-0.0.40}/accrete/annotation.py +7 -9
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user/views.py +1 -4
- {accrete-0.0.39 → accrete-0.0.40}/accrete/forms.py +0 -19
- accrete-0.0.40/accrete/managers.py +35 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/models.py +2 -33
- accrete-0.0.40/accrete/utils/__init__.py +4 -0
- accrete-0.0.40/accrete/utils/forms.py +24 -0
- accrete-0.0.39/accrete/querystring.py → accrete-0.0.40/accrete/utils/http.py +14 -4
- {accrete-0.0.39 → accrete-0.0.40}/pyproject.toml +1 -1
- accrete-0.0.39/accrete/managers.py +0 -0
- accrete-0.0.39/accrete/queries.py +0 -18
- accrete-0.0.39/accrete/utils/__init__.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/.gitignore +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/LICENSE +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/README.md +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/__init__.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/admin.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/apps.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/config.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/__init__.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/sequence/__init__.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/sequence/admin.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/sequence/apps.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/sequence/forms.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/sequence/migrations/0001_initial.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/sequence/migrations/0002_alter_sequence_name.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/sequence/migrations/__init__.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/sequence/models.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/sequence/queries.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/sequence/tests.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/sequence/views.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/system_mail/__init__.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/system_mail/admin.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/system_mail/apps.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/system_mail/forms.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/system_mail/migrations/0001_initial.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/system_mail/migrations/__init__.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/system_mail/models.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/system_mail/tasks.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/system_mail/tests.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/system_mail/views.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/__init__.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/admin.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/apps.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/context.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/elements.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/filter.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/migrations/__init__.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/LICENSE +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/README.md +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/bulma.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/css/bulma-rtl.css +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/css/bulma-rtl.css.map +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/css/bulma-rtl.min.css +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/css/bulma.css +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/css/bulma.css.map +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/css/bulma.min.css +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/package.json +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/base/_all.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/base/animations.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/base/generic.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/base/helpers.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/base/minireset.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/_all.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/breadcrumb.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/card.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/dropdown.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/level.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/media.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/menu.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/message.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/modal.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/navbar.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/pagination.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/panel.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/tabs.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/elements/_all.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/elements/box.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/elements/button.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/elements/container.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/elements/content.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/elements/form.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/elements/icon.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/elements/image.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/elements/notification.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/elements/other.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/elements/progress.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/elements/table.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/elements/tag.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/elements/title.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/form/_all.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/form/checkbox-radio.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/form/file.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/form/input-textarea.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/form/select.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/form/shared.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/form/tools.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/grid/_all.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/grid/columns.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/grid/tiles.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/helpers/_all.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/helpers/color.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/helpers/flexbox.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/helpers/float.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/helpers/other.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/helpers/overflow.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/helpers/position.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/helpers/spacing.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/helpers/typography.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/helpers/visibility.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/layout/_all.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/layout/footer.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/layout/hero.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/layout/section.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/utilities/_all.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/utilities/animations.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/utilities/controls.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/utilities/derived-variables.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/utilities/extends.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/utilities/functions.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/utilities/initial-variables.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/utilities/mixins.sass +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/css/accrete.css +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/css/accrete.css.bak +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/css/accrete.css.map +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/css/accrete.scss +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/css/icons.css +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/icons/Logo.svg +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/icons/accrete.svg +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/js/filter.js +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/js/htmx.min.js +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/js/list.js +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/django/forms/widgets/attrs.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/django/forms/widgets/email.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/django/forms/widgets/file.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/django/forms/widgets/input.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/django/forms/widgets/select.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/django/forms/widgets/text.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/django/forms/widgets/textarea.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/detail.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/form.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/layout.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/list.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/partials/filter.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/partials/form_errors.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/partials/form_modal.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/partials/header.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/partials/onchange_form.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/partials/pagination_detail.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/partials/pagination_list.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/partials/table_field.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/partials/table_field_float.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/partials/table_field_monetary.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/partials/table_field_string.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/table.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templatetags/__init__.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templatetags/accrete_ui.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/tests.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/urls.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/views.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user/__init__.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user/admin.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user/apps.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user/forms.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user/locale/de/LC_MESSAGES/django.mo +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user/locale/de/LC_MESSAGES/django.po +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user/middleware.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user/migrations/0001_initial.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user/migrations/__init__.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user/models.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user/templates/user/accrete_navbar_end_dropdown.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user/templates/user/change_email.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user/templates/user/change_password.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user/templates/user/login.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user/templates/user/user_detail.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user/templates/user/user_form.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user/tests.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user/urls.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user_registration/__init__.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user_registration/admin.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user_registration/apps.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user_registration/config.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user_registration/forms.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user_registration/migrations/0001_initial.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user_registration/migrations/__init__.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user_registration/models.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user_registration/templates/user_registration/mail_templates/confirmation_mail.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user_registration/templates/user_registration/registration.html +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user_registration/tests.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user_registration/urls.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user_registration/views.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/middleware.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/migrations/0001_initial.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/migrations/0002_initial.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/migrations/__init__.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/tenant.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/tests.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/utils/dates.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/utils/models.py +0 -0
- {accrete-0.0.39 → accrete-0.0.40}/accrete/views.py +0 -0
@@ -1,4 +1,4 @@
|
|
1
|
-
from django.db.models import Field
|
1
|
+
from django.db.models import Field
|
2
2
|
from django.db.models.expressions import Func
|
3
3
|
from django.db.models.aggregates import Aggregate
|
4
4
|
|
@@ -34,12 +34,10 @@ class AnnotationModelMixin:
|
|
34
34
|
|
35
35
|
class AnnotationManagerMixin:
|
36
36
|
|
37
|
-
def
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
return queryset.annotate(**{
|
37
|
+
def get_annotations(self):
|
38
|
+
if not hasattr(self.model, 'get_annotations'):
|
39
|
+
return {}
|
40
|
+
return {
|
42
41
|
annotation['name']: annotation['annotation'].function
|
43
|
-
for annotation in model.get_annotations()
|
44
|
-
}
|
45
|
-
|
42
|
+
for annotation in self.model.get_annotations()
|
43
|
+
}
|
@@ -1,15 +1,12 @@
|
|
1
|
-
from django.utils import timezone
|
2
1
|
from django.contrib.auth.forms import AuthenticationForm
|
3
2
|
from django.contrib.auth import views, update_session_auth_hash
|
4
3
|
from django.contrib.auth.decorators import login_required
|
5
|
-
from django.contrib.sessions.models import Session
|
6
4
|
from django.contrib import messages
|
7
|
-
from django.db.models import Q
|
8
5
|
from django.shortcuts import redirect, render, reverse, resolve_url
|
9
6
|
from django.utils.translation import gettext_lazy as _
|
10
7
|
from django.conf import settings
|
11
8
|
|
12
|
-
from accrete.
|
9
|
+
from accrete.utils import save_form
|
13
10
|
from accrete.contrib import ui
|
14
11
|
from .forms import UserForm, ChangePasswordForm, ChangeEmailForm
|
15
12
|
|
@@ -290,22 +290,3 @@ class TenantModelForm(One2ManyModelForm):
|
|
290
290
|
self.save_o2m()
|
291
291
|
|
292
292
|
return self.instance
|
293
|
-
|
294
|
-
|
295
|
-
def save_form(form, reraise=False):
|
296
|
-
form.is_saved = False
|
297
|
-
form.save_error = None
|
298
|
-
form.save_error_id = None
|
299
|
-
try:
|
300
|
-
if form.is_valid():
|
301
|
-
with transaction.atomic():
|
302
|
-
form.save()
|
303
|
-
form.is_saved = True
|
304
|
-
except Exception as e:
|
305
|
-
form.save_error = repr(e)
|
306
|
-
error_id = str(uuid4())[:8]
|
307
|
-
_logger.exception(f'{error_id}: {e}')
|
308
|
-
form.save_error_id = error_id
|
309
|
-
if reraise:
|
310
|
-
raise e
|
311
|
-
return form
|
@@ -0,0 +1,35 @@
|
|
1
|
+
from django.db import models
|
2
|
+
from accrete.tenant import get_tenant
|
3
|
+
from accrete.annotation import AnnotationManagerMixin
|
4
|
+
|
5
|
+
|
6
|
+
class TenantManager(models.Manager, AnnotationManagerMixin):
|
7
|
+
|
8
|
+
def get_queryset(self):
|
9
|
+
queryset = super().get_queryset()
|
10
|
+
tenant = get_tenant()
|
11
|
+
if tenant:
|
12
|
+
queryset = queryset.filter(tenant=tenant)
|
13
|
+
return queryset.annotate(**self.get_annotations())
|
14
|
+
|
15
|
+
def bulk_create(
|
16
|
+
self,
|
17
|
+
objs,
|
18
|
+
batch_size=None,
|
19
|
+
ignore_conflicts=False,
|
20
|
+
update_conflicts=False,
|
21
|
+
update_fields=None,
|
22
|
+
unique_fields=None,
|
23
|
+
):
|
24
|
+
tenant = get_tenant()
|
25
|
+
if tenant is None and not all(obj.tenant_id for obj in objs):
|
26
|
+
raise ValueError(
|
27
|
+
'Tenant must be set for all objects when calling bulk_create'
|
28
|
+
)
|
29
|
+
for obj in objs:
|
30
|
+
obj.tenant_id = tenant.pk
|
31
|
+
return super().bulk_create(
|
32
|
+
objs, batch_size=batch_size, ignore_conflicts=ignore_conflicts,
|
33
|
+
update_conflicts=update_conflicts, update_fields=update_fields,
|
34
|
+
unique_fields=unique_fields
|
35
|
+
)
|
@@ -3,39 +3,8 @@ from django.conf import settings
|
|
3
3
|
from django.utils.translation import gettext_lazy as _
|
4
4
|
from django.contrib.auth.validators import UnicodeUsernameValidator
|
5
5
|
from accrete.tenant import get_tenant
|
6
|
-
from accrete.annotation import AnnotationModelMixin
|
7
|
-
|
8
|
-
|
9
|
-
class TenantManager(models.Manager, AnnotationManagerMixin):
|
10
|
-
|
11
|
-
def get_queryset(self):
|
12
|
-
queryset = super().get_queryset()
|
13
|
-
tenant = get_tenant()
|
14
|
-
if tenant:
|
15
|
-
queryset = queryset.filter(tenant=tenant)
|
16
|
-
return self.add_annotations(queryset)
|
17
|
-
|
18
|
-
def bulk_create(
|
19
|
-
self,
|
20
|
-
objs,
|
21
|
-
batch_size=None,
|
22
|
-
ignore_conflicts=False,
|
23
|
-
update_conflicts=False,
|
24
|
-
update_fields=None,
|
25
|
-
unique_fields=None,
|
26
|
-
):
|
27
|
-
tenant = get_tenant()
|
28
|
-
if tenant is None and not all(obj.tenant_id for obj in objs):
|
29
|
-
raise ValueError(
|
30
|
-
'Tenant must be set for all objects when calling bulk_create'
|
31
|
-
)
|
32
|
-
for obj in objs:
|
33
|
-
obj.tenant_id = tenant.pk
|
34
|
-
return super().bulk_create(
|
35
|
-
objs, batch_size=batch_size, ignore_conflicts=ignore_conflicts,
|
36
|
-
update_conflicts=update_conflicts, update_fields=update_fields,
|
37
|
-
unique_fields=unique_fields
|
38
|
-
)
|
6
|
+
from accrete.annotation import AnnotationModelMixin
|
7
|
+
from accrete.managers import TenantManager
|
39
8
|
|
40
9
|
|
41
10
|
class TenantModel(models.Model, AnnotationModelMixin):
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import logging
|
2
|
+
from uuid import uuid4
|
3
|
+
from django.db import transaction
|
4
|
+
|
5
|
+
_logger = logging.getLogger(__name__)
|
6
|
+
|
7
|
+
|
8
|
+
def save_form(form, reraise=False):
|
9
|
+
form.is_saved = False
|
10
|
+
form.save_error = None
|
11
|
+
form.save_error_id = None
|
12
|
+
try:
|
13
|
+
if form.is_valid():
|
14
|
+
with transaction.atomic():
|
15
|
+
form.save()
|
16
|
+
form.is_saved = True
|
17
|
+
except Exception as e:
|
18
|
+
form.save_error = repr(e)
|
19
|
+
error_id = str(uuid4())[:8]
|
20
|
+
_logger.exception(f'{error_id}: {e}')
|
21
|
+
form.save_error_id = error_id
|
22
|
+
if reraise:
|
23
|
+
raise e
|
24
|
+
return form
|
@@ -7,14 +7,24 @@ from accrete.annotation import Annotation
|
|
7
7
|
|
8
8
|
_logger = logging.getLogger(__name__)
|
9
9
|
|
10
|
+
Querystring_KEY_MAP = {
|
11
|
+
'querystring': 'q',
|
12
|
+
'order': 'order',
|
13
|
+
'paginate_by': 'paginate_by',
|
14
|
+
'page': 'page'
|
15
|
+
}
|
16
|
+
|
10
17
|
|
11
18
|
def filter_from_querystring(
|
12
|
-
model: type[Model],
|
19
|
+
model: type[Model], get_params: dict, key_map: dict = None
|
13
20
|
) -> QuerySet:
|
14
21
|
|
15
|
-
|
22
|
+
key_map = key_map or Querystring_KEY_MAP
|
23
|
+
querystring = get_params.get(key_map['querystring'], '[]')
|
24
|
+
order = get_params.get(key_map['order']) or model._meta.ordering
|
25
|
+
|
16
26
|
return model.objects.filter(
|
17
|
-
parse_querystring(model,
|
27
|
+
parse_querystring(model, querystring)
|
18
28
|
).order_by(*order).distinct()
|
19
29
|
|
20
30
|
|
@@ -86,4 +96,4 @@ def parse_querystring(model: type[Model], query_string: str) -> Q:
|
|
86
96
|
|
87
97
|
ops = {'&': operator.and_, '|': operator.or_, '^': operator.xor}
|
88
98
|
query = parse_query_block(query_data)
|
89
|
-
return query
|
99
|
+
return query
|
File without changes
|
@@ -1,18 +0,0 @@
|
|
1
|
-
import logging
|
2
|
-
from accrete import models
|
3
|
-
from accrete.tenant import get_tenant
|
4
|
-
|
5
|
-
_logger = logging.getLogger(__name__)
|
6
|
-
|
7
|
-
|
8
|
-
def is_member(tenant, user):
|
9
|
-
return tenant.members.filter(user=user, is_active=True).exists()
|
10
|
-
|
11
|
-
|
12
|
-
def members_for_current_tenant():
|
13
|
-
tenant = get_tenant()
|
14
|
-
return tenant and tenant.members or models.Member.objects.none()
|
15
|
-
|
16
|
-
|
17
|
-
def all_tenants():
|
18
|
-
return models.Tenant.objects.all()
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/sequence/migrations/0002_alter_sequence_name.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/breadcrumb.sass
RENAMED
File without changes
|
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/dropdown.sass
RENAMED
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/level.sass
RENAMED
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/media.sass
RENAMED
File without changes
|
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/message.sass
RENAMED
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/modal.sass
RENAMED
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/navbar.sass
RENAMED
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/pagination.sass
RENAMED
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/components/panel.sass
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/elements/container.sass
RENAMED
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/elements/content.sass
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/elements/notification.sass
RENAMED
File without changes
|
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/elements/progress.sass
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/form/checkbox-radio.sass
RENAMED
File without changes
|
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/form/input-textarea.sass
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/helpers/overflow.sass
RENAMED
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/helpers/position.sass
RENAMED
File without changes
|
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/helpers/typography.sass
RENAMED
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/helpers/visibility.sass
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/utilities/animations.sass
RENAMED
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/utilities/controls.sass
RENAMED
File without changes
|
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/utilities/extends.sass
RENAMED
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/utilities/functions.sass
RENAMED
File without changes
|
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/static/bulma/sass/utilities/mixins.sass
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/django/forms/widgets/attrs.html
RENAMED
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/django/forms/widgets/email.html
RENAMED
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/django/forms/widgets/file.html
RENAMED
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/django/forms/widgets/input.html
RENAMED
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/django/forms/widgets/select.html
RENAMED
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/django/forms/widgets/text.html
RENAMED
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/django/forms/widgets/textarea.html
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/partials/onchange_form.html
RENAMED
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/partials/pagination_detail.html
RENAMED
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/partials/pagination_list.html
RENAMED
File without changes
|
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/partials/table_field_float.html
RENAMED
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/partials/table_field_monetary.html
RENAMED
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/ui/templates/ui/partials/table_field_string.html
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{accrete-0.0.39 → accrete-0.0.40}/accrete/contrib/user_registration/migrations/0001_initial.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|