GeneralManager 0.86.5__tar.gz → 0.86.6__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.86.5/src/GeneralManager.egg-info → generalmanager-0.86.6}/PKG-INFO +1 -1
- {generalmanager-0.86.5 → generalmanager-0.86.6}/pyproject.toml +1 -1
- {generalmanager-0.86.5 → generalmanager-0.86.6/src/GeneralManager.egg-info}/PKG-INFO +1 -1
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/GeneralManager.egg-info/SOURCES.txt +1 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_mutations.py +59 -9
- generalmanager-0.86.6/src/general_manager/api/mutation_controls.py +5 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/remote_api.py +2 -4
- {generalmanager-0.86.5 → generalmanager-0.86.6}/LICENSE +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/README.md +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/setup.cfg +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/GeneralManager.egg-info/requires.txt +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/GeneralManager.egg-info/top_level.txt +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/api.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/bucket.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/cache.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/dataframes.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/factory.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/general_manager.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/interface.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/manager.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/measurement.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/permission.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/rule.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/search.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/_types/utils.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_as_of.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_errors.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_groups.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_identifiers.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_ordering.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_output.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_prefetch.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_relations.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_resolvers.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_search.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_subscriptions.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_type.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_view.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_warmup.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_warmup_registry.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_warmup_tasks.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/mutation.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/notification_batching.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/property.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/registry.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/remote_invalidation.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/remote_invalidation_client.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/apps.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/as_of.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bootstrap.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/_materialized_bucket.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/_ordering.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/base_bucket.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/calculation_bucket.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/database_bucket.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/excel_bucket.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/group_bucket.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/indexing.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/projection.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/request_bucket.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/_dependency_graph.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/batch_refresh.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/cache_decorator.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/cache_tracker.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/data_change_context.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/dependency_cache.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/dependency_index.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/dependency_matching.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/dependency_publish.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/dependency_shards.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/model_dependency_collector.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/run_context.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/run_context_lru.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/signals.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/transaction_barrier.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/audit.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/bootstrap.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/checks.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/consumer.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/context.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/errors.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/__main__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/baseline.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/datasets/basic_queries.yaml +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/datasets/demo_readiness.yaml +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/datasets/edge_cases.yaml +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/datasets/follow_ups.yaml +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/datasets/large_schema.yaml +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/datasets/multi_hop.yaml +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/datasets/planned_orchestration.yaml +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/diagnostics.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/fingerprints.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/fixtures.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/judges/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/judges/answer_quality.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/judges/contract.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/judges/result_accuracy.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/judges/tool_sequence.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/readiness.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/runner.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/traces.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/grounding.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/models.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/budget.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/calculations.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/catalog.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/config.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/events.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/evidence.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/models.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/planner.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/provider_calls.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/resolver.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/routing.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/scheduler.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/synthesis.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/validation.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/providers/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/providers/_shared.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/providers/anthropic.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/providers/base.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/providers/google.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/providers/ollama.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/providers/openai.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/rate_limits.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/routing.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/schema_index.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/settings.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/signals.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/system_prompt.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/tool_metadata.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/tools.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/turns.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/views.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/conf.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/dataframes/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/dataframes/measurements.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/factory/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/factory/auto_factory.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/factory/factories.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/factory/factory_methods.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/base_interface.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/bundles/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/bundles/calculation.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/bundles/database.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/bundles/excel.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/bundles/remote_manager.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/bundles/request.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/base.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/builtin.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/calculation/input_resolution.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/configuration.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/core/observability.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/core/utils.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/excel/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/exceptions.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/factory.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm/bulk.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm/create_many.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm/history.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm/support.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/orm_utils/update_state.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/read_only/_types.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/registry.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/excel.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/excel_store.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/excel_workbook.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/infrastructure/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/interfaces/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/interfaces/calculation.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/interfaces/database.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/interfaces/excel.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/interfaces/existing_model.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/interfaces/read_only.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/interfaces/request.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/manifests/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/manifests/capability_builder.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/manifests/capability_models.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/orm_interface.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/requests.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/utils/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/utils/errors.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/utils/history.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/utils/models.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/logging.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/chat_cleanup.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/cleanup_upload_intents.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/graphql_warmup.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/graphql_warmup_refresh_due.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/search_index.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/search_reconcile.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/shell.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/sync_read_only.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/manager/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/manager/bulk_create.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/manager/general_manager.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/manager/group_manager.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/manager/input.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/manager/meta.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/measurement/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/measurement/measurement.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/measurement/measurement_field.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/metrics/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/metrics/graphql.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0001_initial.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0004_chat_persistence_models.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0004_search_index_state.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0005_merge_chat_search.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0006_chat_pending_confirmation_scoped_ids.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0007_upload_intent.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0008_upload_finalization_versions.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0009_upload_cleanup_state.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0010_chat_pending_confirmation_portable_uniqueness.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0011_search_index_state_dirty_generation.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/0012_chat_context_watermarks.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/migrations/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/models.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/permission/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/permission/audit.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/permission/base_permission.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/permission/graphql_capabilities.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/permission/manager_based_permission.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/permission/mutation_permission.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/permission/permission_checks.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/permission/permission_data_manager.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/permission/utils.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/public_api_registry.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/py.typed +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/rule/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/rule/handler.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/rule/rule.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/async_tasks.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/backend.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/backend_registry.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/backends/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/backends/dev.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/backends/meilisearch.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/backends/opensearch.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/backends/typesense.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/checks.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/config.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/identity.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/indexer.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/invalidation.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/m2m_invalidation.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/models.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/reconciliation.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/registry.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/tasks.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/search/utils.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/seeding/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/seeding/manager_landscape.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/adapters.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/checks.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/config.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/errors.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/finalization.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/graphql.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/graphql_types.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/metrics.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/models.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/public.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/s3.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/services.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/tokens.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/types.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/urls.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/uploads/views.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/_args_to_kwargs.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/_cache_key_encoder.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/_make_cache_key.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/_none_to_zero.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/filter_parser.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/format_string.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/json_encoder.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/path_mapping.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/public_api.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/testing.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/utils/type_checks.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/actions.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/backend_registry.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/backends/__init__.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/backends/celery.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/backends/local.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/backends/n8n.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/config.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/engine.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/event_registry.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/events.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/models.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/signal_bridge.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/tasks.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/workflow/telemetry.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/tests/test_settings.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/tests/test_urls.py +0 -0
- {generalmanager-0.86.5 → generalmanager-0.86.6}/tests/testing_asgi.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: GeneralManager
|
|
3
|
-
Version: 0.86.
|
|
3
|
+
Version: 0.86.6
|
|
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.86.
|
|
7
|
+
version = "0.86.6"
|
|
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.86.
|
|
3
|
+
Version: 0.86.6
|
|
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
|
|
@@ -50,6 +50,7 @@ src/general_manager/api/graphql_warmup.py
|
|
|
50
50
|
src/general_manager/api/graphql_warmup_registry.py
|
|
51
51
|
src/general_manager/api/graphql_warmup_tasks.py
|
|
52
52
|
src/general_manager/api/mutation.py
|
|
53
|
+
src/general_manager/api/mutation_controls.py
|
|
53
54
|
src/general_manager/api/notification_batching.py
|
|
54
55
|
src/general_manager/api/property.py
|
|
55
56
|
src/general_manager/api/registry.py
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_mutations.py
RENAMED
|
@@ -21,6 +21,7 @@ from django.db import models
|
|
|
21
21
|
from django.core.exceptions import FieldDoesNotExist
|
|
22
22
|
|
|
23
23
|
from general_manager.interface.base_interface import AttributeTypedDict, InterfaceBase
|
|
24
|
+
from general_manager.api.mutation_controls import MUTATION_CONTROL_KEYS
|
|
24
25
|
from general_manager.api.graphql_relations import (
|
|
25
26
|
get_graphql_manager_registry,
|
|
26
27
|
resolve_general_manager_type,
|
|
@@ -55,6 +56,33 @@ class _UnsetHistoryComment:
|
|
|
55
56
|
_HISTORY_COMMENT_UNSET = _UnsetHistoryComment()
|
|
56
57
|
|
|
57
58
|
|
|
59
|
+
class ReservedMutationControlFieldError(ValueError):
|
|
60
|
+
"""Raised when an editable field collides with manager execution metadata."""
|
|
61
|
+
|
|
62
|
+
def __init__(self, field_name: str) -> None:
|
|
63
|
+
super().__init__(
|
|
64
|
+
f"Editable GraphQL field {field_name!r} collides with a reserved "
|
|
65
|
+
"manager mutation control. Rename the field or make it read-only."
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class ReservedMutationControlInputError(GraphQLError):
|
|
70
|
+
"""Report client input attempting to override trusted authorization metadata."""
|
|
71
|
+
|
|
72
|
+
def __init__(self, key: str) -> None:
|
|
73
|
+
super().__init__(
|
|
74
|
+
f"Mutation input cannot include reserved key {key!r}.",
|
|
75
|
+
extensions={"code": "BAD_USER_INPUT"},
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def _reject_mutation_authorization_controls(kwargs: MutationPayload) -> None:
|
|
80
|
+
"""Allow audit comments but reject client-controlled authorization metadata."""
|
|
81
|
+
for key in sorted(MUTATION_CONTROL_KEYS - {"history_comment"}):
|
|
82
|
+
if key in kwargs:
|
|
83
|
+
raise ReservedMutationControlInputError(key)
|
|
84
|
+
|
|
85
|
+
|
|
58
86
|
class _EditableGrapheneField(Protocol):
|
|
59
87
|
"""Graphene field instance carrying GeneralManager's dynamic editability flag."""
|
|
60
88
|
|
|
@@ -168,8 +196,10 @@ def _normalize_mutation_kwargs_for_manager(
|
|
|
168
196
|
ORM mutation capabilities expect ``field_id``/``field_id_list`` for manager
|
|
169
197
|
relations. Structured references pass through their manager constructor so
|
|
170
198
|
all declared inputs are validated. Scalar reference values stay unchanged.
|
|
171
|
-
Unknown keys and already-normalized keys are preserved
|
|
199
|
+
Unknown keys and already-normalized keys are preserved, except reserved
|
|
200
|
+
authorization controls, which are rejected before and after normalization.
|
|
172
201
|
"""
|
|
202
|
+
_reject_mutation_authorization_controls(kwargs)
|
|
173
203
|
interface_cls = getattr(general_manager_class, "Interface", None)
|
|
174
204
|
if interface_cls is None:
|
|
175
205
|
return dict(kwargs)
|
|
@@ -233,6 +263,7 @@ def _normalize_mutation_kwargs_for_manager(
|
|
|
233
263
|
)
|
|
234
264
|
normalized.pop(key, None)
|
|
235
265
|
|
|
266
|
+
_reject_mutation_authorization_controls(normalized)
|
|
236
267
|
return normalized
|
|
237
268
|
|
|
238
269
|
|
|
@@ -351,6 +382,10 @@ def create_write_fields(
|
|
|
351
382
|
Mapping from attribute name to a Graphene input field instance. Returned
|
|
352
383
|
fields carry a dynamic maintainer-facing ``editable`` flag used by the
|
|
353
384
|
generated mutation class builders.
|
|
385
|
+
|
|
386
|
+
Raises:
|
|
387
|
+
ReservedMutationControlFieldError: An editable field or its normalized
|
|
388
|
+
relation alias collides with reserved manager mutation metadata.
|
|
354
389
|
"""
|
|
355
390
|
fields: GrapheneFieldMap = {}
|
|
356
391
|
attribute_types = interface_cls.get_attribute_types()
|
|
@@ -360,6 +395,8 @@ def create_write_fields(
|
|
|
360
395
|
continue
|
|
361
396
|
if info["is_derived"]:
|
|
362
397
|
continue
|
|
398
|
+
if info["is_editable"] and name in MUTATION_CONTROL_KEYS:
|
|
399
|
+
raise ReservedMutationControlFieldError(name)
|
|
363
400
|
if _is_direct_relation_raw_id_alias(
|
|
364
401
|
name,
|
|
365
402
|
attribute_types,
|
|
@@ -375,6 +412,13 @@ def create_write_fields(
|
|
|
375
412
|
if default is NOT_PROVIDED or callable(default):
|
|
376
413
|
default = Undefined
|
|
377
414
|
manager_type = resolve_general_manager_type(typ, manager_registry)
|
|
415
|
+
if (
|
|
416
|
+
info["is_editable"]
|
|
417
|
+
and manager_type is not None
|
|
418
|
+
and not name.endswith(("_id", "_list"))
|
|
419
|
+
and f"{name}_id" in MUTATION_CONTROL_KEYS
|
|
420
|
+
):
|
|
421
|
+
raise ReservedMutationControlFieldError(name)
|
|
378
422
|
|
|
379
423
|
fld: object
|
|
380
424
|
if info.get("orm_field_kind") in {"file", "image"}:
|
|
@@ -477,6 +521,7 @@ def generate_create_mutation_class(
|
|
|
477
521
|
for field_name, value in kwargs.items()
|
|
478
522
|
if value is not NOT_PROVIDED
|
|
479
523
|
}
|
|
524
|
+
_reject_mutation_authorization_controls(kwargs)
|
|
480
525
|
_preflight_mutation_uploads(
|
|
481
526
|
info=info,
|
|
482
527
|
general_manager_class=generalManagerClass,
|
|
@@ -488,12 +533,14 @@ def generate_create_mutation_class(
|
|
|
488
533
|
kwargs = _normalize_mutation_kwargs_for_manager(generalManagerClass, kwargs)
|
|
489
534
|
history_comment = _pop_history_comment(kwargs)
|
|
490
535
|
create = cast(_ManagerCreateMethod, generalManagerClass.create)
|
|
491
|
-
create_kwargs = {"creator_id": info.context.user.id, **kwargs}
|
|
492
536
|
if isinstance(history_comment, _UnsetHistoryComment):
|
|
493
|
-
instance = create(**
|
|
537
|
+
instance = create(creator_id=info.context.user.id, **kwargs)
|
|
494
538
|
else:
|
|
495
|
-
|
|
496
|
-
|
|
539
|
+
instance = create(
|
|
540
|
+
creator_id=info.context.user.id,
|
|
541
|
+
history_comment=history_comment,
|
|
542
|
+
**kwargs,
|
|
543
|
+
)
|
|
497
544
|
except GraphQLError:
|
|
498
545
|
raise
|
|
499
546
|
except Exception as error:
|
|
@@ -587,6 +634,7 @@ def generate_update_mutation_class(
|
|
|
587
634
|
for field_name, value in kwargs.items()
|
|
588
635
|
if value is not NOT_PROVIDED
|
|
589
636
|
}
|
|
637
|
+
_reject_mutation_authorization_controls(kwargs)
|
|
590
638
|
_preflight_mutation_uploads(
|
|
591
639
|
info=info,
|
|
592
640
|
general_manager_class=generalManagerClass,
|
|
@@ -600,12 +648,14 @@ def generate_update_mutation_class(
|
|
|
600
648
|
update = cast(
|
|
601
649
|
_ManagerUpdateMethod, generalManagerClass(**identification).update
|
|
602
650
|
)
|
|
603
|
-
update_kwargs = {"creator_id": info.context.user.id, **kwargs}
|
|
604
651
|
if isinstance(history_comment, _UnsetHistoryComment):
|
|
605
|
-
instance = update(**
|
|
652
|
+
instance = update(creator_id=info.context.user.id, **kwargs)
|
|
606
653
|
else:
|
|
607
|
-
|
|
608
|
-
|
|
654
|
+
instance = update(
|
|
655
|
+
creator_id=info.context.user.id,
|
|
656
|
+
history_comment=history_comment,
|
|
657
|
+
**kwargs,
|
|
658
|
+
)
|
|
609
659
|
except GraphQLError:
|
|
610
660
|
raise
|
|
611
661
|
except Exception as error:
|
|
@@ -16,6 +16,7 @@ from django.http import HttpRequest, HttpResponse, JsonResponse
|
|
|
16
16
|
from django.urls import URLPattern, path
|
|
17
17
|
|
|
18
18
|
from general_manager.logging import get_logger
|
|
19
|
+
from general_manager.api.mutation_controls import MUTATION_CONTROL_KEYS
|
|
19
20
|
from general_manager.bucket._ordering import normalize_ordering
|
|
20
21
|
from general_manager.bucket.request_bucket import RequestBucket
|
|
21
22
|
|
|
@@ -25,9 +26,6 @@ if TYPE_CHECKING:
|
|
|
25
26
|
logger = get_logger("api.remote")
|
|
26
27
|
|
|
27
28
|
_SEGMENT_RE = re.compile(r"^[a-z0-9]+(?:-[a-z0-9]+)*$")
|
|
28
|
-
_MUTATION_CONTROL_KEYS = frozenset(
|
|
29
|
-
{"ignore_permission", "creator_id", "history_comment"}
|
|
30
|
-
)
|
|
31
29
|
_MUTATION_METADATA_KEY = "__metadata__"
|
|
32
30
|
_MUTATION_METADATA_FIELDS = frozenset({"history_comment"})
|
|
33
31
|
RemoteAPIView = Callable[[HttpRequest], HttpResponse]
|
|
@@ -432,7 +430,7 @@ def _parse_json_body(request: HttpRequest) -> RemoteJSONPayload:
|
|
|
432
430
|
def _parse_mutation_body(request: HttpRequest) -> tuple[RemoteJSONPayload, str | None]:
|
|
433
431
|
"""Separate schema values from supported remote mutation metadata."""
|
|
434
432
|
payload = _parse_json_body(request)
|
|
435
|
-
for control_key in
|
|
433
|
+
for control_key in MUTATION_CONTROL_KEYS:
|
|
436
434
|
if control_key in payload:
|
|
437
435
|
raise RemoteAPIRequestError.reserved_mutation_control(control_key)
|
|
438
436
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/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.86.5 → generalmanager-0.86.6}/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
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_identifiers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_relations.py
RENAMED
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_resolvers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_subscriptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_warmup_registry.py
RENAMED
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/graphql_warmup_tasks.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/api/notification_batching.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/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.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/_materialized_bucket.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/calculation_bucket.py
RENAMED
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/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.86.5 → generalmanager-0.86.6}/src/general_manager/bucket/request_bucket.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/_dependency_graph.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/cache_decorator.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/data_change_context.py
RENAMED
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/dependency_cache.py
RENAMED
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/dependency_index.py
RENAMED
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/dependency_matching.py
RENAMED
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/dependency_publish.py
RENAMED
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/dependency_shards.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/cache/run_context_lru.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/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.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/diagnostics.py
RENAMED
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/fingerprints.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/evals/judges/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/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.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/calculations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/evidence.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/provider_calls.py
RENAMED
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/resolver.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/scheduler.py
RENAMED
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/synthesis.py
RENAMED
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/planned/validation.py
RENAMED
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/providers/__init__.py
RENAMED
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/providers/_shared.py
RENAMED
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/providers/anthropic.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/providers/google.py
RENAMED
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/providers/ollama.py
RENAMED
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/chat/providers/openai.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
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/dataframes/measurements.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/factory/factory_methods.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/base_interface.py
RENAMED
|
File without changes
|
{generalmanager-0.86.5 → generalmanager-0.86.6}/src/general_manager/interface/bundles/__init__.py
RENAMED
|
File without changes
|