GeneralManager 0.86.5__tar.gz → 0.86.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. {generalmanager-0.86.5/src/GeneralManager.egg-info → generalmanager-0.86.6}/PKG-INFO +1 -1
  2. {generalmanager-0.86.5 → generalmanager-0.86.6}/pyproject.toml +1 -1
  3. {generalmanager-0.86.5 → generalmanager-0.86.6/src/GeneralManager.egg-info}/PKG-INFO +1 -1
  4. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/GeneralManager.egg-info/SOURCES.txt +1 -0
  5. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_mutations.py +59 -9
  6. generalmanager-0.86.6/src/general_manager/api/mutation_controls.py +5 -0
  7. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/remote_api.py +2 -4
  8. {generalmanager-0.86.5 → generalmanager-0.86.6}/LICENSE +0 -0
  9. {generalmanager-0.86.5 → generalmanager-0.86.6}/README.md +0 -0
  10. {generalmanager-0.86.5 → generalmanager-0.86.6}/setup.cfg +0 -0
  11. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
  12. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/GeneralManager.egg-info/requires.txt +0 -0
  13. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/GeneralManager.egg-info/top_level.txt +0 -0
  14. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/__init__.py +0 -0
  15. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/__init__.py +0 -0
  16. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/api.py +0 -0
  17. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/bucket.py +0 -0
  18. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/cache.py +0 -0
  19. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/dataframes.py +0 -0
  20. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/factory.py +0 -0
  21. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/general_manager.py +0 -0
  22. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/interface.py +0 -0
  23. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/manager.py +0 -0
  24. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/measurement.py +0 -0
  25. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/permission.py +0 -0
  26. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/rule.py +0 -0
  27. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/search.py +0 -0
  28. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/utils.py +0 -0
  29. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/__init__.py +0 -0
  30. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql.py +0 -0
  31. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_as_of.py +0 -0
  32. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_errors.py +0 -0
  33. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_groups.py +0 -0
  34. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_identifiers.py +0 -0
  35. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_ordering.py +0 -0
  36. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_output.py +0 -0
  37. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_prefetch.py +0 -0
  38. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_relations.py +0 -0
  39. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_resolvers.py +0 -0
  40. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_search.py +0 -0
  41. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
  42. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_subscriptions.py +0 -0
  43. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_type.py +0 -0
  44. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_view.py +0 -0
  45. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_warmup.py +0 -0
  46. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_warmup_registry.py +0 -0
  47. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_warmup_tasks.py +0 -0
  48. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/mutation.py +0 -0
  49. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/notification_batching.py +0 -0
  50. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/property.py +0 -0
  51. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/registry.py +0 -0
  52. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/remote_invalidation.py +0 -0
  53. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/remote_invalidation_client.py +0 -0
  54. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/apps.py +0 -0
  55. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/as_of.py +0 -0
  56. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bootstrap.py +0 -0
  57. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/__init__.py +0 -0
  58. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/_materialized_bucket.py +0 -0
  59. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/_ordering.py +0 -0
  60. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/base_bucket.py +0 -0
  61. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/calculation_bucket.py +0 -0
  62. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/database_bucket.py +0 -0
  63. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/excel_bucket.py +0 -0
  64. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/group_bucket.py +0 -0
  65. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/indexing.py +0 -0
  66. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/projection.py +0 -0
  67. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/request_bucket.py +0 -0
  68. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/__init__.py +0 -0
  69. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/_dependency_graph.py +0 -0
  70. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/batch_refresh.py +0 -0
  71. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/cache_decorator.py +0 -0
  72. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/cache_tracker.py +0 -0
  73. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/data_change_context.py +0 -0
  74. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/dependency_cache.py +0 -0
  75. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/dependency_index.py +0 -0
  76. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/dependency_matching.py +0 -0
  77. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/dependency_publish.py +0 -0
  78. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/dependency_shards.py +0 -0
  79. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/model_dependency_collector.py +0 -0
  80. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/run_context.py +0 -0
  81. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/run_context_lru.py +0 -0
  82. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/signals.py +0 -0
  83. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/transaction_barrier.py +0 -0
  84. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/__init__.py +0 -0
  85. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/audit.py +0 -0
  86. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/bootstrap.py +0 -0
  87. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/checks.py +0 -0
  88. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/consumer.py +0 -0
  89. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/context.py +0 -0
  90. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/errors.py +0 -0
  91. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/__init__.py +0 -0
  92. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/__main__.py +0 -0
  93. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/baseline.py +0 -0
  94. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/datasets/basic_queries.yaml +0 -0
  95. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/datasets/demo_readiness.yaml +0 -0
  96. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/datasets/edge_cases.yaml +0 -0
  97. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/datasets/follow_ups.yaml +0 -0
  98. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/datasets/large_schema.yaml +0 -0
  99. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/datasets/multi_hop.yaml +0 -0
  100. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/datasets/planned_orchestration.yaml +0 -0
  101. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/diagnostics.py +0 -0
  102. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/fingerprints.py +0 -0
  103. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/fixtures.py +0 -0
  104. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/judges/__init__.py +0 -0
  105. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/judges/answer_quality.py +0 -0
  106. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/judges/contract.py +0 -0
  107. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/judges/result_accuracy.py +0 -0
  108. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/judges/tool_sequence.py +0 -0
  109. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/readiness.py +0 -0
  110. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/runner.py +0 -0
  111. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/traces.py +0 -0
  112. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/grounding.py +0 -0
  113. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/models.py +0 -0
  114. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/__init__.py +0 -0
  115. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/budget.py +0 -0
  116. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/calculations.py +0 -0
  117. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/catalog.py +0 -0
  118. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/config.py +0 -0
  119. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/events.py +0 -0
  120. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/evidence.py +0 -0
  121. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/models.py +0 -0
  122. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/planner.py +0 -0
  123. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/provider_calls.py +0 -0
  124. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/resolver.py +0 -0
  125. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/routing.py +0 -0
  126. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/scheduler.py +0 -0
  127. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/synthesis.py +0 -0
  128. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/validation.py +0 -0
  129. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/providers/__init__.py +0 -0
  130. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/providers/_shared.py +0 -0
  131. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/providers/anthropic.py +0 -0
  132. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/providers/base.py +0 -0
  133. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/providers/google.py +0 -0
  134. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/providers/ollama.py +0 -0
  135. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/providers/openai.py +0 -0
  136. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/rate_limits.py +0 -0
  137. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/routing.py +0 -0
  138. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/schema_index.py +0 -0
  139. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/settings.py +0 -0
  140. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/signals.py +0 -0
  141. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/system_prompt.py +0 -0
  142. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/tool_metadata.py +0 -0
  143. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/tools.py +0 -0
  144. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/turns.py +0 -0
  145. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/views.py +0 -0
  146. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/conf.py +0 -0
  147. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/dataframes/__init__.py +0 -0
  148. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/dataframes/measurements.py +0 -0
  149. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/factory/__init__.py +0 -0
  150. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/factory/auto_factory.py +0 -0
  151. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/factory/factories.py +0 -0
  152. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/factory/factory_methods.py +0 -0
  153. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/__init__.py +0 -0
  154. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/base_interface.py +0 -0
  155. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/bundles/__init__.py +0 -0
  156. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/bundles/calculation.py +0 -0
  157. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/bundles/database.py +0 -0
  158. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/bundles/excel.py +0 -0
  159. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/bundles/remote_manager.py +0 -0
  160. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/bundles/request.py +0 -0
  161. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/__init__.py +0 -0
  162. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/base.py +0 -0
  163. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/builtin.py +0 -0
  164. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
  165. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
  166. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/calculation/input_resolution.py +0 -0
  167. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
  168. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/configuration.py +0 -0
  169. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/core/observability.py +0 -0
  170. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/core/utils.py +0 -0
  171. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/excel/__init__.py +0 -0
  172. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/exceptions.py +0 -0
  173. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
  174. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
  175. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
  176. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/factory.py +0 -0
  177. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
  178. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
  179. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm/bulk.py +0 -0
  180. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm/create_many.py +0 -0
  181. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm/history.py +0 -0
  182. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
  183. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
  184. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm/support.py +0 -0
  185. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
  186. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
  187. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +0 -0
  188. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
  189. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm_utils/update_state.py +0 -0
  190. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
  191. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
  192. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/read_only/_types.py +0 -0
  193. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
  194. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
  195. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/registry.py +0 -0
  196. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
  197. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
  198. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/excel.py +0 -0
  199. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/excel_store.py +0 -0
  200. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/excel_workbook.py +0 -0
  201. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/infrastructure/__init__.py +0 -0
  202. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
  203. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
  204. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/interfaces/__init__.py +0 -0
  205. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/interfaces/calculation.py +0 -0
  206. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/interfaces/database.py +0 -0
  207. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/interfaces/excel.py +0 -0
  208. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/interfaces/existing_model.py +0 -0
  209. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/interfaces/read_only.py +0 -0
  210. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
  211. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/interfaces/request.py +0 -0
  212. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/manifests/__init__.py +0 -0
  213. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/manifests/capability_builder.py +0 -0
  214. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
  215. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/manifests/capability_models.py +0 -0
  216. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/orm_interface.py +0 -0
  217. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/requests.py +0 -0
  218. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/utils/__init__.py +0 -0
  219. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
  220. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/utils/errors.py +0 -0
  221. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/utils/history.py +0 -0
  222. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/utils/models.py +0 -0
  223. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/logging.py +0 -0
  224. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/chat_cleanup.py +0 -0
  225. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/cleanup_upload_intents.py +0 -0
  226. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/graphql_warmup.py +0 -0
  227. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/graphql_warmup_refresh_due.py +0 -0
  228. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/search_index.py +0 -0
  229. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/search_reconcile.py +0 -0
  230. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
  231. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/shell.py +0 -0
  232. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/sync_read_only.py +0 -0
  233. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
  234. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
  235. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/manager/__init__.py +0 -0
  236. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/manager/bulk_create.py +0 -0
  237. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/manager/general_manager.py +0 -0
  238. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/manager/group_manager.py +0 -0
  239. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/manager/input.py +0 -0
  240. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/manager/meta.py +0 -0
  241. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/measurement/__init__.py +0 -0
  242. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/measurement/measurement.py +0 -0
  243. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/measurement/measurement_field.py +0 -0
  244. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/metrics/__init__.py +0 -0
  245. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/metrics/graphql.py +0 -0
  246. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0001_initial.py +0 -0
  247. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
  248. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
  249. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0004_chat_persistence_models.py +0 -0
  250. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0004_search_index_state.py +0 -0
  251. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0005_merge_chat_search.py +0 -0
  252. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0006_chat_pending_confirmation_scoped_ids.py +0 -0
  253. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0007_upload_intent.py +0 -0
  254. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0008_upload_finalization_versions.py +0 -0
  255. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0009_upload_cleanup_state.py +0 -0
  256. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0010_chat_pending_confirmation_portable_uniqueness.py +0 -0
  257. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0011_search_index_state_dirty_generation.py +0 -0
  258. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0012_chat_context_watermarks.py +0 -0
  259. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/__init__.py +0 -0
  260. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/models.py +0 -0
  261. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/permission/__init__.py +0 -0
  262. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/permission/audit.py +0 -0
  263. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/permission/base_permission.py +0 -0
  264. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/permission/graphql_capabilities.py +0 -0
  265. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/permission/manager_based_permission.py +0 -0
  266. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/permission/mutation_permission.py +0 -0
  267. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/permission/permission_checks.py +0 -0
  268. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/permission/permission_data_manager.py +0 -0
  269. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/permission/utils.py +0 -0
  270. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/public_api_registry.py +0 -0
  271. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/py.typed +0 -0
  272. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/rule/__init__.py +0 -0
  273. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/rule/handler.py +0 -0
  274. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/rule/rule.py +0 -0
  275. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/__init__.py +0 -0
  276. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/async_tasks.py +0 -0
  277. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/backend.py +0 -0
  278. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/backend_registry.py +0 -0
  279. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/backends/__init__.py +0 -0
  280. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/backends/dev.py +0 -0
  281. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/backends/meilisearch.py +0 -0
  282. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/backends/opensearch.py +0 -0
  283. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/backends/typesense.py +0 -0
  284. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/checks.py +0 -0
  285. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/config.py +0 -0
  286. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/identity.py +0 -0
  287. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/indexer.py +0 -0
  288. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/invalidation.py +0 -0
  289. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/m2m_invalidation.py +0 -0
  290. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/models.py +0 -0
  291. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/reconciliation.py +0 -0
  292. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/registry.py +0 -0
  293. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/tasks.py +0 -0
  294. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/utils.py +0 -0
  295. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/seeding/__init__.py +0 -0
  296. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/seeding/manager_landscape.py +0 -0
  297. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/__init__.py +0 -0
  298. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/adapters.py +0 -0
  299. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/checks.py +0 -0
  300. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/config.py +0 -0
  301. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/errors.py +0 -0
  302. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/finalization.py +0 -0
  303. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/graphql.py +0 -0
  304. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/graphql_types.py +0 -0
  305. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/metrics.py +0 -0
  306. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/models.py +0 -0
  307. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/public.py +0 -0
  308. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/s3.py +0 -0
  309. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/services.py +0 -0
  310. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/tokens.py +0 -0
  311. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/types.py +0 -0
  312. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/urls.py +0 -0
  313. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/views.py +0 -0
  314. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/__init__.py +0 -0
  315. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/_args_to_kwargs.py +0 -0
  316. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/_cache_key_encoder.py +0 -0
  317. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/_make_cache_key.py +0 -0
  318. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/_none_to_zero.py +0 -0
  319. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/filter_parser.py +0 -0
  320. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/format_string.py +0 -0
  321. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/json_encoder.py +0 -0
  322. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/path_mapping.py +0 -0
  323. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/public_api.py +0 -0
  324. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/testing.py +0 -0
  325. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/type_checks.py +0 -0
  326. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/__init__.py +0 -0
  327. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/actions.py +0 -0
  328. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/backend_registry.py +0 -0
  329. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/backends/__init__.py +0 -0
  330. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/backends/celery.py +0 -0
  331. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/backends/local.py +0 -0
  332. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/backends/n8n.py +0 -0
  333. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/config.py +0 -0
  334. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/engine.py +0 -0
  335. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/event_registry.py +0 -0
  336. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/events.py +0 -0
  337. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/models.py +0 -0
  338. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/signal_bridge.py +0 -0
  339. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/tasks.py +0 -0
  340. {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/telemetry.py +0 -0
  341. {generalmanager-0.86.5 → generalmanager-0.86.6}/tests/test_settings.py +0 -0
  342. {generalmanager-0.86.5 → generalmanager-0.86.6}/tests/test_urls.py +0 -0
  343. {generalmanager-0.86.5 → generalmanager-0.86.6}/tests/testing_asgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GeneralManager
3
- Version: 0.86.5
3
+ Version: 0.86.6
4
4
  Summary: Modular Django-based data management framework with ORM, GraphQL, fine-grained permissions, rule validation, calculations and caching.
5
5
  Author-email: Tim Kleindick <tkleindick@yahoo.de>
6
6
  License: MIT License
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "GeneralManager"
7
- version = "0.86.5"
7
+ version = "0.86.6"
8
8
  description = "Modular Django-based data management framework with ORM, GraphQL, fine-grained permissions, rule validation, calculations and caching."
9
9
  readme = "README.md"
10
10
  authors = [{ name = "Tim Kleindick", email = "tkleindick@yahoo.de" }]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GeneralManager
3
- Version: 0.86.5
3
+ Version: 0.86.6
4
4
  Summary: Modular Django-based data management framework with ORM, GraphQL, fine-grained permissions, rule validation, calculations and caching.
5
5
  Author-email: Tim Kleindick <tkleindick@yahoo.de>
6
6
  License: MIT License
@@ -50,6 +50,7 @@ src/general_manager/api/graphql_warmup.py
50
50
  src/general_manager/api/graphql_warmup_registry.py
51
51
  src/general_manager/api/graphql_warmup_tasks.py
52
52
  src/general_manager/api/mutation.py
53
+ src/general_manager/api/mutation_controls.py
53
54
  src/general_manager/api/notification_batching.py
54
55
  src/general_manager/api/property.py
55
56
  src/general_manager/api/registry.py
@@ -21,6 +21,7 @@ from django.db import models
21
21
  from django.core.exceptions import FieldDoesNotExist
22
22
 
23
23
  from general_manager.interface.base_interface import AttributeTypedDict, InterfaceBase
24
+ from general_manager.api.mutation_controls import MUTATION_CONTROL_KEYS
24
25
  from general_manager.api.graphql_relations import (
25
26
  get_graphql_manager_registry,
26
27
  resolve_general_manager_type,
@@ -55,6 +56,33 @@ class _UnsetHistoryComment:
55
56
  _HISTORY_COMMENT_UNSET = _UnsetHistoryComment()
56
57
 
57
58
 
59
+ class ReservedMutationControlFieldError(ValueError):
60
+ """Raised when an editable field collides with manager execution metadata."""
61
+
62
+ def __init__(self, field_name: str) -> None:
63
+ super().__init__(
64
+ f"Editable GraphQL field {field_name!r} collides with a reserved "
65
+ "manager mutation control. Rename the field or make it read-only."
66
+ )
67
+
68
+
69
+ class ReservedMutationControlInputError(GraphQLError):
70
+ """Report client input attempting to override trusted authorization metadata."""
71
+
72
+ def __init__(self, key: str) -> None:
73
+ super().__init__(
74
+ f"Mutation input cannot include reserved key {key!r}.",
75
+ extensions={"code": "BAD_USER_INPUT"},
76
+ )
77
+
78
+
79
+ def _reject_mutation_authorization_controls(kwargs: MutationPayload) -> None:
80
+ """Allow audit comments but reject client-controlled authorization metadata."""
81
+ for key in sorted(MUTATION_CONTROL_KEYS - {"history_comment"}):
82
+ if key in kwargs:
83
+ raise ReservedMutationControlInputError(key)
84
+
85
+
58
86
  class _EditableGrapheneField(Protocol):
59
87
  """Graphene field instance carrying GeneralManager's dynamic editability flag."""
60
88
 
@@ -168,8 +196,10 @@ def _normalize_mutation_kwargs_for_manager(
168
196
  ORM mutation capabilities expect ``field_id``/``field_id_list`` for manager
169
197
  relations. Structured references pass through their manager constructor so
170
198
  all declared inputs are validated. Scalar reference values stay unchanged.
171
- Unknown keys and already-normalized keys are preserved.
199
+ Unknown keys and already-normalized keys are preserved, except reserved
200
+ authorization controls, which are rejected before and after normalization.
172
201
  """
202
+ _reject_mutation_authorization_controls(kwargs)
173
203
  interface_cls = getattr(general_manager_class, "Interface", None)
174
204
  if interface_cls is None:
175
205
  return dict(kwargs)
@@ -233,6 +263,7 @@ def _normalize_mutation_kwargs_for_manager(
233
263
  )
234
264
  normalized.pop(key, None)
235
265
 
266
+ _reject_mutation_authorization_controls(normalized)
236
267
  return normalized
237
268
 
238
269
 
@@ -351,6 +382,10 @@ def create_write_fields(
351
382
  Mapping from attribute name to a Graphene input field instance. Returned
352
383
  fields carry a dynamic maintainer-facing ``editable`` flag used by the
353
384
  generated mutation class builders.
385
+
386
+ Raises:
387
+ ReservedMutationControlFieldError: An editable field or its normalized
388
+ relation alias collides with reserved manager mutation metadata.
354
389
  """
355
390
  fields: GrapheneFieldMap = {}
356
391
  attribute_types = interface_cls.get_attribute_types()
@@ -360,6 +395,8 @@ def create_write_fields(
360
395
  continue
361
396
  if info["is_derived"]:
362
397
  continue
398
+ if info["is_editable"] and name in MUTATION_CONTROL_KEYS:
399
+ raise ReservedMutationControlFieldError(name)
363
400
  if _is_direct_relation_raw_id_alias(
364
401
  name,
365
402
  attribute_types,
@@ -375,6 +412,13 @@ def create_write_fields(
375
412
  if default is NOT_PROVIDED or callable(default):
376
413
  default = Undefined
377
414
  manager_type = resolve_general_manager_type(typ, manager_registry)
415
+ if (
416
+ info["is_editable"]
417
+ and manager_type is not None
418
+ and not name.endswith(("_id", "_list"))
419
+ and f"{name}_id" in MUTATION_CONTROL_KEYS
420
+ ):
421
+ raise ReservedMutationControlFieldError(name)
378
422
 
379
423
  fld: object
380
424
  if info.get("orm_field_kind") in {"file", "image"}:
@@ -477,6 +521,7 @@ def generate_create_mutation_class(
477
521
  for field_name, value in kwargs.items()
478
522
  if value is not NOT_PROVIDED
479
523
  }
524
+ _reject_mutation_authorization_controls(kwargs)
480
525
  _preflight_mutation_uploads(
481
526
  info=info,
482
527
  general_manager_class=generalManagerClass,
@@ -488,12 +533,14 @@ def generate_create_mutation_class(
488
533
  kwargs = _normalize_mutation_kwargs_for_manager(generalManagerClass, kwargs)
489
534
  history_comment = _pop_history_comment(kwargs)
490
535
  create = cast(_ManagerCreateMethod, generalManagerClass.create)
491
- create_kwargs = {"creator_id": info.context.user.id, **kwargs}
492
536
  if isinstance(history_comment, _UnsetHistoryComment):
493
- instance = create(**create_kwargs)
537
+ instance = create(creator_id=info.context.user.id, **kwargs)
494
538
  else:
495
- create_kwargs["history_comment"] = history_comment
496
- instance = create(**create_kwargs)
539
+ instance = create(
540
+ creator_id=info.context.user.id,
541
+ history_comment=history_comment,
542
+ **kwargs,
543
+ )
497
544
  except GraphQLError:
498
545
  raise
499
546
  except Exception as error:
@@ -587,6 +634,7 @@ def generate_update_mutation_class(
587
634
  for field_name, value in kwargs.items()
588
635
  if value is not NOT_PROVIDED
589
636
  }
637
+ _reject_mutation_authorization_controls(kwargs)
590
638
  _preflight_mutation_uploads(
591
639
  info=info,
592
640
  general_manager_class=generalManagerClass,
@@ -600,12 +648,14 @@ def generate_update_mutation_class(
600
648
  update = cast(
601
649
  _ManagerUpdateMethod, generalManagerClass(**identification).update
602
650
  )
603
- update_kwargs = {"creator_id": info.context.user.id, **kwargs}
604
651
  if isinstance(history_comment, _UnsetHistoryComment):
605
- instance = update(**update_kwargs)
652
+ instance = update(creator_id=info.context.user.id, **kwargs)
606
653
  else:
607
- update_kwargs["history_comment"] = history_comment
608
- instance = update(**update_kwargs)
654
+ instance = update(
655
+ creator_id=info.context.user.id,
656
+ history_comment=history_comment,
657
+ **kwargs,
658
+ )
609
659
  except GraphQLError:
610
660
  raise
611
661
  except Exception as error:
@@ -0,0 +1,5 @@
1
+ """Manager execution metadata reserved across public mutation transports."""
2
+
3
+ MUTATION_CONTROL_KEYS = frozenset(
4
+ {"ignore_permission", "creator_id", "history_comment"}
5
+ )
@@ -16,6 +16,7 @@ from django.http import HttpRequest, HttpResponse, JsonResponse
16
16
  from django.urls import URLPattern, path
17
17
 
18
18
  from general_manager.logging import get_logger
19
+ from general_manager.api.mutation_controls import MUTATION_CONTROL_KEYS
19
20
  from general_manager.bucket._ordering import normalize_ordering
20
21
  from general_manager.bucket.request_bucket import RequestBucket
21
22
 
@@ -25,9 +26,6 @@ if TYPE_CHECKING:
25
26
  logger = get_logger("api.remote")
26
27
 
27
28
  _SEGMENT_RE = re.compile(r"^[a-z0-9]+(?:-[a-z0-9]+)*$")
28
- _MUTATION_CONTROL_KEYS = frozenset(
29
- {"ignore_permission", "creator_id", "history_comment"}
30
- )
31
29
  _MUTATION_METADATA_KEY = "__metadata__"
32
30
  _MUTATION_METADATA_FIELDS = frozenset({"history_comment"})
33
31
  RemoteAPIView = Callable[[HttpRequest], HttpResponse]
@@ -432,7 +430,7 @@ def _parse_json_body(request: HttpRequest) -> RemoteJSONPayload:
432
430
  def _parse_mutation_body(request: HttpRequest) -> tuple[RemoteJSONPayload, str | None]:
433
431
  """Separate schema values from supported remote mutation metadata."""
434
432
  payload = _parse_json_body(request)
435
- for control_key in _MUTATION_CONTROL_KEYS:
433
+ for control_key in MUTATION_CONTROL_KEYS:
436
434
  if control_key in payload:
437
435
  raise RemoteAPIRequestError.reserved_mutation_control(control_key)
438
436
 
File without changes