GeneralManager 0.41.6__tar.gz → 0.41.8__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 (194) hide show
  1. {generalmanager-0.41.6/src/GeneralManager.egg-info → generalmanager-0.41.8}/PKG-INFO +1 -1
  2. {generalmanager-0.41.6 → generalmanager-0.41.8}/pyproject.toml +1 -1
  3. {generalmanager-0.41.6 → generalmanager-0.41.8/src/GeneralManager.egg-info}/PKG-INFO +1 -1
  4. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/bucket/group_bucket.py +76 -6
  5. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/manager/group_manager.py +33 -3
  6. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/permission/base_permission.py +9 -2
  7. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/permission/graphql_capabilities.py +10 -9
  8. {generalmanager-0.41.6 → generalmanager-0.41.8}/LICENSE +0 -0
  9. {generalmanager-0.41.6 → generalmanager-0.41.8}/README.md +0 -0
  10. {generalmanager-0.41.6 → generalmanager-0.41.8}/setup.cfg +0 -0
  11. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/GeneralManager.egg-info/SOURCES.txt +0 -0
  12. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
  13. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/GeneralManager.egg-info/requires.txt +0 -0
  14. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/GeneralManager.egg-info/top_level.txt +0 -0
  15. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/__init__.py +0 -0
  16. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/_types/__init__.py +0 -0
  17. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/_types/api.py +0 -0
  18. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/_types/bucket.py +0 -0
  19. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/_types/cache.py +0 -0
  20. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/_types/factory.py +0 -0
  21. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/_types/general_manager.py +0 -0
  22. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/_types/interface.py +0 -0
  23. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/_types/manager.py +0 -0
  24. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/_types/measurement.py +0 -0
  25. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/_types/permission.py +0 -0
  26. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/_types/rule.py +0 -0
  27. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/_types/search.py +0 -0
  28. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/_types/utils.py +0 -0
  29. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/api/__init__.py +0 -0
  30. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/api/graphql.py +0 -0
  31. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/api/graphql_errors.py +0 -0
  32. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/api/graphql_mutations.py +0 -0
  33. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/api/graphql_resolvers.py +0 -0
  34. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/api/graphql_search.py +0 -0
  35. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
  36. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/api/graphql_subscriptions.py +0 -0
  37. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/api/graphql_view.py +0 -0
  38. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/api/mutation.py +0 -0
  39. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/api/property.py +0 -0
  40. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/api/registry.py +0 -0
  41. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/api/remote_api.py +0 -0
  42. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/api/remote_invalidation.py +0 -0
  43. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/api/remote_invalidation_client.py +0 -0
  44. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/apps.py +0 -0
  45. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/bootstrap.py +0 -0
  46. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/bucket/__init__.py +0 -0
  47. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/bucket/base_bucket.py +0 -0
  48. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/bucket/calculation_bucket.py +0 -0
  49. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/bucket/database_bucket.py +0 -0
  50. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/bucket/request_bucket.py +0 -0
  51. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/cache/__init__.py +0 -0
  52. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/cache/cache_decorator.py +0 -0
  53. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/cache/cache_tracker.py +0 -0
  54. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/cache/dependency_index.py +0 -0
  55. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/cache/model_dependency_collector.py +0 -0
  56. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/cache/signals.py +0 -0
  57. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/conf.py +0 -0
  58. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/factory/__init__.py +0 -0
  59. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/factory/auto_factory.py +0 -0
  60. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/factory/factories.py +0 -0
  61. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/factory/factory_methods.py +0 -0
  62. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/__init__.py +0 -0
  63. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/base_interface.py +0 -0
  64. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/bundles/__init__.py +0 -0
  65. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/bundles/calculation.py +0 -0
  66. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/bundles/database.py +0 -0
  67. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/bundles/remote_manager.py +0 -0
  68. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/bundles/request.py +0 -0
  69. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/__init__.py +0 -0
  70. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/base.py +0 -0
  71. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/builtin.py +0 -0
  72. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
  73. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
  74. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
  75. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/configuration.py +0 -0
  76. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/core/observability.py +0 -0
  77. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/core/utils.py +0 -0
  78. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/exceptions.py +0 -0
  79. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
  80. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
  81. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
  82. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/factory.py +0 -0
  83. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
  84. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
  85. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/orm/history.py +0 -0
  86. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
  87. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
  88. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/orm/support.py +0 -0
  89. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
  90. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
  91. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +0 -0
  92. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
  93. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
  94. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
  95. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
  96. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
  97. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/registry.py +0 -0
  98. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
  99. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
  100. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
  101. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
  102. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/interfaces/__init__.py +0 -0
  103. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/interfaces/calculation.py +0 -0
  104. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/interfaces/database.py +0 -0
  105. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/interfaces/existing_model.py +0 -0
  106. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/interfaces/read_only.py +0 -0
  107. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
  108. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/interfaces/request.py +0 -0
  109. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/manifests/__init__.py +0 -0
  110. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/manifests/capability_builder.py +0 -0
  111. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
  112. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/manifests/capability_models.py +0 -0
  113. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/orm_interface.py +0 -0
  114. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/requests.py +0 -0
  115. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/utils/__init__.py +0 -0
  116. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
  117. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/utils/errors.py +0 -0
  118. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/interface/utils/models.py +0 -0
  119. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/logging.py +0 -0
  120. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/management/commands/search_index.py +0 -0
  121. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
  122. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/management/commands/shell.py +0 -0
  123. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
  124. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
  125. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/manager/__init__.py +0 -0
  126. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/manager/general_manager.py +0 -0
  127. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/manager/input.py +0 -0
  128. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/manager/meta.py +0 -0
  129. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/measurement/__init__.py +0 -0
  130. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/measurement/measurement.py +0 -0
  131. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/measurement/measurement_field.py +0 -0
  132. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/metrics/__init__.py +0 -0
  133. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/metrics/graphql.py +0 -0
  134. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/migrations/0001_initial.py +0 -0
  135. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
  136. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
  137. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/migrations/__init__.py +0 -0
  138. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/models.py +0 -0
  139. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/permission/__init__.py +0 -0
  140. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/permission/audit.py +0 -0
  141. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/permission/manager_based_permission.py +0 -0
  142. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/permission/mutation_permission.py +0 -0
  143. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/permission/permission_checks.py +0 -0
  144. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/permission/permission_data_manager.py +0 -0
  145. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/permission/utils.py +0 -0
  146. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/public_api_registry.py +0 -0
  147. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/py.typed +0 -0
  148. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/rule/__init__.py +0 -0
  149. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/rule/handler.py +0 -0
  150. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/rule/rule.py +0 -0
  151. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/search/__init__.py +0 -0
  152. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/search/async_tasks.py +0 -0
  153. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/search/backend.py +0 -0
  154. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/search/backend_registry.py +0 -0
  155. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/search/backends/__init__.py +0 -0
  156. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/search/backends/dev.py +0 -0
  157. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/search/backends/meilisearch.py +0 -0
  158. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/search/backends/opensearch.py +0 -0
  159. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/search/backends/typesense.py +0 -0
  160. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/search/config.py +0 -0
  161. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/search/indexer.py +0 -0
  162. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/search/registry.py +0 -0
  163. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/search/utils.py +0 -0
  164. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/seeding/__init__.py +0 -0
  165. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/seeding/manager_landscape.py +0 -0
  166. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/utils/__init__.py +0 -0
  167. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/utils/args_to_kwargs.py +0 -0
  168. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/utils/filter_parser.py +0 -0
  169. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/utils/format_string.py +0 -0
  170. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/utils/json_encoder.py +0 -0
  171. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/utils/make_cache_key.py +0 -0
  172. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/utils/none_to_zero.py +0 -0
  173. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/utils/path_mapping.py +0 -0
  174. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/utils/public_api.py +0 -0
  175. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/utils/testing.py +0 -0
  176. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/utils/type_checks.py +0 -0
  177. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/workflow/__init__.py +0 -0
  178. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/workflow/actions.py +0 -0
  179. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/workflow/backend_registry.py +0 -0
  180. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/workflow/backends/__init__.py +0 -0
  181. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/workflow/backends/celery.py +0 -0
  182. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/workflow/backends/local.py +0 -0
  183. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/workflow/backends/n8n.py +0 -0
  184. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/workflow/config.py +0 -0
  185. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/workflow/engine.py +0 -0
  186. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/workflow/event_registry.py +0 -0
  187. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/workflow/events.py +0 -0
  188. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/workflow/models.py +0 -0
  189. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/workflow/signal_bridge.py +0 -0
  190. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/workflow/tasks.py +0 -0
  191. {generalmanager-0.41.6 → generalmanager-0.41.8}/src/general_manager/workflow/telemetry.py +0 -0
  192. {generalmanager-0.41.6 → generalmanager-0.41.8}/tests/test_settings.py +0 -0
  193. {generalmanager-0.41.6 → generalmanager-0.41.8}/tests/test_urls.py +0 -0
  194. {generalmanager-0.41.6 → generalmanager-0.41.8}/tests/testing_asgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GeneralManager
