GeneralManager 0.87.6__tar.gz → 0.88.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {generalmanager-0.87.6/src/GeneralManager.egg-info → generalmanager-0.88.0}/PKG-INFO +1 -1
- {generalmanager-0.87.6 → generalmanager-0.88.0}/pyproject.toml +1 -1
- {generalmanager-0.87.6 → generalmanager-0.88.0/src/GeneralManager.egg-info}/PKG-INFO +1 -1
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql.py +6 -6
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_output.py +66 -32
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_type.py +10 -6
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/mutation.py +206 -6
- {generalmanager-0.87.6 → generalmanager-0.88.0}/LICENSE +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/README.md +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/setup.cfg +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/GeneralManager.egg-info/SOURCES.txt +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/GeneralManager.egg-info/requires.txt +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/GeneralManager.egg-info/top_level.txt +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/_types/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/_types/api.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/_types/bucket.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/_types/cache.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/_types/dataframes.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/_types/factory.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/_types/general_manager.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/_types/interface.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/_types/manager.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/_types/measurement.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/_types/permission.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/_types/rule.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/_types/search.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/_types/utils.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_as_of.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_errors.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_filter_contract.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_groups.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_identifiers.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_mutations.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_ordering.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_prefetch.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_query_permissions.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_relations.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_resolvers.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_search.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_subscriptions.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_units.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_value_contract.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_view.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_warmup.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_warmup_registry.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_warmup_tasks.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/mutation_controls.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/notification_batching.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/property.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/registry.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/remote_api.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/remote_invalidation.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/remote_invalidation_client.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/apps.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/as_of.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/bootstrap.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/bucket/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/bucket/_materialized_bucket.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/bucket/_ordering.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/bucket/base_bucket.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/bucket/calculation_bucket.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/bucket/database_bucket.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/bucket/excel_bucket.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/bucket/group_bucket.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/bucket/indexing.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/bucket/projection.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/bucket/request_bucket.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/cache/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/cache/_dependency_graph.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/cache/batch_refresh.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/cache/cache_decorator.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/cache/cache_tracker.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/cache/data_change_context.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/cache/dependency_cache.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/cache/dependency_index.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/cache/dependency_matching.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/cache/dependency_publish.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/cache/dependency_shards.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/cache/model_dependency_collector.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/cache/run_context.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/cache/run_context_lru.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/cache/signals.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/cache/transaction_barrier.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/audit.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/audit_identity.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/bootstrap.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/checks.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/consumer.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/context.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/errors.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/__main__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/baseline.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/datasets/basic_queries.yaml +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/datasets/demo_readiness.yaml +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/datasets/edge_cases.yaml +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/datasets/follow_ups.yaml +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/datasets/large_schema.yaml +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/datasets/multi_hop.yaml +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/datasets/planned_orchestration.yaml +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/diagnostics.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/execution.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/fingerprints.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/fixtures.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/judges/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/judges/answer_quality.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/judges/contract.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/judges/result_accuracy.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/judges/result_set.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/judges/tool_sequence.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/outcomes.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/readiness.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/runner.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/evals/traces.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/graphql_contract.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/grounding.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/models.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/mutation_inputs.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/action_contract.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/binding_diagnostics.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/budget.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/calculation_scope.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/calculations.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/catalog.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/category_binding.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/choice_context.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/clarification.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/config.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/contract.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/conversion.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/cross_query.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/deferred_calculations.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/deferred_schema.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/events.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/evidence.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/evidence_selection.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/group_actions.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/models.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/planner.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/planner_context.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/provider_calls.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/resolver.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/scheduler.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/schema_projection.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/selector_clarification.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/selector_question.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/synthesis.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/planned/validation.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/providers/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/providers/_shared.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/providers/anthropic.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/providers/base.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/providers/google.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/providers/ollama.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/providers/openai.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/rate_limits.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/routing.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/schema_index.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/schema_inspection.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/settings.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/signals.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/system_prompt.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/tool_metadata.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/tools.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/turns.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/chat/views.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/conf.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/dataframes/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/dataframes/measurements.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/factory/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/factory/auto_factory.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/factory/factories.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/factory/factory_methods.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/base_interface.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/bundles/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/bundles/calculation.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/bundles/database.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/bundles/excel.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/bundles/remote_manager.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/bundles/request.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/base.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/builtin.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/calculation/input_resolution.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/configuration.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/core/observability.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/core/utils.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/excel/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/exceptions.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/factory.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/orm/bulk.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/orm/create_many.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/orm/history.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/orm/history_query.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/orm/support.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/orm_utils/collection_probes.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/orm_utils/update_state.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/read_only/_types.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/registry.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/excel.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/excel_store.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/excel_workbook.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/infrastructure/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/interfaces/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/interfaces/calculation.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/interfaces/database.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/interfaces/excel.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/interfaces/existing_model.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/interfaces/read_only.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/interfaces/request.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/manifests/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/manifests/capability_builder.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/manifests/capability_models.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/orm_interface.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/requests.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/unit_contract.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/utils/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/utils/errors.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/utils/history.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/interface/utils/models.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/logging.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/management/commands/chat_cleanup.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/management/commands/cleanup_upload_intents.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/management/commands/graphql_warmup.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/management/commands/graphql_warmup_refresh_due.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/management/commands/search_index.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/management/commands/search_reconcile.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/management/commands/shell.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/management/commands/sync_read_only.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/manager/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/manager/bulk_create.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/manager/general_manager.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/manager/group_manager.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/manager/input.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/manager/meta.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/measurement/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/measurement/measurement.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/measurement/measurement_field.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/metrics/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/metrics/graphql.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/migrations/0001_initial.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/migrations/0004_chat_persistence_models.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/migrations/0004_search_index_state.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/migrations/0005_merge_chat_search.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/migrations/0006_chat_pending_confirmation_scoped_ids.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/migrations/0007_upload_intent.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/migrations/0008_upload_finalization_versions.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/migrations/0009_upload_cleanup_state.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/migrations/0010_chat_pending_confirmation_portable_uniqueness.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/migrations/0011_search_index_state_dirty_generation.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/migrations/0012_chat_context_watermarks.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/migrations/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/models.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/permission/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/permission/audit.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/permission/base_permission.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/permission/graphql_capabilities.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/permission/manager_based_permission.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/permission/mutation_permission.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/permission/permission_checks.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/permission/permission_data_manager.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/permission/utils.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/public_api_registry.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/py.typed +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/rule/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/rule/handler.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/rule/rule.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/async_tasks.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/authorization.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/backend.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/backend_registry.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/backends/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/backends/dev.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/backends/meilisearch.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/backends/opensearch.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/backends/typesense.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/checks.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/config.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/identity.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/indexer.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/invalidation.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/m2m_invalidation.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/models.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/projection.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/reconciliation.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/registry.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/tasks.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/search/utils.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/seeding/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/seeding/manager_landscape.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/uploads/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/uploads/adapters.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/uploads/checks.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/uploads/config.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/uploads/errors.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/uploads/finalization.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/uploads/graphql.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/uploads/graphql_types.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/uploads/metrics.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/uploads/models.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/uploads/public.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/uploads/s3.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/uploads/services.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/uploads/tokens.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/uploads/types.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/uploads/urls.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/uploads/views.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/utils/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/utils/_args_to_kwargs.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/utils/_cache_key_encoder.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/utils/_make_cache_key.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/utils/_none_to_zero.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/utils/executable_contract.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/utils/filter_parser.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/utils/format_string.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/utils/json_encoder.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/utils/path_mapping.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/utils/public_api.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/utils/testing.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/utils/type_checks.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/workflow/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/workflow/actions.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/workflow/backend_registry.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/workflow/backends/__init__.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/workflow/backends/celery.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/workflow/backends/local.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/workflow/backends/n8n.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/workflow/config.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/workflow/engine.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/workflow/event_registry.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/workflow/events.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/workflow/models.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/workflow/signal_bridge.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/workflow/tasks.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/workflow/telemetry.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/tests/test_settings.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/tests/test_urls.py +0 -0
- {generalmanager-0.87.6 → generalmanager-0.88.0}/tests/testing_asgi.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: GeneralManager
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.88.0
|
|
4
4
|
Summary: Modular Django-based data management framework with ORM, GraphQL, fine-grained permissions, rule validation, calculations and caching.
|
|
5
5
|
Author-email: Tim Kleindick <tkleindick@yahoo.de>
|
|
6
6
|
License: MIT License
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "GeneralManager"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.88.0"
|
|
8
8
|
description = "Modular Django-based data management framework with ORM, GraphQL, fine-grained permissions, rule validation, calculations and caching."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [{ name = "Tim Kleindick", email = "tkleindick@yahoo.de" }]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: GeneralManager
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.88.0
|
|
4
4
|
Summary: Modular Django-based data management framework with ORM, GraphQL, fine-grained permissions, rule validation, calculations and caching.
|
|
5
5
|
Author-email: Tim Kleindick <tkleindick@yahoo.de>
|
|
6
6
|
License: MIT License
|
|
@@ -109,7 +109,7 @@ from general_manager.api.graphql_mutations import (
|
|
|
109
109
|
generate_delete_mutation_class as _generate_delete_mutation_class_fn,
|
|
110
110
|
)
|
|
111
111
|
from general_manager.api.graphql_output import (
|
|
112
|
-
|
|
112
|
+
_value_field_is_identifier,
|
|
113
113
|
create_output_field_resolver,
|
|
114
114
|
map_graphql_output_annotation,
|
|
115
115
|
resolve_output_type_hints,
|
|
@@ -390,6 +390,9 @@ class GraphQL:
|
|
|
390
390
|
_subscription_payload_registry: ClassVar[dict[str, type[graphene.ObjectType]]] = {}
|
|
391
391
|
graphql_type_registry: ClassVar[dict[str, type[graphene.ObjectType]]] = {}
|
|
392
392
|
graphql_output_type_registry: ClassVar[dict[str, type[graphene.ObjectType]]] = {}
|
|
393
|
+
_value_input_type_cache: ClassVar[
|
|
394
|
+
dict[type[GraphQLType], type[graphene.InputObjectType]]
|
|
395
|
+
] = {}
|
|
393
396
|
graphql_filter_type_registry: ClassVar[
|
|
394
397
|
dict[str, type[graphene.InputObjectType]]
|
|
395
398
|
] = {}
|
|
@@ -440,6 +443,7 @@ class GraphQL:
|
|
|
440
443
|
cls._subscription_payload_registry = {}
|
|
441
444
|
cls.graphql_type_registry = {}
|
|
442
445
|
cls.graphql_output_type_registry = {}
|
|
446
|
+
cls._value_input_type_cache = {}
|
|
443
447
|
cls.graphql_filter_type_registry = {}
|
|
444
448
|
cls.graphql_capability_type_registry = {}
|
|
445
449
|
cls.manager_registry = {}
|
|
@@ -532,11 +536,7 @@ class GraphQL:
|
|
|
532
536
|
)
|
|
533
537
|
fields: dict[str, graphene.Field] = {}
|
|
534
538
|
for declared_field in dataclasses.fields(output_class):
|
|
535
|
-
is_identifier =
|
|
536
|
-
if not isinstance(is_identifier, bool):
|
|
537
|
-
raise GraphQLOutputIdentityMetadataError(
|
|
538
|
-
output_name, declared_field.name, is_identifier
|
|
539
|
-
)
|
|
539
|
+
is_identifier = _value_field_is_identifier(output_name, declared_field)
|
|
540
540
|
mapped = map_graphql_output_annotation(
|
|
541
541
|
hints[declared_field.name],
|
|
542
542
|
owner_name=output_name,
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
from collections.abc import Callable, Mapping
|
|
6
|
-
from dataclasses import dataclass, replace
|
|
6
|
+
from dataclasses import Field, dataclass, replace
|
|
7
7
|
from datetime import date, datetime
|
|
8
8
|
from decimal import Decimal
|
|
9
9
|
import sys
|
|
@@ -51,6 +51,14 @@ class GraphQLOutputIdentityMetadataError(TypeError):
|
|
|
51
51
|
)
|
|
52
52
|
|
|
53
53
|
|
|
54
|
+
def _value_field_is_identifier(owner_name: str, field: Field[object]) -> bool:
|
|
55
|
+
"""Read the shared identity metadata on a GraphQL value field."""
|
|
56
|
+
flag = field.metadata.get("is_identifier", False)
|
|
57
|
+
if not isinstance(flag, bool):
|
|
58
|
+
raise GraphQLOutputIdentityMetadataError(owner_name, field.name, flag)
|
|
59
|
+
return flag
|
|
60
|
+
|
|
61
|
+
|
|
54
62
|
@dataclass(frozen=True, slots=True)
|
|
55
63
|
class _MappedAnnotation:
|
|
56
64
|
"""Internal Graphene type metadata before a field wrapper is mounted."""
|
|
@@ -144,19 +152,14 @@ def _lazy_registry_type(
|
|
|
144
152
|
return lambda: registry[name]
|
|
145
153
|
|
|
146
154
|
|
|
147
|
-
def
|
|
155
|
+
def _collection_element_annotation(
|
|
148
156
|
annotation: object,
|
|
149
157
|
*,
|
|
150
158
|
owner_name: str,
|
|
151
159
|
field_name: str,
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
output_type_registry: Mapping[str, type[graphene.ObjectType]],
|
|
156
|
-
measurement_type: type[graphene.ObjectType],
|
|
157
|
-
scalar_mapper: Callable[[type], type],
|
|
158
|
-
is_identifier: bool = False,
|
|
159
|
-
) -> _MappedAnnotation:
|
|
160
|
+
is_identifier: bool,
|
|
161
|
+
) -> object:
|
|
162
|
+
"""Validate a homogeneous collection and return its element annotation."""
|
|
160
163
|
origin = get_origin(annotation)
|
|
161
164
|
if origin not in (list, tuple, set):
|
|
162
165
|
raise _annotation_error(owner_name, field_name, annotation)
|
|
@@ -178,6 +181,28 @@ def _map_collection_annotation(
|
|
|
178
181
|
if identity_type not in (int, str, UUID):
|
|
179
182
|
raise _annotation_error(owner_name, field_name, annotation)
|
|
180
183
|
|
|
184
|
+
return element_annotation
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
def _map_collection_annotation(
|
|
188
|
+
annotation: object,
|
|
189
|
+
*,
|
|
190
|
+
owner_name: str,
|
|
191
|
+
field_name: str,
|
|
192
|
+
manager_registry: Mapping[str, type[GeneralManager]],
|
|
193
|
+
manager_type_registry: Mapping[str, type[graphene.ObjectType]],
|
|
194
|
+
output_class_registry: Mapping[str, type[GraphQLType]],
|
|
195
|
+
output_type_registry: Mapping[str, type[graphene.ObjectType]],
|
|
196
|
+
measurement_type: type[graphene.ObjectType],
|
|
197
|
+
scalar_mapper: Callable[[type], type],
|
|
198
|
+
is_identifier: bool = False,
|
|
199
|
+
) -> _MappedAnnotation:
|
|
200
|
+
element_annotation = _collection_element_annotation(
|
|
201
|
+
annotation,
|
|
202
|
+
owner_name=owner_name,
|
|
203
|
+
field_name=field_name,
|
|
204
|
+
is_identifier=is_identifier,
|
|
205
|
+
)
|
|
181
206
|
element = _map_annotation(
|
|
182
207
|
element_annotation,
|
|
183
208
|
owner_name=owner_name,
|
|
@@ -201,6 +226,23 @@ def _map_collection_annotation(
|
|
|
201
226
|
)
|
|
202
227
|
|
|
203
228
|
|
|
229
|
+
def _map_value_scalar_annotation(
|
|
230
|
+
annotation: object,
|
|
231
|
+
*,
|
|
232
|
+
owner_name: str,
|
|
233
|
+
field_name: str,
|
|
234
|
+
scalar_mapper: Callable[[type], type],
|
|
235
|
+
is_identifier: bool,
|
|
236
|
+
) -> object:
|
|
237
|
+
"""Map value scalars without the legacy mapper's fallback to String."""
|
|
238
|
+
if is_identifier:
|
|
239
|
+
if annotation in (int, str, UUID):
|
|
240
|
+
return graphene.ID
|
|
241
|
+
elif safe_issubclass(annotation, (str, bool, int, float, Decimal, datetime, date)):
|
|
242
|
+
return scalar_mapper(annotation)
|
|
243
|
+
raise _annotation_error(owner_name, field_name, annotation)
|
|
244
|
+
|
|
245
|
+
|
|
204
246
|
def _map_non_optional_value(
|
|
205
247
|
annotation: object,
|
|
206
248
|
*,
|
|
@@ -245,10 +287,14 @@ def _map_non_optional_value(
|
|
|
245
287
|
)
|
|
246
288
|
|
|
247
289
|
if is_identifier:
|
|
248
|
-
if annotation not in (int, str, UUID):
|
|
249
|
-
raise _annotation_error(owner_name, field_name, annotation)
|
|
250
290
|
return _MappedAnnotation(
|
|
251
|
-
|
|
291
|
+
_map_value_scalar_annotation(
|
|
292
|
+
annotation,
|
|
293
|
+
owner_name=owner_name,
|
|
294
|
+
field_name=field_name,
|
|
295
|
+
scalar_mapper=scalar_mapper,
|
|
296
|
+
is_identifier=True,
|
|
297
|
+
),
|
|
252
298
|
annotation,
|
|
253
299
|
nullable=False,
|
|
254
300
|
contains_measurement=False,
|
|
@@ -284,25 +330,13 @@ def _map_non_optional_value(
|
|
|
284
330
|
contains_measurement=True,
|
|
285
331
|
)
|
|
286
332
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
elif safe_issubclass(annotation, str):
|
|
295
|
-
scalar_type = scalar_mapper(annotation)
|
|
296
|
-
elif safe_issubclass(annotation, int):
|
|
297
|
-
scalar_type = scalar_mapper(annotation)
|
|
298
|
-
elif safe_issubclass(annotation, (float, Decimal)):
|
|
299
|
-
scalar_type = scalar_mapper(annotation)
|
|
300
|
-
elif safe_issubclass(annotation, datetime):
|
|
301
|
-
scalar_type = scalar_mapper(annotation)
|
|
302
|
-
elif safe_issubclass(annotation, date):
|
|
303
|
-
scalar_type = scalar_mapper(annotation)
|
|
304
|
-
else:
|
|
305
|
-
raise _annotation_error(owner_name, field_name, annotation)
|
|
333
|
+
scalar_type = _map_value_scalar_annotation(
|
|
334
|
+
annotation,
|
|
335
|
+
owner_name=owner_name,
|
|
336
|
+
field_name=field_name,
|
|
337
|
+
scalar_mapper=scalar_mapper,
|
|
338
|
+
is_identifier=False,
|
|
339
|
+
)
|
|
306
340
|
return _MappedAnnotation(
|
|
307
341
|
scalar_type,
|
|
308
342
|
annotation,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Frozen value declarations for GraphQL
|
|
1
|
+
"""Frozen value declarations for GraphQL objects."""
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
@@ -8,7 +8,7 @@ from typing import ClassVar, cast, dataclass_transform
|
|
|
8
8
|
|
|
9
9
|
@dataclass_transform(field_specifiers=(Field, field), frozen_default=True)
|
|
10
10
|
class GraphQLTypeMeta(type):
|
|
11
|
-
"""Create and register frozen dataclass-based GraphQL
|
|
11
|
+
"""Create and register frozen dataclass-based GraphQL value declarations."""
|
|
12
12
|
|
|
13
13
|
_registered_types: ClassVar[list[type[GraphQLType]]] = []
|
|
14
14
|
|
|
@@ -29,18 +29,22 @@ class GraphQLTypeMeta(type):
|
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
class GraphQLType(metaclass=GraphQLTypeMeta):
|
|
32
|
-
"""Frozen annotated value
|
|
32
|
+
"""Frozen annotated value for GraphQL outputs and custom mutation inputs.
|
|
33
|
+
|
|
34
|
+
A custom mutation parameter annotated with a concrete subclass uses the
|
|
35
|
+
generated input object named ``<ClassName>Input``. Its constructor fields
|
|
36
|
+
are populated before the mutation's permission check and resolver run.
|
|
33
37
|
|
|
34
38
|
Use ``dataclasses.field(metadata={"is_identifier": True})`` to declare
|
|
35
39
|
native int, str, or UUID identity fields and their supported homogeneous
|
|
36
40
|
collections. Schema generation preserves annotation nullability and native
|
|
37
|
-
values while exposing ID scalars. Missing or false metadata keeps
|
|
38
|
-
|
|
41
|
+
values while exposing ID scalars. Missing or false metadata keeps ordinary
|
|
42
|
+
scalar types; other flag values fail schema generation with TypeError.
|
|
39
43
|
"""
|
|
40
44
|
|
|
41
45
|
|
|
42
46
|
def get_registered_graphql_types() -> tuple[type[GraphQLType], ...]:
|
|
43
|
-
"""Return the declared GraphQL
|
|
47
|
+
"""Return the declared GraphQL value types in creation order."""
|
|
44
48
|
return tuple(GraphQLTypeMeta._registered_types)
|
|
45
49
|
|
|
46
50
|
|
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
import inspect
|
|
4
4
|
from collections.abc import Sequence
|
|
5
|
+
from dataclasses import MISSING, dataclass, fields
|
|
6
|
+
from decimal import Decimal
|
|
7
|
+
from functools import partial
|
|
5
8
|
from typing import (
|
|
6
9
|
Callable,
|
|
7
10
|
TypeVar,
|
|
@@ -16,15 +19,28 @@ from typing import (
|
|
|
16
19
|
Protocol,
|
|
17
20
|
cast,
|
|
18
21
|
)
|
|
22
|
+
from uuid import UUID
|
|
23
|
+
|
|
19
24
|
import graphene
|
|
25
|
+
from django.core.exceptions import ValidationError
|
|
20
26
|
from graphql import GraphQLError, GraphQLResolveInfo
|
|
21
27
|
|
|
22
28
|
from general_manager.api.graphql import GraphQL
|
|
23
29
|
from general_manager.api.graphql_identifiers import map_identification_scalar
|
|
24
|
-
from general_manager.api.graphql_output import
|
|
30
|
+
from general_manager.api.graphql_output import (
|
|
31
|
+
_collection_element_annotation,
|
|
32
|
+
_map_value_scalar_annotation,
|
|
33
|
+
_unwrap_optional_annotation as _unwrap_value_optional,
|
|
34
|
+
_value_field_is_identifier,
|
|
35
|
+
create_output_field_resolver,
|
|
36
|
+
resolve_output_type_hints,
|
|
37
|
+
)
|
|
38
|
+
from general_manager.api.graphql_type import GraphQLType, get_registered_graphql_types
|
|
25
39
|
from general_manager.manager.general_manager import GeneralManager
|
|
40
|
+
from general_manager.measurement.measurement import Measurement
|
|
26
41
|
|
|
27
42
|
from general_manager.utils.format_string import snake_to_camel
|
|
43
|
+
from general_manager.utils.type_checks import safe_issubclass
|
|
28
44
|
from general_manager.permission.mutation_permission import MutationPermission
|
|
29
45
|
from types import UnionType
|
|
30
46
|
|
|
@@ -232,7 +248,7 @@ def _normalize_mutation_arguments(
|
|
|
232
248
|
annotations: MutationAnnotations,
|
|
233
249
|
kwargs: MutationKwargs,
|
|
234
250
|
) -> MutationKwargs:
|
|
235
|
-
"""Normalize
|
|
251
|
+
"""Normalize mutation values using the resolver annotations."""
|
|
236
252
|
normalized = dict(kwargs)
|
|
237
253
|
for name, annotation in annotations.items():
|
|
238
254
|
if name not in normalized:
|
|
@@ -255,7 +271,7 @@ def _unwrap_optional_annotation(annotation: object) -> tuple[bool, object]:
|
|
|
255
271
|
|
|
256
272
|
|
|
257
273
|
def _normalize_mutation_value(annotation: object, value: object) -> object:
|
|
258
|
-
"""
|
|
274
|
+
"""Normalize annotated value objects, managers, and lists."""
|
|
259
275
|
if value is None:
|
|
260
276
|
return None
|
|
261
277
|
_, concrete = _unwrap_optional_annotation(annotation)
|
|
@@ -267,12 +283,20 @@ def _normalize_mutation_value(annotation: object, value: object) -> object:
|
|
|
267
283
|
]
|
|
268
284
|
if _is_general_manager_type(concrete):
|
|
269
285
|
return _normalize_manager_argument(concrete, value)
|
|
286
|
+
if safe_issubclass(concrete, GraphQLType) and not isinstance(value, concrete):
|
|
287
|
+
if (
|
|
288
|
+
not isinstance(value, _GraphQLTypeInput)
|
|
289
|
+
or value.declaration is not concrete
|
|
290
|
+
):
|
|
291
|
+
message = f"Expected coerced GraphQL input for {concrete.__name__}."
|
|
292
|
+
raise TypeError(message)
|
|
293
|
+
return value.construct()
|
|
270
294
|
return value
|
|
271
295
|
|
|
272
296
|
|
|
273
297
|
def _mutation_input_type(annotation: object) -> object:
|
|
274
298
|
"""Map nested mutation input annotations to unmounted Graphene types."""
|
|
275
|
-
|
|
299
|
+
_, concrete = _unwrap_optional_annotation(annotation)
|
|
276
300
|
origin = get_origin(concrete)
|
|
277
301
|
if origin is list or origin is List:
|
|
278
302
|
inner_annotation = get_args(concrete)[0]
|
|
@@ -285,7 +309,9 @@ def _mutation_input_type(annotation: object) -> object:
|
|
|
285
309
|
if _uses_single_id_input(concrete):
|
|
286
310
|
return graphene.ID
|
|
287
311
|
return _get_or_create_manager_input_type(concrete)
|
|
288
|
-
|
|
312
|
+
if safe_issubclass(concrete, GraphQLType):
|
|
313
|
+
declaration = cast(type[GraphQLType], concrete)
|
|
314
|
+
return lambda: _get_or_create_value_input_type(declaration)
|
|
289
315
|
return GraphQL._map_field_to_graphene_base_type(cast(type, concrete))
|
|
290
316
|
|
|
291
317
|
|
|
@@ -300,6 +326,8 @@ def _build_mutation_argument_field(
|
|
|
300
326
|
input_type = _mutation_input_type(annotation)
|
|
301
327
|
if isinstance(input_type, graphene.List):
|
|
302
328
|
return graphene.List(input_type.of_type, **kwargs)
|
|
329
|
+
if inspect.isfunction(input_type):
|
|
330
|
+
return graphene.Argument(input_type, **kwargs)
|
|
303
331
|
return cast(Callable[..., object], input_type)(**kwargs)
|
|
304
332
|
|
|
305
333
|
|
|
@@ -349,6 +377,173 @@ def _sequence_argument(value: object) -> Sequence[object]:
|
|
|
349
377
|
return (value,)
|
|
350
378
|
|
|
351
379
|
|
|
380
|
+
@dataclass(frozen=True, slots=True)
|
|
381
|
+
class _GraphQLTypeInput:
|
|
382
|
+
"""A coerced input object awaiting construction at the mutation boundary."""
|
|
383
|
+
|
|
384
|
+
declaration: type[GraphQLType]
|
|
385
|
+
construct: Callable[[], GraphQLType]
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
@dataclass(frozen=True, slots=True)
|
|
389
|
+
class _ValueInputField:
|
|
390
|
+
type: object
|
|
391
|
+
nullable: bool
|
|
392
|
+
normalize: Callable[[object], object]
|
|
393
|
+
|
|
394
|
+
|
|
395
|
+
def _normalize_value_identifier(
|
|
396
|
+
identity_type: type, field_path: str, value: object
|
|
397
|
+
) -> object:
|
|
398
|
+
try:
|
|
399
|
+
return identity_type(str(value))
|
|
400
|
+
except ValueError as error:
|
|
401
|
+
message = f"{field_path} must be a valid {identity_type.__name__} ID."
|
|
402
|
+
raise ValidationError(message) from error
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
def _map_value_input_field(
|
|
406
|
+
annotation: object,
|
|
407
|
+
*,
|
|
408
|
+
owner_name: str,
|
|
409
|
+
field_name: str,
|
|
410
|
+
is_identifier: bool,
|
|
411
|
+
) -> _ValueInputField:
|
|
412
|
+
"""Map a declared field and prepare its GraphQL-to-Python conversion."""
|
|
413
|
+
nullable, concrete = _unwrap_value_optional(
|
|
414
|
+
annotation, owner_name=owner_name, field_name=field_name
|
|
415
|
+
)
|
|
416
|
+
origin = get_origin(concrete)
|
|
417
|
+
field_path = f"{owner_name}.{field_name}"
|
|
418
|
+
convert: Callable[[object], object] | None = None
|
|
419
|
+
|
|
420
|
+
if origin is not None:
|
|
421
|
+
element = _collection_element_annotation(
|
|
422
|
+
concrete,
|
|
423
|
+
owner_name=owner_name,
|
|
424
|
+
field_name=field_name,
|
|
425
|
+
is_identifier=is_identifier,
|
|
426
|
+
)
|
|
427
|
+
item = _map_value_input_field(
|
|
428
|
+
element,
|
|
429
|
+
owner_name=owner_name,
|
|
430
|
+
field_name=field_name,
|
|
431
|
+
is_identifier=is_identifier,
|
|
432
|
+
)
|
|
433
|
+
item_type = item.type if item.nullable else graphene.NonNull(item.type)
|
|
434
|
+
input_type = graphene.List(item_type)
|
|
435
|
+
|
|
436
|
+
def convert_collection(value: object) -> object:
|
|
437
|
+
return origin(
|
|
438
|
+
item.normalize(element) for element in _sequence_argument(value)
|
|
439
|
+
)
|
|
440
|
+
|
|
441
|
+
convert = convert_collection
|
|
442
|
+
elif not is_identifier and safe_issubclass(concrete, (GraphQLType, GeneralManager)):
|
|
443
|
+
input_type = _mutation_input_type(concrete)
|
|
444
|
+
convert = partial(_normalize_mutation_value, concrete)
|
|
445
|
+
elif not is_identifier and safe_issubclass(concrete, Measurement):
|
|
446
|
+
input_type = GraphQL._map_field_to_graphene_base_type(concrete)
|
|
447
|
+
else:
|
|
448
|
+
input_type = _map_value_scalar_annotation(
|
|
449
|
+
concrete,
|
|
450
|
+
owner_name=owner_name,
|
|
451
|
+
field_name=field_name,
|
|
452
|
+
scalar_mapper=GraphQL._map_field_to_graphene_base_type,
|
|
453
|
+
is_identifier=is_identifier,
|
|
454
|
+
)
|
|
455
|
+
if is_identifier and (concrete is int or concrete is UUID):
|
|
456
|
+
convert = partial(_normalize_value_identifier, concrete, field_path)
|
|
457
|
+
|
|
458
|
+
def normalize(value: object) -> object:
|
|
459
|
+
if value is None and not nullable:
|
|
460
|
+
# Defaults let clients omit a field, while the Python field
|
|
461
|
+
# annotation still determines whether it accepts explicit null.
|
|
462
|
+
message = f"{field_path} cannot be null."
|
|
463
|
+
raise ValidationError(message)
|
|
464
|
+
if value is None:
|
|
465
|
+
return None
|
|
466
|
+
if convert is not None:
|
|
467
|
+
return convert(value)
|
|
468
|
+
return Decimal(str(value)) if concrete is Decimal else value
|
|
469
|
+
|
|
470
|
+
return _ValueInputField(input_type, nullable, normalize)
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
def _get_or_create_value_input_type(
|
|
474
|
+
declaration: type[GraphQLType],
|
|
475
|
+
) -> type[graphene.InputObjectType]:
|
|
476
|
+
"""Build an input object only when the schema references the declaration."""
|
|
477
|
+
cache = GraphQL._value_input_type_cache
|
|
478
|
+
cached = cache.get(declaration)
|
|
479
|
+
if cached is not None:
|
|
480
|
+
return cached
|
|
481
|
+
|
|
482
|
+
input_name = f"{declaration.__name__}Input"
|
|
483
|
+
if input_name == "ChecksumInput":
|
|
484
|
+
message = f"GraphQL input type '{input_name}' is reserved for file uploads."
|
|
485
|
+
raise ValueError(message)
|
|
486
|
+
declarations = {
|
|
487
|
+
value_type.__name__: value_type for value_type in get_registered_graphql_types()
|
|
488
|
+
}
|
|
489
|
+
declarations[declaration.__name__] = declaration
|
|
490
|
+
hints = resolve_output_type_hints(
|
|
491
|
+
declaration,
|
|
492
|
+
manager_registry=GraphQL.manager_registry,
|
|
493
|
+
output_class_registry=declarations,
|
|
494
|
+
)
|
|
495
|
+
input_fields: dict[str, graphene.InputField] = {}
|
|
496
|
+
conversions: dict[str, _ValueInputField] = {}
|
|
497
|
+
omitted_as_none: dict[str, object] = {}
|
|
498
|
+
for declared_field in fields(declaration):
|
|
499
|
+
if not declared_field.init:
|
|
500
|
+
continue
|
|
501
|
+
name = declared_field.name
|
|
502
|
+
mapped = _map_value_input_field(
|
|
503
|
+
hints[name],
|
|
504
|
+
owner_name=declaration.__name__,
|
|
505
|
+
field_name=name,
|
|
506
|
+
is_identifier=_value_field_is_identifier(
|
|
507
|
+
declaration.__name__, declared_field
|
|
508
|
+
),
|
|
509
|
+
)
|
|
510
|
+
has_default = (
|
|
511
|
+
declared_field.default is not MISSING
|
|
512
|
+
or declared_field.default_factory is not MISSING
|
|
513
|
+
)
|
|
514
|
+
input_fields[name] = graphene.InputField(
|
|
515
|
+
mapped.type, required=not (mapped.nullable or has_default)
|
|
516
|
+
)
|
|
517
|
+
conversions[name] = mapped
|
|
518
|
+
if mapped.nullable and not has_default:
|
|
519
|
+
omitted_as_none[name] = None
|
|
520
|
+
|
|
521
|
+
if not input_fields:
|
|
522
|
+
message = f"{declaration.__name__} must declare an initializer field for GraphQL input."
|
|
523
|
+
raise TypeError(message)
|
|
524
|
+
|
|
525
|
+
def construct(values: dict[str, object]) -> GraphQLType:
|
|
526
|
+
kwargs = {
|
|
527
|
+
name: conversions[name].normalize(value) for name, value in values.items()
|
|
528
|
+
}
|
|
529
|
+
return declaration(**(omitted_as_none | kwargs))
|
|
530
|
+
|
|
531
|
+
def wrap_input(values: dict[str, object]) -> _GraphQLTypeInput:
|
|
532
|
+
# Delay constructors, manager lookups, and validation until the
|
|
533
|
+
# mutation's existing error and permission boundary is active.
|
|
534
|
+
return _GraphQLTypeInput(declaration, partial(construct, values))
|
|
535
|
+
|
|
536
|
+
generated = type(
|
|
537
|
+
input_name,
|
|
538
|
+
(graphene.InputObjectType,),
|
|
539
|
+
{"Meta": type("Meta", (), {"container": wrap_input})},
|
|
540
|
+
)
|
|
541
|
+
# Keep field names separate from Graphene's reserved class attributes.
|
|
542
|
+
generated._meta.fields.update(input_fields) # type: ignore[attr-defined]
|
|
543
|
+
cache[declaration] = generated
|
|
544
|
+
return generated
|
|
545
|
+
|
|
546
|
+
|
|
352
547
|
def graph_ql_mutation(
|
|
353
548
|
_func: FuncT | type[MutationPermission] | None = None,
|
|
354
549
|
permission: type[MutationPermission] | None = None,
|
|
@@ -381,7 +576,12 @@ def graph_ql_mutation(
|
|
|
381
576
|
``None`` unchanged, constructs mapping inputs with ``manager_class(**value)``,
|
|
382
577
|
and constructs non-mapping inputs with ``manager_class(value)``. For
|
|
383
578
|
``list[Manager]`` and ``List[Manager]`` arguments, each list item follows
|
|
384
|
-
that same manager normalization
|
|
579
|
+
that same manager normalization. Concrete ``GraphQLType`` subclasses
|
|
580
|
+
generate ``<ClassName>Input`` objects, including when used as list elements
|
|
581
|
+
or nullable arguments. Their fields are recursively converted to native
|
|
582
|
+
Python values and passed to the dataclass constructor. Manager references
|
|
583
|
+
inside the input use the same normalization as direct manager arguments.
|
|
584
|
+
Conversion completes before permission checks and resolver calls.
|
|
385
585
|
Other supported Python annotations are mapped through
|
|
386
586
|
``GraphQL._map_field_to_graphene_base_type``.
|
|
387
587
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.87.6 → generalmanager-0.88.0}/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.87.6 → generalmanager-0.88.0}/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
|
{generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_filter_contract.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_identifiers.py
RENAMED
|
File without changes
|
{generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_mutations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_query_permissions.py
RENAMED
|
File without changes
|
{generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_relations.py
RENAMED
|
File without changes
|
{generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_resolvers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_subscriptions.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_value_contract.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_warmup_registry.py
RENAMED
|
File without changes
|
{generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/graphql_warmup_tasks.py
RENAMED
|
File without changes
|
{generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/mutation_controls.py
RENAMED
|
File without changes
|
{generalmanager-0.87.6 → generalmanager-0.88.0}/src/general_manager/api/notification_batching.py
RENAMED
|
File without changes
|