GeneralManager 0.41.3__tar.gz → 0.41.5__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.3/src/GeneralManager.egg-info → generalmanager-0.41.5}/PKG-INFO +1 -1
  2. {generalmanager-0.41.3 → generalmanager-0.41.5}/pyproject.toml +1 -1
  3. {generalmanager-0.41.3 → generalmanager-0.41.5/src/GeneralManager.egg-info}/PKG-INFO +1 -1
  4. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/bootstrap.py +39 -13
  5. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/bucket/database_bucket.py +73 -0
  6. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/manager/general_manager.py +2 -0
  7. {generalmanager-0.41.3 → generalmanager-0.41.5}/LICENSE +0 -0
  8. {generalmanager-0.41.3 → generalmanager-0.41.5}/README.md +0 -0
  9. {generalmanager-0.41.3 → generalmanager-0.41.5}/setup.cfg +0 -0
  10. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/GeneralManager.egg-info/SOURCES.txt +0 -0
  11. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
  12. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/GeneralManager.egg-info/requires.txt +0 -0
  13. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/GeneralManager.egg-info/top_level.txt +0 -0
  14. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/__init__.py +0 -0
  15. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/_types/__init__.py +0 -0
  16. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/_types/api.py +0 -0
  17. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/_types/bucket.py +0 -0
  18. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/_types/cache.py +0 -0
  19. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/_types/factory.py +0 -0
  20. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/_types/general_manager.py +0 -0
  21. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/_types/interface.py +0 -0
  22. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/_types/manager.py +0 -0
  23. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/_types/measurement.py +0 -0
  24. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/_types/permission.py +0 -0
  25. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/_types/rule.py +0 -0
  26. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/_types/search.py +0 -0
  27. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/_types/utils.py +0 -0
  28. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/api/__init__.py +0 -0
  29. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/api/graphql.py +0 -0
  30. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/api/graphql_errors.py +0 -0
  31. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/api/graphql_mutations.py +0 -0
  32. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/api/graphql_resolvers.py +0 -0
  33. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/api/graphql_search.py +0 -0
  34. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
  35. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/api/graphql_subscriptions.py +0 -0
  36. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/api/graphql_view.py +0 -0
  37. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/api/mutation.py +0 -0
  38. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/api/property.py +0 -0
  39. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/api/registry.py +0 -0
  40. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/api/remote_api.py +0 -0
  41. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/api/remote_invalidation.py +0 -0
  42. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/api/remote_invalidation_client.py +0 -0
  43. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/apps.py +0 -0
  44. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/bucket/__init__.py +0 -0
  45. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/bucket/base_bucket.py +0 -0
  46. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/bucket/calculation_bucket.py +0 -0
  47. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/bucket/group_bucket.py +0 -0
  48. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/bucket/request_bucket.py +0 -0
  49. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/cache/__init__.py +0 -0
  50. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/cache/cache_decorator.py +0 -0
  51. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/cache/cache_tracker.py +0 -0
  52. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/cache/dependency_index.py +0 -0
  53. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/cache/model_dependency_collector.py +0 -0
  54. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/cache/signals.py +0 -0
  55. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/conf.py +0 -0
  56. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/factory/__init__.py +0 -0
  57. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/factory/auto_factory.py +0 -0
  58. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/factory/factories.py +0 -0
  59. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/factory/factory_methods.py +0 -0
  60. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/__init__.py +0 -0
  61. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/base_interface.py +0 -0
  62. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/bundles/__init__.py +0 -0
  63. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/bundles/calculation.py +0 -0
  64. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/bundles/database.py +0 -0
  65. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/bundles/remote_manager.py +0 -0
  66. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/bundles/request.py +0 -0
  67. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/__init__.py +0 -0
  68. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/base.py +0 -0
  69. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/builtin.py +0 -0
  70. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
  71. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
  72. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
  73. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/configuration.py +0 -0
  74. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/core/observability.py +0 -0
  75. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/core/utils.py +0 -0
  76. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/exceptions.py +0 -0
  77. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
  78. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
  79. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
  80. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/factory.py +0 -0
  81. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
  82. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
  83. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/orm/history.py +0 -0
  84. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
  85. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
  86. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/orm/support.py +0 -0
  87. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
  88. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
  89. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +0 -0
  90. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
  91. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
  92. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
  93. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
  94. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
  95. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/registry.py +0 -0
  96. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
  97. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
  98. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
  99. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
  100. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/interfaces/__init__.py +0 -0
  101. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/interfaces/calculation.py +0 -0
  102. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/interfaces/database.py +0 -0
  103. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/interfaces/existing_model.py +0 -0
  104. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/interfaces/read_only.py +0 -0
  105. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
  106. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/interfaces/request.py +0 -0
  107. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/manifests/__init__.py +0 -0
  108. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/manifests/capability_builder.py +0 -0
  109. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
  110. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/manifests/capability_models.py +0 -0
  111. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/orm_interface.py +0 -0
  112. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/requests.py +0 -0
  113. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/utils/__init__.py +0 -0
  114. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
  115. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/utils/errors.py +0 -0
  116. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/interface/utils/models.py +0 -0
  117. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/logging.py +0 -0
  118. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/management/commands/search_index.py +0 -0
  119. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
  120. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/management/commands/shell.py +0 -0
  121. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
  122. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
  123. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/manager/__init__.py +0 -0
  124. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/manager/group_manager.py +0 -0
  125. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/manager/input.py +0 -0
  126. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/manager/meta.py +0 -0
  127. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/measurement/__init__.py +0 -0
  128. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/measurement/measurement.py +0 -0
  129. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/measurement/measurement_field.py +0 -0
  130. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/metrics/__init__.py +0 -0
  131. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/metrics/graphql.py +0 -0
  132. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/migrations/0001_initial.py +0 -0
  133. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
  134. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
  135. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/migrations/__init__.py +0 -0
  136. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/models.py +0 -0
  137. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/permission/__init__.py +0 -0
  138. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/permission/audit.py +0 -0
  139. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/permission/base_permission.py +0 -0
  140. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/permission/graphql_capabilities.py +0 -0
  141. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/permission/manager_based_permission.py +0 -0
  142. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/permission/mutation_permission.py +0 -0
  143. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/permission/permission_checks.py +0 -0
  144. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/permission/permission_data_manager.py +0 -0
  145. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/permission/utils.py +0 -0
  146. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/public_api_registry.py +0 -0
  147. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/py.typed +0 -0
  148. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/rule/__init__.py +0 -0
  149. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/rule/handler.py +0 -0
  150. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/rule/rule.py +0 -0
  151. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/search/__init__.py +0 -0
  152. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/search/async_tasks.py +0 -0
  153. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/search/backend.py +0 -0
  154. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/search/backend_registry.py +0 -0
  155. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/search/backends/__init__.py +0 -0
  156. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/search/backends/dev.py +0 -0
  157. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/search/backends/meilisearch.py +0 -0
  158. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/search/backends/opensearch.py +0 -0
  159. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/search/backends/typesense.py +0 -0
  160. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/search/config.py +0 -0
  161. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/search/indexer.py +0 -0
  162. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/search/registry.py +0 -0
  163. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/search/utils.py +0 -0
  164. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/seeding/__init__.py +0 -0
  165. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/seeding/manager_landscape.py +0 -0
  166. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/utils/__init__.py +0 -0
  167. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/utils/args_to_kwargs.py +0 -0
  168. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/utils/filter_parser.py +0 -0
  169. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/utils/format_string.py +0 -0
  170. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/utils/json_encoder.py +0 -0
  171. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/utils/make_cache_key.py +0 -0
  172. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/utils/none_to_zero.py +0 -0
  173. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/utils/path_mapping.py +0 -0
  174. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/utils/public_api.py +0 -0
  175. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/utils/testing.py +0 -0
  176. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/utils/type_checks.py +0 -0
  177. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/workflow/__init__.py +0 -0
  178. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/workflow/actions.py +0 -0
  179. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/workflow/backend_registry.py +0 -0
  180. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/workflow/backends/__init__.py +0 -0
  181. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/workflow/backends/celery.py +0 -0
  182. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/workflow/backends/local.py +0 -0
  183. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/workflow/backends/n8n.py +0 -0
  184. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/workflow/config.py +0 -0
  185. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/workflow/engine.py +0 -0
  186. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/workflow/event_registry.py +0 -0
  187. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/workflow/events.py +0 -0
  188. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/workflow/models.py +0 -0
  189. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/workflow/signal_bridge.py +0 -0
  190. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/workflow/tasks.py +0 -0
  191. {generalmanager-0.41.3 → generalmanager-0.41.5}/src/general_manager/workflow/telemetry.py +0 -0
  192. {generalmanager-0.41.3 → generalmanager-0.41.5}/tests/test_settings.py +0 -0
  193. {generalmanager-0.41.3 → generalmanager-0.41.5}/tests/test_urls.py +0 -0
  194. {generalmanager-0.41.3 → generalmanager-0.41.5}/tests/testing_asgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GeneralManager
