GeneralManager 0.41.5__tar.gz → 0.41.7__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.5/src/GeneralManager.egg-info → generalmanager-0.41.7}/PKG-INFO +1 -1
  2. {generalmanager-0.41.5 → generalmanager-0.41.7}/pyproject.toml +1 -1
  3. {generalmanager-0.41.5 → generalmanager-0.41.7/src/GeneralManager.egg-info}/PKG-INFO +1 -1
  4. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +50 -2
  5. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/permission/base_permission.py +9 -2
  6. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/permission/graphql_capabilities.py +10 -9
  7. {generalmanager-0.41.5 → generalmanager-0.41.7}/LICENSE +0 -0
  8. {generalmanager-0.41.5 → generalmanager-0.41.7}/README.md +0 -0
  9. {generalmanager-0.41.5 → generalmanager-0.41.7}/setup.cfg +0 -0
  10. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/GeneralManager.egg-info/SOURCES.txt +0 -0
  11. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
  12. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/GeneralManager.egg-info/requires.txt +0 -0
  13. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/GeneralManager.egg-info/top_level.txt +0 -0
  14. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/__init__.py +0 -0
  15. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/__init__.py +0 -0
  16. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/api.py +0 -0
  17. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/bucket.py +0 -0
  18. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/cache.py +0 -0
  19. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/factory.py +0 -0
  20. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/general_manager.py +0 -0
  21. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/interface.py +0 -0
  22. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/manager.py +0 -0
  23. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/measurement.py +0 -0
  24. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/permission.py +0 -0
  25. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/rule.py +0 -0
  26. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/search.py +0 -0
  27. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/utils.py +0 -0
  28. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/__init__.py +0 -0
  29. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/graphql.py +0 -0
  30. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/graphql_errors.py +0 -0
  31. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/graphql_mutations.py +0 -0
  32. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/graphql_resolvers.py +0 -0
  33. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/graphql_search.py +0 -0
  34. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
  35. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/graphql_subscriptions.py +0 -0
  36. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/graphql_view.py +0 -0
  37. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/mutation.py +0 -0
  38. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/property.py +0 -0
  39. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/registry.py +0 -0
  40. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/remote_api.py +0 -0
  41. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/remote_invalidation.py +0 -0
  42. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/remote_invalidation_client.py +0 -0
  43. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/apps.py +0 -0
  44. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/bootstrap.py +0 -0
  45. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/bucket/__init__.py +0 -0
  46. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/bucket/base_bucket.py +0 -0
  47. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/bucket/calculation_bucket.py +0 -0
  48. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/bucket/database_bucket.py +0 -0
  49. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/bucket/group_bucket.py +0 -0
  50. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/bucket/request_bucket.py +0 -0
  51. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/cache/__init__.py +0 -0
  52. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/cache/cache_decorator.py +0 -0
  53. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/cache/cache_tracker.py +0 -0
  54. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/cache/dependency_index.py +0 -0
  55. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/cache/model_dependency_collector.py +0 -0
  56. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/cache/signals.py +0 -0
  57. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/conf.py +0 -0
  58. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/factory/__init__.py +0 -0
  59. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/factory/auto_factory.py +0 -0
  60. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/factory/factories.py +0 -0
  61. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/factory/factory_methods.py +0 -0
  62. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/__init__.py +0 -0
  63. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/base_interface.py +0 -0
  64. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/bundles/__init__.py +0 -0
  65. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/bundles/calculation.py +0 -0
  66. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/bundles/database.py +0 -0
  67. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/bundles/remote_manager.py +0 -0
  68. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/bundles/request.py +0 -0
  69. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/__init__.py +0 -0
  70. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/base.py +0 -0
  71. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/builtin.py +0 -0
  72. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
  73. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
  74. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
  75. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/configuration.py +0 -0
  76. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/core/observability.py +0 -0
  77. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/core/utils.py +0 -0
  78. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/exceptions.py +0 -0
  79. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
  80. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
  81. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
  82. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/factory.py +0 -0
  83. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
  84. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
  85. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/orm/history.py +0 -0
  86. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
  87. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
  88. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/orm/support.py +0 -0
  89. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
  90. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
  91. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
  92. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
  93. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
  94. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
  95. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
  96. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/registry.py +0 -0
  97. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
  98. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
  99. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
  100. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
  101. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/interfaces/__init__.py +0 -0
  102. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/interfaces/calculation.py +0 -0
  103. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/interfaces/database.py +0 -0
  104. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/interfaces/existing_model.py +0 -0
  105. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/interfaces/read_only.py +0 -0
  106. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
  107. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/interfaces/request.py +0 -0
  108. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/manifests/__init__.py +0 -0
  109. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/manifests/capability_builder.py +0 -0
  110. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
  111. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/manifests/capability_models.py +0 -0
  112. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/orm_interface.py +0 -0
  113. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/requests.py +0 -0
  114. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/utils/__init__.py +0 -0
  115. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
  116. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/utils/errors.py +0 -0
  117. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/utils/models.py +0 -0
  118. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/logging.py +0 -0
  119. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/management/commands/search_index.py +0 -0
  120. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
  121. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/management/commands/shell.py +0 -0
  122. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
  123. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
  124. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/manager/__init__.py +0 -0
  125. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/manager/general_manager.py +0 -0
  126. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/manager/group_manager.py +0 -0
  127. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/manager/input.py +0 -0
  128. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/manager/meta.py +0 -0
  129. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/measurement/__init__.py +0 -0
  130. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/measurement/measurement.py +0 -0
  131. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/measurement/measurement_field.py +0 -0
  132. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/metrics/__init__.py +0 -0
  133. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/metrics/graphql.py +0 -0
  134. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/migrations/0001_initial.py +0 -0
  135. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
  136. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
  137. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/migrations/__init__.py +0 -0
  138. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/models.py +0 -0
  139. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/permission/__init__.py +0 -0
  140. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/permission/audit.py +0 -0
  141. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/permission/manager_based_permission.py +0 -0
  142. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/permission/mutation_permission.py +0 -0
  143. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/permission/permission_checks.py +0 -0
  144. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/permission/permission_data_manager.py +0 -0
  145. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/permission/utils.py +0 -0
  146. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/public_api_registry.py +0 -0
  147. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/py.typed +0 -0
  148. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/rule/__init__.py +0 -0
  149. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/rule/handler.py +0 -0
  150. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/rule/rule.py +0 -0
  151. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/__init__.py +0 -0
  152. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/async_tasks.py +0 -0
  153. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/backend.py +0 -0
  154. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/backend_registry.py +0 -0
  155. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/backends/__init__.py +0 -0
  156. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/backends/dev.py +0 -0
  157. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/backends/meilisearch.py +0 -0
  158. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/backends/opensearch.py +0 -0
  159. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/backends/typesense.py +0 -0
  160. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/config.py +0 -0
  161. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/indexer.py +0 -0
  162. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/registry.py +0 -0
  163. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/utils.py +0 -0
  164. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/seeding/__init__.py +0 -0
  165. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/seeding/manager_landscape.py +0 -0
  166. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/__init__.py +0 -0
  167. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/args_to_kwargs.py +0 -0
  168. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/filter_parser.py +0 -0
  169. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/format_string.py +0 -0
  170. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/json_encoder.py +0 -0
  171. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/make_cache_key.py +0 -0
  172. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/none_to_zero.py +0 -0
  173. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/path_mapping.py +0 -0
  174. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/public_api.py +0 -0
  175. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/testing.py +0 -0
  176. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/type_checks.py +0 -0
  177. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/__init__.py +0 -0
  178. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/actions.py +0 -0
  179. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/backend_registry.py +0 -0
  180. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/backends/__init__.py +0 -0
  181. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/backends/celery.py +0 -0
  182. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/backends/local.py +0 -0
  183. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/backends/n8n.py +0 -0
  184. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/config.py +0 -0
  185. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/engine.py +0 -0
  186. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/event_registry.py +0 -0
  187. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/events.py +0 -0
  188. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/models.py +0 -0
  189. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/signal_bridge.py +0 -0
  190. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/tasks.py +0 -0
  191. {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/telemetry.py +0 -0
  192. {generalmanager-0.41.5 → generalmanager-0.41.7}/tests/test_settings.py +0 -0
  193. {generalmanager-0.41.5 → generalmanager-0.41.7}/tests/test_urls.py +0 -0
  194. {generalmanager-0.41.5 → generalmanager-0.41.7}/tests/testing_asgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GeneralManager
3
- Version: 0.41.5
3
+ Version: 0.41.7
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.5"
7
+ version = "0.41.7"
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.5
3
+ Version: 0.41.7
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
@@ -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,
@@ -5,9 +5,10 @@ from __future__ import annotations
5
5
  from abc import ABC, abstractmethod
6
6
  from collections.abc import Mapping
7
7
  from dataclasses import dataclass
8
- from typing import TYPE_CHECKING, Any, Literal, TypeAlias
8
+ from typing import TYPE_CHECKING, Any, Literal, TypeAlias, cast
9
9
 
10
10
  from django.contrib.auth.models import AbstractBaseUser, AnonymousUser
11
+ from django.utils.functional import SimpleLazyObject, empty
11
12
 
12
13
  from general_manager.logging import get_logger
13
14
  from general_manager.permission.audit import (
@@ -74,7 +75,7 @@ class BasePermission(ABC):
74
75
  ) -> None:
75
76
  """Initialise the permission context for a specific manager and user."""
76
77
  self._instance = instance
77
- self._request_user = request_user
78
+ self._request_user = self.get_user_with_id(request_user)
78
79
 
79
80
  @property
80
81
  def instance(self) -> PermissionDataManager | GeneralManager | GeneralManagerMeta:
@@ -446,6 +447,12 @@ class BasePermission(ABC):
446
447
  """
447
448
  from django.contrib.auth import get_user_model
448
449
 
450
+ if isinstance(user, SimpleLazyObject):
451
+ lazy_user = cast(Any, user)
452
+ if lazy_user._wrapped is empty:
453
+ lazy_user._setup()
454
+ user = lazy_user._wrapped
455
+
449
456
  User = get_user_model()
450
457
  if isinstance(user, (AbstractBaseUser, AnonymousUser)):
451
458
  return user
@@ -100,7 +100,15 @@ class CapabilityEvaluationContext:
100
100
  """Operation-scoped cache for GraphQL permission capability evaluation."""
101
101
 
102
102
  def __init__(self, *, user: Any | None = None) -> None:
103
- self.user = user if user is not None else _AnonymousUser()
103
+ from django.contrib.auth.models import AnonymousUser
104
+
105
+ from general_manager.permission.base_permission import BasePermission
106
+
107
+ self.user = (
108
+ BasePermission.get_user_with_id(user)
109
+ if user is not None
110
+ else AnonymousUser()
111
+ )
104
112
  self._cache: dict[tuple[str, str, str, str], bool] = {}
105
113
 
106
114
  def evaluate(self, declaration: GraphQLPermissionCapability, instance: Any) -> bool:
@@ -210,7 +218,7 @@ def get_graphql_capabilities(
210
218
  def get_capability_context(info: Any) -> CapabilityEvaluationContext:
211
219
  """Return the operation-scoped capability context for a GraphQL resolver."""
212
220
  request_context = getattr(info, "context", None)
213
- user = getattr(request_context, "user", _AnonymousUser())
221
+ user = getattr(request_context, "user", None)
214
222
  operation_key = id(getattr(info, "operation", None))
215
223
  storage_name = "_general_manager_graphql_capability_contexts"
216
224
  contexts = getattr(request_context, storage_name, None)
@@ -272,10 +280,3 @@ def _instance_identity(instance: Any) -> str:
272
280
 
273
281
  def _user_identity(user: Any) -> str:
274
282
  return repr(getattr(user, "pk", getattr(user, "id", None)))
275
-
276
-
277
- class _AnonymousUser:
278
- is_authenticated = False
279
- is_superuser = False
280
- pk = None
281
- id = None
File without changes