3
- Version: 0.41.6
3
+ Version: 0.41.8
4
4
  Summary: Modular Django-based data management framework with ORM, GraphQL, fine-grained permissions, rule validation, calculations and caching.
5
5
  Author-email: Tim Kleindick <tkleindick@yahoo.de>
6
6
  License: MIT License
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "GeneralManager"
7
- version = "0.41.6"
7
+ version = "0.41.8"
8
8
  description = "Modular Django-based data management framework with ORM, GraphQL, fine-grained permissions, rule validation, calculations and caching."
9
9
  readme = "README.md"
10
10
  authors = [{ name = "Tim Kleindick", email = "tkleindick@yahoo.de" }]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GeneralManager
3
- Version: 0.41.6
3
+ Version: 0.41.8
4
4
  Summary: Modular Django-based data management framework with ORM, GraphQL, fine-grained permissions, rule validation, calculations and caching.
5
5
  Author-email: Tim Kleindick <tkleindick@yahoo.de>
6
6
  License: MIT License
@@ -1,11 +1,71 @@
1
1
  """Grouping bucket implementation for aggregating GeneralManager instances."""
2
2
 
3
3
  from __future__ import annotations
4
- from typing import Any, Generator, Generic, Type
4
+ from typing import Any, Generator, Generic, Type, cast
5
5
  from general_manager.manager.group_manager import GroupManager
