GeneralManager 0.41.1__tar.gz → 0.41.3__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.1/src/GeneralManager.egg-info → generalmanager-0.41.3}/PKG-INFO +1 -1
  2. {generalmanager-0.41.1 → generalmanager-0.41.3}/pyproject.toml +1 -1
  3. {generalmanager-0.41.1 → generalmanager-0.41.3/src/GeneralManager.egg-info}/PKG-INFO +1 -1
  4. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +84 -2
  5. {generalmanager-0.41.1 → generalmanager-0.41.3}/LICENSE +0 -0
  6. {generalmanager-0.41.1 → generalmanager-0.41.3}/README.md +0 -0
  7. {generalmanager-0.41.1 → generalmanager-0.41.3}/setup.cfg +0 -0
  8. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/GeneralManager.egg-info/SOURCES.txt +0 -0
  9. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
  10. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/GeneralManager.egg-info/requires.txt +0 -0
  11. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/GeneralManager.egg-info/top_level.txt +0 -0
  12. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/__init__.py +0 -0
  13. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/_types/__init__.py +0 -0
  14. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/_types/api.py +0 -0
  15. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/_types/bucket.py +0 -0
  16. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/_types/cache.py +0 -0
  17. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/_types/factory.py +0 -0
  18. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/_types/general_manager.py +0 -0
  19. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/_types/interface.py +0 -0
  20. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/_types/manager.py +0 -0
  21. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/_types/measurement.py +0 -0
  22. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/_types/permission.py +0 -0
  23. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/_types/rule.py +0 -0
  24. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/_types/search.py +0 -0
  25. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/_types/utils.py +0 -0
  26. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/api/__init__.py +0 -0
  27. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/api/graphql.py +0 -0
  28. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/api/graphql_errors.py +0 -0
  29. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/api/graphql_mutations.py +0 -0
  30. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/api/graphql_resolvers.py +0 -0
  31. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/api/graphql_search.py +0 -0
  32. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
  33. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/api/graphql_subscriptions.py +0 -0
  34. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/api/graphql_view.py +0 -0
  35. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/api/mutation.py +0 -0
  36. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/api/property.py +0 -0
  37. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/api/registry.py +0 -0
  38. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/api/remote_api.py +0 -0
  39. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/api/remote_invalidation.py +0 -0
  40. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/api/remote_invalidation_client.py +0 -0
  41. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/apps.py +0 -0
  42. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/bootstrap.py +0 -0
  43. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/bucket/__init__.py +0 -0
  44. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/bucket/base_bucket.py +0 -0
  45. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/bucket/calculation_bucket.py +0 -0
  46. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/bucket/database_bucket.py +0 -0
  47. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/bucket/group_bucket.py +0 -0
  48. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/bucket/request_bucket.py +0 -0
  49. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/cache/__init__.py +0 -0
  50. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/cache/cache_decorator.py +0 -0
  51. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/cache/cache_tracker.py +0 -0
  52. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/cache/dependency_index.py +0 -0
  53. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/cache/model_dependency_collector.py +0 -0
  54. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/cache/signals.py +0 -0
  55. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/conf.py +0 -0
  56. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/factory/__init__.py +0 -0
  57. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/factory/auto_factory.py +0 -0
  58. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/factory/factories.py +0 -0
  59. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/factory/factory_methods.py +0 -0
  60. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/__init__.py +0 -0
  61. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/base_interface.py +0 -0
  62. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/bundles/__init__.py +0 -0
  63. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/bundles/calculation.py +0 -0
  64. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/bundles/database.py +0 -0
  65. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/bundles/remote_manager.py +0 -0
  66. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/bundles/request.py +0 -0
  67. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/__init__.py +0 -0
  68. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/base.py +0 -0
  69. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/builtin.py +0 -0
  70. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
  71. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
  72. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
  73. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/configuration.py +0 -0
  74. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/core/observability.py +0 -0
  75. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/core/utils.py +0 -0
  76. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/exceptions.py +0 -0
  77. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
  78. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
  79. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
  80. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/factory.py +0 -0
  81. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
  82. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
  83. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/orm/history.py +0 -0
  84. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
  85. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
  86. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/orm/support.py +0 -0
  87. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
  88. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
  89. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
  90. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
  91. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
  92. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
  93. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
  94. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/registry.py +0 -0
  95. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
  96. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
  97. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
  98. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
  99. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/interfaces/__init__.py +0 -0
  100. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/interfaces/calculation.py +0 -0
  101. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/interfaces/database.py +0 -0
  102. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/interfaces/existing_model.py +0 -0
  103. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/interfaces/read_only.py +0 -0
  104. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
  105. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/interfaces/request.py +0 -0
  106. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/manifests/__init__.py +0 -0
  107. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/manifests/capability_builder.py +0 -0
  108. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
  109. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/manifests/capability_models.py +0 -0
  110. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/orm_interface.py +0 -0
  111. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/requests.py +0 -0
  112. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/utils/__init__.py +0 -0
  113. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
  114. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/utils/errors.py +0 -0
  115. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/interface/utils/models.py +0 -0
  116. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/logging.py +0 -0
  117. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/management/commands/search_index.py +0 -0
  118. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
  119. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/management/commands/shell.py +0 -0
  120. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
  121. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
  122. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/manager/__init__.py +0 -0
  123. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/manager/general_manager.py +0 -0
  124. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/manager/group_manager.py +0 -0
  125. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/manager/input.py +0 -0
  126. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/manager/meta.py +0 -0
  127. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/measurement/__init__.py +0 -0
  128. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/measurement/measurement.py +0 -0
  129. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/measurement/measurement_field.py +0 -0
  130. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/metrics/__init__.py +0 -0
  131. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/metrics/graphql.py +0 -0
  132. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/migrations/0001_initial.py +0 -0
  133. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
  134. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
  135. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/migrations/__init__.py +0 -0
  136. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/models.py +0 -0
  137. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/permission/__init__.py +0 -0
  138. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/permission/audit.py +0 -0
  139. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/permission/base_permission.py +0 -0
  140. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/permission/graphql_capabilities.py +0 -0
  141. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/permission/manager_based_permission.py +0 -0
  142. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/permission/mutation_permission.py +0 -0
  143. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/permission/permission_checks.py +0 -0
  144. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/permission/permission_data_manager.py +0 -0
  145. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/permission/utils.py +0 -0
  146. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/public_api_registry.py +0 -0
  147. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/py.typed +0 -0
  148. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/rule/__init__.py +0 -0
  149. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/rule/handler.py +0 -0
  150. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/rule/rule.py +0 -0
  151. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/search/__init__.py +0 -0
  152. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/search/async_tasks.py +0 -0
  153. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/search/backend.py +0 -0
  154. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/search/backend_registry.py +0 -0
  155. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/search/backends/__init__.py +0 -0
  156. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/search/backends/dev.py +0 -0
  157. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/search/backends/meilisearch.py +0 -0
  158. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/search/backends/opensearch.py +0 -0
  159. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/search/backends/typesense.py +0 -0
  160. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/search/config.py +0 -0
  161. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/search/indexer.py +0 -0
  162. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/search/registry.py +0 -0
  163. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/search/utils.py +0 -0
  164. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/seeding/__init__.py +0 -0
  165. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/seeding/manager_landscape.py +0 -0
  166. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/utils/__init__.py +0 -0
  167. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/utils/args_to_kwargs.py +0 -0
  168. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/utils/filter_parser.py +0 -0
  169. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/utils/format_string.py +0 -0
  170. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/utils/json_encoder.py +0 -0
  171. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/utils/make_cache_key.py +0 -0
  172. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/utils/none_to_zero.py +0 -0
  173. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/utils/path_mapping.py +0 -0
  174. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/utils/public_api.py +0 -0
  175. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/utils/testing.py +0 -0
  176. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/utils/type_checks.py +0 -0
  177. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/workflow/__init__.py +0 -0
  178. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/workflow/actions.py +0 -0
  179. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/workflow/backend_registry.py +0 -0
  180. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/workflow/backends/__init__.py +0 -0
  181. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/workflow/backends/celery.py +0 -0
  182. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/workflow/backends/local.py +0 -0
  183. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/workflow/backends/n8n.py +0 -0
  184. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/workflow/config.py +0 -0
  185. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/workflow/engine.py +0 -0
  186. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/workflow/event_registry.py +0 -0
  187. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/workflow/events.py +0 -0
  188. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/workflow/models.py +0 -0
  189. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/workflow/signal_bridge.py +0 -0
  190. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/workflow/tasks.py +0 -0
  191. {generalmanager-0.41.1 → generalmanager-0.41.3}/src/general_manager/workflow/telemetry.py +0 -0
  192. {generalmanager-0.41.1 → generalmanager-0.41.3}/tests/test_settings.py +0 -0
  193. {generalmanager-0.41.1 → generalmanager-0.41.3}/tests/test_urls.py +0 -0
  194. {generalmanager-0.41.1 → generalmanager-0.41.3}/tests/testing_asgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GeneralManager
