GeneralManager 0.41.4__tar.gz → 0.41.6__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.4/src/GeneralManager.egg-info → generalmanager-0.41.6}/PKG-INFO +1 -1
  2. {generalmanager-0.41.4 → generalmanager-0.41.6}/pyproject.toml +1 -1
  3. {generalmanager-0.41.4 → generalmanager-0.41.6/src/GeneralManager.egg-info}/PKG-INFO +1 -1
  4. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/bucket/database_bucket.py +73 -0
  5. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +50 -2
  6. {generalmanager-0.41.4 → generalmanager-0.41.6}/LICENSE +0 -0
  7. {generalmanager-0.41.4 → generalmanager-0.41.6}/README.md +0 -0
  8. {generalmanager-0.41.4 → generalmanager-0.41.6}/setup.cfg +0 -0
  9. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/GeneralManager.egg-info/SOURCES.txt +0 -0
  10. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
  11. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/GeneralManager.egg-info/requires.txt +0 -0
  12. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/GeneralManager.egg-info/top_level.txt +0 -0
  13. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/__init__.py +0 -0
  14. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/_types/__init__.py +0 -0
  15. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/_types/api.py +0 -0
  16. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/_types/bucket.py +0 -0
  17. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/_types/cache.py +0 -0
  18. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/_types/factory.py +0 -0
  19. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/_types/general_manager.py +0 -0
  20. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/_types/interface.py +0 -0
  21. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/_types/manager.py +0 -0
  22. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/_types/measurement.py +0 -0
  23. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/_types/permission.py +0 -0
  24. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/_types/rule.py +0 -0
  25. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/_types/search.py +0 -0
  26. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/_types/utils.py +0 -0
  27. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/api/__init__.py +0 -0
  28. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/api/graphql.py +0 -0
  29. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/api/graphql_errors.py +0 -0
  30. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/api/graphql_mutations.py +0 -0
  31. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/api/graphql_resolvers.py +0 -0
  32. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/api/graphql_search.py +0 -0
  33. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
  34. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/api/graphql_subscriptions.py +0 -0
  35. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/api/graphql_view.py +0 -0
  36. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/api/mutation.py +0 -0
  37. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/api/property.py +0 -0
  38. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/api/registry.py +0 -0
  39. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/api/remote_api.py +0 -0
  40. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/api/remote_invalidation.py +0 -0
  41. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/api/remote_invalidation_client.py +0 -0
  42. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/apps.py +0 -0
  43. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/bootstrap.py +0 -0
  44. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/bucket/__init__.py +0 -0
  45. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/bucket/base_bucket.py +0 -0
  46. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/bucket/calculation_bucket.py +0 -0
  47. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/bucket/group_bucket.py +0 -0
  48. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/bucket/request_bucket.py +0 -0
  49. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/cache/__init__.py +0 -0
  50. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/cache/cache_decorator.py +0 -0
  51. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/cache/cache_tracker.py +0 -0
  52. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/cache/dependency_index.py +0 -0
  53. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/cache/model_dependency_collector.py +0 -0
  54. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/cache/signals.py +0 -0
  55. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/conf.py +0 -0
  56. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/factory/__init__.py +0 -0
  57. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/factory/auto_factory.py +0 -0
  58. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/factory/factories.py +0 -0
  59. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/factory/factory_methods.py +0 -0
  60. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/__init__.py +0 -0
  61. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/base_interface.py +0 -0
  62. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/bundles/__init__.py +0 -0
  63. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/bundles/calculation.py +0 -0
  64. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/bundles/database.py +0 -0
  65. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/bundles/remote_manager.py +0 -0
  66. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/bundles/request.py +0 -0
  67. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/__init__.py +0 -0
  68. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/base.py +0 -0
  69. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/builtin.py +0 -0
  70. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
  71. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
  72. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
  73. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/configuration.py +0 -0
  74. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/core/observability.py +0 -0
  75. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/core/utils.py +0 -0
  76. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/exceptions.py +0 -0
  77. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
  78. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
  79. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
  80. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/factory.py +0 -0
  81. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
  82. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
  83. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/orm/history.py +0 -0
  84. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
  85. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
  86. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/orm/support.py +0 -0
  87. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
  88. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
  89. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
  90. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
  91. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
  92. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
  93. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
  94. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/registry.py +0 -0
  95. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
  96. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
  97. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
  98. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
  99. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/interfaces/__init__.py +0 -0
  100. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/interfaces/calculation.py +0 -0
  101. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/interfaces/database.py +0 -0
  102. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/interfaces/existing_model.py +0 -0
  103. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/interfaces/read_only.py +0 -0
  104. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
  105. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/interfaces/request.py +0 -0
  106. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/manifests/__init__.py +0 -0
  107. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/manifests/capability_builder.py +0 -0
  108. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
  109. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/manifests/capability_models.py +0 -0
  110. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/orm_interface.py +0 -0
  111. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/requests.py +0 -0
  112. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/utils/__init__.py +0 -0
  113. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
  114. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/utils/errors.py +0 -0
  115. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/interface/utils/models.py +0 -0
  116. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/logging.py +0 -0
  117. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/management/commands/search_index.py +0 -0
  118. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
  119. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/management/commands/shell.py +0 -0
  120. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
  121. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
  122. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/manager/__init__.py +0 -0
  123. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/manager/general_manager.py +0 -0
  124. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/manager/group_manager.py +0 -0
  125. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/manager/input.py +0 -0
  126. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/manager/meta.py +0 -0
  127. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/measurement/__init__.py +0 -0
  128. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/measurement/measurement.py +0 -0
  129. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/measurement/measurement_field.py +0 -0
  130. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/metrics/__init__.py +0 -0
  131. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/metrics/graphql.py +0 -0
  132. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/migrations/0001_initial.py +0 -0
  133. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
  134. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
  135. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/migrations/__init__.py +0 -0
  136. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/models.py +0 -0
  137. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/permission/__init__.py +0 -0
  138. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/permission/audit.py +0 -0
  139. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/permission/base_permission.py +0 -0
  140. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/permission/graphql_capabilities.py +0 -0
  141. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/permission/manager_based_permission.py +0 -0
  142. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/permission/mutation_permission.py +0 -0
  143. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/permission/permission_checks.py +0 -0
  144. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/permission/permission_data_manager.py +0 -0
  145. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/permission/utils.py +0 -0
  146. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/public_api_registry.py +0 -0
  147. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/py.typed +0 -0
  148. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/rule/__init__.py +0 -0
  149. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/rule/handler.py +0 -0
  150. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/rule/rule.py +0 -0
  151. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/search/__init__.py +0 -0
  152. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/search/async_tasks.py +0 -0
  153. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/search/backend.py +0 -0
  154. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/search/backend_registry.py +0 -0
  155. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/search/backends/__init__.py +0 -0
  156. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/search/backends/dev.py +0 -0
  157. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/search/backends/meilisearch.py +0 -0
  158. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/search/backends/opensearch.py +0 -0
  159. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/search/backends/typesense.py +0 -0
  160. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/search/config.py +0 -0
  161. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/search/indexer.py +0 -0
  162. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/search/registry.py +0 -0
  163. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/search/utils.py +0 -0
  164. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/seeding/__init__.py +0 -0
  165. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/seeding/manager_landscape.py +0 -0
  166. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/utils/__init__.py +0 -0
  167. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/utils/args_to_kwargs.py +0 -0
  168. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/utils/filter_parser.py +0 -0
  169. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/utils/format_string.py +0 -0
  170. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/utils/json_encoder.py +0 -0
  171. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/utils/make_cache_key.py +0 -0
  172. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/utils/none_to_zero.py +0 -0
  173. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/utils/path_mapping.py +0 -0
  174. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/utils/public_api.py +0 -0
  175. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/utils/testing.py +0 -0
  176. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/utils/type_checks.py +0 -0
  177. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/workflow/__init__.py +0 -0
  178. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/workflow/actions.py +0 -0
  179. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/workflow/backend_registry.py +0 -0
  180. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/workflow/backends/__init__.py +0 -0
  181. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/workflow/backends/celery.py +0 -0
  182. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/workflow/backends/local.py +0 -0
  183. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/workflow/backends/n8n.py +0 -0
  184. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/workflow/config.py +0 -0
  185. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/workflow/engine.py +0 -0
  186. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/workflow/event_registry.py +0 -0
  187. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/workflow/events.py +0 -0
  188. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/workflow/models.py +0 -0
  189. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/workflow/signal_bridge.py +0 -0
  190. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/workflow/tasks.py +0 -0
  191. {generalmanager-0.41.4 → generalmanager-0.41.6}/src/general_manager/workflow/telemetry.py +0 -0
  192. {generalmanager-0.41.4 → generalmanager-0.41.6}/tests/test_settings.py +0 -0
  193. {generalmanager-0.41.4 → generalmanager-0.41.6}/tests/test_urls.py +0 -0
  194. {generalmanager-0.41.4 → generalmanager-0.41.6}/tests/testing_asgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GeneralManager
