GeneralManager 0.82.3__tar.gz → 0.82.4__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 (340) hide show
  1. {generalmanager-0.82.3/src/GeneralManager.egg-info → generalmanager-0.82.4}/PKG-INFO +1 -1
  2. {generalmanager-0.82.3 → generalmanager-0.82.4}/pyproject.toml +1 -1
  3. {generalmanager-0.82.3 → generalmanager-0.82.4/src/GeneralManager.egg-info}/PKG-INFO +1 -1
  4. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/graphql.py +7 -0
  5. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/graphql_output.py +44 -1
  6. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/graphql_type.py +8 -1
  7. {generalmanager-0.82.3 → generalmanager-0.82.4}/LICENSE +0 -0
  8. {generalmanager-0.82.3 → generalmanager-0.82.4}/README.md +0 -0
  9. {generalmanager-0.82.3 → generalmanager-0.82.4}/setup.cfg +0 -0
  10. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/GeneralManager.egg-info/SOURCES.txt +0 -0
  11. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
  12. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/GeneralManager.egg-info/requires.txt +0 -0
  13. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/GeneralManager.egg-info/top_level.txt +0 -0
  14. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/__init__.py +0 -0
  15. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/_types/__init__.py +0 -0
  16. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/_types/api.py +0 -0
  17. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/_types/bucket.py +0 -0
  18. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/_types/cache.py +0 -0
  19. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/_types/dataframes.py +0 -0
  20. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/_types/factory.py +0 -0
  21. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/_types/general_manager.py +0 -0
  22. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/_types/interface.py +0 -0
  23. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/_types/manager.py +0 -0
  24. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/_types/measurement.py +0 -0
  25. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/_types/permission.py +0 -0
  26. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/_types/rule.py +0 -0
  27. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/_types/search.py +0 -0
  28. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/_types/utils.py +0 -0
  29. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/__init__.py +0 -0
  30. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/graphql_as_of.py +0 -0
  31. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/graphql_errors.py +0 -0
  32. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/graphql_groups.py +0 -0
  33. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/graphql_identifiers.py +0 -0
  34. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/graphql_mutations.py +0 -0
  35. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/graphql_ordering.py +0 -0
  36. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/graphql_prefetch.py +0 -0
  37. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/graphql_relations.py +0 -0
  38. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/graphql_resolvers.py +0 -0
  39. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/graphql_search.py +0 -0
  40. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
  41. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/graphql_subscriptions.py +0 -0
  42. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/graphql_view.py +0 -0
  43. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/graphql_warmup.py +0 -0
  44. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/graphql_warmup_registry.py +0 -0
  45. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/graphql_warmup_tasks.py +0 -0
  46. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/mutation.py +0 -0
  47. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/notification_batching.py +0 -0
  48. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/property.py +0 -0
  49. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/registry.py +0 -0
  50. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/remote_api.py +0 -0
  51. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/remote_invalidation.py +0 -0
  52. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/api/remote_invalidation_client.py +0 -0
  53. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/apps.py +0 -0
  54. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/as_of.py +0 -0
  55. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/bootstrap.py +0 -0
  56. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/bucket/__init__.py +0 -0
  57. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/bucket/_materialized_bucket.py +0 -0
  58. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/bucket/_ordering.py +0 -0
  59. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/bucket/base_bucket.py +0 -0
  60. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/bucket/calculation_bucket.py +0 -0
  61. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/bucket/database_bucket.py +0 -0
  62. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/bucket/excel_bucket.py +0 -0
  63. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/bucket/group_bucket.py +0 -0
  64. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/bucket/indexing.py +0 -0
  65. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/bucket/projection.py +0 -0
  66. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/bucket/request_bucket.py +0 -0
  67. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/cache/__init__.py +0 -0
  68. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/cache/_dependency_graph.py +0 -0
  69. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/cache/batch_refresh.py +0 -0
  70. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/cache/cache_decorator.py +0 -0
  71. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/cache/cache_tracker.py +0 -0
  72. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/cache/data_change_context.py +0 -0
  73. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/cache/dependency_cache.py +0 -0
  74. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/cache/dependency_index.py +0 -0
  75. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/cache/dependency_matching.py +0 -0
  76. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/cache/dependency_publish.py +0 -0
  77. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/cache/dependency_shards.py +0 -0
  78. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/cache/model_dependency_collector.py +0 -0
  79. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/cache/run_context.py +0 -0
  80. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/cache/run_context_lru.py +0 -0
  81. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/cache/signals.py +0 -0
  82. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/cache/transaction_barrier.py +0 -0
  83. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/__init__.py +0 -0
  84. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/audit.py +0 -0
  85. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/bootstrap.py +0 -0
  86. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/checks.py +0 -0
  87. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/consumer.py +0 -0
  88. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/context.py +0 -0
  89. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/errors.py +0 -0
  90. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/evals/__init__.py +0 -0
  91. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/evals/__main__.py +0 -0
  92. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/evals/baseline.py +0 -0
  93. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/evals/datasets/basic_queries.yaml +0 -0
  94. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/evals/datasets/demo_readiness.yaml +0 -0
  95. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/evals/datasets/edge_cases.yaml +0 -0
  96. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/evals/datasets/follow_ups.yaml +0 -0
  97. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/evals/datasets/large_schema.yaml +0 -0
  98. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/evals/datasets/multi_hop.yaml +0 -0
  99. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/evals/datasets/planned_orchestration.yaml +0 -0
  100. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/evals/diagnostics.py +0 -0
  101. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/evals/fingerprints.py +0 -0
  102. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/evals/fixtures.py +0 -0
  103. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/evals/judges/__init__.py +0 -0
  104. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/evals/judges/answer_quality.py +0 -0
  105. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/evals/judges/contract.py +0 -0
  106. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/evals/judges/result_accuracy.py +0 -0
  107. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/evals/judges/tool_sequence.py +0 -0
  108. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/evals/readiness.py +0 -0
  109. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/evals/runner.py +0 -0
  110. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/evals/traces.py +0 -0
  111. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/grounding.py +0 -0
  112. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/models.py +0 -0
  113. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/planned/__init__.py +0 -0
  114. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/planned/budget.py +0 -0
  115. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/planned/calculations.py +0 -0
  116. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/planned/catalog.py +0 -0
  117. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/planned/config.py +0 -0
  118. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/planned/events.py +0 -0
  119. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/planned/evidence.py +0 -0
  120. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/planned/models.py +0 -0
  121. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/planned/planner.py +0 -0
  122. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/planned/provider_calls.py +0 -0
  123. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/planned/resolver.py +0 -0
  124. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/planned/routing.py +0 -0
  125. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/planned/scheduler.py +0 -0
  126. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/planned/synthesis.py +0 -0
  127. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/planned/validation.py +0 -0
  128. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/providers/__init__.py +0 -0
  129. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/providers/_shared.py +0 -0
  130. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/providers/anthropic.py +0 -0
  131. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/providers/base.py +0 -0
  132. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/providers/google.py +0 -0
  133. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/providers/ollama.py +0 -0
  134. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/providers/openai.py +0 -0
  135. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/rate_limits.py +0 -0
  136. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/routing.py +0 -0
  137. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/schema_index.py +0 -0
  138. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/settings.py +0 -0
  139. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/signals.py +0 -0
  140. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/system_prompt.py +0 -0
  141. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/tool_metadata.py +0 -0
  142. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/tools.py +0 -0
  143. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/turns.py +0 -0
  144. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/chat/views.py +0 -0
  145. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/conf.py +0 -0
  146. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/dataframes/__init__.py +0 -0
  147. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/dataframes/measurements.py +0 -0
  148. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/factory/__init__.py +0 -0
  149. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/factory/auto_factory.py +0 -0
  150. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/factory/factories.py +0 -0
  151. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/factory/factory_methods.py +0 -0
  152. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/__init__.py +0 -0
  153. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/base_interface.py +0 -0
  154. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/bundles/__init__.py +0 -0
  155. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/bundles/calculation.py +0 -0
  156. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/bundles/database.py +0 -0
  157. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/bundles/excel.py +0 -0
  158. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/bundles/remote_manager.py +0 -0
  159. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/bundles/request.py +0 -0
  160. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/__init__.py +0 -0
  161. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/base.py +0 -0
  162. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/builtin.py +0 -0
  163. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
  164. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
  165. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/calculation/input_resolution.py +0 -0
  166. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
  167. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/configuration.py +0 -0
  168. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/core/observability.py +0 -0
  169. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/core/utils.py +0 -0
  170. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/excel/__init__.py +0 -0
  171. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/exceptions.py +0 -0
  172. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
  173. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
  174. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
  175. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/factory.py +0 -0
  176. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
  177. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
  178. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm/bulk.py +0 -0
  179. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm/create_many.py +0 -0
  180. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm/history.py +0 -0
  181. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
  182. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
  183. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm/support.py +0 -0
  184. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
  185. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
  186. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +0 -0
  187. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
  188. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm_utils/update_state.py +0 -0
  189. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
  190. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
  191. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/read_only/_types.py +0 -0
  192. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
  193. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
  194. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/registry.py +0 -0
  195. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
  196. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
  197. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/excel.py +0 -0
  198. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/excel_store.py +0 -0
  199. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/excel_workbook.py +0 -0
  200. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/infrastructure/__init__.py +0 -0
  201. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
  202. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
  203. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/interfaces/__init__.py +0 -0
  204. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/interfaces/calculation.py +0 -0
  205. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/interfaces/database.py +0 -0
  206. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/interfaces/excel.py +0 -0
  207. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/interfaces/existing_model.py +0 -0
  208. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/interfaces/read_only.py +0 -0
  209. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
  210. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/interfaces/request.py +0 -0
  211. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/manifests/__init__.py +0 -0
  212. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/manifests/capability_builder.py +0 -0
  213. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
  214. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/manifests/capability_models.py +0 -0
  215. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/orm_interface.py +0 -0
  216. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/requests.py +0 -0
  217. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/utils/__init__.py +0 -0
  218. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
  219. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/utils/errors.py +0 -0
  220. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/utils/history.py +0 -0
  221. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/interface/utils/models.py +0 -0
  222. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/logging.py +0 -0
  223. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/management/commands/chat_cleanup.py +0 -0
  224. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/management/commands/cleanup_upload_intents.py +0 -0
  225. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/management/commands/graphql_warmup.py +0 -0
  226. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/management/commands/graphql_warmup_refresh_due.py +0 -0
  227. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/management/commands/search_index.py +0 -0
  228. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/management/commands/search_reconcile.py +0 -0
  229. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
  230. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/management/commands/shell.py +0 -0
  231. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
  232. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
  233. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/manager/__init__.py +0 -0
  234. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/manager/bulk_create.py +0 -0
  235. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/manager/general_manager.py +0 -0
  236. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/manager/group_manager.py +0 -0
  237. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/manager/input.py +0 -0
  238. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/manager/meta.py +0 -0
  239. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/measurement/__init__.py +0 -0
  240. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/measurement/measurement.py +0 -0
  241. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/measurement/measurement_field.py +0 -0
  242. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/metrics/__init__.py +0 -0
  243. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/metrics/graphql.py +0 -0
  244. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/migrations/0001_initial.py +0 -0
  245. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
  246. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
  247. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/migrations/0004_chat_persistence_models.py +0 -0
  248. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/migrations/0004_search_index_state.py +0 -0
  249. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/migrations/0005_merge_chat_search.py +0 -0
  250. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/migrations/0006_chat_pending_confirmation_scoped_ids.py +0 -0
  251. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/migrations/0007_upload_intent.py +0 -0
  252. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/migrations/0008_upload_finalization_versions.py +0 -0
  253. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/migrations/0009_upload_cleanup_state.py +0 -0
  254. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/migrations/0010_chat_pending_confirmation_portable_uniqueness.py +0 -0
  255. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/migrations/0011_search_index_state_dirty_generation.py +0 -0
  256. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/migrations/0012_chat_context_watermarks.py +0 -0
  257. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/migrations/__init__.py +0 -0
  258. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/models.py +0 -0
  259. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/permission/__init__.py +0 -0
  260. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/permission/audit.py +0 -0
  261. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/permission/base_permission.py +0 -0
  262. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/permission/graphql_capabilities.py +0 -0
  263. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/permission/manager_based_permission.py +0 -0
  264. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/permission/mutation_permission.py +0 -0
  265. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/permission/permission_checks.py +0 -0
  266. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/permission/permission_data_manager.py +0 -0
  267. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/permission/utils.py +0 -0
  268. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/public_api_registry.py +0 -0
  269. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/py.typed +0 -0
  270. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/rule/__init__.py +0 -0
  271. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/rule/handler.py +0 -0
  272. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/rule/rule.py +0 -0
  273. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/search/__init__.py +0 -0
  274. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/search/async_tasks.py +0 -0
  275. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/search/backend.py +0 -0
  276. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/search/backend_registry.py +0 -0
  277. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/search/backends/__init__.py +0 -0
  278. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/search/backends/dev.py +0 -0
  279. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/search/backends/meilisearch.py +0 -0
  280. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/search/backends/opensearch.py +0 -0
  281. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/search/backends/typesense.py +0 -0
  282. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/search/checks.py +0 -0
  283. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/search/config.py +0 -0
  284. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/search/indexer.py +0 -0
  285. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/search/invalidation.py +0 -0
  286. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/search/m2m_invalidation.py +0 -0
  287. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/search/models.py +0 -0
  288. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/search/reconciliation.py +0 -0
  289. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/search/registry.py +0 -0
  290. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/search/tasks.py +0 -0
  291. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/search/utils.py +0 -0
  292. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/seeding/__init__.py +0 -0
  293. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/seeding/manager_landscape.py +0 -0
  294. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/uploads/__init__.py +0 -0
  295. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/uploads/adapters.py +0 -0
  296. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/uploads/checks.py +0 -0
  297. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/uploads/config.py +0 -0
  298. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/uploads/errors.py +0 -0
  299. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/uploads/finalization.py +0 -0
  300. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/uploads/graphql.py +0 -0
  301. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/uploads/graphql_types.py +0 -0
  302. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/uploads/metrics.py +0 -0
  303. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/uploads/models.py +0 -0
  304. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/uploads/public.py +0 -0
  305. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/uploads/s3.py +0 -0
  306. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/uploads/services.py +0 -0
  307. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/uploads/tokens.py +0 -0
  308. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/uploads/types.py +0 -0
  309. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/uploads/urls.py +0 -0
  310. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/uploads/views.py +0 -0
  311. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/utils/__init__.py +0 -0
  312. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/utils/_args_to_kwargs.py +0 -0
  313. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/utils/_cache_key_encoder.py +0 -0
  314. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/utils/_make_cache_key.py +0 -0
  315. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/utils/_none_to_zero.py +0 -0
  316. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/utils/filter_parser.py +0 -0
  317. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/utils/format_string.py +0 -0
  318. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/utils/json_encoder.py +0 -0
  319. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/utils/path_mapping.py +0 -0
  320. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/utils/public_api.py +0 -0
  321. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/utils/testing.py +0 -0
  322. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/utils/type_checks.py +0 -0
  323. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/workflow/__init__.py +0 -0
  324. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/workflow/actions.py +0 -0
  325. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/workflow/backend_registry.py +0 -0
  326. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/workflow/backends/__init__.py +0 -0
  327. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/workflow/backends/celery.py +0 -0
  328. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/workflow/backends/local.py +0 -0
  329. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/workflow/backends/n8n.py +0 -0
  330. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/workflow/config.py +0 -0
  331. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/workflow/engine.py +0 -0
  332. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/workflow/event_registry.py +0 -0
  333. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/workflow/events.py +0 -0
  334. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/workflow/models.py +0 -0
  335. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/workflow/signal_bridge.py +0 -0
  336. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/workflow/tasks.py +0 -0
  337. {generalmanager-0.82.3 → generalmanager-0.82.4}/src/general_manager/workflow/telemetry.py +0 -0
  338. {generalmanager-0.82.3 → generalmanager-0.82.4}/tests/test_settings.py +0 -0
  339. {generalmanager-0.82.3 → generalmanager-0.82.4}/tests/test_urls.py +0 -0
  340. {generalmanager-0.82.3 → generalmanager-0.82.4}/tests/testing_asgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GeneralManager
