GeneralManager 0.90.0__tar.gz → 0.91.0__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 (379) hide show
  1. {generalmanager-0.90.0/src/GeneralManager.egg-info → generalmanager-0.91.0}/PKG-INFO +1 -1
  2. {generalmanager-0.90.0 → generalmanager-0.91.0}/pyproject.toml +1 -1
  3. {generalmanager-0.90.0 → generalmanager-0.91.0/src/GeneralManager.egg-info}/PKG-INFO +1 -1
  4. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/GeneralManager.egg-info/SOURCES.txt +1 -0
  5. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_query_permissions.py +8 -2
  6. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_search.py +22 -28
  7. generalmanager-0.91.0/src/general_manager/api/graphql_work_limits.py +35 -0
  8. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/permission/permission_data_manager.py +16 -2
  9. {generalmanager-0.90.0 → generalmanager-0.91.0}/LICENSE +0 -0
  10. {generalmanager-0.90.0 → generalmanager-0.91.0}/README.md +0 -0
  11. {generalmanager-0.90.0 → generalmanager-0.91.0}/setup.cfg +0 -0
  12. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
  13. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/GeneralManager.egg-info/requires.txt +0 -0
  14. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/GeneralManager.egg-info/top_level.txt +0 -0
  15. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/__init__.py +0 -0
  16. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/_types/__init__.py +0 -0
  17. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/_types/api.py +0 -0
  18. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/_types/bucket.py +0 -0
  19. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/_types/cache.py +0 -0
  20. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/_types/dataframes.py +0 -0
  21. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/_types/factory.py +0 -0
  22. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/_types/general_manager.py +0 -0
  23. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/_types/interface.py +0 -0
  24. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/_types/manager.py +0 -0
  25. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/_types/measurement.py +0 -0
  26. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/_types/permission.py +0 -0
  27. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/_types/rule.py +0 -0
  28. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/_types/search.py +0 -0
  29. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/_types/utils.py +0 -0
  30. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/__init__.py +0 -0
  31. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql.py +0 -0
  32. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_as_of.py +0 -0
  33. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_errors.py +0 -0
  34. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_filter_contract.py +0 -0
  35. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_groups.py +0 -0
  36. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_identifiers.py +0 -0
  37. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_mutations.py +0 -0
  38. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_ordering.py +0 -0
  39. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_output.py +0 -0
  40. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_prefetch.py +0 -0
  41. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_relations.py +0 -0
  42. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_resolvers.py +0 -0
  43. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
  44. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_subscriptions.py +0 -0
  45. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_type.py +0 -0
  46. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_units.py +0 -0
  47. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_value_contract.py +0 -0
  48. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_view.py +0 -0
  49. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_warmup.py +0 -0
  50. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_warmup_registry.py +0 -0
  51. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/graphql_warmup_tasks.py +0 -0
  52. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/mutation.py +0 -0
  53. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/mutation_controls.py +0 -0
  54. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/notification_batching.py +0 -0
  55. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/property.py +0 -0
  56. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/registry.py +0 -0
  57. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/remote_api.py +0 -0
  58. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/remote_invalidation.py +0 -0
  59. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/api/remote_invalidation_client.py +0 -0
  60. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/apps.py +0 -0
  61. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/as_of.py +0 -0
  62. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/bootstrap.py +0 -0
  63. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/bucket/__init__.py +0 -0
  64. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/bucket/_materialized_bucket.py +0 -0
  65. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/bucket/_ordering.py +0 -0
  66. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/bucket/base_bucket.py +0 -0
  67. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/bucket/calculation_bucket.py +0 -0
  68. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/bucket/database_bucket.py +0 -0
  69. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/bucket/excel_bucket.py +0 -0
  70. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/bucket/group_bucket.py +0 -0
  71. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/bucket/indexing.py +0 -0
  72. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/bucket/projection.py +0 -0
  73. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/bucket/request_bucket.py +0 -0
  74. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/cache/__init__.py +0 -0
  75. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/cache/_dependency_graph.py +0 -0
  76. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/cache/batch_refresh.py +0 -0
  77. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/cache/cache_decorator.py +0 -0
  78. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/cache/cache_tracker.py +0 -0
  79. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/cache/data_change_context.py +0 -0
  80. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/cache/dependency_cache.py +0 -0
  81. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/cache/dependency_index.py +0 -0
  82. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/cache/dependency_matching.py +0 -0
  83. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/cache/dependency_publish.py +0 -0
  84. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/cache/dependency_shards.py +0 -0
  85. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/cache/model_dependency_collector.py +0 -0
  86. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/cache/run_context.py +0 -0
  87. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/cache/run_context_lru.py +0 -0
  88. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/cache/signals.py +0 -0
  89. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/cache/transaction_barrier.py +0 -0
  90. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/__init__.py +0 -0
  91. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/audit.py +0 -0
  92. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/audit_identity.py +0 -0
  93. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/bootstrap.py +0 -0
  94. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/checks.py +0 -0
  95. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/consumer.py +0 -0
  96. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/context.py +0 -0
  97. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/errors.py +0 -0
  98. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/__init__.py +0 -0
  99. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/__main__.py +0 -0
  100. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/baseline.py +0 -0
  101. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/datasets/basic_queries.yaml +0 -0
  102. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/datasets/demo_readiness.yaml +0 -0
  103. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/datasets/edge_cases.yaml +0 -0
  104. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/datasets/follow_ups.yaml +0 -0
  105. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/datasets/large_schema.yaml +0 -0
  106. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/datasets/multi_hop.yaml +0 -0
  107. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/datasets/planned_orchestration.yaml +0 -0
  108. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/diagnostics.py +0 -0
  109. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/execution.py +0 -0
  110. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/fingerprints.py +0 -0
  111. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/fixtures.py +0 -0
  112. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/judges/__init__.py +0 -0
  113. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/judges/answer_quality.py +0 -0
  114. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/judges/contract.py +0 -0
  115. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/judges/result_accuracy.py +0 -0
  116. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/judges/result_set.py +0 -0
  117. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/judges/tool_sequence.py +0 -0
  118. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/outcomes.py +0 -0
  119. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/readiness.py +0 -0
  120. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/runner.py +0 -0
  121. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/evals/traces.py +0 -0
  122. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/graphql_contract.py +0 -0
  123. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/grounding.py +0 -0
  124. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/models.py +0 -0
  125. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/mutation_inputs.py +0 -0
  126. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/__init__.py +0 -0
  127. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/action_contract.py +0 -0
  128. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/binding_diagnostics.py +0 -0
  129. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/budget.py +0 -0
  130. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/calculation_scope.py +0 -0
  131. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/calculations.py +0 -0
  132. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/catalog.py +0 -0
  133. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/category_binding.py +0 -0
  134. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/choice_context.py +0 -0
  135. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/clarification.py +0 -0
  136. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/config.py +0 -0
  137. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/contract.py +0 -0
  138. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/conversion.py +0 -0
  139. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/cross_query.py +0 -0
  140. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/deferred_calculations.py +0 -0
  141. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/deferred_schema.py +0 -0
  142. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/events.py +0 -0
  143. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/evidence.py +0 -0
  144. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/evidence_selection.py +0 -0
  145. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/group_actions.py +0 -0
  146. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/models.py +0 -0
  147. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/planner.py +0 -0
  148. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/planner_context.py +0 -0
  149. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/provider_calls.py +0 -0
  150. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/resolver.py +0 -0
  151. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/scheduler.py +0 -0
  152. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/schema_projection.py +0 -0
  153. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/selector_clarification.py +0 -0
  154. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/selector_question.py +0 -0
  155. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/synthesis.py +0 -0
  156. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/planned/validation.py +0 -0
  157. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/providers/__init__.py +0 -0
  158. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/providers/_shared.py +0 -0
  159. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/providers/anthropic.py +0 -0
  160. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/providers/base.py +0 -0
  161. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/providers/google.py +0 -0
  162. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/providers/ollama.py +0 -0
  163. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/providers/openai.py +0 -0
  164. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/rate_limits.py +0 -0
  165. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/routing.py +0 -0
  166. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/schema_index.py +0 -0
  167. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/schema_inspection.py +0 -0
  168. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/settings.py +0 -0
  169. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/signals.py +0 -0
  170. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/system_prompt.py +0 -0
  171. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/tool_metadata.py +0 -0
  172. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/tools.py +0 -0
  173. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/turns.py +0 -0
  174. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/chat/views.py +0 -0
  175. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/conf.py +0 -0
  176. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/dataframes/__init__.py +0 -0
  177. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/dataframes/measurements.py +0 -0
  178. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/factory/__init__.py +0 -0
  179. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/factory/auto_factory.py +0 -0
  180. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/factory/factories.py +0 -0
  181. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/factory/factory_methods.py +0 -0
  182. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/__init__.py +0 -0
  183. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/base_interface.py +0 -0
  184. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/bundles/__init__.py +0 -0
  185. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/bundles/calculation.py +0 -0
  186. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/bundles/database.py +0 -0
  187. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/bundles/excel.py +0 -0
  188. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/bundles/remote_manager.py +0 -0
  189. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/bundles/request.py +0 -0
  190. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/__init__.py +0 -0
  191. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/base.py +0 -0
  192. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/builtin.py +0 -0
  193. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
  194. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
  195. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/calculation/input_resolution.py +0 -0
  196. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
  197. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/configuration.py +0 -0
  198. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/core/observability.py +0 -0
  199. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/core/utils.py +0 -0
  200. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/excel/__init__.py +0 -0
  201. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/exceptions.py +0 -0
  202. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
  203. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
  204. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
  205. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/factory.py +0 -0
  206. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
  207. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
  208. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/orm/bulk.py +0 -0
  209. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/orm/create_many.py +0 -0
  210. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/orm/history.py +0 -0
  211. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/orm/history_query.py +0 -0
  212. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
  213. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
  214. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/orm/support.py +0 -0
  215. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
  216. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/orm_utils/collection_probes.py +0 -0
  217. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
  218. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +0 -0
  219. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
  220. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/orm_utils/update_state.py +0 -0
  221. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
  222. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
  223. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/read_only/_types.py +0 -0
  224. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
  225. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
  226. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/registry.py +0 -0
  227. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
  228. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
  229. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/capabilities/request/relation_inputs.py +0 -0
  230. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/excel.py +0 -0
  231. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/excel_store.py +0 -0
  232. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/excel_workbook.py +0 -0
  233. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/infrastructure/__init__.py +0 -0
  234. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
  235. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
  236. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/interfaces/__init__.py +0 -0
  237. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/interfaces/calculation.py +0 -0
  238. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/interfaces/database.py +0 -0
  239. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/interfaces/excel.py +0 -0
  240. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/interfaces/existing_model.py +0 -0
  241. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/interfaces/read_only.py +0 -0
  242. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
  243. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/interfaces/request.py +0 -0
  244. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/manifests/__init__.py +0 -0
  245. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/manifests/capability_builder.py +0 -0
  246. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
  247. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/manifests/capability_models.py +0 -0
  248. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/orm_interface.py +0 -0
  249. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/requests.py +0 -0
  250. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/unit_contract.py +0 -0
  251. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/utils/__init__.py +0 -0
  252. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
  253. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/utils/errors.py +0 -0
  254. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/utils/history.py +0 -0
  255. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/interface/utils/models.py +0 -0
  256. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/logging.py +0 -0
  257. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/management/commands/chat_cleanup.py +0 -0
  258. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/management/commands/cleanup_upload_intents.py +0 -0
  259. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/management/commands/graphql_warmup.py +0 -0
  260. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/management/commands/graphql_warmup_refresh_due.py +0 -0
  261. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/management/commands/search_index.py +0 -0
  262. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/management/commands/search_reconcile.py +0 -0
  263. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
  264. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/management/commands/shell.py +0 -0
  265. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/management/commands/sync_read_only.py +0 -0
  266. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
  267. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
  268. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/manager/__init__.py +0 -0
  269. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/manager/bulk_create.py +0 -0
  270. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/manager/general_manager.py +0 -0
  271. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/manager/group_manager.py +0 -0
  272. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/manager/input.py +0 -0
  273. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/manager/meta.py +0 -0
  274. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/measurement/__init__.py +0 -0
  275. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/measurement/measurement.py +0 -0
  276. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/measurement/measurement_field.py +0 -0
  277. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/metrics/__init__.py +0 -0
  278. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/metrics/graphql.py +0 -0
  279. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/migrations/0001_initial.py +0 -0
  280. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
  281. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
  282. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/migrations/0004_chat_persistence_models.py +0 -0
  283. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/migrations/0004_search_index_state.py +0 -0
  284. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/migrations/0005_merge_chat_search.py +0 -0
  285. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/migrations/0006_chat_pending_confirmation_scoped_ids.py +0 -0
  286. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/migrations/0007_upload_intent.py +0 -0
  287. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/migrations/0008_upload_finalization_versions.py +0 -0
  288. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/migrations/0009_upload_cleanup_state.py +0 -0
  289. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/migrations/0010_chat_pending_confirmation_portable_uniqueness.py +0 -0
  290. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/migrations/0011_search_index_state_dirty_generation.py +0 -0
  291. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/migrations/0012_chat_context_watermarks.py +0 -0
  292. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/migrations/__init__.py +0 -0
  293. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/models.py +0 -0
  294. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/permission/__init__.py +0 -0
  295. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/permission/audit.py +0 -0
  296. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/permission/base_permission.py +0 -0
  297. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/permission/graphql_capabilities.py +0 -0
  298. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/permission/manager_based_permission.py +0 -0
  299. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/permission/mutation_permission.py +0 -0
  300. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/permission/permission_checks.py +0 -0
  301. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/permission/relation_aliases.py +0 -0
  302. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/permission/utils.py +0 -0
  303. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/public_api_registry.py +0 -0
  304. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/py.typed +0 -0
  305. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/rule/__init__.py +0 -0
  306. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/rule/handler.py +0 -0
  307. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/rule/rule.py +0 -0
  308. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/__init__.py +0 -0
  309. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/async_tasks.py +0 -0
  310. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/authorization.py +0 -0
  311. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/backend.py +0 -0
  312. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/backend_registry.py +0 -0
  313. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/backends/__init__.py +0 -0
  314. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/backends/dev.py +0 -0
  315. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/backends/meilisearch.py +0 -0
  316. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/backends/opensearch.py +0 -0
  317. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/backends/typesense.py +0 -0
  318. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/checks.py +0 -0
  319. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/config.py +0 -0
  320. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/identity.py +0 -0
  321. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/indexer.py +0 -0
  322. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/invalidation.py +0 -0
  323. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/m2m_invalidation.py +0 -0
  324. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/models.py +0 -0
  325. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/projection.py +0 -0
  326. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/reconciliation.py +0 -0
  327. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/registry.py +0 -0
  328. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/tasks.py +0 -0
  329. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/search/utils.py +0 -0
  330. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/seeding/__init__.py +0 -0
  331. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/seeding/manager_landscape.py +0 -0
  332. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/uploads/__init__.py +0 -0
  333. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/uploads/adapters.py +0 -0
  334. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/uploads/checks.py +0 -0
  335. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/uploads/config.py +0 -0
  336. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/uploads/errors.py +0 -0
  337. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/uploads/finalization.py +0 -0
  338. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/uploads/graphql.py +0 -0
  339. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/uploads/graphql_types.py +0 -0
  340. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/uploads/metrics.py +0 -0
  341. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/uploads/models.py +0 -0
  342. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/uploads/public.py +0 -0
  343. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/uploads/s3.py +0 -0
  344. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/uploads/services.py +0 -0
  345. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/uploads/tokens.py +0 -0
  346. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/uploads/types.py +0 -0
  347. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/uploads/urls.py +0 -0
  348. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/uploads/views.py +0 -0
  349. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/utils/__init__.py +0 -0
  350. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/utils/_args_to_kwargs.py +0 -0
  351. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/utils/_cache_key_encoder.py +0 -0
  352. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/utils/_make_cache_key.py +0 -0
  353. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/utils/_none_to_zero.py +0 -0
  354. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/utils/executable_contract.py +0 -0
  355. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/utils/filter_parser.py +0 -0
  356. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/utils/format_string.py +0 -0
  357. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/utils/json_encoder.py +0 -0
  358. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/utils/path_mapping.py +0 -0
  359. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/utils/public_api.py +0 -0
  360. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/utils/testing.py +0 -0
  361. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/utils/type_checks.py +0 -0
  362. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/workflow/__init__.py +0 -0
  363. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/workflow/actions.py +0 -0
  364. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/workflow/backend_registry.py +0 -0
  365. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/workflow/backends/__init__.py +0 -0
  366. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/workflow/backends/celery.py +0 -0
  367. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/workflow/backends/local.py +0 -0
  368. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/workflow/backends/n8n.py +0 -0
  369. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/workflow/config.py +0 -0
  370. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/workflow/engine.py +0 -0
  371. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/workflow/event_registry.py +0 -0
  372. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/workflow/events.py +0 -0
  373. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/workflow/models.py +0 -0
  374. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/workflow/signal_bridge.py +0 -0
  375. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/workflow/tasks.py +0 -0
  376. {generalmanager-0.90.0 → generalmanager-0.91.0}/src/general_manager/workflow/telemetry.py +0 -0
  377. {generalmanager-0.90.0 → generalmanager-0.91.0}/tests/test_settings.py +0 -0
  378. {generalmanager-0.90.0 → generalmanager-0.91.0}/tests/test_urls.py +0 -0
  379. {generalmanager-0.90.0 → generalmanager-0.91.0}/tests/testing_asgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GeneralManager
