GeneralManager 0.82.2__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.
- {generalmanager-0.82.2/src/GeneralManager.egg-info → generalmanager-0.82.4}/PKG-INFO +1 -1
- {generalmanager-0.82.2 → generalmanager-0.82.4}/pyproject.toml +1 -1
- {generalmanager-0.82.2 → generalmanager-0.82.4/src/GeneralManager.egg-info}/PKG-INFO +1 -1
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql.py +7 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_output.py +44 -1
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_search.py +46 -10
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_type.py +8 -1
- {generalmanager-0.82.2 → generalmanager-0.82.4}/LICENSE +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/README.md +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/setup.cfg +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/GeneralManager.egg-info/SOURCES.txt +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/GeneralManager.egg-info/requires.txt +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/GeneralManager.egg-info/top_level.txt +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/_types/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/_types/api.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/_types/bucket.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/_types/cache.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/_types/dataframes.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/_types/factory.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/_types/general_manager.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/_types/interface.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/_types/manager.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/_types/measurement.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/_types/permission.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/_types/rule.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/_types/search.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/_types/utils.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_as_of.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_errors.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_groups.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_identifiers.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_mutations.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_ordering.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_prefetch.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_relations.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_resolvers.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_subscriptions.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_view.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_warmup.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_warmup_registry.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_warmup_tasks.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/mutation.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/notification_batching.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/property.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/registry.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/remote_api.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/remote_invalidation.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/remote_invalidation_client.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/apps.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/as_of.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/bootstrap.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/bucket/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/bucket/_materialized_bucket.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/bucket/_ordering.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/bucket/base_bucket.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/bucket/calculation_bucket.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/bucket/database_bucket.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/bucket/excel_bucket.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/bucket/group_bucket.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/bucket/indexing.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/bucket/projection.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/bucket/request_bucket.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/_dependency_graph.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/batch_refresh.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/cache_decorator.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/cache_tracker.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/data_change_context.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/dependency_cache.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/dependency_index.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/dependency_matching.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/dependency_publish.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/dependency_shards.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/model_dependency_collector.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/run_context.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/run_context_lru.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/signals.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/transaction_barrier.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/audit.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/bootstrap.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/checks.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/consumer.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/context.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/errors.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/__main__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/baseline.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/datasets/basic_queries.yaml +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/datasets/demo_readiness.yaml +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/datasets/edge_cases.yaml +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/datasets/follow_ups.yaml +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/datasets/large_schema.yaml +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/datasets/multi_hop.yaml +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/datasets/planned_orchestration.yaml +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/diagnostics.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/fingerprints.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/fixtures.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/judges/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/judges/answer_quality.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/judges/contract.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/judges/result_accuracy.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/judges/tool_sequence.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/readiness.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/runner.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/traces.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/grounding.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/models.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/planned/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/planned/budget.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/planned/calculations.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/planned/catalog.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/planned/config.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/planned/events.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/planned/evidence.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/planned/models.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/planned/planner.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/planned/provider_calls.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/planned/resolver.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/planned/routing.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/planned/scheduler.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/planned/synthesis.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/planned/validation.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/providers/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/providers/_shared.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/providers/anthropic.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/providers/base.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/providers/google.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/providers/ollama.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/providers/openai.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/rate_limits.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/routing.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/schema_index.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/settings.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/signals.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/system_prompt.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/tool_metadata.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/tools.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/turns.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/views.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/conf.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/dataframes/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/dataframes/measurements.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/factory/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/factory/auto_factory.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/factory/factories.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/factory/factory_methods.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/base_interface.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/bundles/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/bundles/calculation.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/bundles/database.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/bundles/excel.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/bundles/remote_manager.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/bundles/request.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/base.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/builtin.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/calculation/input_resolution.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/configuration.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/core/observability.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/core/utils.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/excel/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/exceptions.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/factory.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm/bulk.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm/create_many.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm/history.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm/support.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/orm_utils/update_state.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/read_only/_types.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/registry.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/excel.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/excel_store.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/excel_workbook.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/infrastructure/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/interfaces/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/interfaces/calculation.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/interfaces/database.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/interfaces/excel.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/interfaces/existing_model.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/interfaces/read_only.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/interfaces/request.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/manifests/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/manifests/capability_builder.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/manifests/capability_models.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/orm_interface.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/requests.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/utils/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/utils/errors.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/utils/history.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/interface/utils/models.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/logging.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/management/commands/chat_cleanup.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/management/commands/cleanup_upload_intents.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/management/commands/graphql_warmup.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/management/commands/graphql_warmup_refresh_due.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/management/commands/search_index.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/management/commands/search_reconcile.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/management/commands/shell.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/manager/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/manager/bulk_create.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/manager/general_manager.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/manager/group_manager.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/manager/input.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/manager/meta.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/measurement/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/measurement/measurement.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/measurement/measurement_field.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/metrics/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/metrics/graphql.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/migrations/0001_initial.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/migrations/0004_chat_persistence_models.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/migrations/0004_search_index_state.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/migrations/0005_merge_chat_search.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/migrations/0006_chat_pending_confirmation_scoped_ids.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/migrations/0007_upload_intent.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/migrations/0008_upload_finalization_versions.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/migrations/0009_upload_cleanup_state.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/migrations/0010_chat_pending_confirmation_portable_uniqueness.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/migrations/0011_search_index_state_dirty_generation.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/migrations/0012_chat_context_watermarks.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/migrations/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/models.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/permission/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/permission/audit.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/permission/base_permission.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/permission/graphql_capabilities.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/permission/manager_based_permission.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/permission/mutation_permission.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/permission/permission_checks.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/permission/permission_data_manager.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/permission/utils.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/public_api_registry.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/py.typed +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/rule/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/rule/handler.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/rule/rule.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/search/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/search/async_tasks.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/search/backend.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/search/backend_registry.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/search/backends/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/search/backends/dev.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/search/backends/meilisearch.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/search/backends/opensearch.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/search/backends/typesense.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/search/checks.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/search/config.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/search/indexer.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/search/invalidation.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/search/m2m_invalidation.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/search/models.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/search/reconciliation.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/search/registry.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/search/tasks.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/search/utils.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/seeding/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/seeding/manager_landscape.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/uploads/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/uploads/adapters.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/uploads/checks.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/uploads/config.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/uploads/errors.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/uploads/finalization.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/uploads/graphql.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/uploads/graphql_types.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/uploads/metrics.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/uploads/models.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/uploads/public.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/uploads/s3.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/uploads/services.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/uploads/tokens.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/uploads/types.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/uploads/urls.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/uploads/views.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/utils/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/utils/_args_to_kwargs.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/utils/_cache_key_encoder.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/utils/_make_cache_key.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/utils/_none_to_zero.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/utils/filter_parser.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/utils/format_string.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/utils/json_encoder.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/utils/path_mapping.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/utils/public_api.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/utils/testing.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/utils/type_checks.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/workflow/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/workflow/actions.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/workflow/backend_registry.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/workflow/backends/__init__.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/workflow/backends/celery.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/workflow/backends/local.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/workflow/backends/n8n.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/workflow/config.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/workflow/engine.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/workflow/event_registry.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/workflow/events.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/workflow/models.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/workflow/signal_bridge.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/workflow/tasks.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/workflow/telemetry.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/tests/test_settings.py +0 -0
- {generalmanager-0.82.2 → generalmanager-0.82.4}/tests/test_urls.py +0 -0
- {generalmanager-0.82.2 → 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
|
+
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.
|
|
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
|
+
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
|
|
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,
|
|
@@ -18,9 +18,10 @@ from typing import (
|
|
|
18
18
|
cast,
|
|
19
19
|
get_args,
|
|
20
20
|
)
|
|
21
|
+
from uuid import UUID
|
|
21
22
|
|
|
22
23
|
import graphene
|
|
23
|
-
from graphql import GraphQLError
|
|
24
|
+
from graphql import GraphQLError, GraphQLID
|
|
24
25
|
from django.core.exceptions import FieldDoesNotExist
|
|
25
26
|
from django.db import models
|
|
26
27
|
|
|
@@ -35,6 +36,7 @@ from general_manager.api.graphql_ordering import (
|
|
|
35
36
|
from general_manager.bucket._ordering import SortTerm, sort_items
|
|
36
37
|
from general_manager.logging import get_logger
|
|
37
38
|
from general_manager.manager.general_manager import GeneralManager
|
|
39
|
+
from general_manager.manager.input import Input
|
|
38
40
|
from general_manager.measurement.measurement import Measurement
|
|
39
41
|
from general_manager.utils.type_checks import safe_issubclass
|
|
40
42
|
from general_manager.search.backend_registry import get_search_backend
|
|
@@ -880,13 +882,16 @@ def normalize_id_filter_value(
|
|
|
880
882
|
value: object,
|
|
881
883
|
) -> object:
|
|
882
884
|
"""
|
|
883
|
-
Convert
|
|
885
|
+
Convert confirmed identity equality operands to their native types.
|
|
884
886
|
|
|
885
887
|
Actual ORM primary keys use the declared constructor input, independent of
|
|
886
888
|
the model column name. Raw relation references use the target field's
|
|
887
889
|
``to_python`` conversion, including ``to_field`` references. Ordered lookups
|
|
888
|
-
and non-list/tuple ``in`` values pass through unchanged.
|
|
889
|
-
|
|
890
|
+
and non-list/tuple ``in`` values pass through unchanged. Declared native
|
|
891
|
+
properties use their validated annotation and the standard Input cast;
|
|
892
|
+
collection operands retain the backend's existing element comparisons.
|
|
893
|
+
Equality lists retain production adapters' OR grammar. Constructor and
|
|
894
|
+
write validation remain separate. Null operands and elements remain null.
|
|
890
895
|
|
|
891
896
|
Raises:
|
|
892
897
|
Exceptions from ``Input.cast()`` or ORM field conversion propagate.
|
|
@@ -900,6 +905,22 @@ def normalize_id_filter_value(
|
|
|
900
905
|
interface = getattr(field_type, "Interface", None)
|
|
901
906
|
if interface is None:
|
|
902
907
|
return value
|
|
908
|
+
prop = interface.get_graph_ql_properties().get(attribute_name)
|
|
909
|
+
if prop is not None:
|
|
910
|
+
if not prop.is_identifier:
|
|
911
|
+
return value
|
|
912
|
+
native_type, _ = property_identifier_type(
|
|
913
|
+
prop.graphql_type_hint,
|
|
914
|
+
owner_name=field_type.__name__,
|
|
915
|
+
field_name=attribute_name,
|
|
916
|
+
)
|
|
917
|
+
scalar_input = Input(native_type)
|
|
918
|
+
if operator == "in" and not isinstance(value, (list, tuple)):
|
|
919
|
+
return value
|
|
920
|
+
if isinstance(value, (list, tuple)):
|
|
921
|
+
return [_cast_identity_scalar(scalar_input.cast, item) for item in value]
|
|
922
|
+
return _cast_identity_scalar(scalar_input.cast, value)
|
|
923
|
+
|
|
903
924
|
metadata = interface.get_attribute_types().get(attribute_name, {})
|
|
904
925
|
if not metadata.get("is_identifier"):
|
|
905
926
|
return value
|
|
@@ -924,10 +945,19 @@ def normalize_id_filter_value(
|
|
|
924
945
|
if converter is None:
|
|
925
946
|
return value
|
|
926
947
|
|
|
927
|
-
if operator == "in":
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
return [converter
|
|
948
|
+
if operator == "in" and not isinstance(value, (list, tuple)):
|
|
949
|
+
return value
|
|
950
|
+
if isinstance(value, (list, tuple)):
|
|
951
|
+
return [_cast_identity_scalar(converter, item) for item in value]
|
|
952
|
+
return _cast_identity_scalar(converter, value)
|
|
953
|
+
|
|
954
|
+
|
|
955
|
+
def _cast_identity_scalar(
|
|
956
|
+
converter: Callable[[object], object], value: object
|
|
957
|
+
) -> object:
|
|
958
|
+
"""Use existing ID validation before native casting can truncate JSON values."""
|
|
959
|
+
if value is not None and not isinstance(value, UUID):
|
|
960
|
+
GraphQLID.parse_value(value)
|
|
931
961
|
return converter(value)
|
|
932
962
|
|
|
933
963
|
|
|
@@ -1216,16 +1246,22 @@ def register_search_query(
|
|
|
1216
1246
|
decision = getattr(permission_plan, "decision", "conditional")
|
|
1217
1247
|
if decision == "deny_all":
|
|
1218
1248
|
continue
|
|
1249
|
+
# Shared indexes may give the same field different native types.
|
|
1250
|
+
# Keep parsed user filters and permission constraints untouched.
|
|
1251
|
+
manager_filters = {
|
|
1252
|
+
key: normalize_id_filter_value(manager_class, key, value)
|
|
1253
|
+
for key, value in parsed_filters.items()
|
|
1254
|
+
}
|
|
1219
1255
|
backend_shape = get_backend_shape(manager_class)
|
|
1220
1256
|
instance_check_reasons = resolve_instance_check_reasons(
|
|
1221
1257
|
permission_plan,
|
|
1222
1258
|
backend_shape=backend_shape,
|
|
1223
1259
|
)
|
|
1224
1260
|
filter_groups = (
|
|
1225
|
-
|
|
1261
|
+
manager_filters or None
|
|
1226
1262
|
if decision == "allow_all"
|
|
1227
1263
|
else merge_permission_filters(
|
|
1228
|
-
|
|
1264
|
+
manager_filters,
|
|
1229
1265
|
permission_plan.filters,
|
|
1230
1266
|
)
|
|
1231
1267
|
)
|
|
@@ -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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/GeneralManager.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/_types/general_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_identifiers.py
RENAMED
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_mutations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_relations.py
RENAMED
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_resolvers.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_subscriptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_warmup_registry.py
RENAMED
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/graphql_warmup_tasks.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/notification_batching.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/api/remote_invalidation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/bucket/_materialized_bucket.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/bucket/calculation_bucket.py
RENAMED
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/bucket/database_bucket.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/bucket/request_bucket.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/_dependency_graph.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/cache_decorator.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/data_change_context.py
RENAMED
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/dependency_cache.py
RENAMED
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/dependency_index.py
RENAMED
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/dependency_matching.py
RENAMED
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/dependency_publish.py
RENAMED
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/dependency_shards.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/run_context_lru.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/cache/transaction_barrier.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/diagnostics.py
RENAMED
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/fingerprints.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/judges/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/evals/judges/contract.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/planned/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/planned/calculations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/planned/evidence.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/planned/provider_calls.py
RENAMED
|
File without changes
|
{generalmanager-0.82.2 → generalmanager-0.82.4}/src/general_manager/chat/planned/resolver.py
RENAMED
|
File without changes
|
|
File without changes
|