3
- Version: 0.41.4
3
+ Version: 0.41.6
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.4"
7
+ version = "0.41.6"
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.4
3
+ Version: 0.41.6
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
@@ -140,6 +140,57 @@ class NonSortablePropertyError(ValueError):
140
140
  )
141
141
 
142
142
 
143
+ class DuplicateDatabaseBucketSnapshotError(ValueError):
144
+ """Raised when a database bucket snapshot contains duplicate primary keys."""
145
+
146
+ def __init__(self) -> None:
147
+ super().__init__(
148
+ "DatabaseBucket snapshots cannot contain duplicate primary keys."
149
+ )
150
+
151
+
152
+ def _ensure_unique_primary_keys(primary_keys: tuple[Any, ...]) -> None:
153
+ if len(primary_keys) != len(set(primary_keys)):
154
+ raise DuplicateDatabaseBucketSnapshotError()
155
+
156
+
157
+ def _restore_database_bucket_from_primary_keys(
158
+ model: type[models.Model],
159
+ manager_class: Type[GeneralManagerType],
160
+ primary_keys: tuple[Any, ...],
161
+ filter_definitions: dict[str, list[Any]],
162
+ exclude_definitions: dict[str, list[Any]],
163
+ database_alias: str | None,
164
+ search_date: datetime | date | None,
165
+ sort_keys: tuple[str, ...] | None,
166
+ sort_reverse: bool,
167
+ ) -> DatabaseBucket[GeneralManagerType]:
168
+ _ensure_unique_primary_keys(primary_keys)
169
+ manager = model._default_manager
170
+ if database_alias is not None:
171
+ manager = manager.db_manager(database_alias)
172
+ if not primary_keys:
173
+ queryset = manager.none()
174
+ else:
175
+ preserved_order = models.Case(
176
+ *(
177
+ models.When(pk=primary_key, then=position)
178
+ for position, primary_key in enumerate(primary_keys)
179
+ ),
180
+ output_field=models.IntegerField(),
181
+ )
182
+ queryset = manager.filter(pk__in=primary_keys).order_by(preserved_order)
183
+ return DatabaseBucket(
184
+ queryset,
185
+ manager_class,
186
+ filter_definitions,
187
+ exclude_definitions,
188
+ search_date=search_date,
189
+ sort_keys=sort_keys,
190
+ sort_reverse=sort_reverse,
191
+ )
192
+
193
+
143
194
  class DatabaseBucket(Bucket[GeneralManagerType]):
