GeneralManager 0.75.0__tar.gz → 0.76.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.75.0/src/GeneralManager.egg-info → generalmanager-0.76.0}/PKG-INFO +4 -4
- {generalmanager-0.75.0 → generalmanager-0.76.0}/pyproject.toml +4 -4
- {generalmanager-0.75.0 → generalmanager-0.76.0/src/GeneralManager.egg-info}/PKG-INFO +4 -4
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/GeneralManager.egg-info/requires.txt +3 -3
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/search/backend_registry.py +20 -2
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/search/backends/dev.py +74 -15
- {generalmanager-0.75.0 → generalmanager-0.76.0}/LICENSE +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/README.md +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/setup.cfg +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/GeneralManager.egg-info/SOURCES.txt +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/GeneralManager.egg-info/top_level.txt +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/_types/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/_types/api.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/_types/bucket.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/_types/cache.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/_types/dataframes.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/_types/factory.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/_types/general_manager.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/_types/interface.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/_types/manager.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/_types/measurement.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/_types/permission.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/_types/rule.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/_types/search.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/_types/utils.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql_as_of.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql_errors.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql_mutations.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql_output.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql_prefetch.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql_relations.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql_resolvers.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql_search.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql_subscriptions.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql_type.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql_view.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql_warmup.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql_warmup_registry.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql_warmup_tasks.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/mutation.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/notification_batching.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/property.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/registry.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/remote_api.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/remote_invalidation.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/remote_invalidation_client.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/apps.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/as_of.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/bootstrap.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/bucket/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/bucket/base_bucket.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/bucket/calculation_bucket.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/bucket/database_bucket.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/bucket/group_bucket.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/bucket/indexing.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/bucket/projection.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/bucket/request_bucket.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/cache/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/cache/cache_decorator.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/cache/cache_tracker.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/cache/data_change_context.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/cache/dependency_cache.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/cache/dependency_index.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/cache/dependency_matching.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/cache/dependency_publish.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/cache/dependency_shards.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/cache/model_dependency_collector.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/cache/run_context.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/cache/run_context_lru.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/cache/signals.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/audit.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/bootstrap.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/checks.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/consumer.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/errors.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/__main__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/baseline.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/datasets/basic_queries.yaml +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/datasets/demo_readiness.yaml +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/datasets/edge_cases.yaml +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/datasets/follow_ups.yaml +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/datasets/large_schema.yaml +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/datasets/multi_hop.yaml +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/diagnostics.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/fingerprints.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/fixtures.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/judges/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/judges/answer_quality.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/judges/contract.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/judges/result_accuracy.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/judges/tool_sequence.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/readiness.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/runner.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/traces.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/grounding.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/models.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/providers/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/providers/_shared.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/providers/anthropic.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/providers/base.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/providers/google.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/providers/ollama.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/providers/openai.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/rate_limits.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/routing.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/schema_index.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/settings.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/signals.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/system_prompt.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/tool_metadata.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/tools.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/views.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/conf.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/dataframes/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/dataframes/measurements.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/factory/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/factory/auto_factory.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/factory/factories.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/factory/factory_methods.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/base_interface.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/bundles/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/bundles/calculation.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/bundles/database.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/bundles/remote_manager.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/bundles/request.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/base.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/builtin.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/calculation/input_resolution.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/configuration.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/core/observability.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/core/utils.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/exceptions.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/factory.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/orm/history.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/orm/support.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/read_only/_types.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/registry.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/infrastructure/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/interfaces/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/interfaces/calculation.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/interfaces/database.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/interfaces/existing_model.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/interfaces/read_only.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/interfaces/request.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/manifests/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/manifests/capability_builder.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/manifests/capability_models.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/orm_interface.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/requests.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/utils/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/utils/errors.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/utils/history.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/interface/utils/models.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/logging.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/management/commands/chat_cleanup.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/management/commands/cleanup_upload_intents.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/management/commands/graphql_warmup.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/management/commands/graphql_warmup_refresh_due.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/management/commands/search_index.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/management/commands/search_reconcile.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/management/commands/shell.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/manager/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/manager/general_manager.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/manager/group_manager.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/manager/input.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/manager/meta.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/measurement/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/measurement/measurement.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/measurement/measurement_field.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/metrics/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/metrics/graphql.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/migrations/0001_initial.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/migrations/0004_chat_persistence_models.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/migrations/0004_search_index_state.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/migrations/0005_merge_chat_search.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/migrations/0006_chat_pending_confirmation_scoped_ids.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/migrations/0007_upload_intent.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/migrations/0008_upload_finalization_versions.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/migrations/0009_upload_cleanup_state.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/migrations/0010_chat_pending_confirmation_portable_uniqueness.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/migrations/0011_search_index_state_dirty_generation.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/migrations/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/models.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/permission/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/permission/audit.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/permission/base_permission.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/permission/graphql_capabilities.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/permission/manager_based_permission.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/permission/mutation_permission.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/permission/permission_checks.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/permission/permission_data_manager.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/permission/utils.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/public_api_registry.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/py.typed +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/rule/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/rule/handler.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/rule/rule.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/search/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/search/async_tasks.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/search/backend.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/search/backends/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/search/backends/meilisearch.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/search/backends/opensearch.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/search/backends/typesense.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/search/checks.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/search/config.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/search/indexer.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/search/invalidation.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/search/m2m_invalidation.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/search/models.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/search/reconciliation.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/search/registry.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/search/tasks.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/search/utils.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/seeding/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/seeding/manager_landscape.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/uploads/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/uploads/adapters.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/uploads/checks.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/uploads/config.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/uploads/errors.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/uploads/finalization.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/uploads/graphql.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/uploads/graphql_types.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/uploads/metrics.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/uploads/models.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/uploads/public.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/uploads/s3.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/uploads/services.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/uploads/tokens.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/uploads/types.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/uploads/urls.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/uploads/views.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/utils/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/utils/args_to_kwargs.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/utils/filter_parser.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/utils/format_string.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/utils/json_encoder.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/utils/make_cache_key.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/utils/none_to_zero.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/utils/path_mapping.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/utils/public_api.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/utils/testing.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/utils/type_checks.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/workflow/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/workflow/actions.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/workflow/backend_registry.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/workflow/backends/__init__.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/workflow/backends/celery.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/workflow/backends/local.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/workflow/backends/n8n.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/workflow/config.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/workflow/engine.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/workflow/event_registry.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/workflow/events.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/workflow/models.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/workflow/signal_bridge.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/workflow/tasks.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/workflow/telemetry.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/tests/test_settings.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.0}/tests/test_urls.py +0 -0
- {generalmanager-0.75.0 → generalmanager-0.76.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.76.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
|
|
@@ -47,7 +47,7 @@ License-File: LICENSE
|
|
|
47
47
|
Requires-Dist: asgiref>=3.8.1
|
|
48
48
|
Requires-Dist: celery<6.0.0,>=5.3.6
|
|
49
49
|
Requires-Dist: channels>=4.1.0
|
|
50
|
-
Requires-Dist: Django>=5.2.
|
|
50
|
+
Requires-Dist: Django>=5.2.16
|
|
51
51
|
Requires-Dist: django-simple-history>=3.8.0
|
|
52
52
|
Requires-Dist: exrex>=0.12.0
|
|
53
53
|
Requires-Dist: factory_boy>=3.3.3
|
|
@@ -55,7 +55,7 @@ Requires-Dist: Faker>=37.1.0
|
|
|
55
55
|
Requires-Dist: flexcache>=0.3
|
|
56
56
|
Requires-Dist: flexparser>=0.4
|
|
57
57
|
Requires-Dist: gitdb>=4.0.12
|
|
58
|
-
Requires-Dist: GitPython>=3.1.
|
|
58
|
+
Requires-Dist: GitPython>=3.1.58
|
|
59
59
|
Requires-Dist: graphene>=3.4.3
|
|
60
60
|
Requires-Dist: graphene-django>=3.2.3
|
|
61
61
|
Requires-Dist: graphql-core>=3.2.6
|
|
@@ -68,7 +68,7 @@ Requires-Dist: python-dateutil>=2.9.0.post0
|
|
|
68
68
|
Requires-Dist: PyYAML>=6.0.3
|
|
69
69
|
Requires-Dist: six>=1.17.0
|
|
70
70
|
Requires-Dist: smmap>=5.0.2
|
|
71
|
-
Requires-Dist: sqlparse>=0.
|
|
71
|
+
Requires-Dist: sqlparse>=0.6.0
|
|
72
72
|
Requires-Dist: text-unidecode>=1.3
|
|
73
73
|
Requires-Dist: typing_extensions>=4.13.2
|
|
74
74
|
Requires-Dist: tzdata>=2025.2
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "GeneralManager"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.76.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" }]
|
|
@@ -35,7 +35,7 @@ dependencies = [
|
|
|
35
35
|
"asgiref>=3.8.1",
|
|
36
36
|
"celery>=5.3.6,<6.0.0", # async search indexing (docs/concepts/search.md)
|
|
37
37
|
"channels>=4.1.0",
|
|
38
|
-
"Django>=5.2.
|
|
38
|
+
"Django>=5.2.16",
|
|
39
39
|
"django-simple-history>=3.8.0",
|
|
40
40
|
"exrex>=0.12.0",
|
|
41
41
|
"factory_boy>=3.3.3",
|
|
@@ -43,7 +43,7 @@ dependencies = [
|
|
|
43
43
|
"flexcache>=0.3",
|
|
44
44
|
"flexparser>=0.4",
|
|
45
45
|
"gitdb>=4.0.12",
|
|
46
|
-
"GitPython>=3.1.
|
|
46
|
+
"GitPython>=3.1.58",
|
|
47
47
|
"graphene>=3.4.3",
|
|
48
48
|
"graphene-django>=3.2.3",
|
|
49
49
|
"graphql-core>=3.2.6",
|
|
@@ -56,7 +56,7 @@ dependencies = [
|
|
|
56
56
|
"PyYAML>=6.0.3",
|
|
57
57
|
"six>=1.17.0",
|
|
58
58
|
"smmap>=5.0.2",
|
|
59
|
-
"sqlparse>=0.
|
|
59
|
+
"sqlparse>=0.6.0",
|
|
60
60
|
"text-unidecode>=1.3",
|
|
61
61
|
"typing_extensions>=4.13.2",
|
|
62
62
|
"tzdata>=2025.2",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: GeneralManager
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.76.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
|
|
@@ -47,7 +47,7 @@ License-File: LICENSE
|
|
|
47
47
|
Requires-Dist: asgiref>=3.8.1
|
|
48
48
|
Requires-Dist: celery<6.0.0,>=5.3.6
|
|
49
49
|
Requires-Dist: channels>=4.1.0
|
|
50
|
-
Requires-Dist: Django>=5.2.
|
|
50
|
+
Requires-Dist: Django>=5.2.16
|
|
51
51
|
Requires-Dist: django-simple-history>=3.8.0
|
|
52
52
|
Requires-Dist: exrex>=0.12.0
|
|
53
53
|
Requires-Dist: factory_boy>=3.3.3
|
|
@@ -55,7 +55,7 @@ Requires-Dist: Faker>=37.1.0
|
|
|
55
55
|
Requires-Dist: flexcache>=0.3
|
|
56
56
|
Requires-Dist: flexparser>=0.4
|
|
57
57
|
Requires-Dist: gitdb>=4.0.12
|
|
58
|
-
Requires-Dist: GitPython>=3.1.
|
|
58
|
+
Requires-Dist: GitPython>=3.1.58
|
|
59
59
|
Requires-Dist: graphene>=3.4.3
|
|
60
60
|
Requires-Dist: graphene-django>=3.2.3
|
|
61
61
|
Requires-Dist: graphql-core>=3.2.6
|
|
@@ -68,7 +68,7 @@ Requires-Dist: python-dateutil>=2.9.0.post0
|
|
|
68
68
|
Requires-Dist: PyYAML>=6.0.3
|
|
69
69
|
Requires-Dist: six>=1.17.0
|
|
70
70
|
Requires-Dist: smmap>=5.0.2
|
|
71
|
-
Requires-Dist: sqlparse>=0.
|
|
71
|
+
Requires-Dist: sqlparse>=0.6.0
|
|
72
72
|
Requires-Dist: text-unidecode>=1.3
|
|
73
73
|
Requires-Dist: typing_extensions>=4.13.2
|
|
74
74
|
Requires-Dist: tzdata>=2025.2
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
asgiref>=3.8.1
|
|
2
2
|
celery<6.0.0,>=5.3.6
|
|
3
3
|
channels>=4.1.0
|
|
4
|
-
Django>=5.2.
|
|
4
|
+
Django>=5.2.16
|
|
5
5
|
django-simple-history>=3.8.0
|
|
6
6
|
exrex>=0.12.0
|
|
7
7
|
factory_boy>=3.3.3
|
|
@@ -9,7 +9,7 @@ Faker>=37.1.0
|
|
|
9
9
|
flexcache>=0.3
|
|
10
10
|
flexparser>=0.4
|
|
11
11
|
gitdb>=4.0.12
|
|
12
|
-
GitPython>=3.1.
|
|
12
|
+
GitPython>=3.1.58
|
|
13
13
|
graphene>=3.4.3
|
|
14
14
|
graphene-django>=3.2.3
|
|
15
15
|
graphql-core>=3.2.6
|
|
@@ -22,7 +22,7 @@ python-dateutil>=2.9.0.post0
|
|
|
22
22
|
PyYAML>=6.0.3
|
|
23
23
|
six>=1.17.0
|
|
24
24
|
smmap>=5.0.2
|
|
25
|
-
sqlparse>=0.
|
|
25
|
+
sqlparse>=0.6.0
|
|
26
26
|
text-unidecode>=1.3
|
|
27
27
|
typing_extensions>=4.13.2
|
|
28
28
|
tzdata>=2025.2
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/search/backend_registry.py
RENAMED
|
@@ -27,6 +27,19 @@ class InvalidSearchBackendOptionsError(TypeError):
|
|
|
27
27
|
super().__init__("SEARCH_BACKEND options must be a mapping.")
|
|
28
28
|
|
|
29
29
|
|
|
30
|
+
def _dev_auto_reindex_enabled(django_settings: object) -> bool:
|
|
31
|
+
"""Return whether settings enable DevSearch first-search hydration."""
|
|
32
|
+
config_candidate = getattr(django_settings, _SETTINGS_KEY, None)
|
|
33
|
+
if (
|
|
34
|
+
isinstance(config_candidate, Mapping)
|
|
35
|
+
and "SEARCH_AUTO_REINDEX" in config_candidate
|
|
36
|
+
):
|
|
37
|
+
configured = config_candidate["SEARCH_AUTO_REINDEX"]
|
|
38
|
+
else:
|
|
39
|
+
configured = getattr(django_settings, "SEARCH_AUTO_REINDEX", False)
|
|
40
|
+
return bool(configured)
|
|
41
|
+
|
|
42
|
+
|
|
30
43
|
def configure_search_backend(backend: SearchBackend | None) -> None:
|
|
31
44
|
"""
|
|
32
45
|
Set the active search backend instance.
|
|
@@ -128,6 +141,10 @@ def configure_search_backend_from_settings(django_settings: object) -> None:
|
|
|
128
141
|
backend_instance = _resolve_backend(backend_setting)
|
|
129
142
|
if backend_setting is not None and backend_instance is None:
|
|
130
143
|
raise SearchBackendNotConfiguredError.from_setting(backend_setting)
|
|
144
|
+
if isinstance(backend_instance, DevSearchBackend):
|
|
145
|
+
backend_instance.configure_auto_reindex(
|
|
146
|
+
_dev_auto_reindex_enabled(django_settings)
|
|
147
|
+
)
|
|
131
148
|
configure_search_backend(backend_instance)
|
|
132
149
|
|
|
133
150
|
|
|
@@ -139,7 +156,8 @@ def get_search_backend() -> SearchBackend:
|
|
|
139
156
|
`configure_search_backend_from_settings(django.conf.settings)`. If settings
|
|
140
157
|
still leave the backend unset, it creates one `DevSearchBackend`, stores it
|
|
141
158
|
as the process-local active backend, and returns that same fallback instance
|
|
142
|
-
on later calls.
|
|
159
|
+
on later calls. The fallback enables first-search hydration when
|
|
160
|
+
`SEARCH_AUTO_REINDEX` is enabled in Django settings.
|
|
143
161
|
|
|
144
162
|
Returns:
|
|
145
163
|
The configured or development fallback search backend.
|
|
@@ -154,7 +172,7 @@ def get_search_backend() -> SearchBackend:
|
|
|
154
172
|
|
|
155
173
|
configure_search_backend_from_settings(settings)
|
|
156
174
|
if _backend is None:
|
|
157
|
-
_backend = DevSearchBackend()
|
|
175
|
+
_backend = DevSearchBackend(auto_reindex=_dev_auto_reindex_enabled(settings))
|
|
158
176
|
if _backend is None:
|
|
159
177
|
raise SearchBackendNotConfiguredError()
|
|
160
178
|
return _backend
|
|
@@ -5,6 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
import time
|
|
6
6
|
from collections.abc import Mapping, Sequence
|
|
7
7
|
from dataclasses import dataclass, field
|
|
8
|
+
from threading import RLock
|
|
8
9
|
|
|
9
10
|
from general_manager.search.backend import SearchDocument, SearchHit, SearchResult
|
|
10
11
|
from general_manager.utils.filter_parser import apply_lookup
|
|
@@ -18,13 +19,32 @@ class _IndexStore:
|
|
|
18
19
|
|
|
19
20
|
|
|
20
21
|
class DevSearchBackend:
|
|
21
|
-
"""
|
|
22
|
+
"""Process-local development search with optional lazy per-index hydration."""
|
|
22
23
|
|
|
23
|
-
def __init__(self) -> None:
|
|
24
|
+
def __init__(self, *, auto_reindex: bool = False) -> None:
|
|
24
25
|
"""
|
|
25
|
-
Initialize
|
|
26
|
+
Initialize an empty in-memory registry and optional hydration lifecycle.
|
|
27
|
+
|
|
28
|
+
Automatic hydration is disabled for directly constructed backends unless
|
|
29
|
+
explicitly opted in. When enabled, each index hydrates on its first
|
|
30
|
+
search in this process. Failed hydration propagates and remains
|
|
31
|
+
retryable. The lock coordinates only first-search hydration; ordinary
|
|
32
|
+
reads and writes retain the backend's existing unsynchronized behavior.
|
|
26
33
|
"""
|
|
27
34
|
self._indexes: dict[str, _IndexStore] = {}
|
|
35
|
+
self._auto_reindex = auto_reindex
|
|
36
|
+
self._hydrated_indexes: set[str] = set()
|
|
37
|
+
self._hydrating_indexes: set[str] = set()
|
|
38
|
+
self._hydration_lock = RLock()
|
|
39
|
+
|
|
40
|
+
@property
|
|
41
|
+
def auto_reindex_enabled(self) -> bool:
|
|
42
|
+
"""Return whether first-search hydration is enabled for this backend."""
|
|
43
|
+
return self._auto_reindex
|
|
44
|
+
|
|
45
|
+
def configure_auto_reindex(self, enabled: bool) -> None:
|
|
46
|
+
"""Enable or disable first-search hydration for this backend instance."""
|
|
47
|
+
self._auto_reindex = enabled
|
|
28
48
|
|
|
29
49
|
def ensure_index(self, index_name: str, settings: Mapping[str, object]) -> None:
|
|
30
50
|
"""
|
|
@@ -100,6 +120,10 @@ class DevSearchBackend:
|
|
|
100
120
|
"""
|
|
101
121
|
Search an index for documents matching a query and return scored, optionally filtered and sorted hits.
|
|
102
122
|
|
|
123
|
+
When auto-reindex is enabled, the first search for an index lazily
|
|
124
|
+
hydrates that index in this process before evaluating the query. The
|
|
125
|
+
hydration guard coordinates concurrent and nested first searches only;
|
|
126
|
+
a failed source error propagates and the next search can retry.
|
|
103
127
|
The backend reads and writes documents under the `index_name` argument;
|
|
104
128
|
`SearchDocument.index` is stored but not validated. Document IDs are
|
|
105
129
|
unique only inside one in-memory index. Duplicate IDs inside one
|
|
@@ -108,13 +132,14 @@ class DevSearchBackend:
|
|
|
108
132
|
is idempotent and replaces the stored settings mapping for the index.
|
|
109
133
|
Operations are not transactional; mutations completed before an
|
|
110
134
|
exception remain in memory. Queries are lowercased and split on
|
|
111
|
-
whitespace
|
|
135
|
+
whitespace, with duplicate query tokens removed in first-seen order.
|
|
136
|
+
Indexed tokens are built from every top-level
|
|
112
137
|
`SearchDocument.data` value: `None` yields no tokens, strings split on
|
|
113
138
|
whitespace, lists/tuples/sets are processed recursively, and all other
|
|
114
139
|
values become `str(value).lower().split()`. Dict values are not
|
|
115
140
|
traversed; they are tokenized from their string representation. A
|
|
116
|
-
document matches when
|
|
117
|
-
extracted from any indexed field. Empty queries match every document
|
|
141
|
+
document matches when every distinct query token equals or prefixes a
|
|
142
|
+
token extracted from any indexed field. Empty queries match every document
|
|
118
143
|
that passes type and structured filters. The operation
|
|
119
144
|
order is type filtering, structured filtering, query scoring/matching,
|
|
120
145
|
sorting, and then pagination with `results[offset:offset + limit]`;
|
|
@@ -130,8 +155,8 @@ class DevSearchBackend:
|
|
|
130
155
|
keys, including equal-score default ordering. The backend stores
|
|
131
156
|
document and settings objects by reference, returns hit data from the
|
|
132
157
|
stored `SearchDocument.data` mapping, is
|
|
133
|
-
process-local memory only, and does not provide persistence or
|
|
134
|
-
synchronization
|
|
158
|
+
process-local memory only, and does not provide persistence or ordinary
|
|
159
|
+
read/write synchronization beyond first-search hydration.
|
|
135
160
|
|
|
136
161
|
Parameters:
|
|
137
162
|
index_name (str): Name of the index to search.
|
|
@@ -166,6 +191,7 @@ class DevSearchBackend:
|
|
|
166
191
|
operational failures are not normalized and may surface as
|
|
167
192
|
ordinary Python exceptions.
|
|
168
193
|
"""
|
|
194
|
+
self._ensure_hydrated(index_name)
|
|
169
195
|
if filter_expression is not None:
|
|
170
196
|
raise NotImplementedError(
|
|
171
197
|
"filter_expression is not supported by the dev backend."
|
|
@@ -221,6 +247,31 @@ class DevSearchBackend:
|
|
|
221
247
|
took_ms = int((time.perf_counter() - start) * 1000)
|
|
222
248
|
return SearchResult(hits=hits, total=len(results), took_ms=took_ms)
|
|
223
249
|
|
|
250
|
+
def _ensure_hydrated(self, index_name: str) -> None:
|
|
251
|
+
"""Hydrate one index once when this backend has opted into the lifecycle."""
|
|
252
|
+
if not self._auto_reindex or index_name in self._hydrated_indexes:
|
|
253
|
+
return
|
|
254
|
+
with self._hydration_lock:
|
|
255
|
+
if index_name in self._hydrated_indexes:
|
|
256
|
+
return
|
|
257
|
+
if index_name in self._hydrating_indexes:
|
|
258
|
+
return
|
|
259
|
+
self._hydrating_indexes.add(index_name)
|
|
260
|
+
try:
|
|
261
|
+
self._reindex_configured_managers(index_name)
|
|
262
|
+
self._hydrated_indexes.add(index_name)
|
|
263
|
+
finally:
|
|
264
|
+
self._hydrating_indexes.discard(index_name)
|
|
265
|
+
|
|
266
|
+
def _reindex_configured_managers(self, index_name: str) -> None:
|
|
267
|
+
"""Reindex every manager configured for one index into this process."""
|
|
268
|
+
from general_manager.search.indexer import SearchIndexer
|
|
269
|
+
from general_manager.search.registry import iter_index_configs
|
|
270
|
+
|
|
271
|
+
indexer = SearchIndexer(self)
|
|
272
|
+
for manager_class, _index_config in iter_index_configs(index_name):
|
|
273
|
+
indexer.reindex_manager_index(manager_class, index_name)
|
|
274
|
+
|
|
224
275
|
@staticmethod
|
|
225
276
|
def _tokenize_query(query: str) -> list[str]:
|
|
226
277
|
"""
|
|
@@ -230,9 +281,9 @@ class DevSearchBackend:
|
|
|
230
281
|
query (str): The input query string to tokenize.
|
|
231
282
|
|
|
232
283
|
Returns:
|
|
233
|
-
list[str]:
|
|
284
|
+
list[str]: Distinct lowercase tokens extracted from the query in first-seen order.
|
|
234
285
|
"""
|
|
235
|
-
return
|
|
286
|
+
return list(dict.fromkeys(query.lower().split()))
|
|
236
287
|
|
|
237
288
|
def _tokenize_document(self, document: SearchDocument) -> dict[str, set[str]]:
|
|
238
289
|
"""
|
|
@@ -284,7 +335,11 @@ class DevSearchBackend:
|
|
|
284
335
|
"""
|
|
285
336
|
Compute a relevance score for a document based on matching query tokens and configured boosts.
|
|
286
337
|
|
|
287
|
-
|
|
338
|
+
Every distinct query token must be present in at least one field's token
|
|
339
|
+
set (or be a prefix of a field token). For each matching token, the
|
|
340
|
+
boosts of all matching fields are added to the score. After summing
|
|
341
|
+
matches across all fields, the total is multiplied by
|
|
342
|
+
`document.index_boost` when it is set.
|
|
288
343
|
|
|
289
344
|
Parameters:
|
|
290
345
|
tokens: The list of query tokens to match against the document's token index.
|
|
@@ -297,13 +352,17 @@ class DevSearchBackend:
|
|
|
297
352
|
return 0.0
|
|
298
353
|
token_index = token_index or {}
|
|
299
354
|
score = 0.0
|
|
300
|
-
for
|
|
301
|
-
|
|
302
|
-
for
|
|
355
|
+
for token in tokens:
|
|
356
|
+
token_score = 0.0
|
|
357
|
+
for field_name, field_tokens in token_index.items():
|
|
358
|
+
field_boost = document.field_boosts.get(field_name, 1.0)
|
|
303
359
|
if token in field_tokens or any(
|
|
304
360
|
field_token.startswith(token) for field_token in field_tokens
|
|
305
361
|
):
|
|
306
|
-
|
|
362
|
+
token_score += field_boost
|
|
363
|
+
if token_score <= 0:
|
|
364
|
+
return 0.0
|
|
365
|
+
score += token_score
|
|
307
366
|
if document.index_boost:
|
|
308
367
|
score *= document.index_boost
|
|
309
368
|
return score
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.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
|
{generalmanager-0.75.0 → generalmanager-0.76.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
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql_mutations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql_relations.py
RENAMED
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql_resolvers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql_subscriptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql_warmup_registry.py
RENAMED
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/graphql_warmup_tasks.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/notification_batching.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/api/remote_invalidation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/bucket/calculation_bucket.py
RENAMED
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/bucket/database_bucket.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/bucket/request_bucket.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/cache/cache_decorator.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/cache/data_change_context.py
RENAMED
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/cache/dependency_cache.py
RENAMED
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/cache/dependency_index.py
RENAMED
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/cache/dependency_matching.py
RENAMED
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/cache/dependency_publish.py
RENAMED
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/cache/dependency_shards.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/cache/run_context_lru.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
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/diagnostics.py
RENAMED
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/fingerprints.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/evals/judges/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.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.75.0 → generalmanager-0.76.0}/src/general_manager/chat/providers/__init__.py
RENAMED
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/providers/_shared.py
RENAMED
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/providers/anthropic.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/providers/google.py
RENAMED
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/providers/ollama.py
RENAMED
|
File without changes
|
{generalmanager-0.75.0 → generalmanager-0.76.0}/src/general_manager/chat/providers/openai.py
RENAMED
|
File without changes
|
|
File without changes
|