3
- Version: 0.82.3
3
+ Version: 0.82.4
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.82.3"
7
+ version = "0.82.4"
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.82.3
3
+ Version: 0.82.4
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
@@ -100,6 +100,7 @@ from general_manager.api.graphql_mutations import (
100
100
  generate_delete_mutation_class as _generate_delete_mutation_class_fn,
101
101
  )
102
102
  from general_manager.api.graphql_output import (
103
+ GraphQLOutputIdentityMetadataError,
103
104
  create_output_field_resolver,
104
105
  map_graphql_output_annotation,
105
106
  resolve_output_type_hints,
@@ -518,6 +519,11 @@ class GraphQL:
518
519
  )
519
520
  fields: dict[str, graphene.Field] = {}
520
521
  for declared_field in dataclasses.fields(output_class):
522
+ is_identifier = declared_field.metadata.get("is_identifier", False)
523
+ if not isinstance(is_identifier, bool):
524
+ raise GraphQLOutputIdentityMetadataError(
525
+ output_name, declared_field.name, is_identifier
526
+ )
521
527
  mapped = map_graphql_output_annotation(
522
528
  hints[declared_field.name],
523
529
  owner_name=output_name,
@@ -528,6 +534,7 @@ class GraphQL:
528
534
  output_type_registry=cls.graphql_output_type_registry,
529
535
  measurement_type=MeasurementType,
530
536
  scalar_mapper=cls._map_field_to_graphene_base_type,
537
+ is_identifier=is_identifier,
531
538
  )
