GeneralManager 0.71.0__tar.gz → 0.72.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 (297) hide show
  1. {generalmanager-0.71.0/src/GeneralManager.egg-info → generalmanager-0.72.0}/PKG-INFO +1 -1
  2. {generalmanager-0.71.0 → generalmanager-0.72.0}/pyproject.toml +1 -1
  3. {generalmanager-0.71.0 → generalmanager-0.72.0/src/GeneralManager.egg-info}/PKG-INFO +1 -1
  4. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/graphql_resolvers.py +165 -37
  5. {generalmanager-0.71.0 → generalmanager-0.72.0}/LICENSE +0 -0
  6. {generalmanager-0.71.0 → generalmanager-0.72.0}/README.md +0 -0
  7. {generalmanager-0.71.0 → generalmanager-0.72.0}/setup.cfg +0 -0
  8. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/GeneralManager.egg-info/SOURCES.txt +0 -0
  9. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
  10. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/GeneralManager.egg-info/requires.txt +0 -0
  11. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/GeneralManager.egg-info/top_level.txt +0 -0
  12. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/__init__.py +0 -0
  13. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/_types/__init__.py +0 -0
  14. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/_types/api.py +0 -0
  15. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/_types/bucket.py +0 -0
  16. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/_types/cache.py +0 -0
  17. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/_types/dataframes.py +0 -0
  18. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/_types/factory.py +0 -0
  19. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/_types/general_manager.py +0 -0
  20. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/_types/interface.py +0 -0
  21. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/_types/manager.py +0 -0
  22. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/_types/measurement.py +0 -0
  23. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/_types/permission.py +0 -0
  24. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/_types/rule.py +0 -0
  25. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/_types/search.py +0 -0
  26. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/_types/utils.py +0 -0
  27. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/__init__.py +0 -0
  28. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/graphql.py +0 -0
  29. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/graphql_as_of.py +0 -0
  30. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/graphql_errors.py +0 -0
  31. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/graphql_mutations.py +0 -0
  32. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/graphql_prefetch.py +0 -0
  33. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/graphql_relations.py +0 -0
  34. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/graphql_search.py +0 -0
  35. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
  36. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/graphql_subscriptions.py +0 -0
  37. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/graphql_view.py +0 -0
  38. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/graphql_warmup.py +0 -0
  39. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/graphql_warmup_registry.py +0 -0
  40. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/graphql_warmup_tasks.py +0 -0
  41. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/mutation.py +0 -0
  42. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/notification_batching.py +0 -0
  43. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/property.py +0 -0
  44. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/registry.py +0 -0
  45. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/remote_api.py +0 -0
  46. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/remote_invalidation.py +0 -0
  47. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/api/remote_invalidation_client.py +0 -0
  48. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/apps.py +0 -0
  49. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/as_of.py +0 -0
  50. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/bootstrap.py +0 -0
  51. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/bucket/__init__.py +0 -0
  52. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/bucket/base_bucket.py +0 -0
  53. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/bucket/calculation_bucket.py +0 -0
  54. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/bucket/database_bucket.py +0 -0
  55. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/bucket/group_bucket.py +0 -0
  56. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/bucket/indexing.py +0 -0
  57. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/bucket/request_bucket.py +0 -0
  58. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/cache/__init__.py +0 -0
  59. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/cache/cache_decorator.py +0 -0
  60. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/cache/cache_tracker.py +0 -0
  61. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/cache/data_change_context.py +0 -0
  62. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/cache/dependency_cache.py +0 -0
  63. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/cache/dependency_index.py +0 -0
  64. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/cache/dependency_matching.py +0 -0
  65. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/cache/dependency_publish.py +0 -0
  66. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/cache/dependency_shards.py +0 -0
  67. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/cache/model_dependency_collector.py +0 -0
  68. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/cache/run_context.py +0 -0
  69. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/cache/run_context_lru.py +0 -0
  70. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/cache/signals.py +0 -0
  71. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/__init__.py +0 -0
  72. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/audit.py +0 -0
  73. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/bootstrap.py +0 -0
  74. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/checks.py +0 -0
  75. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/consumer.py +0 -0
  76. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/errors.py +0 -0
  77. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/evals/__init__.py +0 -0
  78. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/evals/__main__.py +0 -0
  79. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/evals/baseline.py +0 -0
  80. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/evals/datasets/basic_queries.yaml +0 -0
  81. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/evals/datasets/demo_readiness.yaml +0 -0
  82. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/evals/datasets/edge_cases.yaml +0 -0
  83. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/evals/datasets/follow_ups.yaml +0 -0
  84. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/evals/datasets/large_schema.yaml +0 -0
  85. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/evals/datasets/multi_hop.yaml +0 -0
  86. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/evals/diagnostics.py +0 -0
  87. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/evals/fingerprints.py +0 -0
  88. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/evals/fixtures.py +0 -0
  89. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/evals/judges/__init__.py +0 -0
  90. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/evals/judges/answer_quality.py +0 -0
  91. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/evals/judges/contract.py +0 -0
  92. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/evals/judges/result_accuracy.py +0 -0
  93. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/evals/judges/tool_sequence.py +0 -0
  94. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/evals/readiness.py +0 -0
  95. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/evals/runner.py +0 -0
  96. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/evals/traces.py +0 -0
  97. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/grounding.py +0 -0
  98. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/models.py +0 -0
  99. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/providers/__init__.py +0 -0
  100. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/providers/_shared.py +0 -0
  101. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/providers/anthropic.py +0 -0
  102. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/providers/base.py +0 -0
  103. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/providers/google.py +0 -0
  104. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/providers/ollama.py +0 -0
  105. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/providers/openai.py +0 -0
  106. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/rate_limits.py +0 -0
  107. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/routing.py +0 -0
  108. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/schema_index.py +0 -0
  109. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/settings.py +0 -0
  110. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/signals.py +0 -0
  111. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/system_prompt.py +0 -0
  112. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/tool_metadata.py +0 -0
  113. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/tools.py +0 -0
  114. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/chat/views.py +0 -0
  115. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/conf.py +0 -0
  116. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/dataframes/__init__.py +0 -0
  117. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/dataframes/measurements.py +0 -0
  118. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/factory/__init__.py +0 -0
  119. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/factory/auto_factory.py +0 -0
  120. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/factory/factories.py +0 -0
  121. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/factory/factory_methods.py +0 -0
  122. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/__init__.py +0 -0
  123. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/base_interface.py +0 -0
  124. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/bundles/__init__.py +0 -0
  125. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/bundles/calculation.py +0 -0
  126. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/bundles/database.py +0 -0
  127. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/bundles/remote_manager.py +0 -0
  128. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/bundles/request.py +0 -0
  129. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/__init__.py +0 -0
  130. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/base.py +0 -0
  131. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/builtin.py +0 -0
  132. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
  133. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
  134. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
  135. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/configuration.py +0 -0
  136. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/core/observability.py +0 -0
  137. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/core/utils.py +0 -0
  138. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/exceptions.py +0 -0
  139. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
  140. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
  141. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
  142. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/factory.py +0 -0
  143. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
  144. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
  145. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/orm/history.py +0 -0
  146. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
  147. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
  148. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/orm/support.py +0 -0
  149. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
  150. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
  151. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +0 -0
  152. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
  153. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
  154. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
  155. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/read_only/_types.py +0 -0
  156. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
  157. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
  158. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/registry.py +0 -0
  159. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
  160. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
  161. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/infrastructure/__init__.py +0 -0
  162. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
  163. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
  164. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/interfaces/__init__.py +0 -0
  165. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/interfaces/calculation.py +0 -0
  166. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/interfaces/database.py +0 -0
  167. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/interfaces/existing_model.py +0 -0
  168. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/interfaces/read_only.py +0 -0
  169. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
  170. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/interfaces/request.py +0 -0
  171. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/manifests/__init__.py +0 -0
  172. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/manifests/capability_builder.py +0 -0
  173. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
  174. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/manifests/capability_models.py +0 -0
  175. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/orm_interface.py +0 -0
  176. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/requests.py +0 -0
  177. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/utils/__init__.py +0 -0
  178. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
  179. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/utils/errors.py +0 -0
  180. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/utils/history.py +0 -0
  181. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/interface/utils/models.py +0 -0
  182. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/logging.py +0 -0
  183. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/management/commands/chat_cleanup.py +0 -0
  184. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/management/commands/cleanup_upload_intents.py +0 -0
  185. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/management/commands/graphql_warmup.py +0 -0
  186. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/management/commands/graphql_warmup_refresh_due.py +0 -0
  187. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/management/commands/search_index.py +0 -0
  188. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/management/commands/search_reconcile.py +0 -0
  189. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
  190. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/management/commands/shell.py +0 -0
  191. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
  192. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
  193. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/manager/__init__.py +0 -0
  194. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/manager/general_manager.py +0 -0
  195. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/manager/group_manager.py +0 -0
  196. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/manager/input.py +0 -0
  197. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/manager/meta.py +0 -0
  198. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/measurement/__init__.py +0 -0
  199. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/measurement/measurement.py +0 -0
  200. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/measurement/measurement_field.py +0 -0
  201. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/metrics/__init__.py +0 -0
  202. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/metrics/graphql.py +0 -0
  203. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/migrations/0001_initial.py +0 -0
  204. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
  205. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
  206. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/migrations/0004_chat_persistence_models.py +0 -0
  207. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/migrations/0004_search_index_state.py +0 -0
  208. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/migrations/0005_merge_chat_search.py +0 -0
  209. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/migrations/0006_chat_pending_confirmation_scoped_ids.py +0 -0
  210. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/migrations/0007_upload_intent.py +0 -0
  211. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/migrations/0008_upload_finalization_versions.py +0 -0
  212. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/migrations/0009_upload_cleanup_state.py +0 -0
  213. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/migrations/0010_chat_pending_confirmation_portable_uniqueness.py +0 -0
  214. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/migrations/0011_search_index_state_dirty_generation.py +0 -0
  215. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/migrations/__init__.py +0 -0
  216. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/models.py +0 -0
  217. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/permission/__init__.py +0 -0
  218. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/permission/audit.py +0 -0
  219. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/permission/base_permission.py +0 -0
  220. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/permission/graphql_capabilities.py +0 -0
  221. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/permission/manager_based_permission.py +0 -0
  222. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/permission/mutation_permission.py +0 -0
  223. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/permission/permission_checks.py +0 -0
  224. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/permission/permission_data_manager.py +0 -0
  225. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/permission/utils.py +0 -0
  226. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/public_api_registry.py +0 -0
  227. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/py.typed +0 -0
  228. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/rule/__init__.py +0 -0
  229. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/rule/handler.py +0 -0
  230. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/rule/rule.py +0 -0
  231. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/search/__init__.py +0 -0
  232. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/search/async_tasks.py +0 -0
  233. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/search/backend.py +0 -0
  234. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/search/backend_registry.py +0 -0
  235. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/search/backends/__init__.py +0 -0
  236. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/search/backends/dev.py +0 -0
  237. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/search/backends/meilisearch.py +0 -0
  238. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/search/backends/opensearch.py +0 -0
  239. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/search/backends/typesense.py +0 -0
  240. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/search/checks.py +0 -0
  241. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/search/config.py +0 -0
  242. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/search/indexer.py +0 -0
  243. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/search/invalidation.py +0 -0
  244. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/search/m2m_invalidation.py +0 -0
  245. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/search/models.py +0 -0
  246. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/search/reconciliation.py +0 -0
  247. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/search/registry.py +0 -0
  248. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/search/tasks.py +0 -0
  249. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/search/utils.py +0 -0
  250. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/seeding/__init__.py +0 -0
  251. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/seeding/manager_landscape.py +0 -0
  252. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/uploads/__init__.py +0 -0
  253. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/uploads/adapters.py +0 -0
  254. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/uploads/checks.py +0 -0
  255. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/uploads/config.py +0 -0
  256. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/uploads/errors.py +0 -0
  257. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/uploads/finalization.py +0 -0
  258. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/uploads/graphql.py +0 -0
  259. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/uploads/graphql_types.py +0 -0
  260. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/uploads/metrics.py +0 -0
  261. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/uploads/models.py +0 -0
  262. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/uploads/public.py +0 -0
  263. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/uploads/s3.py +0 -0
  264. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/uploads/services.py +0 -0
  265. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/uploads/tokens.py +0 -0
  266. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/uploads/types.py +0 -0
  267. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/uploads/urls.py +0 -0
  268. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/uploads/views.py +0 -0
  269. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/utils/__init__.py +0 -0
  270. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/utils/args_to_kwargs.py +0 -0
  271. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/utils/filter_parser.py +0 -0
  272. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/utils/format_string.py +0 -0
  273. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/utils/json_encoder.py +0 -0
  274. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/utils/make_cache_key.py +0 -0
  275. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/utils/none_to_zero.py +0 -0
  276. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/utils/path_mapping.py +0 -0
  277. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/utils/public_api.py +0 -0
  278. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/utils/testing.py +0 -0
  279. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/utils/type_checks.py +0 -0
  280. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/workflow/__init__.py +0 -0
  281. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/workflow/actions.py +0 -0
  282. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/workflow/backend_registry.py +0 -0
  283. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/workflow/backends/__init__.py +0 -0
  284. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/workflow/backends/celery.py +0 -0
  285. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/workflow/backends/local.py +0 -0
  286. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/workflow/backends/n8n.py +0 -0
  287. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/workflow/config.py +0 -0
  288. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/workflow/engine.py +0 -0
  289. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/workflow/event_registry.py +0 -0
  290. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/workflow/events.py +0 -0
  291. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/workflow/models.py +0 -0
  292. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/workflow/signal_bridge.py +0 -0
  293. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/workflow/tasks.py +0 -0
  294. {generalmanager-0.71.0 → generalmanager-0.72.0}/src/general_manager/workflow/telemetry.py +0 -0
  295. {generalmanager-0.71.0 → generalmanager-0.72.0}/tests/test_settings.py +0 -0
  296. {generalmanager-0.71.0 → generalmanager-0.72.0}/tests/test_urls.py +0 -0
  297. {generalmanager-0.71.0 → generalmanager-0.72.0}/tests/testing_asgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GeneralManager