3
- Version: 0.90.0
3
+ Version: 0.91.0
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.90.0"
7
+ version = "0.91.0"
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.90.0
3
+ Version: 0.91.0
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
@@ -53,6 +53,7 @@ src/general_manager/api/graphql_view.py
53
53
  src/general_manager/api/graphql_warmup.py
54
54
  src/general_manager/api/graphql_warmup_registry.py
55
55
  src/general_manager/api/graphql_warmup_tasks.py
56
+ src/general_manager/api/graphql_work_limits.py
56
57
  src/general_manager/api/mutation.py
57
58
  src/general_manager/api/mutation_controls.py
58
59
  src/general_manager/api/notification_batching.py
@@ -9,6 +9,7 @@ from typing import TYPE_CHECKING
9
9
 
10
10
  from graphql import GraphQLError
11
11
 
12
+ from general_manager.api.graphql_work_limits import get_graphql_work_limit
12
13
  from general_manager.bucket.base_bucket import Bucket
13
14
  from general_manager.bucket.request_bucket import RequestBucket
14
15
  from general_manager.manager.general_manager import GeneralManager
@@ -47,7 +48,7 @@ CUSTOM_PROJECTION_ERROR = (
47
48
  )
48
49
 
49
50
  # Bound field/path decisions; bucket materialization and row checks precede this.