6
+ from general_manager.manager.general_manager import GeneralManager
6
7
  from general_manager.bucket.base_bucket import Bucket, GeneralManagerType
7
8
 
8
9
 
10
+ def _freeze_group_value(value: Any) -> Any:
11
+ """Return a hashable identity for values used to distinguish groups."""
12
+ if isinstance(value, GeneralManager):
13
+ return (
14
+ value.__class__,
15
+ tuple(
16
+ sorted(
17
+ (
18
+ key,
19
+ _freeze_group_value(identifier),
20
+ )
21
+ for key, identifier in value.identification.items()
22
+ )
23
+ ),
24
+ )
25
+ if isinstance(value, dict):
26
+ return tuple(
27
+ sorted(
28
+ (
29
+ _freeze_group_value(key),
30
+ _freeze_group_value(item),
31
+ )
32
+ for key, item in value.items()
33
+ )
34
+ )
35
+ if isinstance(value, (list, tuple)):
36
+ return tuple(_freeze_group_value(item) for item in value)
37
+ if isinstance(value, set):
38
+ return frozenset(_freeze_group_value(item) for item in value)
39
+ return value
40
+
41
+
42
+ def _group_filter_kwargs(
43
+ manager_class: Type[GeneralManagerType],
44
+ group_by_value: tuple[tuple[str, Any], ...],
45
+ ) -> dict[str, Any]:
46
+ """Translate grouped manager values into backend-neutral relation lookups."""
47
+ filters: dict[str, Any] = {}
48
+ get_attribute_types = getattr(
49
+ manager_class.Interface,
50
+ "get_attribute_types",
51
+ None,
52
+ )
53
+ attributes = get_attribute_types() if callable(get_attribute_types) else {}
54
+ for key, value in group_by_value:
55
+ attribute_info = cast(dict[str, Any], attributes.get(key, {}))
56
+ filter_key = attribute_info.get("filter_lookup", key)
57
+ if isinstance(value, GeneralManager):
58
+ filters.update(
59
+ {
60
+ f"{filter_key}__{identifier_key}": identifier_value
61
+ for identifier_key, identifier_value in value.identification.items()
62
+ }
63
+ )
64
+ continue
65
+ filters[filter_key] = value
66
+ return filters
67
+
68
+
9
69
  class InvalidGroupByKeyTypeError(TypeError):