3
- Version: 0.41.1
3
+ Version: 0.41.3
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.1"
7
+ version = "0.41.3"
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.1
3
+ Version: 0.41.3
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
@@ -11,6 +11,7 @@ from uuid import UUID
11
11
 
12
12
  from django.apps import apps
13
13
  from django.contrib.contenttypes.fields import GenericForeignKey
14
+ from django.core.exceptions import ObjectDoesNotExist
14
15
  from django.db import models
15
16
 
16
17
  from general_manager.interface.base_interface import AttributeTypedDict
@@ -35,6 +36,23 @@ class FieldDescriptor:
35
36
  accessor: DescriptorAccessor
36
37
 
37
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
+
38
56
  TRANSLATION: dict[type[models.Field], type] = {
39
57
  models.fields.BigAutoField: int,
40
58
  models.AutoField: int,
@@ -135,6 +153,7 @@ class _FieldDescriptorBuilder:
135
153
  self._add_custom_fields()
136
154
  self._add_model_fields()
137
155
  self._add_foreign_key_fields()
156
+ self._add_reverse_one_to_one_relations()
138
157
  self._add_collection_relations()
139
158
  return self._descriptors
140
159
 
@@ -209,6 +228,41 @@ class _FieldDescriptorBuilder:
209
228
  filter_lookup=field.name,
210
229
  )
