GeneralManager 0.82.1__tar.gz → 0.82.3__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.1/src/GeneralManager.egg-info → generalmanager-0.82.3}/PKG-INFO +1 -1
- {generalmanager-0.82.1 → generalmanager-0.82.3}/pyproject.toml +1 -1
- {generalmanager-0.82.1 → generalmanager-0.82.3/src/GeneralManager.egg-info}/PKG-INFO +1 -1
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql.py +18 -1
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_identifiers.py +43 -1
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_search.py +56 -11
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/property.py +18 -1
- {generalmanager-0.82.1 → generalmanager-0.82.3}/LICENSE +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/README.md +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/setup.cfg +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/GeneralManager.egg-info/SOURCES.txt +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/GeneralManager.egg-info/requires.txt +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/GeneralManager.egg-info/top_level.txt +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/_types/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/_types/api.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/_types/bucket.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/_types/cache.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/_types/dataframes.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/_types/factory.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/_types/general_manager.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/_types/interface.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/_types/manager.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/_types/measurement.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/_types/permission.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/_types/rule.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/_types/search.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/_types/utils.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_as_of.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_errors.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_groups.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_mutations.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_ordering.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_output.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_prefetch.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_relations.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_resolvers.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_subscriptions.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_type.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_view.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_warmup.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_warmup_registry.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_warmup_tasks.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/mutation.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/notification_batching.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/registry.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/remote_api.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/remote_invalidation.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/remote_invalidation_client.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/apps.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/as_of.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/bootstrap.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/bucket/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/bucket/_materialized_bucket.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/bucket/_ordering.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/bucket/base_bucket.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/bucket/calculation_bucket.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/bucket/database_bucket.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/bucket/excel_bucket.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/bucket/group_bucket.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/bucket/indexing.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/bucket/projection.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/bucket/request_bucket.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/_dependency_graph.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/batch_refresh.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/cache_decorator.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/cache_tracker.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/data_change_context.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/dependency_cache.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/dependency_index.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/dependency_matching.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/dependency_publish.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/dependency_shards.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/model_dependency_collector.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/run_context.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/run_context_lru.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/signals.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/transaction_barrier.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/audit.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/bootstrap.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/checks.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/consumer.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/context.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/errors.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/__main__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/baseline.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/datasets/basic_queries.yaml +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/datasets/demo_readiness.yaml +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/datasets/edge_cases.yaml +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/datasets/follow_ups.yaml +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/datasets/large_schema.yaml +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/datasets/multi_hop.yaml +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/datasets/planned_orchestration.yaml +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/diagnostics.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/fingerprints.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/fixtures.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/judges/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/judges/answer_quality.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/judges/contract.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/judges/result_accuracy.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/judges/tool_sequence.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/readiness.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/runner.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/traces.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/grounding.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/models.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/planned/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/planned/budget.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/planned/calculations.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/planned/catalog.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/planned/config.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/planned/events.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/planned/evidence.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/planned/models.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/planned/planner.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/planned/provider_calls.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/planned/resolver.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/planned/routing.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/planned/scheduler.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/planned/synthesis.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/planned/validation.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/providers/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/providers/_shared.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/providers/anthropic.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/providers/base.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/providers/google.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/providers/ollama.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/providers/openai.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/rate_limits.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/routing.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/schema_index.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/settings.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/signals.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/system_prompt.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/tool_metadata.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/tools.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/turns.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/views.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/conf.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/dataframes/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/dataframes/measurements.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/factory/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/factory/auto_factory.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/factory/factories.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/factory/factory_methods.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/base_interface.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/bundles/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/bundles/calculation.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/bundles/database.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/bundles/excel.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/bundles/remote_manager.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/bundles/request.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/base.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/builtin.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/calculation/input_resolution.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/configuration.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/core/observability.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/core/utils.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/excel/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/exceptions.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/factory.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/orm/bulk.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/orm/create_many.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/orm/history.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/orm/support.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/orm_utils/update_state.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/read_only/_types.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/registry.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/excel.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/excel_store.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/excel_workbook.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/infrastructure/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/interfaces/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/interfaces/calculation.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/interfaces/database.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/interfaces/excel.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/interfaces/existing_model.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/interfaces/read_only.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/interfaces/request.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/manifests/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/manifests/capability_builder.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/manifests/capability_models.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/orm_interface.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/requests.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/utils/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/utils/errors.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/utils/history.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/interface/utils/models.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/logging.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/management/commands/chat_cleanup.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/management/commands/cleanup_upload_intents.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/management/commands/graphql_warmup.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/management/commands/graphql_warmup_refresh_due.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/management/commands/search_index.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/management/commands/search_reconcile.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/management/commands/shell.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/manager/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/manager/bulk_create.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/manager/general_manager.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/manager/group_manager.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/manager/input.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/manager/meta.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/measurement/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/measurement/measurement.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/measurement/measurement_field.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/metrics/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/metrics/graphql.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/migrations/0001_initial.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/migrations/0004_chat_persistence_models.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/migrations/0004_search_index_state.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/migrations/0005_merge_chat_search.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/migrations/0006_chat_pending_confirmation_scoped_ids.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/migrations/0007_upload_intent.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/migrations/0008_upload_finalization_versions.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/migrations/0009_upload_cleanup_state.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/migrations/0010_chat_pending_confirmation_portable_uniqueness.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/migrations/0011_search_index_state_dirty_generation.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/migrations/0012_chat_context_watermarks.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/migrations/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/models.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/permission/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/permission/audit.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/permission/base_permission.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/permission/graphql_capabilities.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/permission/manager_based_permission.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/permission/mutation_permission.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/permission/permission_checks.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/permission/permission_data_manager.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/permission/utils.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/public_api_registry.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/py.typed +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/rule/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/rule/handler.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/rule/rule.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/search/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/search/async_tasks.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/search/backend.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/search/backend_registry.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/search/backends/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/search/backends/dev.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/search/backends/meilisearch.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/search/backends/opensearch.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/search/backends/typesense.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/search/checks.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/search/config.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/search/indexer.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/search/invalidation.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/search/m2m_invalidation.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/search/models.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/search/reconciliation.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/search/registry.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/search/tasks.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/search/utils.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/seeding/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/seeding/manager_landscape.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/uploads/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/uploads/adapters.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/uploads/checks.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/uploads/config.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/uploads/errors.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/uploads/finalization.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/uploads/graphql.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/uploads/graphql_types.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/uploads/metrics.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/uploads/models.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/uploads/public.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/uploads/s3.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/uploads/services.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/uploads/tokens.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/uploads/types.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/uploads/urls.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/uploads/views.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/utils/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/utils/_args_to_kwargs.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/utils/_cache_key_encoder.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/utils/_make_cache_key.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/utils/_none_to_zero.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/utils/filter_parser.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/utils/format_string.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/utils/json_encoder.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/utils/path_mapping.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/utils/public_api.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/utils/testing.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/utils/type_checks.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/workflow/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/workflow/actions.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/workflow/backend_registry.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/workflow/backends/__init__.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/workflow/backends/celery.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/workflow/backends/local.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/workflow/backends/n8n.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/workflow/config.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/workflow/engine.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/workflow/event_registry.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/workflow/events.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/workflow/models.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/workflow/signal_bridge.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/workflow/tasks.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/workflow/telemetry.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/tests/test_settings.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/tests/test_urls.py +0 -0
- {generalmanager-0.82.1 → generalmanager-0.82.3}/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.3
|
|
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.3"
|
|
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.3
|
|
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
|
|
@@ -38,7 +38,10 @@ from django.core.exceptions import ObjectDoesNotExist
|
|
|
38
38
|
from django.db import DEFAULT_DB_ALIAS, models, transaction
|
|
39
39
|
from django.utils.module_loading import import_string
|
|
40
40
|
|
|
41
|
-
from general_manager.api.graphql_identifiers import
|
|
41
|
+
from general_manager.api.graphql_identifiers import (
|
|
42
|
+
build_identification_arguments,
|
|
43
|
+
property_identifier_type,
|
|
44
|
+
)
|
|
42
45
|
from general_manager.bucket.base_bucket import Bucket
|
|
43
46
|
from general_manager.bucket.group_bucket import GroupBucket
|
|
44
47
|
from general_manager.cache.dependency_index import (
|
|
@@ -929,6 +932,20 @@ class GraphQL:
|
|
|
929
932
|
) in generalManagerClass.Interface.get_graph_ql_properties().items():
|
|
930
933
|
raw_hint = attr_value.graphql_type_hint
|
|
931
934
|
|
|
935
|
+
if attr_value.is_identifier:
|
|
936
|
+
native_type, is_collection = property_identifier_type(
|
|
937
|
+
raw_hint,
|
|
938
|
+
owner_name=generalManagerClass.__name__,
|
|
939
|
+
field_name=attr_name,
|
|
940
|
+
)
|
|
941
|
+
fields[attr_name] = (
|
|
942
|
+
graphene.List(graphene.ID) if is_collection else graphene.ID()
|
|
943
|
+
)
|
|
944
|
+
fields[f"resolve_{attr_name}"] = cls._create_resolver(
|
|
945
|
+
attr_name, native_type
|
|
946
|
+
)
|
|
947
|
+
continue
|
|
948
|
+
|
|
932
949
|
if _contains_measurement(raw_hint):
|
|
933
950
|
mapped = map_graphql_output_annotation(
|
|
934
951
|
raw_hint,
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_identifiers.py
RENAMED
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
from collections.abc import Mapping
|
|
6
|
-
from
|
|
6
|
+
from types import UnionType
|
|
7
|
+
from typing import Annotated, Union, cast, get_args, get_origin
|
|
8
|
+
from uuid import UUID
|
|
7
9
|
|
|
8
10
|
import graphene
|
|
9
11
|
from django.db import models
|
|
@@ -16,9 +18,49 @@ from general_manager.api.graphql_relations import (
|
|
|
16
18
|
get_graphql_manager_registry,
|
|
17
19
|
resolve_general_manager_type,
|
|
18
20
|
)
|
|
21
|
+
from general_manager.api.graphql_output import GraphQLOutputAnnotationError
|
|
19
22
|
from general_manager.manager.general_manager import GeneralManager
|
|
20
23
|
|
|
21
24
|
|
|
25
|
+
def property_identifier_type(
|
|
26
|
+
annotation: object, *, owner_name: str, field_name: str
|
|
27
|
+
) -> tuple[type, bool]:
|
|
28
|
+
"""Validate an explicit native identity hint and return its type and shape.
|
|
29
|
+
|
|
30
|
+
This shared interpretation lets output and filter builders consume the
|
|
31
|
+
descriptor's public ``is_identifier`` flag without changing its annotation
|
|
32
|
+
or the native resolver value. Optional wrappers do not add non-null output
|
|
33
|
+
constraints to legacy manager properties.
|
|
34
|
+
"""
|
|
35
|
+
original_annotation = annotation
|
|
36
|
+
|
|
37
|
+
def unwrap(hint: object) -> object:
|
|
38
|
+
while get_origin(hint) is Annotated:
|
|
39
|
+
hint = get_args(hint)[0]
|
|
40
|
+
if get_origin(hint) in (Union, UnionType):
|
|
41
|
+
members = get_args(hint)
|
|
42
|
+
if len(members) == 2 and type(None) in members:
|
|
43
|
+
return unwrap(next(t for t in members if t is not type(None)))
|
|
44
|
+
return hint
|
|
45
|
+
|
|
46
|
+
annotation = unwrap(annotation)
|
|
47
|
+
origin = get_origin(annotation)
|
|
48
|
+
is_collection = origin in (list, tuple, set)
|
|
49
|
+
if is_collection:
|
|
50
|
+
elements = get_args(annotation)
|
|
51
|
+
if origin is tuple and len(elements) == 2 and elements[1] is Ellipsis:
|
|
52
|
+
elements = elements[:1]
|
|
53
|
+
if elements and (origin is tuple or len(elements) == 1):
|
|
54
|
+
native_type = unwrap(elements[0])
|
|
55
|
+
if native_type in (int, str, UUID) and all(
|
|
56
|
+
unwrap(element) is native_type for element in elements
|
|
57
|
+
):
|
|
58
|
+
return cast(type, native_type), True
|
|
59
|
+
elif annotation in (int, str, UUID):
|
|
60
|
+
return cast(type, annotation), False
|
|
61
|
+
raise GraphQLOutputAnnotationError(owner_name, field_name, original_annotation)
|
|
62
|
+
|
|
63
|
+
|
|
22
64
|
def is_orm_identifier_input(manager_class: type[GeneralManager], name: str) -> bool:
|
|
23
65
|
"""Identify the ORM constructor alias addressing the actual model PK."""
|
|
24
66
|
model = getattr(manager_class.Interface, "_model", None)
|
|
@@ -18,13 +18,15 @@ 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
|
|
|
27
28
|
from general_manager.conf import get_setting
|
|
29
|
+
from general_manager.api.graphql_identifiers import property_identifier_type
|
|
28
30
|
from general_manager.api.graphql_ordering import (
|
|
29
31
|
GraphQLOrderingInputError,
|
|
30
32
|
create_ordering_types,
|
|
@@ -34,6 +36,7 @@ from general_manager.api.graphql_ordering import (
|
|
|
34
36
|
from general_manager.bucket._ordering import SortTerm, sort_items
|
|
35
37
|
from general_manager.logging import get_logger
|
|
36
38
|
from general_manager.manager.general_manager import GeneralManager
|
|
39
|
+
from general_manager.manager.input import Input
|
|
37
40
|
from general_manager.measurement.measurement import Measurement
|
|
38
41
|
from general_manager.utils.type_checks import safe_issubclass
|
|
39
42
|
from general_manager.search.backend_registry import get_search_backend
|
|
@@ -842,12 +845,20 @@ def create_filter_options(
|
|
|
842
845
|
continue
|
|
843
846
|
hints = [t for t in get_args(prop.graphql_type_hint) if t is not type(None)]
|
|
844
847
|
prop_type = hints[0] if hints else cast(type, prop.graphql_type_hint)
|
|
848
|
+
prop_info: dict[str, object] = {}
|
|
849
|
+
if prop.is_identifier:
|
|
850
|
+
prop_type, _ = property_identifier_type(
|
|
851
|
+
prop.graphql_type_hint,
|
|
852
|
+
owner_name=field_type.__name__,
|
|
853
|
+
field_name=prop_name,
|
|
854
|
+
)
|
|
855
|
+
prop_info["is_identifier"] = True
|
|
845
856
|
filter_fields = {
|
|
846
857
|
**filter_fields,
|
|
847
858
|
**{
|
|
848
859
|
k: v
|
|
849
860
|
for k, v in get_filter_options(
|
|
850
|
-
prop_type, prop_name, map_field_to_graphene_read
|
|
861
|
+
prop_type, prop_name, map_field_to_graphene_read, prop_info
|
|
851
862
|
)
|
|
852
863
|
if v is not None
|
|
853
864
|
},
|
|
@@ -871,13 +882,16 @@ def normalize_id_filter_value(
|
|
|
871
882
|
value: object,
|
|
872
883
|
) -> object:
|
|
873
884
|
"""
|
|
874
|
-
Convert
|
|
885
|
+
Convert confirmed identity equality operands to their native types.
|
|
875
886
|
|
|
876
887
|
Actual ORM primary keys use the declared constructor input, independent of
|
|
877
888
|
the model column name. Raw relation references use the target field's
|
|
878
889
|
``to_python`` conversion, including ``to_field`` references. Ordered lookups
|
|
879
|
-
and non-list/tuple ``in`` values pass through unchanged.
|
|
880
|
-
|
|
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.
|
|
881
895
|
|
|
882
896
|
Raises:
|
|
883
897
|
Exceptions from ``Input.cast()`` or ORM field conversion propagate.
|
|
@@ -891,6 +905,22 @@ def normalize_id_filter_value(
|
|
|
891
905
|
interface = getattr(field_type, "Interface", None)
|
|
892
906
|
if interface is None:
|
|
893
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
|
+
|
|
894
924
|
metadata = interface.get_attribute_types().get(attribute_name, {})
|
|
895
925
|
if not metadata.get("is_identifier"):
|
|
896
926
|
return value
|
|
@@ -915,10 +945,19 @@ def normalize_id_filter_value(
|
|
|
915
945
|
if converter is None:
|
|
916
946
|
return value
|
|
917
947
|
|
|
918
|
-
if operator == "in":
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
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)
|
|
922
961
|
return converter(value)
|
|
923
962
|
|
|
924
963
|
|
|
@@ -1207,16 +1246,22 @@ def register_search_query(
|
|
|
1207
1246
|
decision = getattr(permission_plan, "decision", "conditional")
|
|
1208
1247
|
if decision == "deny_all":
|
|
1209
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
|
+
}
|
|
1210
1255
|
backend_shape = get_backend_shape(manager_class)
|
|
1211
1256
|
instance_check_reasons = resolve_instance_check_reasons(
|
|
1212
1257
|
permission_plan,
|
|
1213
1258
|
backend_shape=backend_shape,
|
|
1214
1259
|
)
|
|
1215
1260
|
filter_groups = (
|
|
1216
|
-
|
|
1261
|
+
manager_filters or None
|
|
1217
1262
|
if decision == "allow_all"
|
|
1218
1263
|
else merge_permission_filters(
|
|
1219
|
-
|
|
1264
|
+
manager_filters,
|
|
1220
1265
|
permission_plan.filters,
|
|
1221
1266
|
)
|
|
1222
1267
|
)
|
|
@@ -55,7 +55,7 @@ class GraphQLPropertyTimeoutConfigurationError(ValueError):
|
|
|
55
55
|
class GraphQLProperty(property):
|
|
56
56
|
"""Descriptor that exposes a resolver with GraphQL metadata and caching.
|
|
57
57
|
|
|
58
|
-
Stable inspection attributes are `sortable`, `filterable`,
|
|
58
|
+
Stable inspection attributes are `sortable`, `filterable`, `is_identifier`,
|
|
59
59
|
`query_annotation`, `cache`, `timeout`, `warm_up`, and `graphql_type_hint`.
|
|
60
60
|
The descriptor preserves normal `property` behavior such as `fget` and
|
|
61
61
|
`__doc__`, but those values follow Python's property/wraps mechanics rather
|
|
@@ -66,6 +66,7 @@ class GraphQLProperty(property):
|
|
|
66
66
|
|
|
67
67
|
sortable: bool
|
|
68
68
|
filterable: bool
|
|
69
|
+
is_identifier: bool
|
|
69
70
|
warm_up: bool
|
|
70
71
|
query_annotation: object | None
|
|
71
72
|
timeout: int | None
|
|
@@ -77,6 +78,7 @@ class GraphQLProperty(property):
|
|
|
77
78
|
*,
|
|
78
79
|
sortable: bool = False,
|
|
79
80
|
filterable: bool = False,
|
|
81
|
+
is_identifier: bool = False,
|
|
80
82
|
query_annotation: object | None = None,
|
|
81
83
|
cache: GraphQLPropertyCache = "none",
|
|
82
84
|
timeout: int | None = None,
|
|
@@ -101,6 +103,10 @@ class GraphQLProperty(property):
|
|
|
101
103
|
filterable: Whether generated GraphQL fields may expose filtering
|
|
102
104
|
for this property. Stored as supplied; runtime truthiness is not
|
|
103
105
|
coerced or validated.
|
|
106
|
+
is_identifier: Declare native integer, string, or UUID identities,
|
|
107
|
+
either scalar or a homogeneous list, tuple, or set. Generates
|
|
108
|
+
GraphQL ID output without changing Python values. Unsupported
|
|
109
|
+
annotations raise TypeError during schema generation.
|
|
104
110
|
query_annotation: Opaque ORM annotation object or callable consumed
|
|
105
111
|
by database bucket query construction.
|
|
106
112
|
cache: Resolver cache scope. `"none"` evaluates every access,
|
|
@@ -160,6 +166,7 @@ class GraphQLProperty(property):
|
|
|
160
166
|
|
|
161
167
|
self.sortable = sortable
|
|
162
168
|
self.filterable = filterable
|
|
169
|
+
self.is_identifier = is_identifier
|
|
163
170
|
self.query_annotation = query_annotation
|
|
164
171
|
self.cache = cache
|
|
165
172
|
self.timeout = timeout
|
|
@@ -276,6 +283,7 @@ def graph_ql_property(
|
|
|
276
283
|
*,
|
|
277
284
|
sortable: bool = False,
|
|
278
285
|
filterable: bool = False,
|
|
286
|
+
is_identifier: bool = False,
|
|
279
287
|
query_annotation: object | None = None,
|
|
280
288
|
cache: GraphQLPropertyCache = "run",
|
|
281
289
|
timeout: int | None = None,
|
|
@@ -290,6 +298,7 @@ def graph_ql_property(
|
|
|
290
298
|
*,
|
|
291
299
|
sortable: bool = False,
|
|
292
300
|
filterable: bool = False,
|
|
301
|
+
is_identifier: bool = False,
|
|
293
302
|
query_annotation: object | None = None,
|
|
294
303
|
cache: GraphQLPropertyCache = "run",
|
|
295
304
|
timeout: int | None = None,
|
|
@@ -307,6 +316,13 @@ def graph_ql_property(
|
|
|
307
316
|
property.
|
|
308
317
|
filterable: Whether generated GraphQL fields may expose filtering for
|
|
309
318
|
this property.
|
|
319
|
+
is_identifier: Explicitly declare native integer, string, or UUID
|
|
320
|
+
identities. Scalars map to ID and homogeneous list, tuple, or set
|
|
321
|
+
collections to [ID], preserving nullable property output and native
|
|
322
|
+
Python values. Optional annotations and optional elements are
|
|
323
|
+
supported. Manager objects, nested collections, ambiguous unions,
|
|
324
|
+
and other scalar types raise TypeError during schema generation.
|
|
325
|
+
Names and query_annotation never infer this flag. Defaults to False.
|
|
310
326
|
query_annotation: Opaque ORM annotation object or callable consumed by
|
|
311
327
|
database bucket query construction.
|
|
312
328
|
cache: Cache scope. `"run"` is the default and memoizes only within the
|
|
@@ -354,6 +370,7 @@ def graph_ql_property(
|
|
|
354
370
|
sortable=sortable,
|
|
355
371
|
query_annotation=query_annotation,
|
|
356
372
|
filterable=filterable,
|
|
373
|
+
is_identifier=is_identifier,
|
|
357
374
|
cache=cache,
|
|
358
375
|
timeout=timeout,
|
|
359
376
|
warm_up=warm_up,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/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.1 → generalmanager-0.82.3}/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.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_mutations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_relations.py
RENAMED
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_resolvers.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_subscriptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_warmup_registry.py
RENAMED
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/graphql_warmup_tasks.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/api/notification_batching.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/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.1 → generalmanager-0.82.3}/src/general_manager/bucket/_materialized_bucket.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/bucket/calculation_bucket.py
RENAMED
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/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.1 → generalmanager-0.82.3}/src/general_manager/bucket/request_bucket.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/_dependency_graph.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/cache_decorator.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/data_change_context.py
RENAMED
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/dependency_cache.py
RENAMED
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/dependency_index.py
RENAMED
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/dependency_matching.py
RENAMED
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/dependency_publish.py
RENAMED
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/dependency_shards.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/cache/run_context_lru.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/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.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/diagnostics.py
RENAMED
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/fingerprints.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/evals/judges/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/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.1 → generalmanager-0.82.3}/src/general_manager/chat/planned/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.1 → generalmanager-0.82.3}/src/general_manager/chat/planned/calculations.py
RENAMED
|
File without changes
|
|
File without changes
|