3
- Version: 0.71.0
3
+ Version: 0.72.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.71.0"
7
+ version = "0.72.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.71.0
3
+ Version: 0.72.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
@@ -37,6 +37,7 @@ from general_manager.permission.graphql_capabilities import (
37
37
  get_capability_context,
38
38
  get_graphql_capabilities,
39
39
  )
40
+ from general_manager.utils.filter_parser import UnknownInputFieldError
40
41
  from general_manager.utils.type_checks import safe_issubclass
41
42
 
42
43
  if TYPE_CHECKING:
@@ -88,6 +89,15 @@ class UnsupportedExcludeNoneRelationFilterError(ValueError):
88
89
  )
89
90
 
90
91
 
92
+ @dataclass(frozen=True, slots=True)
93
+ class QueryParameterPlan:
94
+ """Normalized filter and exclusion operations for a list query."""
95
+
96
+ filters: GraphQLFilterMapping
97
+ excludes: GraphQLFilterMapping
98
+ normalized_excludes: GraphQLFilterMapping
99
+
100
+
91
101
  @dataclass(slots=True)
92
102
  class ReadAuthorizationResult(Generic[GeneralManagerT]):
93
103
  """Aggregate outcome from GraphQL read prefiltering and row authorization.
@@ -148,6 +158,99 @@ def contains_none_relation_filter(input_val: object) -> bool:
148
158
  # ---------------------------------------------------------------------------
149
159
 
150
160
 
161
+ def build_query_parameter_plan(
162
+ filter_input: GraphQLFilterInput,
163
+ exclude_input: GraphQLFilterInput,
164
+ filter_normalizer: FilterNormalizer | None = None,
165
+ ) -> QueryParameterPlan:
166
+ """Parse and normalize filter and exclusion inputs once."""
167
+ filters = parse_input(filter_input)
168
+ excludes = parse_input(exclude_input)
169
+ normalized_excludes: GraphQLFilterMapping = {}
170
+
171
+ if filters and filter_normalizer is not None:
172
+ normalized = filter_normalizer(filters)
173
+ filters = normalized["filter"]
174
+ normalized_excludes = normalized["exclude"]
175
+
176
+ if excludes and filter_normalizer is not None:
177
+ if contains_none_relation_filter(excludes):
178
+ raise UnsupportedExcludeNoneRelationFilterError
179
+ normalized = filter_normalizer(excludes)
180
+ excludes = normalized["filter"]
181
+ normalized_excludes = {**normalized_excludes, **normalized["exclude"]}
182
+
183
+ return QueryParameterPlan(
184
+ filters=filters,
185
+ excludes=excludes,
186
+ normalized_excludes=normalized_excludes,
187
+ )
188
+
189
+
190
+ def partition_calculation_query_plan(
191
+ manager_class: type[GeneralManager],
192
+ plan: QueryParameterPlan,
193
+ ) -> tuple[QueryParameterPlan, QueryParameterPlan]:
194
+ """Partition calculation predicates into input and computed-property plans.
195
+
196
+ Calculation inputs can constrain the combinations generated by a
197
+ calculation bucket. Predicates rooted at GraphQL properties must be
198
+ deferred until those combinations have been materialized. This helper only
199
+ inspects interface metadata and the already-normalized plan; it does not
200
+ instantiate managers or access descriptors. Manager-input ``_id`` aliases
201
+ are classified with their declared input while preserving the original
202
+ lookup for the bucket parser.
203
+ """
204
+ interface = manager_class.Interface
205
+ input_fields = interface.input_fields
206
+ input_names = set(input_fields)
207
+ computed_names = set(interface.get_graph_ql_properties())
208
+ known_names = input_names | computed_names
209
+
210
+ def partition_mapping(
211
+ mapping: GraphQLFilterMapping,
212
+ ) -> tuple[GraphQLFilterMapping, GraphQLFilterMapping]:
213
+ input_mapping: GraphQLFilterMapping = {}
214
+ deferred_mapping: GraphQLFilterMapping = {}
215
+ for lookup, value in mapping.items():
216
+ root = lookup.partition("__")[0]
217
+ classified_root = root
218
+ if root not in known_names and root.endswith("_id"):
219
+ alias_root = root.removesuffix("_id")
220
+ alias_input = input_fields.get(alias_root)
221
+ if (
222
+ alias_input is not None
223
+ and isinstance(alias_input.type, type)
224
+ and issubclass(alias_input.type, GeneralManager)
225
+ ):
226
+ classified_root = alias_root
227
+ if classified_root not in known_names:
228
+ raise UnknownInputFieldError(root)
229
+ if classified_root in input_names:
230
+ input_mapping[lookup] = value
231
+ else:
232
+ deferred_mapping[lookup] = value
233
+ return input_mapping, deferred_mapping
234
+
235
+ input_filters, deferred_filters = partition_mapping(plan.filters)
236
+ input_excludes, deferred_excludes = partition_mapping(plan.excludes)
237
+ input_normalized_excludes, deferred_normalized_excludes = partition_mapping(
238
+ plan.normalized_excludes
239
+ )
240
+ return (
241
+ QueryParameterPlan(
242
+ filters=input_filters,
243
+ excludes=input_excludes,
244
+ normalized_excludes=input_normalized_excludes,
245
+ ),
246
+ QueryParameterPlan(
247
+ filters=deferred_filters,
248
+ excludes=deferred_excludes,
249
+ normalized_excludes=deferred_normalized_excludes,
250
+ ),
251
+ )
252
+
253
+
151
254
  def apply_sorting(
152
255
  queryset: Bucket[GeneralManager] | GroupBucket[GeneralManager],
153
256
  sort_by: graphene.Enum | None,
@@ -160,6 +263,26 @@ def apply_sorting(
160
263
  return queryset.sort(sort_by_str, reverse=reverse)
161
264
 
162
265
 
266
+ def apply_query_parameter_plan(
267
+ queryset: Bucket[GeneralManager],
268
+ plan: QueryParameterPlan,
269
+ sort_by: graphene.Enum | None,
270
+ reverse: bool,
271
+ ) -> Bucket[GeneralManager]:
272
+ """Apply a normalized query-parameter plan to *queryset*."""
273
+ if plan.filters:
274
+ queryset = queryset.filter(**plan.filters)
275
+ if plan.excludes:
276
+ queryset = queryset.exclude(**plan.excludes)
277
+ if plan.normalized_excludes:
278
+ queryset = queryset.exclude(**plan.normalized_excludes)
279
+
280
+ return cast(
281
+ Bucket[GeneralManager],
282
+ apply_sorting(queryset, sort_by, reverse),
283
+ )
284
+
285
+
163
286
  def apply_query_parameters(
164
287
  queryset: Bucket[GeneralManager],
165
288
  filter_input: GraphQLFilterInput,
@@ -199,32 +322,12 @@ def apply_query_parameters(
199
322
  Raises:
200
323
  UnsupportedExcludeNoneRelationFilterError: If an exclude input contains a nested relation ``none`` filter.
201
324
  """
