GeneralManager 0.40.2__tar.gz → 0.40.4__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.40.2/src/GeneralManager.egg-info → generalmanager-0.40.4}/PKG-INFO +1 -1
- {generalmanager-0.40.2 → generalmanager-0.40.4}/pyproject.toml +1 -1
- {generalmanager-0.40.2 → generalmanager-0.40.4/src/GeneralManager.egg-info}/PKG-INFO +1 -1
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/bucket/calculation_bucket.py +81 -24
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/factory/factories.py +35 -3
- {generalmanager-0.40.2 → generalmanager-0.40.4}/LICENSE +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/README.md +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/setup.cfg +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/GeneralManager.egg-info/SOURCES.txt +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/GeneralManager.egg-info/requires.txt +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/GeneralManager.egg-info/top_level.txt +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/_types/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/_types/api.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/_types/bucket.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/_types/cache.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/_types/factory.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/_types/general_manager.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/_types/interface.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/_types/manager.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/_types/measurement.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/_types/permission.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/_types/rule.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/_types/search.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/_types/utils.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/api/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/api/graphql.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/api/graphql_errors.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/api/graphql_mutations.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/api/graphql_resolvers.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/api/graphql_search.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/api/graphql_subscriptions.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/api/graphql_view.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/api/mutation.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/api/property.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/api/registry.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/api/remote_api.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/api/remote_invalidation.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/api/remote_invalidation_client.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/apps.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/bootstrap.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/bucket/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/bucket/base_bucket.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/bucket/database_bucket.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/bucket/group_bucket.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/bucket/request_bucket.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/cache/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/cache/cache_decorator.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/cache/cache_tracker.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/cache/dependency_index.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/cache/model_dependency_collector.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/cache/signals.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/conf.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/factory/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/factory/auto_factory.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/factory/factory_methods.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/base_interface.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/bundles/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/bundles/calculation.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/bundles/database.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/bundles/remote_manager.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/bundles/request.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/base.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/builtin.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/configuration.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/core/observability.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/core/utils.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/exceptions.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/factory.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/orm/history.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/orm/support.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/registry.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/interfaces/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/interfaces/calculation.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/interfaces/database.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/interfaces/existing_model.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/interfaces/read_only.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/interfaces/request.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/manifests/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/manifests/capability_builder.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/manifests/capability_models.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/orm_interface.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/requests.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/utils/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/utils/errors.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/utils/models.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/logging.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/management/commands/search_index.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/management/commands/shell.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/manager/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/manager/general_manager.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/manager/group_manager.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/manager/input.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/manager/meta.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/measurement/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/measurement/measurement.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/measurement/measurement_field.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/metrics/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/metrics/graphql.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/migrations/0001_initial.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/migrations/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/models.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/permission/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/permission/audit.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/permission/base_permission.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/permission/graphql_capabilities.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/permission/manager_based_permission.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/permission/mutation_permission.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/permission/permission_checks.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/permission/permission_data_manager.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/permission/utils.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/public_api_registry.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/py.typed +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/rule/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/rule/handler.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/rule/rule.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/search/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/search/async_tasks.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/search/backend.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/search/backend_registry.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/search/backends/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/search/backends/dev.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/search/backends/meilisearch.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/search/backends/opensearch.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/search/backends/typesense.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/search/config.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/search/indexer.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/search/registry.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/search/utils.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/seeding/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/seeding/manager_landscape.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/utils/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/utils/args_to_kwargs.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/utils/filter_parser.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/utils/format_string.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/utils/json_encoder.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/utils/make_cache_key.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/utils/none_to_zero.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/utils/path_mapping.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/utils/public_api.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/utils/testing.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/utils/type_checks.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/actions.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/backend_registry.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/backends/__init__.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/backends/celery.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/backends/local.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/backends/n8n.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/config.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/engine.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/event_registry.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/events.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/models.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/signal_bridge.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/tasks.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/telemetry.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/tests/test_settings.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/tests/test_urls.py +0 -0
- {generalmanager-0.40.2 → generalmanager-0.40.4}/tests/testing_asgi.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: GeneralManager
|
|
3
|
-
Version: 0.40.
|
|
3
|
+
Version: 0.40.4
|
|
4
4
|
Summary: Modular Django-based data management framework with ORM, GraphQL, fine-grained permissions, rule validation, calculations and caching.
|
|
5
5
|
Author-email: Tim Kleindick <tkleindick@yahoo.de>
|
|
6
6
|
License: MIT License
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "GeneralManager"
|
|
7
|
-
version = "0.40.
|
|
7
|
+
version = "0.40.4"
|
|
8
8
|
description = "Modular Django-based data management framework with ORM, GraphQL, fine-grained permissions, rule validation, calculations and caching."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [{ name = "Tim Kleindick", email = "tkleindick@yahoo.de" }]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: GeneralManager
|
|
3
|
-
Version: 0.40.
|
|
3
|
+
Version: 0.40.4
|
|
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
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/bucket/calculation_bucket.py
RENAMED
|
@@ -453,6 +453,51 @@ class CalculationBucket(Bucket[GeneralManagerType]):
|
|
|
453
453
|
"input_excludes": input_excludes,
|
|
454
454
|
}
|
|
455
455
|
|
|
456
|
+
def _normalized_sort_key(self) -> tuple[str, ...] | None:
|
|
457
|
+
"""Return the configured sort key as a tuple, or None when unsorted."""
|
|
458
|
+
if self.sort_key is None:
|
|
459
|
+
return None
|
|
460
|
+
if isinstance(self.sort_key, str):
|
|
461
|
+
return (self.sort_key,)
|
|
462
|
+
return self.sort_key
|
|
463
|
+
|
|
464
|
+
def _sort_uses_only_inputs(self, sort_key: tuple[str, ...] | None) -> bool:
|
|
465
|
+
"""Return whether a sort can be applied to raw input dictionaries."""
|
|
466
|
+
if sort_key is None:
|
|
467
|
+
return True
|
|
468
|
+
return all(key in self.input_fields for key in sort_key)
|
|
469
|
+
|
|
470
|
+
def _sort_dict_combinations(
|
|
471
|
+
self,
|
|
472
|
+
combinations: list[dict[str, Any]],
|
|
473
|
+
sort_key: tuple[str, ...],
|
|
474
|
+
) -> list[dict[str, Any]]:
|
|
475
|
+
"""
|
|
476
|
+
Sort input dictionaries while tolerating missing optional inputs.
|
|
477
|
+
|
|
478
|
+
Present values sort before missing values in ascending order. Missing
|
|
479
|
+
keys use None as the explicit placeholder, guarded by a presence flag so
|
|
480
|
+
they are not compared directly with concrete input values.
|
|
481
|
+
"""
|
|
482
|
+
return sorted(
|
|
483
|
+
combinations,
|
|
484
|
+
key=lambda combo: tuple(
|
|
485
|
+
(key not in combo, combo.get(key, None)) for key in sort_key
|
|
486
|
+
),
|
|
487
|
+
)
|
|
488
|
+
|
|
489
|
+
def _manager_combinations(
|
|
490
|
+
self,
|
|
491
|
+
combinations: list[dict[str, Any]],
|
|
492
|
+
) -> list[GeneralManagerType]:
|
|
493
|
+
return [self._manager_class(**combo) for combo in combinations]
|
|
494
|
+
|
|
495
|
+
@staticmethod
|
|
496
|
+
def _manager_identifications(
|
|
497
|
+
managers: list[GeneralManagerType],
|
|
498
|
+
) -> list[dict[str, Any]]:
|
|
499
|
+
return [manager.identification for manager in managers]
|
|
500
|
+
|
|
456
501
|
def generate_combinations(self) -> List[dict[str, Any]]:
|
|
457
502
|
"""
|
|
458
503
|
Compute (and cache) the list of valid input combinations.
|
|
@@ -461,10 +506,6 @@ class CalculationBucket(Bucket[GeneralManagerType]):
|
|
|
461
506
|
list[dict[str, Any]]: Cached list of input dictionaries satisfying filters, excludes, and ordering.
|
|
462
507
|
"""
|
|
463
508
|
|
|
464
|
-
def key_func(manager_obj: GeneralManagerType) -> tuple:
|
|
465
|
-
getters = [attrgetter(key) for key in sort_key]
|
|
466
|
-
return tuple(getter(manager_obj) for getter in getters)
|
|
467
|
-
|
|
468
509
|
if self._data is None:
|
|
469
510
|
sorted_inputs = self.topological_sort_inputs()
|
|
470
511
|
sorted_filters = self._sort_filters(sorted_inputs)
|
|
@@ -473,23 +514,40 @@ class CalculationBucket(Bucket[GeneralManagerType]):
|
|
|
473
514
|
sorted_filters["input_filters"],
|
|
474
515
|
sorted_filters["input_excludes"],
|
|
475
516
|
)
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
sorted_filters["prop_filters"]
|
|
479
|
-
sorted_filters["prop_excludes"]
|
|
517
|
+
sort_key = self._normalized_sort_key()
|
|
518
|
+
needs_manager_access = (
|
|
519
|
+
bool(sorted_filters["prop_filters"])
|
|
520
|
+
or bool(sorted_filters["prop_excludes"])
|
|
521
|
+
or not self._sort_uses_only_inputs(sort_key)
|
|
480
522
|
)
|
|
481
523
|
|
|
482
|
-
if
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
sort_key = (sort_key,)
|
|
486
|
-
manager_combinations = sorted(
|
|
524
|
+
if needs_manager_access:
|
|
525
|
+
manager_combinations = self._manager_combinations(current_combinations)
|
|
526
|
+
manager_combinations = self._filter_prop_combinations(
|
|
487
527
|
manager_combinations,
|
|
488
|
-
|
|
528
|
+
sorted_filters["prop_filters"],
|
|
529
|
+
sorted_filters["prop_excludes"],
|
|
489
530
|
)
|
|
531
|
+
if sort_key is not None:
|
|
532
|
+
getters = [attrgetter(key) for key in sort_key]
|
|
533
|
+
manager_combinations = sorted(
|
|
534
|
+
manager_combinations,
|
|
535
|
+
key=lambda manager_obj: tuple(
|
|
536
|
+
getter(manager_obj) for getter in getters
|
|
537
|
+
),
|
|
538
|
+
)
|
|
539
|
+
identifications = self._manager_identifications(manager_combinations)
|
|
540
|
+
else:
|
|
541
|
+
identifications = current_combinations
|
|
542
|
+
if sort_key is not None:
|
|
543
|
+
identifications = self._sort_dict_combinations(
|
|
544
|
+
identifications,
|
|
545
|
+
sort_key,
|
|
546
|
+
)
|
|
547
|
+
|
|
490
548
|
if self.reverse:
|
|
491
|
-
|
|
492
|
-
self._data =
|
|
549
|
+
identifications.reverse()
|
|
550
|
+
self._data = identifications
|
|
493
551
|
|
|
494
552
|
return self._data
|
|
495
553
|
|
|
@@ -670,9 +728,9 @@ class CalculationBucket(Bucket[GeneralManagerType]):
|
|
|
670
728
|
|
|
671
729
|
return list(helper(0, {}))
|
|
672
730
|
|
|
673
|
-
def
|
|
731
|
+
def _filter_prop_combinations(
|
|
674
732
|
self,
|
|
675
|
-
|
|
733
|
+
manager_combinations: list[GeneralManagerType],
|
|
676
734
|
prop_filters: dict[str, Any],
|
|
677
735
|
prop_excludes: dict[str, Any],
|
|
678
736
|
) -> list[GeneralManagerType]:
|
|
@@ -680,23 +738,22 @@ class CalculationBucket(Bucket[GeneralManagerType]):
|
|
|
680
738
|
Apply property-level filters and excludes to manager combinations.
|
|
681
739
|
|
|
682
740
|
Parameters:
|
|
683
|
-
|
|
741
|
+
manager_combinations (list[GeneralManagerType]): Managers built from
|
|
742
|
+
input combinations already passing input filters.
|
|
684
743
|
prop_filters (dict[str, Any]): Filter definitions keyed by property name.
|
|
685
744
|
prop_excludes (dict[str, Any]): Exclude definitions keyed by property name.
|
|
686
745
|
|
|
687
746
|
Returns:
|
|
688
|
-
list[GeneralManagerType]: Manager instances that satisfy property
|
|
747
|
+
list[GeneralManagerType]: Manager instances that satisfy property
|
|
748
|
+
constraints.
|
|
689
749
|
"""
|
|
690
750
|
|
|
691
751
|
prop_filter_needed = set(prop_filters.keys()) | set(prop_excludes.keys())
|
|
692
|
-
manager_combinations = [
|
|
693
|
-
self._manager_class(**combo) for combo in current_combos
|
|
694
|
-
]
|
|
695
752
|
if not prop_filter_needed:
|
|
696
753
|
return manager_combinations
|
|
697
754
|
|
|
698
755
|
# Apply property filters and exclusions
|
|
699
|
-
filtered_combos = []
|
|
756
|
+
filtered_combos: list[GeneralManagerType] = []
|
|
700
757
|
for manager in manager_combinations:
|
|
701
758
|
keep = True
|
|
702
759
|
# include filters
|
|
@@ -7,6 +7,7 @@ from typing import Any, cast
|
|
|
7
7
|
from factory.declarations import LazyFunction
|
|
8
8
|
from factory.faker import Faker
|
|
9
9
|
import exrex # type: ignore[import-untyped]
|
|
10
|
+
from django.apps import apps
|
|
10
11
|
from django.core.validators import RegexValidator
|
|
11
12
|
from django.db import models
|
|
12
13
|
from datetime import date, datetime, timezone, timedelta
|
|
@@ -18,6 +19,7 @@ from general_manager.manager.general_manager import GeneralManager
|
|
|
18
19
|
|
|
19
20
|
|
|
20
21
|
_RNG = SystemRandom()
|
|
22
|
+
_NO_DEFAULT = object()
|
|
21
23
|
|
|
22
24
|
|
|
23
25
|
class MissingFactoryOrInstancesError(ValueError):
|
|
@@ -96,6 +98,13 @@ def get_field_value(
|
|
|
96
98
|
MissingRelatedModelError: When a relational field does not declare a related model.
|
|
97
99
|
InvalidRelatedModelTypeError: When a relational field's related value is not a Django model class.
|
|
98
100
|
"""
|
|
101
|
+
if (
|
|
102
|
+
getattr(field, "null", False)
|
|
103
|
+
and getattr(field, "default", _NO_DEFAULT) is None
|
|
104
|
+
and getattr(field, "is_relation", False)
|
|
105
|
+
):
|
|
106
|
+
return None
|
|
107
|
+
|
|
99
108
|
if field.null:
|
|
100
109
|
if _RNG.choice([True] + 9 * [False]):
|
|
101
110
|
return None
|
|
@@ -246,11 +255,11 @@ def get_related_model(
|
|
|
246
255
|
MissingRelatedModelError: If the field does not declare a related model.
|
|
247
256
|
InvalidRelatedModelTypeError: If the resolved related model is not a Django model class.
|
|
248
257
|
"""
|
|
249
|
-
related_model = field.related_model
|
|
258
|
+
related_model: object = field.related_model
|
|
250
259
|
if related_model is None:
|
|
251
260
|
raise MissingRelatedModelError(field.name)
|
|
252
|
-
if related_model
|
|
253
|
-
related_model = field
|
|
261
|
+
if isinstance(related_model, str):
|
|
262
|
+
related_model = _resolve_related_model_string(field, related_model)
|
|
254
263
|
if not isinstance(related_model, type) or not issubclass(
|
|
255
264
|
related_model, models.Model
|
|
256
265
|
):
|
|
@@ -258,6 +267,29 @@ def get_related_model(
|
|
|
258
267
|
return cast(type[models.Model], related_model)
|
|
259
268
|
|
|
260
269
|
|
|
270
|
+
def _resolve_related_model_string(
|
|
271
|
+
field: models.ForeignObjectRel | models.Field[Any, Any],
|
|
272
|
+
related_model: str,
|
|
273
|
+
) -> object:
|
|
274
|
+
if related_model == "self":
|
|
275
|
+
return field.model
|
|
276
|
+
app_label: str | None
|
|
277
|
+
if "." in related_model:
|
|
278
|
+
app_label, model_name = related_model.split(".", 1)
|
|
279
|
+
else:
|
|
280
|
+
model = getattr(field, "model", None)
|
|
281
|
+
opts = getattr(model, "_meta", None)
|
|
282
|
+
app_label_value = getattr(opts, "app_label", None)
|
|
283
|
+
app_label = app_label_value if isinstance(app_label_value, str) else None
|
|
284
|
+
model_name = related_model
|
|
285
|
+
if not app_label:
|
|
286
|
+
return related_model
|
|
287
|
+
try:
|
|
288
|
+
return apps.get_model(app_label, model_name)
|
|
289
|
+
except LookupError:
|
|
290
|
+
return related_model
|
|
291
|
+
|
|
292
|
+
|
|
261
293
|
def get_many_to_many_field_value(
|
|
262
294
|
field: models.ManyToManyField,
|
|
263
295
|
) -> list[models.Model]:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/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.40.2 → generalmanager-0.40.4}/src/general_manager/_types/general_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/api/graphql_mutations.py
RENAMED
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/api/graphql_resolvers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/api/graphql_subscriptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/api/remote_invalidation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/bucket/database_bucket.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/bucket/request_bucket.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/cache/cache_decorator.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/cache/dependency_index.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/factory/factory_methods.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/base_interface.py
RENAMED
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/bundles/__init__.py
RENAMED
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/bundles/calculation.py
RENAMED
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/bundles/database.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/bundles/request.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/capabilities/base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.40.2 → generalmanager-0.40.4}/src/general_manager/interface/interfaces/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/interfaces/database.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/interfaces/request.py
RENAMED
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/manifests/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/orm_interface.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/utils/errors.py
RENAMED
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/interface/utils/models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/management/commands/shell.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/manager/general_manager.py
RENAMED
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/manager/group_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/measurement/measurement.py
RENAMED
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/measurement/measurement_field.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/migrations/0001_initial.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.40.2 → generalmanager-0.40.4}/src/general_manager/permission/base_permission.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/permission/permission_checks.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/search/backend_registry.py
RENAMED
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/search/backends/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/search/backends/meilisearch.py
RENAMED
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/search/backends/opensearch.py
RENAMED
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/search/backends/typesense.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/seeding/manager_landscape.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
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/backend_registry.py
RENAMED
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/backends/__init__.py
RENAMED
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/backends/celery.py
RENAMED
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/backends/local.py
RENAMED
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/backends/n8n.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/event_registry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.40.2 → generalmanager-0.40.4}/src/general_manager/workflow/signal_bridge.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|