211
230
 
231
+ def _add_reverse_one_to_one_relations(self) -> None:
232
+ """Register snake_case aliases for reverse one-to-one relation accessors."""
233
+ for relation in _iter_reverse_one_to_one_relations(self.model):
234
+ related_model = self._resolve_related_model(
235
+ getattr(relation, "related_model", None)
236
+ )
237
+ if related_model is None:
238
+ continue
239
+ accessor_name = relation.get_accessor_name() or relation.name
240
+ attribute_name = _to_snake_case(related_model.__name__)
241
+ if attribute_name in self._descriptors:
242
+ continue
243
+ general_manager_class = getattr(
244
+ related_model, "_general_manager_class", None
245
+ )
246
+ if general_manager_class:
247
+ accessor = _general_manager_accessor(
248
+ accessor_name, general_manager_class
249
+ )
250
+ relation_type = cast(type, general_manager_class)
251
+ else:
252
+ accessor = _instance_attribute_accessor(accessor_name)
253
+ relation_type = cast(type, related_model)
254
+ self._register(
255
+ attribute_name=attribute_name,
256
+ raw_type=relation_type,
257
+ is_required=False,
258
+ is_editable=False,
259
+ default=None,
260
+ is_derived=True,
261
+ accessor=accessor,
262
+ relation_kind="direct",
263
+ filter_lookup=relation.name,
264
+ )
265
+
212
266
  def _add_collection_relations(self) -> None:
213
267
  """
214
268
  Register collection relation field descriptors for the builder's model.
@@ -521,6 +575,22 @@ def _iter_many_to_many_fields(
521
575
  yield cast(models.Field, field)
522
576
 
523
577
 
578
+ def _iter_reverse_one_to_one_relations(
579
+ model: type[models.Model],
580
+ ) -> Iterable[models.OneToOneRel]:
581
+ """Yield reverse one-to-one relations declared on a Django model."""
582
+ meta = getattr(model, "_meta", None)
583
+ get_fields = getattr(meta, "get_fields", None)
584
+ if not callable(get_fields):
585
+ return
586
+ for field in get_fields():
587
+ if getattr(field, "is_relation", False) and getattr(field, "one_to_one", False):
588
+ if getattr(field, "auto_created", False) and not getattr(
589
+ field, "concrete", False
590
+ ):
591
+ yield cast(models.OneToOneRel, field)
592
+
593
+
524
594
  def _iter_reverse_relations(
525
595
  model: type[models.Model],
526
596
  ) -> Iterable[models.ManyToOneRel]:
@@ -558,7 +628,10 @@ def _instance_attribute_accessor(field_name: str) -> DescriptorAccessor:
558
628
  Returns:
559
629
  The attribute value retrieved from the underlying model instance.
560
630
  """
561
- return getattr(self._instance, field_name)
631
+ try:
632
+ return getattr(self._instance, field_name)
633
+ except ObjectDoesNotExist:
634
+ return None
562
635
 
563
636
  return getter
564
637
 
@@ -584,7 +657,10 @@ def _general_manager_accessor(
584
657
  Returns:
585
658
  The value produced by calling `manager_class` with the related object's primary key, or `None` if the related object is `None`.
586
659
  """
587
- related = getattr(self._instance, field_name)
660
+ try:
661
+ related = getattr(self._instance, field_name)
662
+ except ObjectDoesNotExist:
663
+ return None
588
664
  if related is None:
589
665
  return None
590
666
  return manager_class(related.pk)
@@ -632,6 +708,12 @@ def _general_manager_many_accessor(
632
708
  """
633
709
  filter_kwargs = {field.name: self.pk for field in related_fields}
634
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
+ )
635
717
  return manager_cls.filter(**filter_kwargs)
636
718
 
637
719
  return getter
File without changes