202
- normalized_excludes: GraphQLFilterMapping = {}
203
-
204
- filters = parse_input(filter_input)
205
- if filters and filter_normalizer is not None:
206
- normalized = filter_normalizer(filters)
207
- filters = normalized["filter"]
208
- normalized_excludes = normalized["exclude"]
209
- if filters:
210
- queryset = queryset.filter(**filters)
211
-
212
- excludes = parse_input(exclude_input)
213
- if excludes and filter_normalizer is not None:
214
- if contains_none_relation_filter(excludes):
215
- raise UnsupportedExcludeNoneRelationFilterError
216
- normalized = filter_normalizer(excludes)
217
- excludes = normalized["filter"]
218
- normalized_excludes = {**normalized_excludes, **normalized["exclude"]}
219
- if excludes:
220
- queryset = queryset.exclude(**excludes)
221
- if normalized_excludes:
222
- queryset = queryset.exclude(**normalized_excludes)
223
-
224
- return cast(
225
- Bucket[GeneralManager],
226
- apply_sorting(queryset, sort_by, reverse),
325
+ plan = build_query_parameter_plan(
326
+ filter_input,
327
+ exclude_input,
328
+ filter_normalizer,
227
329
  )
330
+ return apply_query_parameter_plan(queryset, plan, sort_by, reverse)
228
331
 
229
332
 
230
333
  def apply_permission_filters(
@@ -688,13 +791,17 @@ def create_list_resolver(
688
791
  ``base_queryset._manager_class`` when that is a GeneralManager subclass,
689
792
  otherwise using ``fallback_manager_class``. That manager class drives
690
793
  permission checks, filter normalization, dependency prefetching, and
691
- capability warmups. The resolver applies permission prefilters and the
692
- permission row gate before user-supplied query arguments,
693
- then explicit filters, normalized filter-side excludes, explicit excludes,
694
- normalized exclude-side excludes, optional grouping, sorting, and pagination.
695
- Sorting therefore applies to records when grouping is omitted and to grouped
696
- manager objects when grouping is active. It computes ``total_count`` after
697
- grouping and sorting and before pagination. Non-grouped page items are
794
+ capability warmups. For non-calculation managers, the resolver applies
795
+ permission prefilters and the permission row gate before all user-supplied
796
+ query predicates. For calculation managers, it applies input predicates
797
+ before authorization to limit generated candidates, fences that exact
798
+ candidate subset before permission prefilters, then applies deferred
799
+ computed-property predicates afterward. Permission constraints can only
800
+ narrow the user-selected input domain. Grouping, sorting, and pagination
801
+ remain after those predicate phases. Sorting therefore applies to records
802
+ when grouping is omitted and to grouped manager objects when grouping is
803
+ active. It computes ``total_count`` after grouping and sorting and before
804
+ pagination. Non-grouped page items are
698
805
  materialized to a list; grouped results remain a
699
806
  ``GroupBucket`` and are returned as the Python-side ``items`` value. When
700
807
  grouping is active, pagination slices the group bucket before it is returned.
@@ -750,7 +857,6 @@ def create_list_resolver(
750
857
  and issubclass(manager_class, GeneralManager)
751
858
  ):
752
859
  manager_class = fallback_manager_class
753
- qs = apply_permission_filters(base_queryset, manager_class, info)
754
860
  bound_filter_normalizer = None
755
861
  if filter_normalizer is not None:
756
862
 
@@ -759,14 +865,36 @@ def create_list_resolver(
759
865
  ) -> NormalizedFilterPlan:
760
866
  return filter_normalizer(manager_class, filters)
761
867
 
762
- qs = apply_query_parameters(
763
- qs,
868
+ plan = build_query_parameter_plan(
764
869
  filter,
765
870
  exclude,
766
- None,
767
- reverse,
768
871
  filter_normalizer=bound_filter_normalizer,
769
872
  )
873
+ from general_manager.interface import CalculationInterface
874
+
875
+ interface = getattr(manager_class, "Interface", None)
876
+ if isinstance(interface, type) and issubclass(interface, CalculationInterface):
877
+ input_plan, deferred_plan = partition_calculation_query_plan(
878
+ manager_class,
879
+ plan,
880
+ )
881
+ input_queryset = apply_query_parameter_plan(
882
+ base_queryset,
883
+ input_plan,
884
+ None,
885
+ reverse,
886
+ )
887
+ if (
888
+ input_plan.filters
889
+ or input_plan.excludes
890
+ or input_plan.normalized_excludes
891
+ ):
892
+ input_queryset = input_queryset.with_instances(input_queryset)
893
+ qs = apply_permission_filters(input_queryset, manager_class, info)
894
+ qs = apply_query_parameter_plan(qs, deferred_plan, None, reverse)
895
+ else:
896
+ qs = apply_permission_filters(base_queryset, manager_class, info)
897
+ qs = apply_query_parameter_plan(qs, plan, None, reverse)
770
898
  qs_grouped = apply_grouping(qs, group_by)
771
899
  qs_sorted = apply_sorting(qs_grouped, sort_by, reverse)
772
900
 
File without changes