144
195
  """Bucket implementation backed by Django ORM querysets."""
145
196
 
@@ -175,6 +226,28 @@ class DatabaseBucket(Bucket[GeneralManagerType]):
175
226
  self._sort_keys = sort_keys
176
227
  self._sort_reverse = sort_reverse
177
228
 
229
+ def __reduce__(self) -> str | tuple[Any, ...]:
230
+ """
231
+ Preserve a result snapshot without serializing the queryset object.
232
+ """
233
+ self._track_effective_dependencies()
234
+ primary_keys = tuple(self._data.values_list("pk", flat=True))
235
+ _ensure_unique_primary_keys(primary_keys)
236
+ return (
237
+ _restore_database_bucket_from_primary_keys,
238
+ (
239
+ self._data.model,
240
+ self._manager_class,
241
+ primary_keys,
242
+ self.filters,
243
+ self.excludes,
244
+ self._data.db,
245
+ self._search_date,
246
+ self._sort_keys,
247
+ self._sort_reverse,
248
+ ),
249
+ )
250
+
178
251
  def _build_manager(self, pk: Any) -> GeneralManagerType:
179
252
  if self._search_date is None:
180
253
  return self._manager_class(pk)
@@ -270,10 +270,27 @@ class _FieldDescriptorBuilder:
270
270
  Iterates the model's many-to-many and reverse (one-to-many) relations and registers a collection descriptor for each, deriving descriptor names from each relation's base name and accessor name.