532
539
  field = cast(graphene.Field, mapped.field)
533
540
  field.resolver = create_output_field_resolver(
@@ -9,6 +9,7 @@ from decimal import Decimal
9
9
  import sys
10
10
  from types import UnionType
11
11
  from typing import Any, ForwardRef, Union, get_args, get_origin, get_type_hints
12
+ from uuid import UUID
12
13
 
13
14
  import graphene
14
15
 
@@ -40,6 +41,16 @@ class GraphQLOutputAnnotationError(TypeError):
40
41
  )
41
42
 
42
43
 
44
+ class GraphQLOutputIdentityMetadataError(TypeError):
45
+ """Raised when an output field's identity flag is not boolean."""
46
+
47
+ def __init__(self, owner_name: str, field_name: str, flag: object) -> None:
48
+ super().__init__(
49
+ f"Invalid is_identifier metadata for {owner_name}.{field_name}: "
50
+ f"expected bool, got {flag!r}"
51
+ )
52
+
53
+
43
54
  @dataclass(frozen=True, slots=True)
44
55
  class _MappedAnnotation:
45
56
  """Internal Graphene type metadata before a field wrapper is mounted."""
@@ -144,6 +155,7 @@ def _map_collection_annotation(
144
155
  output_type_registry: Mapping[str, type[graphene.ObjectType]],
145
156
  measurement_type: type[graphene.ObjectType],
146
157
  scalar_mapper: Callable[[type], type],
158
+ is_identifier: bool = False,
147
159
  ) -> _MappedAnnotation:
148
160
  origin = get_origin(annotation)
149
161
  if origin not in (list, tuple, set):
@@ -159,6 +171,13 @@ def _map_collection_annotation(
159
171
  raise _annotation_error(owner_name, field_name, annotation)
160
172
  element_annotation = args[0]
161
173
 
174
+ if is_identifier:
175
+ _, identity_type = _unwrap_optional_annotation(
176
+ element_annotation, owner_name=owner_name, field_name=field_name
177
+ )
178
+ if identity_type not in (int, str, UUID):
179
+ raise _annotation_error(owner_name, field_name, annotation)
180
+
162
181
  element = _map_annotation(
163
182
  element_annotation,
164
183
  owner_name=owner_name,
@@ -169,6 +188,7 @@ def _map_collection_annotation(
169
188
  output_type_registry=output_type_registry,
170
189
  measurement_type=measurement_type,
171
190
  scalar_mapper=scalar_mapper,
191
+ is_identifier=is_identifier,
172
192
  )
173
193
  element_type = element.graphene_type
174
194
  if not element.nullable:
@@ -192,6 +212,7 @@ def _map_non_optional_value(
192
212
  output_type_registry: Mapping[str, type[graphene.ObjectType]],
193
213
  measurement_type: type[graphene.ObjectType],
194
214
  scalar_mapper: Callable[[type], type],
215
+ is_identifier: bool = False,
195
216
  ) -> _MappedAnnotation:
196
217
  annotation = _resolve_registered_name(
197
218
  annotation,
@@ -220,6 +241,17 @@ def _map_non_optional_value(
220
241
  output_type_registry=output_type_registry,
221
242
  measurement_type=measurement_type,
222
243
  scalar_mapper=scalar_mapper,
244
+ is_identifier=is_identifier,
245
+ )
246
+
247
+ if is_identifier:
248
+ if annotation not in (int, str, UUID):
249
+ raise _annotation_error(owner_name, field_name, annotation)
250
+ return _MappedAnnotation(
251
+ graphene.ID,
252
+ annotation,
253
+ nullable=False,
254
+ contains_measurement=False,
223
255
  )
224
256
 
225
257
  if safe_issubclass(annotation, GraphQLType):
@@ -290,6 +322,7 @@ def _map_annotation(
290
322
  output_type_registry: Mapping[str, type[graphene.ObjectType]],
291
323
  measurement_type: type[graphene.ObjectType],
292
324
  scalar_mapper: Callable[[type], type],
325
+ is_identifier: bool = False,
293
326
  ) -> _MappedAnnotation:
294
327
  nullable, concrete = _unwrap_optional_annotation(
295
328
  annotation,
@@ -306,6 +339,7 @@ def _map_annotation(
306
339
  output_type_registry=output_type_registry,
307
340
  measurement_type=measurement_type,
308
341
  scalar_mapper=scalar_mapper,
342
+ is_identifier=is_identifier,
309
343
  )
310
344
  return replace(mapped, nullable=nullable)
311
345
 
@@ -322,6 +356,7 @@ def _map_non_optional_annotation(
322
356
  measurement_type: type[graphene.ObjectType],
323
357
  scalar_mapper: Callable[[type], type],
324
358
  required: bool,
359
+ is_identifier: bool = False,
325
360
  ) -> MappedGraphQLOutput:
326
361
  """Map one non-optional annotation to a Graphene field."""
327
362
  mapped = _map_non_optional_value(
@@ -334,6 +369,7 @@ def _map_non_optional_annotation(
334
369
  output_type_registry=output_type_registry,
335
370
  measurement_type=measurement_type,
336
371
  scalar_mapper=scalar_mapper,
372
+ is_identifier=is_identifier,
337
373
  )
338
374
  field_kwargs: dict[str, object] = {}
339
375
  if mapped.contains_measurement:
@@ -355,8 +391,14 @@ def map_graphql_output_annotation(
355
391
  output_type_registry: Mapping[str, type[graphene.ObjectType]],
356
392
  measurement_type: type[graphene.ObjectType],
357
393
  scalar_mapper: Callable[[type], type],
394
+ is_identifier: bool = False,
358
395
  ) -> MappedGraphQLOutput:
359
- """Map a strict GraphQL output annotation to a mounted Graphene field."""
396
+ """Map a strict output hint, preserving nullability and native values.
397
+
398
+ Explicit identity fields accept int, str, UUID, and supported flat
399
+ collections of those types. Their resolver type stays native while the
400
+ generated scalar is ID. Unmarked fields retain the strict legacy mapping.
401
+ """
360
402
  nullable, concrete_type = _unwrap_optional_annotation(
361
403
  annotation,
362
404
  owner_name=owner_name,
@@ -374,6 +416,7 @@ def map_graphql_output_annotation(
374
416
  measurement_type=measurement_type,
375
417
  scalar_mapper=scalar_mapper,
376
418
  required=not nullable,
419
+ is_identifier=is_identifier,
377
420
  )
378
421
  except GraphQLOutputAnnotationError as error:
379
422
  # Preserve the annotation written on the owning field in diagnostics,
@@ -29,7 +29,14 @@ class GraphQLTypeMeta(type):
29
29
 
30
30
 
31
31
  class GraphQLType(metaclass=GraphQLTypeMeta):
32
- """Frozen annotated value exposed only as a GraphQL output object."""
32
+ """Frozen annotated value exposed only as a GraphQL output object.
33
+
34
+ Use ``dataclasses.field(metadata={"is_identifier": True})`` to declare
35
+ native int, str, or UUID identity fields and their supported homogeneous
36
+ collections. Schema generation preserves annotation nullability and native
37
+ values while exposing ID scalars. Missing or false metadata keeps existing
38
+ output types; other flag values fail schema generation with TypeError.
39
+ """
33
40
 
34
41
 
35
42
  def get_registered_graphql_types() -> tuple[type[GraphQLType], ...]:
File without changes