GeneralManager 0.82.5__tar.gz → 0.83.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.82.5/src/GeneralManager.egg-info → generalmanager-0.83.0}/PKG-INFO +1 -1
- {generalmanager-0.82.5 → generalmanager-0.83.0}/pyproject.toml +1 -1
- {generalmanager-0.82.5 → generalmanager-0.83.0/src/GeneralManager.egg-info}/PKG-INFO +1 -1
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/GeneralManager.egg-info/SOURCES.txt +1 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/bootstrap.py +1 -1
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/read_only/management.py +23 -6
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/management/commands/search_reconcile.py +11 -6
- generalmanager-0.83.0/src/general_manager/management/commands/sync_read_only.py +169 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/LICENSE +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/README.md +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/setup.cfg +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/GeneralManager.egg-info/requires.txt +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/GeneralManager.egg-info/top_level.txt +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/_types/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/_types/api.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/_types/bucket.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/_types/cache.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/_types/dataframes.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/_types/factory.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/_types/general_manager.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/_types/interface.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/_types/manager.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/_types/measurement.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/_types/permission.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/_types/rule.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/_types/search.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/_types/utils.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_as_of.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_errors.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_groups.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_identifiers.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_mutations.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_ordering.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_output.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_prefetch.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_relations.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_resolvers.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_search.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_subscriptions.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_type.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_view.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_warmup.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_warmup_registry.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_warmup_tasks.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/mutation.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/notification_batching.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/property.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/registry.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/remote_api.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/remote_invalidation.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/remote_invalidation_client.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/apps.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/as_of.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/bucket/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/bucket/_materialized_bucket.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/bucket/_ordering.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/bucket/base_bucket.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/bucket/calculation_bucket.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/bucket/database_bucket.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/bucket/excel_bucket.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/bucket/group_bucket.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/bucket/indexing.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/bucket/projection.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/bucket/request_bucket.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/_dependency_graph.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/batch_refresh.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/cache_decorator.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/cache_tracker.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/data_change_context.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/dependency_cache.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/dependency_index.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/dependency_matching.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/dependency_publish.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/dependency_shards.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/model_dependency_collector.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/run_context.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/run_context_lru.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/signals.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/transaction_barrier.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/audit.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/bootstrap.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/checks.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/consumer.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/context.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/errors.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/__main__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/baseline.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/datasets/basic_queries.yaml +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/datasets/demo_readiness.yaml +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/datasets/edge_cases.yaml +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/datasets/follow_ups.yaml +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/datasets/large_schema.yaml +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/datasets/multi_hop.yaml +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/datasets/planned_orchestration.yaml +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/diagnostics.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/fingerprints.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/fixtures.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/judges/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/judges/answer_quality.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/judges/contract.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/judges/result_accuracy.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/judges/tool_sequence.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/readiness.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/runner.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/traces.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/grounding.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/models.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/budget.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/calculations.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/catalog.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/config.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/events.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/evidence.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/models.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/planner.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/provider_calls.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/resolver.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/routing.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/scheduler.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/synthesis.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/validation.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/providers/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/providers/_shared.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/providers/anthropic.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/providers/base.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/providers/google.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/providers/ollama.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/providers/openai.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/rate_limits.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/routing.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/schema_index.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/settings.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/signals.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/system_prompt.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/tool_metadata.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/tools.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/turns.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/views.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/conf.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/dataframes/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/dataframes/measurements.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/factory/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/factory/auto_factory.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/factory/factories.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/factory/factory_methods.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/base_interface.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/bundles/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/bundles/calculation.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/bundles/database.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/bundles/excel.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/bundles/remote_manager.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/bundles/request.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/base.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/builtin.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/calculation/input_resolution.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/configuration.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/core/observability.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/core/utils.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/excel/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/exceptions.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/factory.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/orm/bulk.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/orm/create_many.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/orm/history.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/orm/support.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/orm_utils/update_state.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/read_only/_types.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/registry.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/excel.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/excel_store.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/excel_workbook.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/infrastructure/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/interfaces/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/interfaces/calculation.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/interfaces/database.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/interfaces/excel.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/interfaces/existing_model.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/interfaces/read_only.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/interfaces/request.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/manifests/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/manifests/capability_builder.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/manifests/capability_models.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/orm_interface.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/requests.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/utils/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/utils/errors.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/utils/history.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/interface/utils/models.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/logging.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/management/commands/chat_cleanup.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/management/commands/cleanup_upload_intents.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/management/commands/graphql_warmup.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/management/commands/graphql_warmup_refresh_due.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/management/commands/search_index.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/management/commands/shell.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/manager/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/manager/bulk_create.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/manager/general_manager.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/manager/group_manager.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/manager/input.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/manager/meta.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/measurement/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/measurement/measurement.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/measurement/measurement_field.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/metrics/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/metrics/graphql.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/migrations/0001_initial.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/migrations/0004_chat_persistence_models.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/migrations/0004_search_index_state.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/migrations/0005_merge_chat_search.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/migrations/0006_chat_pending_confirmation_scoped_ids.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/migrations/0007_upload_intent.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/migrations/0008_upload_finalization_versions.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/migrations/0009_upload_cleanup_state.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/migrations/0010_chat_pending_confirmation_portable_uniqueness.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/migrations/0011_search_index_state_dirty_generation.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/migrations/0012_chat_context_watermarks.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/migrations/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/models.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/permission/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/permission/audit.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/permission/base_permission.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/permission/graphql_capabilities.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/permission/manager_based_permission.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/permission/mutation_permission.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/permission/permission_checks.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/permission/permission_data_manager.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/permission/utils.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/public_api_registry.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/py.typed +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/rule/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/rule/handler.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/rule/rule.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/search/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/search/async_tasks.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/search/backend.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/search/backend_registry.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/search/backends/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/search/backends/dev.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/search/backends/meilisearch.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/search/backends/opensearch.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/search/backends/typesense.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/search/checks.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/search/config.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/search/identity.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/search/indexer.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/search/invalidation.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/search/m2m_invalidation.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/search/models.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/search/reconciliation.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/search/registry.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/search/tasks.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/search/utils.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/seeding/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/seeding/manager_landscape.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/uploads/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/uploads/adapters.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/uploads/checks.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/uploads/config.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/uploads/errors.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/uploads/finalization.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/uploads/graphql.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/uploads/graphql_types.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/uploads/metrics.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/uploads/models.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/uploads/public.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/uploads/s3.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/uploads/services.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/uploads/tokens.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/uploads/types.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/uploads/urls.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/uploads/views.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/utils/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/utils/_args_to_kwargs.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/utils/_cache_key_encoder.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/utils/_make_cache_key.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/utils/_none_to_zero.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/utils/filter_parser.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/utils/format_string.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/utils/json_encoder.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/utils/path_mapping.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/utils/public_api.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/utils/testing.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/utils/type_checks.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/workflow/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/workflow/actions.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/workflow/backend_registry.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/workflow/backends/__init__.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/workflow/backends/celery.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/workflow/backends/local.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/workflow/backends/n8n.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/workflow/config.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/workflow/engine.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/workflow/event_registry.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/workflow/events.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/workflow/models.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/workflow/signal_bridge.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/workflow/tasks.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/workflow/telemetry.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/tests/test_settings.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.0}/tests/test_urls.py +0 -0
- {generalmanager-0.82.5 → generalmanager-0.83.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.83.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.83.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.83.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
|
|
@@ -229,6 +229,7 @@ src/general_manager/management/commands/search_index.py
|
|
|
229
229
|
src/general_manager/management/commands/search_reconcile.py
|
|
230
230
|
src/general_manager/management/commands/seed_manager_landscape.py
|
|
231
231
|
src/general_manager/management/commands/shell.py
|
|
232
|
+
src/general_manager/management/commands/sync_read_only.py
|
|
232
233
|
src/general_manager/management/commands/workflow_drain_outbox.py
|
|
233
234
|
src/general_manager/management/commands/workflow_replay_dead_letters.py
|
|
234
235
|
src/general_manager/manager/__init__.py
|
|
@@ -191,7 +191,7 @@ def install_startup_hook_runner() -> None:
|
|
|
191
191
|
) -> None:
|
|
192
192
|
run_main = os.environ.get("RUN_MAIN") == "true"
|
|
193
193
|
command = argv[1] if len(argv) > 1 else None
|
|
194
|
-
should_run_hooks = command != "runserver" or run_main
|
|
194
|
+
should_run_hooks = command != "runserver" or run_main or "--noreload" in argv
|
|
195
195
|
hooks_registry = registered_startup_hook_entries() if should_run_hooks else {}
|
|
196
196
|
if hooks_registry:
|
|
197
197
|
resolver_groups: list[
|
|
@@ -3,12 +3,14 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import json
|
|
6
|
-
from collections.abc import Callable, Sequence
|
|
7
|
-
from contextlib import AbstractContextManager
|
|
6
|
+
from collections.abc import Callable, Iterator, Sequence
|
|
7
|
+
from contextlib import AbstractContextManager, contextmanager
|
|
8
|
+
from contextvars import ContextVar
|
|
8
9
|
from hashlib import sha256
|
|
9
10
|
from typing import TYPE_CHECKING, ClassVar, Protocol, TypeVar, cast
|
|
10
11
|
|
|
11
12
|
from django.core.checks import Warning
|
|
13
|
+
from django.conf import settings
|
|
12
14
|
from django.db import (
|
|
13
15
|
IntegrityError,
|
|
14
16
|
connection as django_connection,
|
|
@@ -44,6 +46,19 @@ from ._types import (
|
|
|
44
46
|
)
|
|
45
47
|
|
|
46
48
|
logger = get_logger("interface.read_only")
|
|
49
|
+
_automatic_sync_suppressed: ContextVar[bool] = ContextVar(
|
|
50
|
+
"read_only_automatic_sync_suppressed", default=False
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@contextmanager
|
|
55
|
+
def _suppress_automatic_sync() -> Iterator[None]:
|
|
56
|
+
"""Let explicit CLI maintenance own sync while other startup hooks still run."""
|
|
57
|
+
token = _automatic_sync_suppressed.set(True)
|
|
58
|
+
try:
|
|
59
|
+
yield
|
|
60
|
+
finally:
|
|
61
|
+
_automatic_sync_suppressed.reset(token)
|
|
47
62
|
|
|
48
63
|
|
|
49
64
|
class _ColumnDescription(Protocol):
|
|
@@ -1156,9 +1171,9 @@ class ReadOnlyManagementCapability(BaseCapability):
|
|
|
1156
1171
|
returned. The registered hook catches `MissingReadOnlyBindingError`
|
|
1157
1172
|
only to tolerate binding metadata becoming unavailable between
|
|
1158
1173
|
registration and startup execution; other sync errors propagate.
|
|
1159
|
-
Automatic synchronization
|
|
1160
|
-
|
|
1161
|
-
|
|
1174
|
+
Automatic synchronization uses `READ_ONLY_SYNC_ON_STARTUP`, falling
|
|
1175
|
+
back to Django `DEBUG` when unset. Explicit `sync_data()` calls remain
|
|
1176
|
+
available regardless of that setting.
|
|
1162
1177
|
|
|
1163
1178
|
Parameters:
|
|
1164
1179
|
interface_cls: Interface class used to derive the bound manager and model.
|
|
@@ -1192,7 +1207,9 @@ class ReadOnlyManagementCapability(BaseCapability):
|
|
|
1192
1207
|
binding is not available (raises MissingReadOnlyBindingError), logs a debug
|
|
1193
1208
|
message and returns without raising.
|
|
1194
1209
|
"""
|
|
1195
|
-
if not get_setting(
|
|
1210
|
+
if _automatic_sync_suppressed.get() or not get_setting(
|
|
1211
|
+
"READ_ONLY_SYNC_ON_STARTUP", settings.DEBUG
|
|
1212
|
+
):
|
|
1196
1213
|
return
|
|
1197
1214
|
try:
|
|
1198
1215
|
self.sync_data(interface_cls)
|
|
@@ -92,13 +92,18 @@ class Command(BaseCommand):
|
|
|
92
92
|
|
|
93
93
|
while True:
|
|
94
94
|
result = reconcile_search_indexes(force=force, max_states=max_states)
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
f"({result.documents} documents, {result.failed} failures)."
|
|
100
|
-
)
|
|
95
|
+
summary = (
|
|
96
|
+
"Reconciled "
|
|
97
|
+
f"{result.reconciled} search index states "
|
|
98
|
+
f"({result.documents} documents, {result.failed} failures)."
|
|
101
99
|
)
|
|
100
|
+
if result.failed:
|
|
101
|
+
self.stderr.write(self.style.ERROR(summary))
|
|
102
|
+
if once:
|
|
103
|
+
message = "Search reconciliation failed; inspect logs and SearchIndexState.last_error."
|
|
104
|
+
raise CommandError(message)
|
|
105
|
+
else:
|
|
106
|
+
self.stdout.write(self.style.SUCCESS(summary))
|
|
102
107
|
if once:
|
|
103
108
|
return
|
|
104
109
|
force = False
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"""Explicit deployment maintenance for registered read-only managers."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from argparse import ArgumentParser
|
|
6
|
+
from collections.abc import Iterable, Sequence
|
|
7
|
+
from typing import cast
|
|
8
|
+
|
|
9
|
+
from django.core.management.base import BaseCommand, CommandError
|
|
10
|
+
from django.db import connections
|
|
11
|
+
|
|
12
|
+
from general_manager.interface.capabilities.read_only.management import (
|
|
13
|
+
ReadOnlyManagementCapability,
|
|
14
|
+
_ReadOnlyInterface,
|
|
15
|
+
_SchemaConnection,
|
|
16
|
+
_suppress_automatic_sync,
|
|
17
|
+
)
|
|
18
|
+
from general_manager.interface.infrastructure.startup_hooks import (
|
|
19
|
+
order_interfaces_by_dependency,
|
|
20
|
+
)
|
|
21
|
+
from general_manager.manager.meta import GeneralManagerMeta
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _manager_path(interface: _ReadOnlyInterface) -> str:
|
|
25
|
+
"""Identify a bound manager without importing arbitrary selector input."""
|
|
26
|
+
manager = interface._parent_class
|
|
27
|
+
return f"{manager.__module__}.{manager.__qualname__}"
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _capability(interface: _ReadOnlyInterface) -> ReadOnlyManagementCapability:
|
|
31
|
+
"""Use the manager's configured management capability, including overrides."""
|
|
32
|
+
return cast(
|
|
33
|
+
ReadOnlyManagementCapability,
|
|
34
|
+
interface.require_capability(
|
|
35
|
+
"read_only_management", expected_type=ReadOnlyManagementCapability
|
|
36
|
+
),
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def _select_interfaces(value: object) -> list[_ReadOnlyInterface]:
|
|
41
|
+
"""Validate selectors and include transitive read-only relation dependencies."""
|
|
42
|
+
interfaces = list(
|
|
43
|
+
dict.fromkeys(
|
|
44
|
+
cast(_ReadOnlyInterface, manager.Interface)
|
|
45
|
+
for manager in GeneralManagerMeta.all_classes
|
|
46
|
+
if getattr(manager.Interface, "_interface_type", None) == "readonly"
|
|
47
|
+
)
|
|
48
|
+
)
|
|
49
|
+
if value is None:
|
|
50
|
+
selected = interfaces
|
|
51
|
+
else:
|
|
52
|
+
selectors: tuple[object, ...]
|
|
53
|
+
if isinstance(value, str):
|
|
54
|
+
selectors = (value,)
|
|
55
|
+
elif isinstance(value, Iterable):
|
|
56
|
+
selectors = tuple(value)
|
|
57
|
+
else:
|
|
58
|
+
selectors = ()
|
|
59
|
+
if not selectors or any(
|
|
60
|
+
not isinstance(selector, str) or not selector for selector in selectors
|
|
61
|
+
):
|
|
62
|
+
message = "--manager must contain one or more nonempty manager names."
|
|
63
|
+
raise CommandError(message)
|
|
64
|
+
selected = []
|
|
65
|
+
for selector in selectors:
|
|
66
|
+
matches = [
|
|
67
|
+
interface
|
|
68
|
+
for interface in interfaces
|
|
69
|
+
if selector
|
|
70
|
+
in (interface._parent_class.__name__, _manager_path(interface))
|
|
71
|
+
]
|
|
72
|
+
if not matches:
|
|
73
|
+
message = f"Unknown read-only manager: {selector}."
|
|
74
|
+
raise CommandError(message)
|
|
75
|
+
if len(matches) > 1:
|
|
76
|
+
paths = ", ".join(sorted(_manager_path(item) for item in matches))
|
|
77
|
+
message = (
|
|
78
|
+
f"Ambiguous read-only manager {selector}; use one of: {paths}."
|
|
79
|
+
)
|
|
80
|
+
raise CommandError(message)
|
|
81
|
+
if matches[0] not in selected:
|
|
82
|
+
selected.append(matches[0])
|
|
83
|
+
|
|
84
|
+
dependencies: dict[_ReadOnlyInterface, set[_ReadOnlyInterface]] = {}
|
|
85
|
+
pending = list(selected)
|
|
86
|
+
while pending:
|
|
87
|
+
interface = pending.pop(0)
|
|
88
|
+
if interface in dependencies:
|
|
89
|
+
continue
|
|
90
|
+
dependencies[interface] = (
|
|
91
|
+
ReadOnlyManagementCapability._related_readonly_interfaces(interface)
|
|
92
|
+
)
|
|
93
|
+
pending.extend(sorted(dependencies[interface], key=_manager_path))
|
|
94
|
+
|
|
95
|
+
interface_list = sorted(dependencies, key=_manager_path)
|
|
96
|
+
ordered = cast(
|
|
97
|
+
list[_ReadOnlyInterface],
|
|
98
|
+
order_interfaces_by_dependency(
|
|
99
|
+
interface_list,
|
|
100
|
+
lambda interface: set(dependencies[cast(_ReadOnlyInterface, interface)]),
|
|
101
|
+
),
|
|
102
|
+
)
|
|
103
|
+
positions = {interface: index for index, interface in enumerate(ordered)}
|
|
104
|
+
if any(
|
|
105
|
+
positions[dependency] >= positions[interface]
|
|
106
|
+
for interface in ordered
|
|
107
|
+
for dependency in dependencies[interface]
|
|
108
|
+
):
|
|
109
|
+
message = "Read-only dependency cycle; cannot determine a safe sync order."
|
|
110
|
+
raise CommandError(message)
|
|
111
|
+
return ordered
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
class Command(BaseCommand):
|
|
115
|
+
help = "Synchronize read-only managers and their dependencies after migrations."
|
|
116
|
+
|
|
117
|
+
def add_arguments(self, parser: ArgumentParser) -> None:
|
|
118
|
+
"""Accept repeatable unique class names or module-qualified manager paths."""
|
|
119
|
+
parser.add_argument(
|
|
120
|
+
"--manager",
|
|
121
|
+
action="append",
|
|
122
|
+
dest="managers",
|
|
123
|
+
help="Read-only manager name or module-qualified class path. Repeatable; defaults to all.",
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
def run_from_argv(self, argv: Sequence[str]) -> None:
|
|
127
|
+
"""Avoid duplicate automatic read-only sync before this explicit CLI step."""
|
|
128
|
+
with _suppress_automatic_sync():
|
|
129
|
+
super().run_from_argv(argv)
|
|
130
|
+
|
|
131
|
+
def handle(self, *_args: object, **options: object) -> None:
|
|
132
|
+
"""Preflight all schemas, then sync in dependency order or fail loudly.
|
|
133
|
+
|
|
134
|
+
No global transaction is added: completed managers may remain synced if
|
|
135
|
+
a later manager fails. Re-running the command converges the payloads.
|
|
136
|
+
"""
|
|
137
|
+
interfaces = _select_interfaces(options.get("managers"))
|
|
138
|
+
# The public sync API logs schema warnings and returns without writing.
|
|
139
|
+
# Deployment maintenance must instead fail before claiming success.
|
|
140
|
+
for interface in interfaces:
|
|
141
|
+
try:
|
|
142
|
+
capability = _capability(interface)
|
|
143
|
+
warnings = capability.ensure_schema_is_up_to_date(
|
|
144
|
+
interface,
|
|
145
|
+
interface._parent_class,
|
|
146
|
+
interface._model,
|
|
147
|
+
connection=cast(
|
|
148
|
+
_SchemaConnection,
|
|
149
|
+
connections[capability._database_alias(interface)],
|
|
150
|
+
),
|
|
151
|
+
)
|
|
152
|
+
except Exception as exc:
|
|
153
|
+
message = f"Read-only schema check failed for {_manager_path(interface)}: {exc}"
|
|
154
|
+
raise CommandError(message) from exc
|
|
155
|
+
if warnings:
|
|
156
|
+
detail = "; ".join(str(warning) for warning in warnings)
|
|
157
|
+
message = f"Read-only schema check failed for {_manager_path(interface)}: {detail}"
|
|
158
|
+
raise CommandError(message)
|
|
159
|
+
|
|
160
|
+
for interface in interfaces:
|
|
161
|
+
try:
|
|
162
|
+
_capability(interface).sync_data(interface, schema_validated=True)
|
|
163
|
+
except Exception as exc:
|
|
164
|
+
message = f"Read-only sync failed for {_manager_path(interface)}: {exc}"
|
|
165
|
+
raise CommandError(message) from exc
|
|
166
|
+
self.stdout.write(f"Synchronized {_manager_path(interface)}.")
|
|
167
|
+
self.stdout.write(
|
|
168
|
+
self.style.SUCCESS(f"Synchronized {len(interfaces)} read-only managers.")
|
|
169
|
+
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.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.82.5 → generalmanager-0.83.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
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_identifiers.py
RENAMED
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_mutations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_relations.py
RENAMED
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_resolvers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_subscriptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_warmup_registry.py
RENAMED
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/graphql_warmup_tasks.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/notification_batching.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/api/remote_invalidation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/bucket/_materialized_bucket.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/bucket/calculation_bucket.py
RENAMED
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/bucket/database_bucket.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/bucket/request_bucket.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/_dependency_graph.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/cache_decorator.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/data_change_context.py
RENAMED
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/dependency_cache.py
RENAMED
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/dependency_index.py
RENAMED
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/dependency_matching.py
RENAMED
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/dependency_publish.py
RENAMED
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/dependency_shards.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/run_context_lru.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/cache/transaction_barrier.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/diagnostics.py
RENAMED
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/fingerprints.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/judges/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/evals/judges/contract.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/calculations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/evidence.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/provider_calls.py
RENAMED
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/resolver.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/scheduler.py
RENAMED
|
File without changes
|
{generalmanager-0.82.5 → generalmanager-0.83.0}/src/general_manager/chat/planned/synthesis.py
RENAMED
|
File without changes
|