10
70
  """Raised when a non-string value is provided as a group-by key."""
11
71
 
@@ -191,15 +251,25 @@ class GroupBucket(Generic[GeneralManagerType]):
191
251
  Returns:
192
252
  list[GroupManager[GeneralManagerType]]: A list of GroupManager objects, one per unique tuple of group-by key values; groups are produced in order sorted by the string representation of their key tuples.
193
253
  """
194
- group_by_values: set[tuple[tuple[str, Any], ...]] = set()
254
+ group_by_values: dict[
255
+ tuple[tuple[str, Any], ...],
256
+ tuple[tuple[str, Any], ...],
257
+ ] = {}
195
258
  for entry in data:
196
- key = tuple((arg, getattr(entry, arg)) for arg in self._group_by_keys)
197
- group_by_values.add(key)
259
+ group_by_value = tuple(
260
+ (arg, getattr(entry, arg)) for arg in self._group_by_keys
261
+ )
262
+ group_identity = tuple(
263
+ (arg, _freeze_group_value(value)) for arg, value in group_by_value
264
+ )
265
+ group_by_values.setdefault(group_identity, group_by_value)
198
266
 
199
267
  groups: list[GroupManager[GeneralManagerType]] = []
200
- for group_by_value in sorted(group_by_values, key=str):
268
+ for group_by_value in sorted(group_by_values.values(), key=str):
201
269
  group_by_dict = {key: value for key, value in group_by_value}
202
- grouped_manager_objects = data.filter(**group_by_dict)
270
+ grouped_manager_objects = data.filter(
271
+ **_group_filter_kwargs(self._manager_class, group_by_value)
272
+ )
203
273
  groups.append(
204
274
  GroupManager(
205
275
  self._manager_class, group_by_dict, grouped_manager_objects
@@ -12,6 +12,35 @@ from general_manager.bucket.base_bucket import (
12
12
  )
13
13
 
14
14
 
15
+ def _freeze_manager_value(value: Any) -> Any:
16
+ """Return a hashable representation for manager-backed group state."""
17
+ if isinstance(value, GeneralManager):
18
+ return tuple(
19
+ sorted(
20
+ (
21
+ key,
22
+ _freeze_manager_value(identifier),
23
+ )
24
+ for key, identifier in value.identification.items()
25
+ )
26
+ )
27
+ if isinstance(value, dict):
28
+ return tuple(
29
+ sorted(
30
+ (
31
+ _freeze_manager_value(key),
32
+ _freeze_manager_value(item),
33
+ )
34
+ for key, item in value.items()
35
+ )
36
+ )
37
+ if isinstance(value, (list, tuple)):
38
+ return tuple(_freeze_manager_value(item) for item in value)
39
+ if isinstance(value, set):
40
+ return frozenset(_freeze_manager_value(item) for item in value)
41
+ return value
42
+
43
+
15
44
  class MissingGroupAttributeError(AttributeError):
16
45
  """Raised when a GroupManager access attempts to use an undefined attribute."""
17
46
 
@@ -61,8 +90,8 @@ class GroupManager(Generic[GeneralManagerType]):
61
90
  return hash(
62
91
  (
63
92
  self._manager_class,
64
- tuple(self._group_by_value.items()),
65
- frozenset(self._data),
93
+ _freeze_manager_value(self._group_by_value),
94
+ frozenset(_freeze_manager_value(entry) for entry in self._data),
66
95
  )
67
96
  )
68
97
 
@@ -80,7 +109,8 @@ class GroupManager(Generic[GeneralManagerType]):
80
109
  isinstance(other, self.__class__)
81
110
  and self._manager_class == other._manager_class
82
111
  and self._group_by_value == other._group_by_value
83
- and frozenset(self._data) == frozenset(other._data)
112
+ and frozenset(_freeze_manager_value(entry) for entry in self._data)
113
+ == frozenset(_freeze_manager_value(entry) for entry in other._data)
84
114
  )
85
115
 
86
116
  def __repr__(self) -> str:
@@ -5,9 +5,10 @@ from __future__ import annotations
5
5
  from abc import ABC, abstractmethod
6
6
  from collections.abc import Mapping
7
7
  from dataclasses import dataclass
8
- from typing import TYPE_CHECKING, Any, Literal, TypeAlias
8
+ from typing import TYPE_CHECKING, Any, Literal, TypeAlias, cast
9
9
 
10
10
  from django.contrib.auth.models import AbstractBaseUser, AnonymousUser
11
+ from django.utils.functional import SimpleLazyObject, empty
11
12
 
12
13
  from general_manager.logging import get_logger
13
14
  from general_manager.permission.audit import (
@@ -74,7 +75,7 @@ class BasePermission(ABC):
74
75
  ) -> None:
75
76
  """Initialise the permission context for a specific manager and user."""
76
77
  self._instance = instance
77
- self._request_user = request_user
78
+ self._request_user = self.get_user_with_id(request_user)
78
79
 
79
80
  @property
80
81
  def instance(self) -> PermissionDataManager | GeneralManager | GeneralManagerMeta:
@@ -446,6 +447,12 @@ class BasePermission(ABC):
446
447
  """