3
- Version: 0.41.3
3
+ Version: 0.41.5
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.3"
7
+ version = "0.41.5"
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.3
3
+ Version: 0.41.5
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
@@ -28,7 +28,7 @@ from general_manager.api.graphql import GraphQL
28
28
  from general_manager.api.remote_api import add_remote_api_urls
29
29
  from general_manager.api.remote_invalidation import ensure_remote_invalidation_route
30
30
  from general_manager.conf import get_setting
31
- from general_manager.api.property import graph_ql_property
31
+ from general_manager.api.property import GraphQLProperty
32
32
  from general_manager.logging import get_logger
33
33
  from general_manager.interface.infrastructure.startup_hooks import (
34
34
  registered_startup_hook_entries,
@@ -272,6 +272,32 @@ def initialize_general_manager_classes(
272
272
  resolver.__annotations__ = {"return": manager_cls}
273
273
  return resolver
274
274
 
275
+ def _iter_manager_relation_fields(
276
+ general_manager_class: Type[_GM],
277
+ ) -> Iterable[tuple[str, Type[_GM]]]:
278
+ seen: set[str] = set()
279
+ input_fields = getattr(general_manager_class.Interface, "input_fields", {})
280
+ for attribute_name, attribute in input_fields.items():
281
+ if isinstance(attribute, Input) and issubclass(attribute.type, _GM):
282
+ seen.add(attribute_name)
283
+ yield attribute_name, attribute.type
284
+
285
+ get_attribute_types = getattr(
286
+ general_manager_class.Interface, "get_attribute_types", None
287
+ )
288
+ if not callable(get_attribute_types):
289
+ return
290
+ try:
291
+ attribute_types = get_attribute_types()
292
+ except NotImplementedError:
293
+ return
294
+ for attribute_name, metadata in attribute_types.items():
295
+ if attribute_name in seen or metadata.get("relation_kind") != "direct":
296
+ continue
297
+ field_type = metadata.get("type")
298
+ if isinstance(field_type, type) and issubclass(field_type, _GM):
299
+ yield attribute_name, field_type
300
+
275
301
  logger.debug(
276
302
  "creating manager attributes",
277
303
  context={"pending_attributes": len(pending_attribute_initialization)},
@@ -294,18 +320,18 @@ def initialize_general_manager_classes(
294
320
  context={"total_classes": len(all_classes)},
295
321
  )
296
322
  for general_manager_class in all_classes:
297
- attributes = getattr(general_manager_class.Interface, "input_fields", {})
298
- for attribute_name, attribute in attributes.items():
299
- if isinstance(attribute, Input) and issubclass(attribute.type, _GM):
300
- connected_manager = attribute.type
301
- resolver = _build_connection_resolver(
302
- attribute_name, general_manager_class
303
- )
304
- setattr(
305
- connected_manager,
306
- f"{general_manager_class.__name__.lower()}_list",
307
- graph_ql_property(resolver),
308
- )
323
+ for attribute_name, connected_manager in _iter_manager_relation_fields(
324
+ general_manager_class
325
+ ):
326
+ resolver = _build_connection_resolver(attribute_name, general_manager_class)
327
+ relation_property = GraphQLProperty(resolver)
328
+ marked_relation_property: Any = relation_property
329
+ marked_relation_property._general_manager_generated_relation = True
330
+ setattr(
331
+ connected_manager,
332
+ f"{general_manager_class.__name__.lower()}_list",
333
+ relation_property,
334
+ )
309
335
  for general_manager_class in all_classes:
310
336
  check_permission_class(general_manager_class)
311
337
 
@@ -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)
@@ -196,6 +196,8 @@ class GeneralManager(metaclass=GeneralManagerMeta):
196
196
  for name, value in self.__class__.__dict__.items():
197
197
  if name == "history":
198
198
  continue
199
+ if getattr(value, "_general_manager_generated_relation", False):
200
+ continue
199
201
  if isinstance(value, (GraphQLProperty, property)):
200
202
  yield name, getattr(self, name)
201
203
 
File without changes