GeneralManager 0.87.0__tar.gz → 0.87.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {generalmanager-0.87.0/src/GeneralManager.egg-info → generalmanager-0.87.2}/PKG-INFO +4 -4
- {generalmanager-0.87.0 → generalmanager-0.87.2}/pyproject.toml +5 -5
- {generalmanager-0.87.0 → generalmanager-0.87.2/src/GeneralManager.egg-info}/PKG-INFO +4 -4
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/GeneralManager.egg-info/SOURCES.txt +1 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/GeneralManager.egg-info/requires.txt +3 -3
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql.py +29 -4
- generalmanager-0.87.2/src/general_manager/api/graphql_query_permissions.py +168 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql_resolvers.py +180 -45
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql_search.py +134 -24
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql_subscription_consumer.py +63 -3
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/tools.py +10 -11
- {generalmanager-0.87.0 → generalmanager-0.87.2}/LICENSE +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/README.md +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/setup.cfg +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/GeneralManager.egg-info/top_level.txt +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/_types/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/_types/api.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/_types/bucket.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/_types/cache.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/_types/dataframes.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/_types/factory.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/_types/general_manager.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/_types/interface.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/_types/manager.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/_types/measurement.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/_types/permission.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/_types/rule.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/_types/search.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/_types/utils.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql_as_of.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql_errors.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql_filter_contract.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql_groups.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql_identifiers.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql_mutations.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql_ordering.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql_output.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql_prefetch.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql_relations.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql_subscriptions.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql_type.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql_units.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql_value_contract.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql_view.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql_warmup.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql_warmup_registry.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/graphql_warmup_tasks.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/mutation.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/mutation_controls.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/notification_batching.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/property.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/registry.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/remote_api.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/remote_invalidation.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/api/remote_invalidation_client.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/apps.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/as_of.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/bootstrap.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/bucket/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/bucket/_materialized_bucket.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/bucket/_ordering.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/bucket/base_bucket.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/bucket/calculation_bucket.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/bucket/database_bucket.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/bucket/excel_bucket.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/bucket/group_bucket.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/bucket/indexing.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/bucket/projection.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/bucket/request_bucket.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/cache/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/cache/_dependency_graph.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/cache/batch_refresh.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/cache/cache_decorator.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/cache/cache_tracker.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/cache/data_change_context.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/cache/dependency_cache.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/cache/dependency_index.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/cache/dependency_matching.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/cache/dependency_publish.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/cache/dependency_shards.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/cache/model_dependency_collector.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/cache/run_context.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/cache/run_context_lru.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/cache/signals.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/cache/transaction_barrier.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/audit.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/audit_identity.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/bootstrap.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/checks.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/consumer.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/context.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/errors.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/__main__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/baseline.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/datasets/basic_queries.yaml +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/datasets/demo_readiness.yaml +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/datasets/edge_cases.yaml +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/datasets/follow_ups.yaml +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/datasets/large_schema.yaml +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/datasets/multi_hop.yaml +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/datasets/planned_orchestration.yaml +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/diagnostics.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/execution.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/fingerprints.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/fixtures.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/judges/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/judges/answer_quality.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/judges/contract.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/judges/result_accuracy.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/judges/result_set.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/judges/tool_sequence.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/outcomes.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/readiness.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/runner.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/evals/traces.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/graphql_contract.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/grounding.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/models.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/mutation_inputs.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/action_contract.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/binding_diagnostics.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/budget.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/calculation_scope.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/calculations.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/catalog.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/category_binding.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/choice_context.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/clarification.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/config.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/contract.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/conversion.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/cross_query.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/deferred_calculations.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/deferred_schema.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/events.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/evidence.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/evidence_selection.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/group_actions.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/models.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/planner.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/planner_context.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/provider_calls.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/resolver.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/scheduler.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/schema_projection.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/selector_clarification.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/selector_question.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/synthesis.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/planned/validation.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/providers/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/providers/_shared.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/providers/anthropic.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/providers/base.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/providers/google.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/providers/ollama.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/providers/openai.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/rate_limits.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/routing.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/schema_index.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/schema_inspection.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/settings.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/signals.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/system_prompt.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/tool_metadata.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/turns.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/chat/views.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/conf.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/dataframes/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/dataframes/measurements.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/factory/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/factory/auto_factory.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/factory/factories.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/factory/factory_methods.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/base_interface.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/bundles/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/bundles/calculation.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/bundles/database.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/bundles/excel.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/bundles/remote_manager.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/bundles/request.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/base.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/builtin.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/calculation/input_resolution.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/configuration.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/core/observability.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/core/utils.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/excel/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/exceptions.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/factory.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/orm/bulk.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/orm/create_many.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/orm/history.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/orm/support.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/orm_utils/update_state.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/read_only/_types.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/registry.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/excel.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/excel_store.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/excel_workbook.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/infrastructure/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/interfaces/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/interfaces/calculation.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/interfaces/database.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/interfaces/excel.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/interfaces/existing_model.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/interfaces/read_only.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/interfaces/request.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/manifests/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/manifests/capability_builder.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/manifests/capability_models.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/orm_interface.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/requests.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/unit_contract.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/utils/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/utils/errors.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/utils/history.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/interface/utils/models.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/logging.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/management/commands/chat_cleanup.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/management/commands/cleanup_upload_intents.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/management/commands/graphql_warmup.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/management/commands/graphql_warmup_refresh_due.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/management/commands/search_index.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/management/commands/search_reconcile.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/management/commands/shell.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/management/commands/sync_read_only.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/manager/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/manager/bulk_create.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/manager/general_manager.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/manager/group_manager.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/manager/input.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/manager/meta.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/measurement/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/measurement/measurement.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/measurement/measurement_field.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/metrics/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/metrics/graphql.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/migrations/0001_initial.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/migrations/0004_chat_persistence_models.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/migrations/0004_search_index_state.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/migrations/0005_merge_chat_search.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/migrations/0006_chat_pending_confirmation_scoped_ids.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/migrations/0007_upload_intent.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/migrations/0008_upload_finalization_versions.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/migrations/0009_upload_cleanup_state.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/migrations/0010_chat_pending_confirmation_portable_uniqueness.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/migrations/0011_search_index_state_dirty_generation.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/migrations/0012_chat_context_watermarks.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/migrations/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/models.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/permission/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/permission/audit.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/permission/base_permission.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/permission/graphql_capabilities.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/permission/manager_based_permission.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/permission/mutation_permission.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/permission/permission_checks.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/permission/permission_data_manager.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/permission/utils.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/public_api_registry.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/py.typed +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/rule/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/rule/handler.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/rule/rule.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/search/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/search/async_tasks.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/search/backend.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/search/backend_registry.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/search/backends/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/search/backends/dev.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/search/backends/meilisearch.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/search/backends/opensearch.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/search/backends/typesense.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/search/checks.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/search/config.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/search/identity.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/search/indexer.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/search/invalidation.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/search/m2m_invalidation.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/search/models.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/search/reconciliation.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/search/registry.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/search/tasks.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/search/utils.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/seeding/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/seeding/manager_landscape.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/uploads/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/uploads/adapters.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/uploads/checks.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/uploads/config.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/uploads/errors.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/uploads/finalization.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/uploads/graphql.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/uploads/graphql_types.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/uploads/metrics.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/uploads/models.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/uploads/public.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/uploads/s3.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/uploads/services.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/uploads/tokens.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/uploads/types.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/uploads/urls.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/uploads/views.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/utils/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/utils/_args_to_kwargs.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/utils/_cache_key_encoder.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/utils/_make_cache_key.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/utils/_none_to_zero.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/utils/executable_contract.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/utils/filter_parser.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/utils/format_string.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/utils/json_encoder.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/utils/path_mapping.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/utils/public_api.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/utils/testing.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/utils/type_checks.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/workflow/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/workflow/actions.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/workflow/backend_registry.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/workflow/backends/__init__.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/workflow/backends/celery.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/workflow/backends/local.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/workflow/backends/n8n.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/workflow/config.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/workflow/engine.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/workflow/event_registry.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/workflow/events.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/workflow/models.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/workflow/signal_bridge.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/workflow/tasks.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/src/general_manager/workflow/telemetry.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/tests/test_settings.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/tests/test_urls.py +0 -0
- {generalmanager-0.87.0 → generalmanager-0.87.2}/tests/testing_asgi.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: GeneralManager
|
|
3
|
-
Version: 0.87.
|
|
3
|
+
Version: 0.87.2
|
|
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.17
|
|
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,14 +55,14 @@ 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.2.1
|
|
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.13
|
|
62
62
|
Requires-Dist: graphql-relay>=3.2.0
|
|
63
63
|
Requires-Dist: numpy>=2.2.5
|
|
64
64
|
Requires-Dist: openpyxl<3.2.0,>=3.1.5
|
|
65
|
-
Requires-Dist: filelock<4
|
|
65
|
+
Requires-Dist: filelock<5,>=4.2.1
|
|
66
66
|
Requires-Dist: Pint>=0.24.4
|
|
67
67
|
Requires-Dist: platformdirs>=4.3.7
|
|
68
68
|
Requires-Dist: promise>=2.3
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
[build-system]
|
|
2
|
-
requires = ["setuptools>=
|
|
2
|
+
requires = ["setuptools>=84.1.0", "wheel"]
|
|
3
3
|
build-backend = "setuptools.build_meta"
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "GeneralManager"
|
|
7
|
-
version = "0.87.
|
|
7
|
+
version = "0.87.2"
|
|
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.17",
|
|
39
39
|
"django-simple-history>=3.8.0",
|
|
40
40
|
"exrex>=0.12.0",
|
|
41
41
|
"factory_boy>=3.3.3",
|
|
@@ -43,14 +43,14 @@ dependencies = [
|
|
|
43
43
|
"flexcache>=0.3",
|
|
44
44
|
"flexparser>=0.4",
|
|
45
45
|
"gitdb>=4.0.12",
|
|
46
|
-
"GitPython>=3.1
|
|
46
|
+
"GitPython>=3.2.1",
|
|
47
47
|
"graphene>=3.4.3",
|
|
48
48
|
"graphene-django>=3.2.3",
|
|
49
49
|
"graphql-core>=3.2.13",
|
|
50
50
|
"graphql-relay>=3.2.0",
|
|
51
51
|
"numpy>=2.2.5",
|
|
52
52
|
"openpyxl>=3.1.5,<3.2.0", # Excel workbook IO
|
|
53
|
-
"filelock>=
|
|
53
|
+
"filelock>=4.2.1,<5", # portable process-safe Excel workbook locks
|
|
54
54
|
"Pint>=0.24.4",
|
|
55
55
|
"platformdirs>=4.3.7",
|
|
56
56
|
"promise>=2.3",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: GeneralManager
|
|
3
|
-
Version: 0.87.
|
|
3
|
+
Version: 0.87.2
|
|
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.17
|
|
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,14 +55,14 @@ 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.2.1
|
|
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.13
|
|
62
62
|
Requires-Dist: graphql-relay>=3.2.0
|
|
63
63
|
Requires-Dist: numpy>=2.2.5
|
|
64
64
|
Requires-Dist: openpyxl<3.2.0,>=3.1.5
|
|
65
|
-
Requires-Dist: filelock<4
|
|
65
|
+
Requires-Dist: filelock<5,>=4.2.1
|
|
66
66
|
Requires-Dist: Pint>=0.24.4
|
|
67
67
|
Requires-Dist: platformdirs>=4.3.7
|
|
68
68
|
Requires-Dist: promise>=2.3
|
|
@@ -40,6 +40,7 @@ src/general_manager/api/graphql_mutations.py
|
|
|
40
40
|
src/general_manager/api/graphql_ordering.py
|
|
41
41
|
src/general_manager/api/graphql_output.py
|
|
42
42
|
src/general_manager/api/graphql_prefetch.py
|
|
43
|
+
src/general_manager/api/graphql_query_permissions.py
|
|
43
44
|
src/general_manager/api/graphql_relations.py
|
|
44
45
|
src/general_manager/api/graphql_resolvers.py
|
|
45
46
|
src/general_manager/api/graphql_search.py
|
|
@@ -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.17
|
|
5
5
|
django-simple-history>=3.8.0
|
|
6
6
|
exrex>=0.12.0
|
|
7
7
|
factory_boy>=3.3.3
|
|
@@ -9,14 +9,14 @@ 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.2.1
|
|
13
13
|
graphene>=3.4.3
|
|
14
14
|
graphene-django>=3.2.3
|
|
15
15
|
graphql-core>=3.2.13
|
|
16
16
|
graphql-relay>=3.2.0
|
|
17
17
|
numpy>=2.2.5
|
|
18
18
|
openpyxl<3.2.0,>=3.1.5
|
|
19
|
-
filelock<4
|
|
19
|
+
filelock<5,>=4.2.1
|
|
20
20
|
Pint>=0.24.4
|
|
21
21
|
platformdirs>=4.3.7
|
|
22
22
|
promise>=2.3
|
|
@@ -36,6 +36,9 @@ import graphene
|
|
|
36
36
|
from asgiref.sync import async_to_sync
|
|
37
37
|
from channels.layers import BaseChannelLayer
|
|
38
38
|
from django.core.exceptions import ObjectDoesNotExist
|
|
39
|
+
|
|
40
|
+
from general_manager.interface.requests import RequestNotFoundError
|
|
41
|
+
from general_manager.manager.meta import AttributeEvaluationError
|
|
39
42
|
from django.db import DEFAULT_DB_ALIAS, models, transaction
|
|
40
43
|
from django.utils.module_loading import import_string
|
|
41
44
|
|
|
@@ -120,6 +123,7 @@ from general_manager.api.graphql_resolvers import (
|
|
|
120
123
|
check_read_permission as _check_read_permission_fn,
|
|
121
124
|
check_read_permission_for_user as _check_read_permission_for_user_fn,
|
|
122
125
|
can_read_instance_for_user as _can_read_instance_for_user_fn,
|
|
126
|
+
can_read_class_for_user as _can_read_class_for_user_fn,
|
|
123
127
|
create_measurement_resolver as _create_measurement_resolver_fn,
|
|
124
128
|
create_normal_resolver as _create_normal_resolver_fn,
|
|
125
129
|
create_list_resolver as _create_list_resolver_fn,
|
|
@@ -2260,17 +2264,32 @@ class GraphQL:
|
|
|
2260
2264
|
|
|
2261
2265
|
def resolver(
|
|
2262
2266
|
self: GeneralManager, info: GraphQLResolveInfo, **identification: object
|
|
2263
|
-
) -> GeneralManager:
|
|
2267
|
+
) -> GeneralManager | None:
|
|
2264
2268
|
"""
|
|
2265
|
-
Instantiate and
|
|
2269
|
+
Instantiate and authorize a manager before exposing its existence.
|
|
2266
2270
|
|
|
2267
2271
|
Parameters:
|
|
2268
2272
|
identification (dict): Mapping of identification argument names to values passed to the manager constructor.
|
|
2269
2273
|
|
|
2270
2274
|
Returns:
|
|
2271
|
-
GeneralManager: The manager
|
|
2275
|
+
GeneralManager | None: The readable manager, or None for missing
|
|
2276
|
+
or unreadable targets.
|
|
2272
2277
|
"""
|
|
2273
|
-
|
|
2278
|
+
try:
|
|
2279
|
+
instance = generalManagerClass(**identification)
|
|
2280
|
+
except (ObjectDoesNotExist, RequestNotFoundError):
|
|
2281
|
+
# Missing and unreadable targets share the same public response.
|
|
2282
|
+
return None
|
|
2283
|
+
try:
|
|
2284
|
+
readable = _can_read_instance_for_user_fn(instance, info.context.user)
|
|
2285
|
+
except RequestNotFoundError:
|
|
2286
|
+
return None
|
|
2287
|
+
except AttributeEvaluationError as error:
|
|
2288
|
+
# Request-backed fields hydrate lazily during the row gate.
|
|
2289
|
+
if isinstance(error.__cause__, RequestNotFoundError):
|
|
2290
|
+
return None
|
|
2291
|
+
raise
|
|
2292
|
+
return instance if readable else None
|
|
2274
2293
|
|
|
2275
2294
|
cls._query_fields[item_field_name] = item_field
|
|
2276
2295
|
cls._query_fields[f"resolve_{item_field_name}"] = resolver
|
|
@@ -2658,6 +2677,12 @@ class GraphQL:
|
|
|
2658
2677
|
continue
|
|
2659
2678
|
identification = message.get("identification")
|
|
2660
2679
|
if action == "refresh" and identification is None:
|
|
2680
|
+
if not await asyncio.to_thread(
|
|
2681
|
+
_can_read_class_for_user_fn,
|
|
2682
|
+
generalManagerClass,
|
|
2683
|
+
subscription_user,
|
|
2684
|
+
):
|
|
2685
|
+
continue
|
|
2661
2686
|
clear_capability_context(info)
|
|
2662
2687
|
yield SubscriptionEvent(item=None, action=action)
|
|
2663
2688
|
continue
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"""Authorize query operands before they influence membership or ordering."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Iterable
|
|
6
|
+
from typing import TYPE_CHECKING
|
|
7
|
+
|
|
8
|
+
from graphql import GraphQLError
|
|
9
|
+
|
|
10
|
+
from general_manager.bucket.base_bucket import Bucket
|
|
11
|
+
from general_manager.bucket.request_bucket import RequestBucket
|
|
12
|
+
from general_manager.manager.general_manager import GeneralManager
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from graphene import ResolveInfo
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class QueryFieldPermissionError(GraphQLError):
|
|
19
|
+
"""A requested operand is not authorized on the candidate scope."""
|
|
20
|
+
|
|
21
|
+
def __init__(self, field: str) -> None:
|
|
22
|
+
super().__init__(f"Permission denied to use query field '{field}'.")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
_LIMIT_ERROR = "Query field authorization candidate limit exceeded."
|
|
26
|
+
_AMBIGUOUS_ERROR = "Cannot authorize ambiguous query relation."
|
|
27
|
+
_RELATION_ERROR = "Permission denied to traverse query relation."
|
|
28
|
+
INCOMPLETE_ERROR = "Query field authorization requires a complete candidate set."
|
|
29
|
+
CUSTOM_PROJECTION_ERROR = (
|
|
30
|
+
"Cannot authorize fields of a custom search document projection."
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
# Bound field/path decisions; bucket materialization and row checks precede this.
|
|
34
|
+
MAX_QUERY_PERMISSION_CANDIDATES = 1000
|
|
35
|
+
_LOOKUPS = {
|
|
36
|
+
"exact",
|
|
37
|
+
"iexact",
|
|
38
|
+
"in",
|
|
39
|
+
"isnull",
|
|
40
|
+
"lt",
|
|
41
|
+
"lte",
|
|
42
|
+
"gt",
|
|
43
|
+
"gte",
|
|
44
|
+
"contains",
|
|
45
|
+
"icontains",
|
|
46
|
+
"startswith",
|
|
47
|
+
"istartswith",
|
|
48
|
+
"endswith",
|
|
49
|
+
"iendswith",
|
|
50
|
+
"range",
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def authorize_query_fields(
|
|
55
|
+
candidates: Iterable[GeneralManager], info: ResolveInfo, paths: Iterable[str]
|
|
56
|
+
) -> None:
|
|
57
|
+
"""Check all operands against every row-visible candidate, never just hits.
|
|
58
|
+
|
|
59
|
+
Related rows require their own row permission as well as field permission.
|
|
60
|
+
Failure leaves the original candidate set unchanged and rejects the query.
|
|
61
|
+
"""
|
|
62
|
+
from general_manager.api.graphql_relations import (
|
|
63
|
+
resolve_general_manager_type,
|
|
64
|
+
get_graphql_manager_registry,
|
|
65
|
+
)
|
|
66
|
+
from general_manager.api.graphql_resolvers import (
|
|
67
|
+
can_read_instance,
|
|
68
|
+
check_read_permission,
|
|
69
|
+
relation_id_alias_field,
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
normalized = set()
|
|
73
|
+
for path in paths:
|
|
74
|
+
parts = path.split("__")
|
|
75
|
+
if parts:
|
|
76
|
+
normalized.add(tuple(parts))
|
|
77
|
+
if not normalized:
|
|
78
|
+
return
|
|
79
|
+
decisions = 0
|
|
80
|
+
|
|
81
|
+
def check(instance: GeneralManager, parts: tuple[str, ...]) -> None:
|
|
82
|
+
nonlocal decisions
|
|
83
|
+
decisions += 1
|
|
84
|
+
if decisions > MAX_QUERY_PERMISSION_CANDIDATES:
|
|
85
|
+
raise GraphQLError(_LIMIT_ERROR)
|
|
86
|
+
field, *rest = parts
|
|
87
|
+
attributes = instance.Interface.get_attribute_types()
|
|
88
|
+
# Backend collection lookup names can differ from public manager names.
|
|
89
|
+
aliases = [
|
|
90
|
+
name
|
|
91
|
+
for name, metadata in attributes.items()
|
|
92
|
+
if metadata.get("filter_lookup", name) == field
|
|
93
|
+
]
|
|
94
|
+
names = set(aliases or [field])
|
|
95
|
+
for name in tuple(names):
|
|
96
|
+
relation = relation_id_alias_field(type(instance), name)
|
|
97
|
+
if relation is None and name.endswith("_id"):
|
|
98
|
+
alias = name.removesuffix("_id")
|
|
99
|
+
metadata: dict[str, object] = dict(attributes.get(alias, {}))
|
|
100
|
+
if (
|
|
101
|
+
resolve_general_manager_type(
|
|
102
|
+
metadata.get("type"), get_graphql_manager_registry()
|
|
103
|
+
)
|
|
104
|
+
is not None
|
|
105
|
+
):
|
|
106
|
+
relation = alias
|
|
107
|
+
if relation is not None:
|
|
108
|
+
names.add(relation)
|
|
109
|
+
known_fields = set(attributes) | set(instance.identification)
|
|
110
|
+
known_fields.update(instance.Interface.get_graph_ql_properties())
|
|
111
|
+
known_fields.update(instance.Interface.get_attributes())
|
|
112
|
+
if not names.intersection(known_fields):
|
|
113
|
+
raise QueryFieldPermissionError(field)
|
|
114
|
+
if any(not check_read_permission(instance, info, name) for name in names):
|
|
115
|
+
raise QueryFieldPermissionError(field)
|
|
116
|
+
if not rest:
|
|
117
|
+
return
|
|
118
|
+
if len(aliases) > 1:
|
|
119
|
+
raise GraphQLError(_AMBIGUOUS_ERROR)
|
|
120
|
+
field_metadata: dict[str, object] = dict(
|
|
121
|
+
attributes.get(aliases[0] if aliases else field, {})
|
|
122
|
+
)
|
|
123
|
+
if (
|
|
124
|
+
len(rest) == 1
|
|
125
|
+
and rest[0] in _LOOKUPS
|
|
126
|
+
and (
|
|
127
|
+
(field.endswith("_id") and len(names) > 1)
|
|
128
|
+
or (
|
|
129
|
+
field_metadata.get("type") is not None
|
|
130
|
+
and resolve_general_manager_type(
|
|
131
|
+
field_metadata.get("type"), get_graphql_manager_registry()
|
|
132
|
+
)
|
|
133
|
+
is None
|
|
134
|
+
and field_metadata.get("relation_kind")
|
|
135
|
+
not in {"direct", "collection"}
|
|
136
|
+
)
|
|
137
|
+
)
|
|
138
|
+
):
|
|
139
|
+
return
|
|
140
|
+
related_type = resolve_general_manager_type(
|
|
141
|
+
field_metadata.get("type"), get_graphql_manager_registry()
|
|
142
|
+
)
|
|
143
|
+
if len(rest) == 1 and rest[0] in _LOOKUPS and related_type is not None:
|
|
144
|
+
related_fields = set(related_type.Interface.get_attribute_types())
|
|
145
|
+
related_fields.update(related_type.Interface.get_attributes())
|
|
146
|
+
related_fields.update(related_type.Interface.get_graph_ql_properties())
|
|
147
|
+
if rest[0] not in related_fields:
|
|
148
|
+
return
|
|
149
|
+
value = getattr(instance, aliases[0] if aliases else field)
|
|
150
|
+
if value is None:
|
|
151
|
+
return
|
|
152
|
+
related = value if isinstance(value, (Bucket, list, tuple, set)) else [value]
|
|
153
|
+
for member in related:
|
|
154
|
+
if not isinstance(member, GeneralManager):
|
|
155
|
+
# A lookup is an operator only after resolving its preceding
|
|
156
|
+
# scalar field. A relation's field named "contains" is a field.
|
|
157
|
+
if len(rest) == 1 and rest[0] in _LOOKUPS:
|
|
158
|
+
continue
|
|
159
|
+
raise GraphQLError(_RELATION_ERROR)
|
|
160
|
+
if not can_read_instance(member, info):
|
|
161
|
+
raise GraphQLError(_RELATION_ERROR)
|
|
162
|
+
check(member, tuple(rest))
|
|
163
|
+
|
|
164
|
+
for candidate in candidates:
|
|
165
|
+
for normalized_parts in sorted(normalized):
|
|
166
|
+
check(candidate, normalized_parts)
|
|
167
|
+
if isinstance(candidates, RequestBucket) and not candidates.response_is_complete:
|
|
168
|
+
raise GraphQLError(INCOMPLETE_ERROR)
|