447
448
  from django.contrib.auth import get_user_model
448
449
 
450
+ if isinstance(user, SimpleLazyObject):
451
+ lazy_user = cast(Any, user)
452
+ if lazy_user._wrapped is empty:
453
+ lazy_user._setup()
454
+ user = lazy_user._wrapped
455
+
449
456
  User = get_user_model()
450
457
  if isinstance(user, (AbstractBaseUser, AnonymousUser)):
451
458
  return user
@@ -100,7 +100,15 @@ class CapabilityEvaluationContext:
100
100
  """Operation-scoped cache for GraphQL permission capability evaluation."""
101
101
 
102
102
  def __init__(self, *, user: Any | None = None) -> None:
103
- self.user = user if user is not None else _AnonymousUser()
103
+ from django.contrib.auth.models import AnonymousUser
104
+
105
+ from general_manager.permission.base_permission import BasePermission
106
+
107
+ self.user = (
108
+ BasePermission.get_user_with_id(user)
109
+ if user is not None
110
+ else AnonymousUser()
111
+ )
104
112
  self._cache: dict[tuple[str, str, str, str], bool] = {}
105
113
 
106
114
  def evaluate(self, declaration: GraphQLPermissionCapability, instance: Any) -> bool:
@@ -210,7 +218,7 @@ def get_graphql_capabilities(
210
218
  def get_capability_context(info: Any) -> CapabilityEvaluationContext:
211
219
  """Return the operation-scoped capability context for a GraphQL resolver."""
212
220
  request_context = getattr(info, "context", None)
213
- user = getattr(request_context, "user", _AnonymousUser())
221
+ user = getattr(request_context, "user", None)
214
222
  operation_key = id(getattr(info, "operation", None))
215
223
  storage_name = "_general_manager_graphql_capability_contexts"
216
224
  contexts = getattr(request_context, storage_name, None)
@@ -272,10 +280,3 @@ def _instance_identity(instance: Any) -> str:
272
280
 
273
281
  def _user_identity(user: Any) -> str:
274
282
  return repr(getattr(user, "pk", getattr(user, "id", None)))
275
-
276
-
277
- class _AnonymousUser:
278
- is_authenticated = False
279
- is_superuser = False
280
- pk = None
281
- id = None
File without changes