GeneralManager 0.41.7__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.7/src/GeneralManager.egg-info → generalmanager-0.41.8}/PKG-INFO +1 -1
  2. {generalmanager-0.41.7 → generalmanager-0.41.8}/pyproject.toml +1 -1
  3. {generalmanager-0.41.7 → generalmanager-0.41.8/src/GeneralManager.egg-info}/PKG-INFO +1 -1
  4. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/bucket/group_bucket.py +76 -6
  5. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/manager/group_manager.py +33 -3
  6. {generalmanager-0.41.7 → generalmanager-0.41.8}/LICENSE +0 -0
  7. {generalmanager-0.41.7 → generalmanager-0.41.8}/README.md +0 -0
  8. {generalmanager-0.41.7 → generalmanager-0.41.8}/setup.cfg +0 -0
  9. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/GeneralManager.egg-info/SOURCES.txt +0 -0
  10. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
  11. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/GeneralManager.egg-info/requires.txt +0 -0
  12. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/GeneralManager.egg-info/top_level.txt +0 -0
  13. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/__init__.py +0 -0
  14. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/_types/__init__.py +0 -0
  15. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/_types/api.py +0 -0
  16. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/_types/bucket.py +0 -0
  17. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/_types/cache.py +0 -0
  18. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/_types/factory.py +0 -0
  19. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/_types/general_manager.py +0 -0
  20. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/_types/interface.py +0 -0
  21. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/_types/manager.py +0 -0
  22. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/_types/measurement.py +0 -0
  23. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/_types/permission.py +0 -0
  24. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/_types/rule.py +0 -0
  25. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/_types/search.py +0 -0
  26. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/_types/utils.py +0 -0
  27. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/api/__init__.py +0 -0
  28. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/api/graphql.py +0 -0
  29. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/api/graphql_errors.py +0 -0
  30. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/api/graphql_mutations.py +0 -0
  31. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/api/graphql_resolvers.py +0 -0
  32. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/api/graphql_search.py +0 -0
  33. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
  34. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/api/graphql_subscriptions.py +0 -0
  35. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/api/graphql_view.py +0 -0
  36. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/api/mutation.py +0 -0
  37. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/api/property.py +0 -0
  38. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/api/registry.py +0 -0
  39. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/api/remote_api.py +0 -0
  40. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/api/remote_invalidation.py +0 -0
  41. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/api/remote_invalidation_client.py +0 -0
  42. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/apps.py +0 -0
  43. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/bootstrap.py +0 -0
  44. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/bucket/__init__.py +0 -0
  45. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/bucket/base_bucket.py +0 -0
  46. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/bucket/calculation_bucket.py +0 -0
  47. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/bucket/database_bucket.py +0 -0
  48. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/bucket/request_bucket.py +0 -0
  49. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/cache/__init__.py +0 -0
  50. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/cache/cache_decorator.py +0 -0
  51. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/cache/cache_tracker.py +0 -0
  52. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/cache/dependency_index.py +0 -0
  53. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/cache/model_dependency_collector.py +0 -0
  54. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/cache/signals.py +0 -0
  55. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/conf.py +0 -0
  56. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/factory/__init__.py +0 -0
  57. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/factory/auto_factory.py +0 -0
  58. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/factory/factories.py +0 -0
  59. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/factory/factory_methods.py +0 -0
  60. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/__init__.py +0 -0
  61. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/base_interface.py +0 -0
  62. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/bundles/__init__.py +0 -0
  63. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/bundles/calculation.py +0 -0
  64. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/bundles/database.py +0 -0
  65. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/bundles/remote_manager.py +0 -0
  66. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/bundles/request.py +0 -0
  67. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/__init__.py +0 -0
  68. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/base.py +0 -0
  69. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/builtin.py +0 -0
  70. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
  71. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
  72. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
  73. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/configuration.py +0 -0
  74. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/core/observability.py +0 -0
  75. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/core/utils.py +0 -0
  76. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/exceptions.py +0 -0
  77. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
  78. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
  79. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
  80. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/factory.py +0 -0
  81. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
  82. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
  83. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/orm/history.py +0 -0
  84. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
  85. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
  86. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/orm/support.py +0 -0
  87. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
  88. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
  89. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +0 -0
  90. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
  91. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
  92. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
  93. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
  94. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
  95. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/registry.py +0 -0
  96. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
  97. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
  98. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
  99. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
  100. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/interfaces/__init__.py +0 -0
  101. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/interfaces/calculation.py +0 -0
  102. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/interfaces/database.py +0 -0
  103. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/interfaces/existing_model.py +0 -0
  104. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/interfaces/read_only.py +0 -0
  105. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
  106. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/interfaces/request.py +0 -0
  107. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/manifests/__init__.py +0 -0
  108. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/manifests/capability_builder.py +0 -0
  109. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
  110. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/manifests/capability_models.py +0 -0
  111. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/orm_interface.py +0 -0
  112. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/requests.py +0 -0
  113. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/utils/__init__.py +0 -0
  114. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
  115. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/utils/errors.py +0 -0
  116. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/interface/utils/models.py +0 -0
  117. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/logging.py +0 -0
  118. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/management/commands/search_index.py +0 -0
  119. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
  120. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/management/commands/shell.py +0 -0
  121. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
  122. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
  123. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/manager/__init__.py +0 -0
  124. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/manager/general_manager.py +0 -0
  125. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/manager/input.py +0 -0
  126. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/manager/meta.py +0 -0
  127. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/measurement/__init__.py +0 -0
  128. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/measurement/measurement.py +0 -0
  129. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/measurement/measurement_field.py +0 -0
  130. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/metrics/__init__.py +0 -0
  131. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/metrics/graphql.py +0 -0
  132. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/migrations/0001_initial.py +0 -0
  133. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
  134. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
  135. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/migrations/__init__.py +0 -0
  136. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/models.py +0 -0
  137. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/permission/__init__.py +0 -0
  138. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/permission/audit.py +0 -0
  139. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/permission/base_permission.py +0 -0
  140. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/permission/graphql_capabilities.py +0 -0
  141. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/permission/manager_based_permission.py +0 -0
  142. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/permission/mutation_permission.py +0 -0
  143. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/permission/permission_checks.py +0 -0
  144. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/permission/permission_data_manager.py +0 -0
  145. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/permission/utils.py +0 -0
  146. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/public_api_registry.py +0 -0
  147. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/py.typed +0 -0
  148. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/rule/__init__.py +0 -0
  149. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/rule/handler.py +0 -0
  150. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/rule/rule.py +0 -0
  151. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/search/__init__.py +0 -0
  152. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/search/async_tasks.py +0 -0
  153. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/search/backend.py +0 -0
  154. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/search/backend_registry.py +0 -0
  155. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/search/backends/__init__.py +0 -0
  156. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/search/backends/dev.py +0 -0
  157. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/search/backends/meilisearch.py +0 -0
  158. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/search/backends/opensearch.py +0 -0
  159. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/search/backends/typesense.py +0 -0
  160. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/search/config.py +0 -0
  161. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/search/indexer.py +0 -0
  162. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/search/registry.py +0 -0
  163. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/search/utils.py +0 -0
  164. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/seeding/__init__.py +0 -0
  165. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/seeding/manager_landscape.py +0 -0
  166. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/utils/__init__.py +0 -0
  167. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/utils/args_to_kwargs.py +0 -0
  168. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/utils/filter_parser.py +0 -0
  169. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/utils/format_string.py +0 -0
  170. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/utils/json_encoder.py +0 -0
  171. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/utils/make_cache_key.py +0 -0
  172. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/utils/none_to_zero.py +0 -0
  173. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/utils/path_mapping.py +0 -0
  174. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/utils/public_api.py +0 -0
  175. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/utils/testing.py +0 -0
  176. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/utils/type_checks.py +0 -0
  177. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/workflow/__init__.py +0 -0
  178. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/workflow/actions.py +0 -0
  179. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/workflow/backend_registry.py +0 -0
  180. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/workflow/backends/__init__.py +0 -0
  181. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/workflow/backends/celery.py +0 -0
  182. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/workflow/backends/local.py +0 -0
  183. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/workflow/backends/n8n.py +0 -0
  184. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/workflow/config.py +0 -0
  185. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/workflow/engine.py +0 -0
  186. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/workflow/event_registry.py +0 -0
  187. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/workflow/events.py +0 -0
  188. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/workflow/models.py +0 -0
  189. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/workflow/signal_bridge.py +0 -0
  190. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/workflow/tasks.py +0 -0
  191. {generalmanager-0.41.7 → generalmanager-0.41.8}/src/general_manager/workflow/telemetry.py +0 -0
  192. {generalmanager-0.41.7 → generalmanager-0.41.8}/tests/test_settings.py +0 -0
  193. {generalmanager-0.41.7 → generalmanager-0.41.8}/tests/test_urls.py +0 -0
  194. {generalmanager-0.41.7 → 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.7
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.7"
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.7
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:
File without changes