50
- MAX_QUERY_PERMISSION_CANDIDATES = 1000
51
+ MAX_QUERY_PERMISSION_CANDIDATES: int | None = None
51
52
  _LOOKUPS = {
52
53
  "exact",
53
54
  "iexact",
@@ -79,11 +80,16 @@ class QueryFieldAuthorizationBudget:
79
80
  """Share only accounting across authorization calls in one operation."""
80
81
 
81
82
  decisions: int = 0
83
+ limit: int | None = field(
84
+ default_factory=lambda: get_graphql_work_limit(
85
+ "GRAPHQL_QUERY_PERMISSION_LIMIT", MAX_QUERY_PERMISSION_CANDIDATES
86
+ )
87
+ )
82
88
 
83
89
  def charge(self) -> None:
84
90
  """Reject work exceeding the operation's field/path decision limit."""
85
91
  self.decisions += 1
86
- if self.decisions > MAX_QUERY_PERMISSION_CANDIDATES:
92
+ if self.limit is not None and self.decisions > self.limit:
87
93
  raise GraphQLError(_LIMIT_ERROR)
88
94
 
89
95
 
@@ -10,7 +10,6 @@ from __future__ import annotations
10
10
  from dataclasses import replace
11
11
 
12
12
  import json
13
- import os
14
13
  from collections.abc import Callable, Generator, Iterable, Mapping
15
14
  from datetime import date, datetime
16
15
  from decimal import Decimal
@@ -28,6 +27,7 @@ from graphql import GraphQLError, GraphQLID
28
27
  from django.core.exceptions import FieldDoesNotExist
29
28
  from django.db import models
30
29
 
30
+ from general_manager.api.graphql_work_limits import get_graphql_work_limit
31
31
  from general_manager.conf import get_setting
32
32
  from general_manager.api.graphql_identifiers import property_identifier_type
33
33
  from general_manager.api.graphql_ordering import (
@@ -101,15 +101,11 @@ SearchTotalMode = Literal["exact", "bounded"]
101
101
  _BAD_USER_INPUT_CODE = "BAD_USER_INPUT"
102
102
  _PAGE_MUST_BE_POSITIVE = "page must be a positive integer."
103
103
  _PAGE_SIZE_MUST_BE_POSITIVE = "pageSize must be a positive integer."
104
- DEFAULT_GRAPHQL_SEARCH_TOTAL_SCAN_LIMIT = 1000
105
- _SEARCH_TOTAL_SCAN_LIMIT_UNSET = object()
104
+ DEFAULT_GRAPHQL_SEARCH_TOTAL_SCAN_LIMIT: int | None = None
106
105
  SEARCH_SOURCE_AUTHORIZATION_LIMIT_ERROR = (
107
106
  "Search source authorization candidate limit exceeded."
108
107
  )
109
108
  SEARCH_TOTAL_MODE_ERROR = "must be one of: exact, bounded."
110
- SEARCH_TOTAL_SCAN_LIMIT_ERROR = (
111
- "GRAPHQL_SEARCH_TOTAL_SCAN_LIMIT must be a positive integer."
112
- )
113
109
  _MALFORMED_NATIVE_ID = object()
114
110
 
115
111
  _SEARCH_SCAN_LIMIT_EXCEEDED = (
@@ -204,24 +200,11 @@ def normalize_search_total_mode(total_mode: str | None = None) -> SearchTotalMod
204
200
  return cast(SearchTotalMode, normalized)
205
201
 
206
202
 
207
- def get_graphql_search_total_scan_limit() -> int:
208
- """Resolve the shared candidate budget from Django settings, then the env."""
209
- raw_limit = get_setting(
210
- "GRAPHQL_SEARCH_TOTAL_SCAN_LIMIT",
211
- _SEARCH_TOTAL_SCAN_LIMIT_UNSET,
203
+ def get_graphql_search_total_scan_limit() -> int | None:
204
+ """Resolve the optional shared candidate budget from settings, then env."""
205
+ return get_graphql_work_limit(
206
+ "GRAPHQL_SEARCH_TOTAL_SCAN_LIMIT", DEFAULT_GRAPHQL_SEARCH_TOTAL_SCAN_LIMIT
212
207
  )
213
- if raw_limit is _SEARCH_TOTAL_SCAN_LIMIT_UNSET:
214
- env_limit = os.environ.get("GENERAL_MANAGER_GRAPHQL_SEARCH_TOTAL_SCAN_LIMIT")
215
- if env_limit is None:
216
- raw_limit = DEFAULT_GRAPHQL_SEARCH_TOTAL_SCAN_LIMIT
217
- else:
218
- try:
219
- raw_limit = int(env_limit)
220
- except ValueError:
221
- raise _bad_user_input_error(SEARCH_TOTAL_SCAN_LIMIT_ERROR) from None
222
- if not isinstance(raw_limit, int) or isinstance(raw_limit, bool) or raw_limit <= 0:
223
- raise _bad_user_input_error(SEARCH_TOTAL_SCAN_LIMIT_ERROR)
224
- return raw_limit
225
208
 
226
209
 
227
210
  def sort_search_hit_entries(
@@ -1569,6 +1552,9 @@ def register_search_query(
1569
1552
  QueryFieldAuthorizationBudget,
1570
1553
  )
1571
1554
 
1555
+ source_limit = get_graphql_work_limit(
1556
+ "GRAPHQL_SEARCH_SOURCE_AUTHORIZATION_LIMIT", MAX_QUERY_PERMISSION_CANDIDATES
1557
+ )
1572
1558
  source_candidate_count = 0
1573
1559
  authorization_budget = QueryFieldAuthorizationBudget()
1574
1560
 
@@ -1577,7 +1563,7 @@ def register_search_query(
1577
1563
  ) -> Generator[GeneralManager, None, None]:
1578
1564
  nonlocal source_candidate_count
1579
1565
  for candidate in source:
1580
- if source_candidate_count >= MAX_QUERY_PERMISSION_CANDIDATES:
1566
+ if source_limit is not None and source_candidate_count >= source_limit:
1581
1567
  raise GraphQLError(SEARCH_SOURCE_AUTHORIZATION_LIMIT_ERROR)
1582
1568
  source_candidate_count += 1
1583
1569
  if passes_permission_filters(candidate, info, permission_plan=plan):
@@ -1804,11 +1790,19 @@ def register_search_query(
1804
1790
  fast_source is not None and common_filter_execution_valid()
1805
1791
  )
1806
1792
  while True:
1807
- remaining_scan_budget = total_scan_limit - scanned_hits
1808
- if remaining_scan_budget <= 0:
1793
+ remaining_scan_budget = (
1794
+ None
1795
+ if total_scan_limit is None
1796
+ else total_scan_limit - scanned_hits
1797
+ )
1798
+ if remaining_scan_budget is not None and remaining_scan_budget <= 0:
1809
1799
  manager_total_is_exact = False
1810
1800
  break
1811
- query_limit = min(fetch_limit, remaining_scan_budget)
1801
+ query_limit = (
1802
+ fetch_limit
1803
+ if remaining_scan_budget is None
1804
+ else min(fetch_limit, remaining_scan_budget)
1805
+ )
1812
1806
  result = backend.search(
1813
1807
  index_name,
1814
1808
  query,
@@ -1981,7 +1975,7 @@ def register_search_query(
1981
1975
  break
1982
1976
  if len(result.hits) < query_limit and not can_continue_page:
1983
1977
  break
1984
- if scanned_hits >= total_scan_limit:
1978
+ if total_scan_limit is not None and scanned_hits >= total_scan_limit:
1985
1979
  manager_total_is_exact = False
1986
1980
  break
1987
1981
  total += total_hits_for_manager
@@ -0,0 +1,35 @@
1
+ """Server-owned optional GraphQL workload budgets, independent of permissions."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import os
6
+
7
+ from graphql import GraphQLError
8
+
9
+ from general_manager.conf import get_setting
10
+
11
+ _UNSET = object()
12
+
13
+
14
+ def get_graphql_work_limit(name: str, default: int | None = None) -> int | None:
15
+ """Resolve Django settings before environment; explicit None means unlimited."""
16
+ value = get_setting(name, _UNSET)
17
+ if value is _UNSET:
18
+ raw = os.environ.get(f"GENERAL_MANAGER_{name}")
19
+ if raw is None:
20
+ return default
21
+ if raw.strip().lower() in {"none", "unlimited"}:
22
+ return None
23
+ try:
24
+ value = int(raw)
25
+ except ValueError:
26
+ value = raw
27
+ if value is None:
28
+ return None
29
+ if isinstance(value, int) and not isinstance(value, bool) and value > 0:
30
+ return value
31
+ message = f"{name} must be a positive integer or None (unlimited)."
32
+ raise GraphQLError(
33
+ message,
34
+ extensions={"code": "BAD_USER_INPUT"},
35
+ )
@@ -45,6 +45,20 @@ class PermissionRelationResolutionError(PermissionError):
45
45
  )
46
46
 
47
47
 
48
+ def _resolved_relation_model(
49
+ field: models.ForeignKey[models.Model],
50
+ ) -> type[models.Model]:
51
+ """Use Django's resolved relation owner, not an early cached string reference."""
52
+ # RelatedField.related_model is cached; inspecting it during model assembly
53
+ # can retain a string even after Django resolves remote_field.model.
54
+ related_model = getattr(field.remote_field, "model", None)
55
+ if not isinstance(related_model, type) or not issubclass(
56
+ related_model, models.Model
57
+ ):
58
+ raise PermissionRelationResolutionError(field.name)
59
+ return related_model
60
+
61
+
48
62
  GeneralManagerData = TypeVar("GeneralManagerData", bound=GeneralManager)
49
63
 
50
64
 
@@ -299,7 +313,7 @@ class PermissionDataManager(Generic[GeneralManagerData]):
299
313
  if identifier is None or name == field.attname:
300
314
  return identifier
301
315
 
302
- related_type = field.related_model
316
+ related_type = _resolved_relation_model(field)
303
317
  manager_type = getattr(related_type, "_general_manager_class", None)
304
318
  # A write check needs the target on the write database even if a read
305
319
  # router would select a replica. Standalone checks retain Django hints.
@@ -342,7 +356,7 @@ class PermissionDataManager(Generic[GeneralManagerData]):
342
356
  backing = getattr(getattr(manager, "_interface", None), "_instance", None)
343
357
  if (
344
358
  manager.identification.get("id") != related.pk
345
- or not isinstance(backing, field.related_model)
359
+ or not isinstance(backing, _resolved_relation_model(field))
346
360
  or backing.pk != related.pk
347
361
  or backing._state.db != related._state.db
348
362
  or getattr(backing, field.target_field.attname)
File without changes