GeneralManager 0.41.2__tar.gz → 0.41.4__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.2/src/GeneralManager.egg-info → generalmanager-0.41.4}/PKG-INFO +1 -1
  2. {generalmanager-0.41.2 → generalmanager-0.41.4}/pyproject.toml +1 -1
  3. {generalmanager-0.41.2 → generalmanager-0.41.4/src/GeneralManager.egg-info}/PKG-INFO +1 -1
  4. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/bootstrap.py +39 -13
  5. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +23 -0
  6. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/manager/general_manager.py +2 -0
  7. {generalmanager-0.41.2 → generalmanager-0.41.4}/LICENSE +0 -0
  8. {generalmanager-0.41.2 → generalmanager-0.41.4}/README.md +0 -0
  9. {generalmanager-0.41.2 → generalmanager-0.41.4}/setup.cfg +0 -0
  10. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/GeneralManager.egg-info/SOURCES.txt +0 -0
  11. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
  12. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/GeneralManager.egg-info/requires.txt +0 -0
  13. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/GeneralManager.egg-info/top_level.txt +0 -0
  14. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/__init__.py +0 -0
  15. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/_types/__init__.py +0 -0
  16. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/_types/api.py +0 -0
  17. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/_types/bucket.py +0 -0
  18. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/_types/cache.py +0 -0
  19. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/_types/factory.py +0 -0
  20. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/_types/general_manager.py +0 -0
  21. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/_types/interface.py +0 -0
  22. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/_types/manager.py +0 -0
  23. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/_types/measurement.py +0 -0
  24. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/_types/permission.py +0 -0
  25. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/_types/rule.py +0 -0
  26. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/_types/search.py +0 -0
  27. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/_types/utils.py +0 -0
  28. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/api/__init__.py +0 -0
  29. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/api/graphql.py +0 -0
  30. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/api/graphql_errors.py +0 -0
  31. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/api/graphql_mutations.py +0 -0
  32. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/api/graphql_resolvers.py +0 -0
  33. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/api/graphql_search.py +0 -0
  34. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
  35. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/api/graphql_subscriptions.py +0 -0
  36. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/api/graphql_view.py +0 -0
  37. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/api/mutation.py +0 -0
  38. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/api/property.py +0 -0
  39. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/api/registry.py +0 -0
  40. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/api/remote_api.py +0 -0
  41. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/api/remote_invalidation.py +0 -0
  42. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/api/remote_invalidation_client.py +0 -0
  43. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/apps.py +0 -0
  44. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/bucket/__init__.py +0 -0
  45. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/bucket/base_bucket.py +0 -0
  46. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/bucket/calculation_bucket.py +0 -0
  47. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/bucket/database_bucket.py +0 -0
  48. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/bucket/group_bucket.py +0 -0
  49. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/bucket/request_bucket.py +0 -0
  50. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/cache/__init__.py +0 -0
  51. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/cache/cache_decorator.py +0 -0
  52. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/cache/cache_tracker.py +0 -0
  53. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/cache/dependency_index.py +0 -0
  54. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/cache/model_dependency_collector.py +0 -0
  55. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/cache/signals.py +0 -0
  56. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/conf.py +0 -0
  57. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/factory/__init__.py +0 -0
  58. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/factory/auto_factory.py +0 -0
  59. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/factory/factories.py +0 -0
  60. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/factory/factory_methods.py +0 -0
  61. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/__init__.py +0 -0
  62. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/base_interface.py +0 -0
  63. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/bundles/__init__.py +0 -0
  64. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/bundles/calculation.py +0 -0
  65. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/bundles/database.py +0 -0
  66. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/bundles/remote_manager.py +0 -0
  67. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/bundles/request.py +0 -0
  68. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/__init__.py +0 -0
  69. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/base.py +0 -0
  70. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/builtin.py +0 -0
  71. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
  72. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
  73. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
  74. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/configuration.py +0 -0
  75. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/core/observability.py +0 -0
  76. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/core/utils.py +0 -0
  77. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/exceptions.py +0 -0
  78. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
  79. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
  80. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
  81. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/factory.py +0 -0
  82. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
  83. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
  84. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/orm/history.py +0 -0
  85. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
  86. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
  87. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/orm/support.py +0 -0
  88. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
  89. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
  90. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
  91. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
  92. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
  93. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
  94. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
  95. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/registry.py +0 -0
  96. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
  97. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
  98. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
  99. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
  100. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/interfaces/__init__.py +0 -0
  101. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/interfaces/calculation.py +0 -0
  102. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/interfaces/database.py +0 -0
  103. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/interfaces/existing_model.py +0 -0
  104. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/interfaces/read_only.py +0 -0
  105. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
  106. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/interfaces/request.py +0 -0
  107. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/manifests/__init__.py +0 -0
  108. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/manifests/capability_builder.py +0 -0
  109. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
  110. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/manifests/capability_models.py +0 -0
  111. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/orm_interface.py +0 -0
  112. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/requests.py +0 -0
  113. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/utils/__init__.py +0 -0
  114. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
  115. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/utils/errors.py +0 -0
  116. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/interface/utils/models.py +0 -0
  117. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/logging.py +0 -0
  118. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/management/commands/search_index.py +0 -0
  119. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
  120. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/management/commands/shell.py +0 -0
  121. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
  122. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
  123. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/manager/__init__.py +0 -0
  124. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/manager/group_manager.py +0 -0
  125. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/manager/input.py +0 -0
  126. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/manager/meta.py +0 -0
  127. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/measurement/__init__.py +0 -0
  128. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/measurement/measurement.py +0 -0
  129. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/measurement/measurement_field.py +0 -0
  130. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/metrics/__init__.py +0 -0
  131. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/metrics/graphql.py +0 -0
  132. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/migrations/0001_initial.py +0 -0
  133. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
  134. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
  135. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/migrations/__init__.py +0 -0
  136. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/models.py +0 -0
  137. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/permission/__init__.py +0 -0
  138. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/permission/audit.py +0 -0
  139. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/permission/base_permission.py +0 -0
  140. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/permission/graphql_capabilities.py +0 -0
  141. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/permission/manager_based_permission.py +0 -0
  142. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/permission/mutation_permission.py +0 -0
  143. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/permission/permission_checks.py +0 -0
  144. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/permission/permission_data_manager.py +0 -0
  145. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/permission/utils.py +0 -0
  146. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/public_api_registry.py +0 -0
  147. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/py.typed +0 -0
  148. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/rule/__init__.py +0 -0
  149. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/rule/handler.py +0 -0
  150. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/rule/rule.py +0 -0
  151. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/search/__init__.py +0 -0
  152. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/search/async_tasks.py +0 -0
  153. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/search/backend.py +0 -0
  154. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/search/backend_registry.py +0 -0
  155. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/search/backends/__init__.py +0 -0
  156. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/search/backends/dev.py +0 -0
  157. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/search/backends/meilisearch.py +0 -0
  158. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/search/backends/opensearch.py +0 -0
  159. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/search/backends/typesense.py +0 -0
  160. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/search/config.py +0 -0
  161. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/search/indexer.py +0 -0
  162. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/search/registry.py +0 -0
  163. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/search/utils.py +0 -0
  164. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/seeding/__init__.py +0 -0
  165. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/seeding/manager_landscape.py +0 -0
  166. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/utils/__init__.py +0 -0
  167. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/utils/args_to_kwargs.py +0 -0
  168. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/utils/filter_parser.py +0 -0
  169. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/utils/format_string.py +0 -0
  170. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/utils/json_encoder.py +0 -0
  171. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/utils/make_cache_key.py +0 -0
  172. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/utils/none_to_zero.py +0 -0
  173. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/utils/path_mapping.py +0 -0
  174. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/utils/public_api.py +0 -0
  175. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/utils/testing.py +0 -0
  176. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/utils/type_checks.py +0 -0
  177. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/workflow/__init__.py +0 -0
  178. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/workflow/actions.py +0 -0
  179. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/workflow/backend_registry.py +0 -0
  180. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/workflow/backends/__init__.py +0 -0
  181. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/workflow/backends/celery.py +0 -0
  182. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/workflow/backends/local.py +0 -0
  183. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/workflow/backends/n8n.py +0 -0
  184. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/workflow/config.py +0 -0
  185. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/workflow/engine.py +0 -0
  186. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/workflow/event_registry.py +0 -0
  187. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/workflow/events.py +0 -0
  188. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/workflow/models.py +0 -0
  189. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/workflow/signal_bridge.py +0 -0
  190. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/workflow/tasks.py +0 -0
  191. {generalmanager-0.41.2 → generalmanager-0.41.4}/src/general_manager/workflow/telemetry.py +0 -0
  192. {generalmanager-0.41.2 → generalmanager-0.41.4}/tests/test_settings.py +0 -0
  193. {generalmanager-0.41.2 → generalmanager-0.41.4}/tests/test_urls.py +0 -0
  194. {generalmanager-0.41.2 → generalmanager-0.41.4}/tests/testing_asgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GeneralManager
