zango 0.2.2.dev0__tar.gz → 0.3.0__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.
- {zango-0.2.2.dev0/src/zango.egg-info → zango-0.3.0}/PKG-INFO +37 -6
- {zango-0.2.2.dev0 → zango-0.3.0}/README.md +1 -1
- zango-0.3.0/requirements/base.txt +68 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/setup.py +2 -2
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/__init__.py +1 -1
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/auditlogs/v1/serializers.py +2 -6
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/auditlogs/v1/views.py +3 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/packages/v1/views.py +5 -0
- zango-0.3.0/src/zango/apps/dynamic_models/mixin.py +64 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/models.py +2 -4
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/signals.py +2 -1
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/templates/app_panel.html +2 -1
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/templatetags/zango_filters.py +32 -0
- zango-0.3.0/src/zango/assets/app_panel/js/build.1722963781252.min.js +2 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/project_template/project_name/asgi.py +11 -0
- zango-0.3.0/src/zango/cli/project_template/project_name/settings.py +45 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/project_template/project_name/wsgi.py +12 -1
- zango-0.3.0/src/zango/config/settings/base.py +432 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/decorators.py +4 -4
- zango-0.3.0/src/zango/core/monitoring/__init__.py +9 -0
- zango-0.3.0/src/zango/core/monitoring/celery_instrument.py +42 -0
- zango-0.3.0/src/zango/core/monitoring/log_filter.py +43 -0
- zango-0.3.0/src/zango/core/monitoring/logging.py +31 -0
- zango-0.3.0/src/zango/core/monitoring/tasks.py +17 -0
- zango-0.3.0/src/zango/core/monitoring/telemetry.py +118 -0
- zango-0.3.0/src/zango/core/monitoring/utils.py +97 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/package_utils.py +11 -2
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/utils.py +19 -3
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/middleware/request.py +2 -1
- zango-0.3.0/src/zango/middleware/telemetry.py +29 -0
- {zango-0.2.2.dev0 → zango-0.3.0/src/zango.egg-info}/PKG-INFO +37 -6
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango.egg-info/SOURCES.txt +10 -1
- zango-0.3.0/src/zango.egg-info/requires.txt +68 -0
- zango-0.2.2.dev0/requirements/base.txt +0 -37
- zango-0.2.2.dev0/src/zango/assets/app_panel/js/build.v0.3.0.min.js +0 -2
- zango-0.2.2.dev0/src/zango/cli/project_template/project_name/settings.py +0 -151
- zango-0.2.2.dev0/src/zango/config/settings/base.py +0 -204
- zango-0.2.2.dev0/src/zango.egg-info/requires.txt +0 -37
- {zango-0.2.2.dev0 → zango-0.3.0}/LICENSE +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/MANIFEST.in +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/setup.cfg +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/app_auth/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/app_auth/profile/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/app_auth/profile/v1/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/app_auth/profile/v1/serializers.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/app_auth/profile/v1/urls.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/app_auth/profile/v1/utils.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/app_auth/profile/v1/views.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/app_auth/urls.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/accesslogs/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/accesslogs/v1/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/accesslogs/v1/serializers.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/accesslogs/v1/urls.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/accesslogs/v1/views.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/auditlogs/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/auditlogs/v1/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/auditlogs/v1/urls.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/auth/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/auth/v1/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/auth/v1/serializers.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/auth/v1/urls.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/auth/v1/views.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/codeassist/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/codeassist/v1/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/codeassist/v1/urls.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/codeassist/v1/utils.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/codeassist/v1/views.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/packages/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/packages/v1/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/packages/v1/urls.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/permissions/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/permissions/v1/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/permissions/v1/serializers.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/permissions/v1/urls.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/permissions/v1/views.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/tasks/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/tasks/v1/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/tasks/v1/serializers.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/tasks/v1/urls.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/tasks/v1/views.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/tenancy/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/tenancy/v1/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/tenancy/v1/serializers.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/tenancy/v1/urls.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/tenancy/v1/views.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/urls.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/accesslogs/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/accesslogs/apps.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/accesslogs/migrations/0001_accesslogs.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/accesslogs/migrations/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/accesslogs/models.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/accesslogs/signals.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/accesslogs/utils.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/admin.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/apps.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/auth_backend.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/migrations/0001_initial.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/migrations/0002_default_user_roles.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/migrations/0003_remove_userrolemodel_temp_field_appusermodel_mobile_and_more.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/migrations/0004_oldpasswords.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/migrations/0005_remove_appusermodel_user.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/migrations/0006_appusermodel_app_objects.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/migrations/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/models.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/serializers.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/signals.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/templates/app.html +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/templates/app_login_signup.html +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/tests.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/urls.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/views.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/admin.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/apps.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/cid.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/conf.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/context.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/diff.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/filters.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/management/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/management/commands/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/management/commands/auditlogflush.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/management/commands/auditlogmigratejson.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/middleware.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/migrations/0001_initial.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/migrations/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/mixins.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/models.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/receivers.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/registry.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/signals.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/admin.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/apps.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/fields/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/management/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/management/commands/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/management/commands/reload_tenant.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/migrations/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/permissions.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/registry.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/templates/default_landing.html +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/tests.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/urls.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/views.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/workspace/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/workspace/base.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/workspace/lifecycle.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/workspace/wtree.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/object_store/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/object_store/admin.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/object_store/apps.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/object_store/migrations/0001_initial.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/object_store/migrations/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/object_store/models.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/object_store/tests.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/object_store/views.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/admin.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/apps.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/migrations/0001_initial.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/migrations/0002_policymodel_type_alter_policymodel_expiry.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/migrations/0003_default_policy.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/migrations/0004_policymodel_path_alter_policymodel_name_and_more.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/migrations/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/mixin.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/models.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/tests.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/views.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/abstract_model.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/admin.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/apps.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/auth_backend.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/migrations/0001_initial.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/migrations/0002_platformusermodel_is_superadmin_and_more.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/migrations/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/models.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/templates/app_panel/app_panel_login.html +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/tests.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/urls.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/views.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/admin.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/apps.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/management/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/management/commands/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/management/commands/sync_static.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/management/commands/ws_makemigration.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/management/commands/ws_migrate.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/migrations/0001_initial.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/migrations/0002_rename_is_default_themesmodel_is_active.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/migrations/0003_themesmodel_created_at_themesmodel_created_by_and_more.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/migrations/0004_tenantmodel_fav_icon_alter_tenantmodel_logo.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/migrations/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/models.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/tasks.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/templatetags/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/templatetags/zstatic.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/tests.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/urls.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/utils.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/views.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/workspace_folder_template/cookiecutter.json +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/workspace_folder_template/{{cookiecutter.app_name}}/manifest.json +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/workspace_folder_template/{{cookiecutter.app_name}}/settings.json +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/tasks/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/tasks/apps.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/tasks/migrations/0001_initial.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/tasks/migrations/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/tasks/models.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/tasks/utils.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/assets/app_landing/css/styles.css +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/assets/app_panel/css/styles.css +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/assets/app_panel/images/zangoLogo.svg +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/assets/error_pages/css/LockedAccountStyle.css +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/assets/error_pages/images/ImgLocked.svg +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/assets/js/jquery/3.7.1/jquery.min.js +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/install_package.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/package_info.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/project_template/manage.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/project_template/project_name/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/project_template/project_name/urls.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/project_template/project_name/urls_public.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/project_template/project_name/urls_tenants.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/start_project.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/utils.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/config/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/config/celery.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/config/settings/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/config/urls_public.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/config/urls_tenants.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/api/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/api/base.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/api/utils.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/common_utils.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/custom_pluginbase.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/generic_views/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/generic_views/base.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/internal_requests.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/model_mixins.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/permissions.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/storage_utils.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/tasks.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/template_loader.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/middleware/__init__.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/middleware/tenant.py +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/templates/core/error_pages/account_lockout.html +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/templates/core/error_pages/base.html +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango.egg-info/dependency_links.txt +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango.egg-info/entry_points.txt +0 -0
- {zango-0.2.2.dev0 → zango-0.3.0}/src/zango.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: zango
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Zango: multi-tenant Django framework for building business apps
|
|
5
5
|
Home-page: https://github.com/Healthlane-Technologies/zelthy3
|
|
6
6
|
Author: Zelthy ("Healthlane Technologies")
|
|
@@ -13,10 +13,10 @@ Classifier: Development Status :: 5 - Production/Stable
|
|
|
13
13
|
Description-Content-Type: text/markdown
|
|
14
14
|
License-File: LICENSE
|
|
15
15
|
Requires-Dist: django==4.2.11
|
|
16
|
-
Requires-Dist: psycopg2-binary
|
|
17
|
-
Requires-Dist: django-tenants
|
|
18
|
-
Requires-Dist: djangorestframework
|
|
19
|
-
Requires-Dist: django-rest-knox
|
|
16
|
+
Requires-Dist: psycopg2-binary==2.9.9
|
|
17
|
+
Requires-Dist: django-tenants==3.6.1
|
|
18
|
+
Requires-Dist: djangorestframework==3.15.2
|
|
19
|
+
Requires-Dist: django-rest-knox==4.2.0
|
|
20
20
|
Requires-Dist: celery==5.3.1
|
|
21
21
|
Requires-Dist: flake8==6.1.0
|
|
22
22
|
Requires-Dist: django-cors-headers==4.2.0
|
|
@@ -49,6 +49,37 @@ Requires-Dist: django-ipware==7.0.1
|
|
|
49
49
|
Requires-Dist: django-decorator-include==3.0
|
|
50
50
|
Requires-Dist: setuptools==70.1.1
|
|
51
51
|
Requires-Dist: django-axes==6.4.0
|
|
52
|
+
Requires-Dist: packaging==24.1
|
|
53
|
+
Requires-Dist: opentelemetry-api==1.22.0
|
|
54
|
+
Requires-Dist: opentelemetry-distro==0.43b0
|
|
55
|
+
Requires-Dist: opentelemetry-exporter-otlp==1.22.0
|
|
56
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.22.0
|
|
57
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-grpc==1.22.0
|
|
58
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.22.0
|
|
59
|
+
Requires-Dist: opentelemetry-instrumentation==0.43b0
|
|
60
|
+
Requires-Dist: opentelemetry-instrumentation-asgi==0.43b0
|
|
61
|
+
Requires-Dist: opentelemetry-instrumentation-aws-lambda==0.43b0
|
|
62
|
+
Requires-Dist: opentelemetry-instrumentation-boto3sqs==0.43b0
|
|
63
|
+
Requires-Dist: opentelemetry-instrumentation-botocore==0.43b0
|
|
64
|
+
Requires-Dist: opentelemetry-instrumentation-celery==0.43b0
|
|
65
|
+
Requires-Dist: opentelemetry-instrumentation-dbapi==0.43b0
|
|
66
|
+
Requires-Dist: opentelemetry-instrumentation-django==0.43b0
|
|
67
|
+
Requires-Dist: opentelemetry-instrumentation-grpc==0.43b0
|
|
68
|
+
Requires-Dist: opentelemetry-instrumentation-jinja2==0.43b0
|
|
69
|
+
Requires-Dist: opentelemetry-instrumentation-logging==0.43b0
|
|
70
|
+
Requires-Dist: opentelemetry-instrumentation-psycopg2==0.43b0
|
|
71
|
+
Requires-Dist: opentelemetry-instrumentation-redis==0.43b0
|
|
72
|
+
Requires-Dist: opentelemetry-instrumentation-requests==0.43b0
|
|
73
|
+
Requires-Dist: opentelemetry-instrumentation-sqlite3==0.43b0
|
|
74
|
+
Requires-Dist: opentelemetry-instrumentation-urllib==0.43b0
|
|
75
|
+
Requires-Dist: opentelemetry-instrumentation-urllib3==0.43b0
|
|
76
|
+
Requires-Dist: opentelemetry-instrumentation-wsgi==0.43b0
|
|
77
|
+
Requires-Dist: opentelemetry-propagator-aws-xray==1.0.1
|
|
78
|
+
Requires-Dist: opentelemetry-proto==1.22.0
|
|
79
|
+
Requires-Dist: opentelemetry-sdk==1.22.0
|
|
80
|
+
Requires-Dist: opentelemetry-semantic-conventions==0.43b0
|
|
81
|
+
Requires-Dist: opentelemetry-util-http==0.43b0
|
|
82
|
+
Requires-Dist: loguru==0.7.2
|
|
52
83
|
|
|
53
84
|
<h1 align="center">
|
|
54
85
|
<a target="_blank" href="https://www.zelthy.com/framework?referer=zelthy3-repo-landing">
|
|
@@ -65,7 +96,7 @@ Requires-Dist: django-axes==6.4.0
|
|
|
65
96
|
<a href="#">
|
|
66
97
|
<img alt="PyPI version" src="https://badge.fury.io/py/zango.svg"></a>
|
|
67
98
|
<a href="#">
|
|
68
|
-
<img alt="Build" src="https://
|
|
99
|
+
<img alt="Build" src="https://github.com/Healthlane-Technologies/Zango/actions/workflows/release-zango.yml/badge.svg"></a>
|
|
69
100
|
<a href="https://opensource.org/licenses/Apache-2.0" target="_blank">
|
|
70
101
|
<img alt="License" src="https://img.shields.io/badge/License-Apache_2.0-blue.svg"> </a>
|
|
71
102
|
</p>
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
<a href="#">
|
|
14
14
|
<img alt="PyPI version" src="https://badge.fury.io/py/zango.svg"></a>
|
|
15
15
|
<a href="#">
|
|
16
|
-
<img alt="Build" src="https://
|
|
16
|
+
<img alt="Build" src="https://github.com/Healthlane-Technologies/Zango/actions/workflows/release-zango.yml/badge.svg"></a>
|
|
17
17
|
<a href="https://opensource.org/licenses/Apache-2.0" target="_blank">
|
|
18
18
|
<img alt="License" src="https://img.shields.io/badge/License-Apache_2.0-blue.svg"> </a>
|
|
19
19
|
</p>
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
django==4.2.11
|
|
2
|
+
psycopg2-binary==2.9.9
|
|
3
|
+
django-tenants==3.6.1
|
|
4
|
+
djangorestframework==3.15.2
|
|
5
|
+
django-rest-knox==4.2.0
|
|
6
|
+
celery==5.3.1
|
|
7
|
+
flake8==6.1.0
|
|
8
|
+
django-cors-headers==4.2.0
|
|
9
|
+
pluginbase==1.0.1
|
|
10
|
+
click==8.1.7
|
|
11
|
+
phonenumberslite==8.13.23
|
|
12
|
+
django-phonenumber-field==7.1.0
|
|
13
|
+
django-redis==5.3.0
|
|
14
|
+
django-cachalot==2.6.1
|
|
15
|
+
django-debug-toolbar==4.2.0
|
|
16
|
+
django-formtools==2.4.1
|
|
17
|
+
django-crispy-forms==2.0
|
|
18
|
+
crispy-bootstrap5==0.7
|
|
19
|
+
cookiecutter==2.3.0
|
|
20
|
+
boto3==1.28.52
|
|
21
|
+
botocore==1.31.52
|
|
22
|
+
django-storages==1.14
|
|
23
|
+
django-celery-beat==2.5.0
|
|
24
|
+
django-smtp-ssl==1.0
|
|
25
|
+
PyJWT==2.8.0
|
|
26
|
+
XlsxWriter==3.1.9
|
|
27
|
+
pydub==0.25.1
|
|
28
|
+
django-celery-results==2.5.1
|
|
29
|
+
django-environ==0.11.2
|
|
30
|
+
pytz==2024.1
|
|
31
|
+
django-session-security==2.6.7
|
|
32
|
+
beautifulsoup4==4.12.3
|
|
33
|
+
python3-saml==1.16.0
|
|
34
|
+
django-ipware==7.0.1
|
|
35
|
+
django-decorator-include==3.0
|
|
36
|
+
setuptools==70.1.1
|
|
37
|
+
django-axes==6.4.0
|
|
38
|
+
packaging==24.1
|
|
39
|
+
opentelemetry-api==1.22.0
|
|
40
|
+
opentelemetry-distro==0.43b0
|
|
41
|
+
opentelemetry-exporter-otlp==1.22.0
|
|
42
|
+
opentelemetry-exporter-otlp-proto-common==1.22.0
|
|
43
|
+
opentelemetry-exporter-otlp-proto-grpc==1.22.0
|
|
44
|
+
opentelemetry-exporter-otlp-proto-http==1.22.0
|
|
45
|
+
opentelemetry-instrumentation==0.43b0
|
|
46
|
+
opentelemetry-instrumentation-asgi==0.43b0
|
|
47
|
+
opentelemetry-instrumentation-aws-lambda==0.43b0
|
|
48
|
+
opentelemetry-instrumentation-boto3sqs==0.43b0
|
|
49
|
+
opentelemetry-instrumentation-botocore==0.43b0
|
|
50
|
+
opentelemetry-instrumentation-celery==0.43b0
|
|
51
|
+
opentelemetry-instrumentation-dbapi==0.43b0
|
|
52
|
+
opentelemetry-instrumentation-django==0.43b0
|
|
53
|
+
opentelemetry-instrumentation-grpc==0.43b0
|
|
54
|
+
opentelemetry-instrumentation-jinja2==0.43b0
|
|
55
|
+
opentelemetry-instrumentation-logging==0.43b0
|
|
56
|
+
opentelemetry-instrumentation-psycopg2==0.43b0
|
|
57
|
+
opentelemetry-instrumentation-redis==0.43b0
|
|
58
|
+
opentelemetry-instrumentation-requests==0.43b0
|
|
59
|
+
opentelemetry-instrumentation-sqlite3==0.43b0
|
|
60
|
+
opentelemetry-instrumentation-urllib==0.43b0
|
|
61
|
+
opentelemetry-instrumentation-urllib3==0.43b0
|
|
62
|
+
opentelemetry-instrumentation-wsgi==0.43b0
|
|
63
|
+
opentelemetry-propagator-aws-xray==1.0.1
|
|
64
|
+
opentelemetry-proto==1.22.0
|
|
65
|
+
opentelemetry-sdk==1.22.0
|
|
66
|
+
opentelemetry-semantic-conventions==0.43b0
|
|
67
|
+
opentelemetry-util-http==0.43b0
|
|
68
|
+
loguru==0.7.2
|
|
@@ -8,7 +8,7 @@ REQUIREMENTS_DIR = os.path.join(PROJECT_DIR, "requirements")
|
|
|
8
8
|
|
|
9
9
|
README = os.path.join(PROJECT_DIR, "README.md")
|
|
10
10
|
|
|
11
|
-
PLATFORM_VERSION = "0.
|
|
11
|
+
PLATFORM_VERSION = "0.3.0"
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
def get_requirements(env):
|
|
@@ -44,7 +44,7 @@ setup(
|
|
|
44
44
|
"Framework :: Django",
|
|
45
45
|
"Programming Language :: Python",
|
|
46
46
|
"Programming Language :: Python :: 3",
|
|
47
|
-
"Development Status :: 5 - Production/Stable"
|
|
47
|
+
"Development Status :: 5 - Production/Stable",
|
|
48
48
|
],
|
|
49
49
|
entry_points={
|
|
50
50
|
"console_scripts": [
|
|
@@ -27,18 +27,14 @@ class AuditLogSerializerModel(serializers.ModelSerializer):
|
|
|
27
27
|
return (
|
|
28
28
|
obj.tenant_actor.name
|
|
29
29
|
if obj.tenant_actor
|
|
30
|
-
else obj.platform_actor.name
|
|
31
|
-
if obj.platform_actor
|
|
32
|
-
else None
|
|
30
|
+
else obj.platform_actor.name if obj.platform_actor else None
|
|
33
31
|
)
|
|
34
32
|
|
|
35
33
|
def get_actor_type(self, obj):
|
|
36
34
|
return (
|
|
37
35
|
"tenant_actor"
|
|
38
36
|
if obj.tenant_actor
|
|
39
|
-
else "platform_actor"
|
|
40
|
-
if obj.platform_actor
|
|
41
|
-
else None
|
|
37
|
+
else "platform_actor" if obj.platform_actor else None
|
|
42
38
|
)
|
|
43
39
|
|
|
44
40
|
def get_object_uuid(self, obj):
|
|
@@ -8,6 +8,7 @@ from django.db.models import Q
|
|
|
8
8
|
from django.contrib.contenttypes.models import ContentType
|
|
9
9
|
from django.db import connection
|
|
10
10
|
from django.utils.decorators import method_decorator
|
|
11
|
+
from django.conf import settings
|
|
11
12
|
|
|
12
13
|
from zango.core.api import get_api_response, ZangoGenericPlatformAPIView
|
|
13
14
|
from zango.core.api.utils import ZangoAPIPagination
|
|
@@ -27,6 +28,8 @@ class AuditLogViewAPIV1(ZangoGenericPlatformAPIView, ZangoAPIPagination):
|
|
|
27
28
|
def process_timestamp(self, timestamp, timezone):
|
|
28
29
|
try:
|
|
29
30
|
ts = json.loads(timestamp)
|
|
31
|
+
if not timezone:
|
|
32
|
+
timezone = settings.TIME_ZONE
|
|
30
33
|
tz = pytz.timezone(timezone)
|
|
31
34
|
ts["start"] = tz.localize(
|
|
32
35
|
datetime.strptime(ts["start"] + "-" + "00:00", "%Y-%m-%d-%H:%M"),
|
|
@@ -21,6 +21,7 @@ class PackagesViewAPIV1(ZangoGenericPlatformAPIView, ZangoAPIPagination):
|
|
|
21
21
|
def get(self, request, app_uuid, *args, **kwargs):
|
|
22
22
|
action = request.GET.get("action", None)
|
|
23
23
|
tenant = self.get_app_obj(app_uuid)
|
|
24
|
+
search = request.GET.get("search", None)
|
|
24
25
|
if action == "config_url":
|
|
25
26
|
domains = Domain.objects.filter(tenant=tenant)
|
|
26
27
|
if len(domains) == 0:
|
|
@@ -43,6 +44,10 @@ class PackagesViewAPIV1(ZangoGenericPlatformAPIView, ZangoAPIPagination):
|
|
|
43
44
|
return get_api_response(True, resp, status)
|
|
44
45
|
try:
|
|
45
46
|
packages = get_all_packages(tenant.name)
|
|
47
|
+
if search:
|
|
48
|
+
packages = [
|
|
49
|
+
obj for obj in packages if search.lower() in obj["name"].lower()
|
|
50
|
+
]
|
|
46
51
|
paginated_packages = self.paginate_queryset(packages, request, view=self)
|
|
47
52
|
packages = self.get_paginated_response_data(paginated_packages)
|
|
48
53
|
success = True
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
from django.core.exceptions import ValidationError
|
|
2
|
+
|
|
3
|
+
from zango.apps.appauth.models import AppUserModel, UserRoleModel
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class DynamicModelMixin:
|
|
7
|
+
"""
|
|
8
|
+
Mixin class providing dynamic model functionalities and utility methods.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
def create_app_user(
|
|
12
|
+
self,
|
|
13
|
+
name,
|
|
14
|
+
email,
|
|
15
|
+
mobile,
|
|
16
|
+
password,
|
|
17
|
+
role_name,
|
|
18
|
+
force_password_reset=True,
|
|
19
|
+
require_verification=True,
|
|
20
|
+
):
|
|
21
|
+
"""
|
|
22
|
+
Creates a new app user and associates them with the current object, mapping them to the specified role.
|
|
23
|
+
|
|
24
|
+
Args:
|
|
25
|
+
name (str): The name of the user.
|
|
26
|
+
email (str): The email address of the user.
|
|
27
|
+
mobile (str): The mobile number of the user.
|
|
28
|
+
password (str): The password for the user account.
|
|
29
|
+
role_name (str): The name of the role to be assigned to the user.
|
|
30
|
+
force_password_reset (bool): If True, the user will be required to reset their password on first login. Default is True.
|
|
31
|
+
require_verification (bool): If True, the user will be required to verify their account. Default is True.
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
dict: A dictionary containing:
|
|
35
|
+
- "success" (bool): Indicates if the user creation was successful.
|
|
36
|
+
- "message" (str): A message providing additional details about the operation.
|
|
37
|
+
- "app_user" (AppUserModel or None): The created user instance if successful, otherwise None.
|
|
38
|
+
|
|
39
|
+
Raises:
|
|
40
|
+
ValidationError: If the specified role does not exist.
|
|
41
|
+
|
|
42
|
+
Notes:
|
|
43
|
+
The `app_objects` mapping is created with the given role with the current object.
|
|
44
|
+
"""
|
|
45
|
+
app_objects = {}
|
|
46
|
+
role_ids = []
|
|
47
|
+
|
|
48
|
+
try:
|
|
49
|
+
user_role = UserRoleModel.objects.get(name=role_name)
|
|
50
|
+
app_objects.update({str(user_role.id): str(self.object_uuid)})
|
|
51
|
+
role_ids.append(user_role.id)
|
|
52
|
+
except UserRoleModel.DoesNotExist:
|
|
53
|
+
raise ValidationError(f"User Role {role_name} does not exist")
|
|
54
|
+
|
|
55
|
+
return AppUserModel.create_user(
|
|
56
|
+
name,
|
|
57
|
+
email,
|
|
58
|
+
mobile,
|
|
59
|
+
password,
|
|
60
|
+
role_ids,
|
|
61
|
+
force_password_reset=force_password_reset,
|
|
62
|
+
require_verification=require_verification,
|
|
63
|
+
app_objects=app_objects,
|
|
64
|
+
)
|
|
@@ -6,14 +6,12 @@ from django.db import models, connection
|
|
|
6
6
|
from django.db.models import Q
|
|
7
7
|
from django.apps import apps
|
|
8
8
|
from django.core.exceptions import PermissionDenied
|
|
9
|
-
from django.contrib.contenttypes.models import ContentType
|
|
10
9
|
|
|
11
10
|
from zango.apps.appauth.models import AppUserModel
|
|
12
11
|
from zango.core.utils import get_current_request, get_current_role
|
|
13
|
-
from zango.apps.shared.platformauth.models import PlatformUserModel
|
|
14
12
|
from zango.apps.dynamic_models.permissions import is_platform_user
|
|
15
13
|
|
|
16
|
-
from
|
|
14
|
+
from .mixin import DynamicModelMixin
|
|
17
15
|
|
|
18
16
|
|
|
19
17
|
class RegisterOnceModeMeta(type(models.Model)):
|
|
@@ -323,7 +321,7 @@ class RestrictedManager(models.Manager):
|
|
|
323
321
|
return qs.all()
|
|
324
322
|
|
|
325
323
|
|
|
326
|
-
class DynamicModelBase(models.Model, metaclass=RegisterOnceModeMeta):
|
|
324
|
+
class DynamicModelBase(models.Model, DynamicModelMixin, metaclass=RegisterOnceModeMeta):
|
|
327
325
|
created_at = models.DateTimeField(auto_now_add=True)
|
|
328
326
|
created_by = models.ForeignKey(
|
|
329
327
|
AppUserModel, null=True, editable=False, on_delete=models.PROTECT
|
|
@@ -13,9 +13,10 @@ def set_created_modified_by(sender, instance, **kwargs):
|
|
|
13
13
|
instance.modified_by = user
|
|
14
14
|
return
|
|
15
15
|
|
|
16
|
+
|
|
16
17
|
def create_object_store_entry(sender, instance, created, **kwargs):
|
|
17
18
|
if created:
|
|
18
|
-
from zango.apps.
|
|
19
|
+
from zango.apps.object_store.models import ObjectStore
|
|
19
20
|
from django.contrib.contenttypes.models import ContentType
|
|
20
21
|
|
|
21
22
|
content_type = ContentType.objects.get_for_model(sender)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
{% load static %}
|
|
2
|
+
{% load zango_filters %}
|
|
2
3
|
|
|
3
4
|
<!DOCTYPE html>
|
|
4
5
|
<html lang="en">
|
|
@@ -18,7 +19,7 @@
|
|
|
18
19
|
var csrf_token = "{{ csrf_token }}";
|
|
19
20
|
var platform_version = "{{ platform_version }}";
|
|
20
21
|
</script>
|
|
21
|
-
<script src="{% static 'app_panel/js/build
|
|
22
|
+
<script src="{% static 'app_panel/js/build.*.min.js'|use_latest %}"></script>
|
|
22
23
|
<script src="{% static 'js/jquery/3.7.1/jquery.min.js' %}"></script>
|
|
23
24
|
{% include 'session_security/all.html' %}
|
|
24
25
|
</body>
|
{zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/templatetags/zango_filters.py
RENAMED
|
@@ -3,6 +3,9 @@ Module containing custom template filters
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
from django import template
|
|
6
|
+
from django.conf import settings
|
|
7
|
+
import os
|
|
8
|
+
import re
|
|
6
9
|
|
|
7
10
|
register = template.Library()
|
|
8
11
|
|
|
@@ -36,3 +39,32 @@ def humanize_timedelta(timedelta_obj):
|
|
|
36
39
|
if seconds > 0:
|
|
37
40
|
time_total += " {} seconds".format(int(seconds))
|
|
38
41
|
return time_total
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
@register.filter()
|
|
45
|
+
def use_latest(build_path):
|
|
46
|
+
"""
|
|
47
|
+
Returns the latest version of a static file based on a given file path pattern.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
build_path (str): the original file path pattern
|
|
51
|
+
|
|
52
|
+
Returns:
|
|
53
|
+
str: The path to the latest version of the file, or the original path if no match is found.
|
|
54
|
+
|
|
55
|
+
Example:
|
|
56
|
+
Usage in a Django template to reference the latest static file:
|
|
57
|
+
|
|
58
|
+
<script src="{% static 'app_panel/js/build.*.min.js'|use_latest %}"></script>
|
|
59
|
+
|
|
60
|
+
Make sure to load the zango filters with {% load zango_filters %}.
|
|
61
|
+
"""
|
|
62
|
+
buildir = os.path.dirname(build_path)
|
|
63
|
+
filep = os.path.basename(build_path)
|
|
64
|
+
for dir in settings.STATICFILES_DIRS:
|
|
65
|
+
for dirpath, dirnames, filenames in os.walk(dir):
|
|
66
|
+
filenames = sorted(filenames, reverse=True)
|
|
67
|
+
for filename in filenames:
|
|
68
|
+
if re.match(filep, filename):
|
|
69
|
+
return os.path.join(buildir, filename)
|
|
70
|
+
return build_path
|