271
271
  """
272
272
  for m2m_field in _iter_many_to_many_fields(self.model):
273
+ if getattr(m2m_field, "auto_created", False) and not getattr(
274
+ m2m_field, "concrete", False
275
+ ):
276
+ relation_field_name = getattr(
277
+ getattr(m2m_field, "field", None),
278
+ "name",
279
+ None,
280
+ )
281
+ relation_filter_name = None
282
+ else:
283
+ relation_field_name = None
284
+ relation_filter_name = _many_to_many_relation_filter_name(
285
+ m2m_field,
286
+ self.model,
287
+ )
273
288
  self._register_collection_field(
274
289
  field=m2m_field,
275
290
  base_name=m2m_field.name,
276
291
  accessor_name=m2m_field.name,
292
+ relation_field_name=relation_field_name,
293
+ relation_filter_name=relation_filter_name,
277
294
  )
278
295
  for reverse_relation in _iter_reverse_relations(self.model):
279
296
  accessor_name = (
@@ -305,6 +322,7 @@ class _FieldDescriptorBuilder:
305
322
  base_name: str,
306
323
  accessor_name: str,
307
324
  relation_field_name: str | None = None,
325
+ relation_filter_name: str | None = None,
308
326
  ) -> None:
309
327
  """
310
328
  Register a collection relation as a FieldDescriptor under the generated "<base>_list" attribute.
@@ -341,6 +359,7 @@ class _FieldDescriptorBuilder:
341
359
  general_manager_class=general_manager_class,
342
360
  source_model=self.model,
343
361
  relation_field_name=relation_field_name,
362
+ relation_filter_name=relation_filter_name,
344
363
  )
345
364
  relation_type = cast(type, general_manager_class)
346
365
  else:
@@ -675,6 +694,7 @@ def _general_manager_many_accessor(
675
694
  general_manager_class: type,
676
695
  source_model: type[models.Model],
677
696
  relation_field_name: str | None = None,
697
+ relation_filter_name: str | None = None,
678
698
  ) -> DescriptorAccessor:
679
699
  """
680
700
  Create an accessor that returns a manager filtered to objects related to the given source model instance.
@@ -688,7 +708,9 @@ def _general_manager_many_accessor(
688
708
  Returns:
689
709
  DescriptorAccessor: A callable that accepts an OrmInterfaceBase instance and returns the manager/QuerySet of related_model instances whose foreign-key fields pointing to `source_model` match the instance's primary key.
690
710
  """
691
- if relation_field_name is not None:
711
+ if relation_filter_name is not None:
712
+ related_fields: list[models.Field] = []
713
+ elif relation_field_name is not None:
692
714
  related_fields = [
693
715
  cast(models.Field, related_model._meta.get_field(relation_field_name))
694
716
  ]
@@ -706,7 +728,10 @@ def _general_manager_many_accessor(
706
728
  Returns:
707
729
  A manager or queryset containing related model instances whose foreign-key fields equal this interface instance's primary key.
708
730
  """
709
- filter_kwargs = {field.name: self.pk for field in related_fields}
731
+ if relation_filter_name is not None:
732
+ filter_kwargs = {relation_filter_name: self.pk}
733
+ else:
734
+ filter_kwargs = {field.name: self.pk for field in related_fields}
710
735
  manager_cls = cast(Any, general_manager_class)
711
736
  if not filter_kwargs:
712
737
  raise MissingRelatedFieldsError(
@@ -719,6 +744,29 @@ def _general_manager_many_accessor(
719
744
  return getter
720
745
 
721
746
 
747
+ def _many_to_many_relation_filter_name(
748
+ field: models.Field,
749
+ source_model: type[models.Model],
750
+ ) -> str | None:
751
+ """Return the target-side query lookup for a direct many-to-many field."""
752
+ remote_field = getattr(field, "remote_field", None)
753
+ related_query_name = getattr(remote_field, "related_query_name", None)
754
+ if callable(related_query_name):
755
+ related_query_name = related_query_name()
756
+ if isinstance(related_query_name, str) and related_query_name:
757
+ return related_query_name
758
+ related_name = getattr(remote_field, "related_name", None)
759
+ if related_name == "+":
760
+ return None
761
+ if isinstance(related_name, str) and related_name:
762
+ return related_name
763
+ source_meta = getattr(source_model, "_meta", None)
764
+ source_model_name = getattr(source_meta, "model_name", None)
765
+ if isinstance(source_model_name, str) and source_model_name:
766
+ return source_model_name
767
+ return None
768
+
769
+
722
770
  def _direct_many_accessor(
723
771
  resolver: Callable[["OrmInterfaceBase", str, str], Any],
724
772
  field_call: str,
File without changes