3
- Version: 0.41.2
3
+ Version: 0.41.4
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.2"
7
+ version = "0.41.4"
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.2
3
+ Version: 0.41.4
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
 
@@ -36,6 +36,23 @@ class FieldDescriptor:
36
36
  accessor: DescriptorAccessor
37
37
 
38
38
 
39
+ class MissingRelatedFieldsError(RuntimeError):
40
+ """Raised when a GeneralManager collection relation cannot be scoped."""
41
+
42
+ def __init__(
43
+ self,
44
+ *,
45
+ accessor_name: str,
46
+ related_model: type[models.Model],
47
+ source_model: type[models.Model],
48
+ ) -> None:
49
+ super().__init__(
50
+ "Unable to resolve related fields for collection relation "
51
+ f"'{accessor_name}' from {source_model.__name__} to "
52
+ f"{related_model.__name__}."
53
+ )
54
+
55
+
39
56
  TRANSLATION: dict[type[models.Field], type] = {
40
57
  models.fields.BigAutoField: int,
41
58
  models.AutoField: int,
@@ -691,6 +708,12 @@ def _general_manager_many_accessor(
691
708
  """
692
709
  filter_kwargs = {field.name: self.pk for field in related_fields}
693
710
  manager_cls = cast(Any, general_manager_class)
711
+ if not filter_kwargs:
712
+ raise MissingRelatedFieldsError(
713
+ accessor_name=accessor_name,
714
+ related_model=related_model,
715
+ source_model=source_model,
716
+ )
694
717
  return manager_cls.filter(**filter_kwargs)
695
718
 
696
719
  return getter
@@ -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