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.
Files changed (259) hide show
  1. {zango-0.2.2.dev0/src/zango.egg-info → zango-0.3.0}/PKG-INFO +37 -6
  2. {zango-0.2.2.dev0 → zango-0.3.0}/README.md +1 -1
  3. zango-0.3.0/requirements/base.txt +68 -0
  4. {zango-0.2.2.dev0 → zango-0.3.0}/setup.py +2 -2
  5. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/__init__.py +1 -1
  6. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/auditlogs/v1/serializers.py +2 -6
  7. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/auditlogs/v1/views.py +3 -0
  8. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/packages/v1/views.py +5 -0
  9. zango-0.3.0/src/zango/apps/dynamic_models/mixin.py +64 -0
  10. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/models.py +2 -4
  11. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/signals.py +2 -1
  12. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/templates/app_panel.html +2 -1
  13. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/templatetags/zango_filters.py +32 -0
  14. zango-0.3.0/src/zango/assets/app_panel/js/build.1722963781252.min.js +2 -0
  15. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/project_template/project_name/asgi.py +11 -0
  16. zango-0.3.0/src/zango/cli/project_template/project_name/settings.py +45 -0
  17. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/project_template/project_name/wsgi.py +12 -1
  18. zango-0.3.0/src/zango/config/settings/base.py +432 -0
  19. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/decorators.py +4 -4
  20. zango-0.3.0/src/zango/core/monitoring/__init__.py +9 -0
  21. zango-0.3.0/src/zango/core/monitoring/celery_instrument.py +42 -0
  22. zango-0.3.0/src/zango/core/monitoring/log_filter.py +43 -0
  23. zango-0.3.0/src/zango/core/monitoring/logging.py +31 -0
  24. zango-0.3.0/src/zango/core/monitoring/tasks.py +17 -0
  25. zango-0.3.0/src/zango/core/monitoring/telemetry.py +118 -0
  26. zango-0.3.0/src/zango/core/monitoring/utils.py +97 -0
  27. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/package_utils.py +11 -2
  28. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/utils.py +19 -3
  29. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/middleware/request.py +2 -1
  30. zango-0.3.0/src/zango/middleware/telemetry.py +29 -0
  31. {zango-0.2.2.dev0 → zango-0.3.0/src/zango.egg-info}/PKG-INFO +37 -6
  32. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango.egg-info/SOURCES.txt +10 -1
  33. zango-0.3.0/src/zango.egg-info/requires.txt +68 -0
  34. zango-0.2.2.dev0/requirements/base.txt +0 -37
  35. zango-0.2.2.dev0/src/zango/assets/app_panel/js/build.v0.3.0.min.js +0 -2
  36. zango-0.2.2.dev0/src/zango/cli/project_template/project_name/settings.py +0 -151
  37. zango-0.2.2.dev0/src/zango/config/settings/base.py +0 -204
  38. zango-0.2.2.dev0/src/zango.egg-info/requires.txt +0 -37
  39. {zango-0.2.2.dev0 → zango-0.3.0}/LICENSE +0 -0
  40. {zango-0.2.2.dev0 → zango-0.3.0}/MANIFEST.in +0 -0
  41. {zango-0.2.2.dev0 → zango-0.3.0}/setup.cfg +0 -0
  42. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/__init__.py +0 -0
  43. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/app_auth/__init__.py +0 -0
  44. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/app_auth/profile/__init__.py +0 -0
  45. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/app_auth/profile/v1/__init__.py +0 -0
  46. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/app_auth/profile/v1/serializers.py +0 -0
  47. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/app_auth/profile/v1/urls.py +0 -0
  48. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/app_auth/profile/v1/utils.py +0 -0
  49. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/app_auth/profile/v1/views.py +0 -0
  50. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/app_auth/urls.py +0 -0
  51. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/__init__.py +0 -0
  52. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/accesslogs/__init__.py +0 -0
  53. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/accesslogs/v1/__init__.py +0 -0
  54. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/accesslogs/v1/serializers.py +0 -0
  55. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/accesslogs/v1/urls.py +0 -0
  56. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/accesslogs/v1/views.py +0 -0
  57. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/auditlogs/__init__.py +0 -0
  58. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/auditlogs/v1/__init__.py +0 -0
  59. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/auditlogs/v1/urls.py +0 -0
  60. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/auth/__init__.py +0 -0
  61. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/auth/v1/__init__.py +0 -0
  62. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/auth/v1/serializers.py +0 -0
  63. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/auth/v1/urls.py +0 -0
  64. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/auth/v1/views.py +0 -0
  65. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/codeassist/__init__.py +0 -0
  66. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/codeassist/v1/__init__.py +0 -0
  67. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/codeassist/v1/urls.py +0 -0
  68. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/codeassist/v1/utils.py +0 -0
  69. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/codeassist/v1/views.py +0 -0
  70. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/packages/__init__.py +0 -0
  71. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/packages/v1/__init__.py +0 -0
  72. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/packages/v1/urls.py +0 -0
  73. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/permissions/__init__.py +0 -0
  74. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/permissions/v1/__init__.py +0 -0
  75. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/permissions/v1/serializers.py +0 -0
  76. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/permissions/v1/urls.py +0 -0
  77. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/permissions/v1/views.py +0 -0
  78. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/tasks/__init__.py +0 -0
  79. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/tasks/v1/__init__.py +0 -0
  80. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/tasks/v1/serializers.py +0 -0
  81. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/tasks/v1/urls.py +0 -0
  82. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/tasks/v1/views.py +0 -0
  83. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/tenancy/__init__.py +0 -0
  84. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/tenancy/v1/__init__.py +0 -0
  85. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/tenancy/v1/serializers.py +0 -0
  86. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/tenancy/v1/urls.py +0 -0
  87. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/tenancy/v1/views.py +0 -0
  88. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/api/platform/urls.py +0 -0
  89. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/__init__.py +0 -0
  90. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/accesslogs/__init__.py +0 -0
  91. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/accesslogs/apps.py +0 -0
  92. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/accesslogs/migrations/0001_accesslogs.py +0 -0
  93. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/accesslogs/migrations/__init__.py +0 -0
  94. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/accesslogs/models.py +0 -0
  95. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/accesslogs/signals.py +0 -0
  96. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/accesslogs/utils.py +0 -0
  97. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/__init__.py +0 -0
  98. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/admin.py +0 -0
  99. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/apps.py +0 -0
  100. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/auth_backend.py +0 -0
  101. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/migrations/0001_initial.py +0 -0
  102. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/migrations/0002_default_user_roles.py +0 -0
  103. {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
  104. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/migrations/0004_oldpasswords.py +0 -0
  105. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/migrations/0005_remove_appusermodel_user.py +0 -0
  106. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/migrations/0006_appusermodel_app_objects.py +0 -0
  107. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/migrations/__init__.py +0 -0
  108. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/models.py +0 -0
  109. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/serializers.py +0 -0
  110. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/signals.py +0 -0
  111. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/templates/app.html +0 -0
  112. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/templates/app_login_signup.html +0 -0
  113. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/tests.py +0 -0
  114. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/urls.py +0 -0
  115. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/appauth/views.py +0 -0
  116. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/__init__.py +0 -0
  117. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/admin.py +0 -0
  118. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/apps.py +0 -0
  119. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/cid.py +0 -0
  120. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/conf.py +0 -0
  121. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/context.py +0 -0
  122. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/diff.py +0 -0
  123. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/filters.py +0 -0
  124. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/management/__init__.py +0 -0
  125. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/management/commands/__init__.py +0 -0
  126. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/management/commands/auditlogflush.py +0 -0
  127. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/management/commands/auditlogmigratejson.py +0 -0
  128. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/middleware.py +0 -0
  129. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/migrations/0001_initial.py +0 -0
  130. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/migrations/__init__.py +0 -0
  131. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/mixins.py +0 -0
  132. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/models.py +0 -0
  133. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/receivers.py +0 -0
  134. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/registry.py +0 -0
  135. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/auditlogs/signals.py +0 -0
  136. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/__init__.py +0 -0
  137. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/admin.py +0 -0
  138. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/apps.py +0 -0
  139. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/fields/__init__.py +0 -0
  140. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/management/__init__.py +0 -0
  141. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/management/commands/__init__.py +0 -0
  142. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/management/commands/reload_tenant.py +0 -0
  143. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/migrations/__init__.py +0 -0
  144. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/permissions.py +0 -0
  145. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/registry.py +0 -0
  146. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/templates/default_landing.html +0 -0
  147. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/tests.py +0 -0
  148. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/urls.py +0 -0
  149. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/views.py +0 -0
  150. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/workspace/__init__.py +0 -0
  151. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/workspace/base.py +0 -0
  152. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/workspace/lifecycle.py +0 -0
  153. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/dynamic_models/workspace/wtree.py +0 -0
  154. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/object_store/__init__.py +0 -0
  155. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/object_store/admin.py +0 -0
  156. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/object_store/apps.py +0 -0
  157. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/object_store/migrations/0001_initial.py +0 -0
  158. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/object_store/migrations/__init__.py +0 -0
  159. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/object_store/models.py +0 -0
  160. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/object_store/tests.py +0 -0
  161. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/object_store/views.py +0 -0
  162. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/__init__.py +0 -0
  163. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/admin.py +0 -0
  164. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/apps.py +0 -0
  165. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/migrations/0001_initial.py +0 -0
  166. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/migrations/0002_policymodel_type_alter_policymodel_expiry.py +0 -0
  167. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/migrations/0003_default_policy.py +0 -0
  168. {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
  169. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/migrations/__init__.py +0 -0
  170. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/mixin.py +0 -0
  171. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/models.py +0 -0
  172. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/tests.py +0 -0
  173. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/permissions/views.py +0 -0
  174. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/__init__.py +0 -0
  175. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/__init__.py +0 -0
  176. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/abstract_model.py +0 -0
  177. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/admin.py +0 -0
  178. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/apps.py +0 -0
  179. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/auth_backend.py +0 -0
  180. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/migrations/0001_initial.py +0 -0
  181. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/migrations/0002_platformusermodel_is_superadmin_and_more.py +0 -0
  182. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/migrations/__init__.py +0 -0
  183. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/models.py +0 -0
  184. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/templates/app_panel/app_panel_login.html +0 -0
  185. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/tests.py +0 -0
  186. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/urls.py +0 -0
  187. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/platformauth/views.py +0 -0
  188. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/__init__.py +0 -0
  189. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/admin.py +0 -0
  190. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/apps.py +0 -0
  191. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/management/__init__.py +0 -0
  192. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/management/commands/__init__.py +0 -0
  193. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/management/commands/sync_static.py +0 -0
  194. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/management/commands/ws_makemigration.py +0 -0
  195. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/management/commands/ws_migrate.py +0 -0
  196. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/migrations/0001_initial.py +0 -0
  197. {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
  198. {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
  199. {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
  200. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/migrations/__init__.py +0 -0
  201. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/models.py +0 -0
  202. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/tasks.py +0 -0
  203. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/templatetags/__init__.py +0 -0
  204. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/templatetags/zstatic.py +0 -0
  205. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/tests.py +0 -0
  206. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/urls.py +0 -0
  207. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/utils.py +0 -0
  208. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/views.py +0 -0
  209. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/workspace_folder_template/cookiecutter.json +0 -0
  210. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/workspace_folder_template/{{cookiecutter.app_name}}/manifest.json +0 -0
  211. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/shared/tenancy/workspace_folder_template/{{cookiecutter.app_name}}/settings.json +0 -0
  212. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/tasks/__init__.py +0 -0
  213. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/tasks/apps.py +0 -0
  214. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/tasks/migrations/0001_initial.py +0 -0
  215. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/tasks/migrations/__init__.py +0 -0
  216. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/tasks/models.py +0 -0
  217. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/apps/tasks/utils.py +0 -0
  218. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/assets/app_landing/css/styles.css +0 -0
  219. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/assets/app_panel/css/styles.css +0 -0
  220. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/assets/app_panel/images/zangoLogo.svg +0 -0
  221. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/assets/error_pages/css/LockedAccountStyle.css +0 -0
  222. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/assets/error_pages/images/ImgLocked.svg +0 -0
  223. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/assets/js/jquery/3.7.1/jquery.min.js +0 -0
  224. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/__init__.py +0 -0
  225. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/install_package.py +0 -0
  226. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/package_info.py +0 -0
  227. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/project_template/manage.py +0 -0
  228. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/project_template/project_name/__init__.py +0 -0
  229. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/project_template/project_name/urls.py +0 -0
  230. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/project_template/project_name/urls_public.py +0 -0
  231. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/project_template/project_name/urls_tenants.py +0 -0
  232. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/start_project.py +0 -0
  233. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/cli/utils.py +0 -0
  234. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/config/__init__.py +0 -0
  235. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/config/celery.py +0 -0
  236. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/config/settings/__init__.py +0 -0
  237. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/config/urls_public.py +0 -0
  238. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/config/urls_tenants.py +0 -0
  239. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/__init__.py +0 -0
  240. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/api/__init__.py +0 -0
  241. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/api/base.py +0 -0
  242. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/api/utils.py +0 -0
  243. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/common_utils.py +0 -0
  244. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/custom_pluginbase.py +0 -0
  245. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/generic_views/__init__.py +0 -0
  246. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/generic_views/base.py +0 -0
  247. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/internal_requests.py +0 -0
  248. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/model_mixins.py +0 -0
  249. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/permissions.py +0 -0
  250. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/storage_utils.py +0 -0
  251. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/tasks.py +0 -0
  252. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/core/template_loader.py +0 -0
  253. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/middleware/__init__.py +0 -0
  254. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/middleware/tenant.py +0 -0
  255. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/templates/core/error_pages/account_lockout.html +0 -0
  256. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango/templates/core/error_pages/base.html +0 -0
  257. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango.egg-info/dependency_links.txt +0 -0
  258. {zango-0.2.2.dev0 → zango-0.3.0}/src/zango.egg-info/entry_points.txt +0 -0
  259. {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.2.2.dev0
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://img.shields.io/github/actions/workflow/status/Healthlane-Technologies/zango/sync-docs-to-docs-hub.yml?branch=main"></a>
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://img.shields.io/github/actions/workflow/status/Healthlane-Technologies/zango/sync-docs-to-docs-hub.yml?branch=main"></a>
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.2.2.dev"
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": [
@@ -1,3 +1,3 @@
1
1
  from zango.core import internal_requests
2
2
 
3
- __version__ = "0.2.2.dev"
3
+ __version__ = "0.3.0"
@@ -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 zango.apps.object_store.models import ObjectStore
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.dynamic_models.models import ObjectStore
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.v0.3.0.min.js' %}"></script>
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>
@@ -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