GeneralManager 0.41.7__tar.gz → 0.41.9__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.41.7/src/GeneralManager.egg-info → generalmanager-0.41.9}/PKG-INFO +1 -1
- {generalmanager-0.41.7 → generalmanager-0.41.9}/pyproject.toml +1 -1
- {generalmanager-0.41.7 → generalmanager-0.41.9/src/GeneralManager.egg-info}/PKG-INFO +1 -1
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/bootstrap.py +31 -1
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/bucket/group_bucket.py +76 -6
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +4 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/manager/group_manager.py +33 -3
- {generalmanager-0.41.7 → generalmanager-0.41.9}/LICENSE +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/README.md +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/setup.cfg +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/GeneralManager.egg-info/SOURCES.txt +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/GeneralManager.egg-info/requires.txt +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/GeneralManager.egg-info/top_level.txt +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/_types/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/_types/api.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/_types/bucket.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/_types/cache.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/_types/factory.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/_types/general_manager.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/_types/interface.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/_types/manager.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/_types/measurement.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/_types/permission.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/_types/rule.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/_types/search.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/_types/utils.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/api/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/api/graphql.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/api/graphql_errors.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/api/graphql_mutations.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/api/graphql_resolvers.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/api/graphql_search.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/api/graphql_subscriptions.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/api/graphql_view.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/api/mutation.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/api/property.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/api/registry.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/api/remote_api.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/api/remote_invalidation.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/api/remote_invalidation_client.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/apps.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/bucket/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/bucket/base_bucket.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/bucket/calculation_bucket.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/bucket/database_bucket.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/bucket/request_bucket.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/cache/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/cache/cache_decorator.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/cache/cache_tracker.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/cache/dependency_index.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/cache/model_dependency_collector.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/cache/signals.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/conf.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/factory/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/factory/auto_factory.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/factory/factories.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/factory/factory_methods.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/base_interface.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/bundles/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/bundles/calculation.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/bundles/database.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/bundles/remote_manager.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/bundles/request.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/base.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/builtin.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/configuration.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/core/observability.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/core/utils.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/exceptions.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/factory.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/orm/history.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/orm/support.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/registry.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/interfaces/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/interfaces/calculation.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/interfaces/database.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/interfaces/existing_model.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/interfaces/read_only.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/interfaces/request.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/manifests/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/manifests/capability_builder.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/manifests/capability_models.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/orm_interface.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/requests.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/utils/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/utils/errors.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/utils/models.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/logging.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/management/commands/search_index.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/management/commands/shell.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/manager/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/manager/general_manager.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/manager/input.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/manager/meta.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/measurement/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/measurement/measurement.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/measurement/measurement_field.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/metrics/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/metrics/graphql.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/migrations/0001_initial.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/migrations/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/models.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/permission/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/permission/audit.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/permission/base_permission.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/permission/graphql_capabilities.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/permission/manager_based_permission.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/permission/mutation_permission.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/permission/permission_checks.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/permission/permission_data_manager.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/permission/utils.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/public_api_registry.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/py.typed +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/rule/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/rule/handler.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/rule/rule.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/search/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/search/async_tasks.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/search/backend.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/search/backend_registry.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/search/backends/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/search/backends/dev.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/search/backends/meilisearch.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/search/backends/opensearch.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/search/backends/typesense.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/search/config.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/search/indexer.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/search/registry.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/search/utils.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/seeding/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/seeding/manager_landscape.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/utils/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/utils/args_to_kwargs.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/utils/filter_parser.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/utils/format_string.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/utils/json_encoder.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/utils/make_cache_key.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/utils/none_to_zero.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/utils/path_mapping.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/utils/public_api.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/utils/testing.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/utils/type_checks.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/workflow/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/workflow/actions.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/workflow/backend_registry.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/workflow/backends/__init__.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/workflow/backends/celery.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/workflow/backends/local.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/workflow/backends/n8n.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/workflow/config.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/workflow/engine.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/workflow/event_registry.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/workflow/events.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/workflow/models.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/workflow/signal_bridge.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/workflow/tasks.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/workflow/telemetry.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/tests/test_settings.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/tests/test_urls.py +0 -0
- {generalmanager-0.41.7 → generalmanager-0.41.9}/tests/testing_asgi.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: GeneralManager
|
|
3
|
-
Version: 0.41.
|
|
3
|
+
Version: 0.41.9
|
|
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.41.
|
|
7
|
+
version = "0.41.9"
|
|
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.41.
|
|
3
|
+
Version: 0.41.9
|
|
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
|
|
@@ -298,6 +298,31 @@ def initialize_general_manager_classes(
|
|
|
298
298
|
if isinstance(field_type, type) and issubclass(field_type, _GM):
|
|
299
299
|
yield attribute_name, field_type
|
|
300
300
|
|
|
301
|
+
def _has_reverse_relation_attribute(
|
|
302
|
+
manager_class: Type[_GM],
|
|
303
|
+
related_manager_class: Type[_GM],
|
|
304
|
+
) -> bool:
|
|
305
|
+
get_attribute_types = getattr(
|
|
306
|
+
manager_class.Interface, "get_attribute_types", None
|
|
307
|
+
)
|
|
308
|
+
if not callable(get_attribute_types):
|
|
309
|
+
return False
|
|
310
|
+
try:
|
|
311
|
+
attribute_types = get_attribute_types()
|
|
312
|
+
except NotImplementedError:
|
|
313
|
+
return False
|
|
314
|
+
return any(
|
|
315
|
+
metadata.get("is_derived", False)
|
|
316
|
+
and metadata.get("relation_kind") in {"collection", "direct"}
|
|
317
|
+
and metadata.get("type") is related_manager_class
|
|
318
|
+
for metadata in attribute_types.values()
|
|
319
|
+
)
|
|
320
|
+
|
|
321
|
+
def _to_snake_case(name: str) -> str:
|
|
322
|
+
snake = re.sub("(.)([A-Z][a-z]+)", r"\1_\2", name)
|
|
323
|
+
snake = re.sub("([a-z0-9])([A-Z])", r"\1_\2", snake)
|
|
324
|
+
return snake.lower()
|
|
325
|
+
|
|
301
326
|
logger.debug(
|
|
302
327
|
"creating manager attributes",
|
|
303
328
|
context={"pending_attributes": len(pending_attribute_initialization)},
|
|
@@ -323,13 +348,18 @@ def initialize_general_manager_classes(
|
|
|
323
348
|
for attribute_name, connected_manager in _iter_manager_relation_fields(
|
|
324
349
|
general_manager_class
|
|
325
350
|
):
|
|
351
|
+
if _has_reverse_relation_attribute(
|
|
352
|
+
connected_manager,
|
|
353
|
+
general_manager_class,
|
|
354
|
+
):
|
|
355
|
+
continue
|
|
326
356
|
resolver = _build_connection_resolver(attribute_name, general_manager_class)
|
|
327
357
|
relation_property = GraphQLProperty(resolver)
|
|
328
358
|
marked_relation_property: Any = relation_property
|
|
329
359
|
marked_relation_property._general_manager_generated_relation = True
|
|
330
360
|
setattr(
|
|
331
361
|
connected_manager,
|
|
332
|
-
f"{general_manager_class.__name__
|
|
362
|
+
f"{_to_snake_case(general_manager_class.__name__)}_list",
|
|
333
363
|
relation_property,
|
|
334
364
|
)
|
|
335
365
|
for general_manager_class in all_classes:
|
|
@@ -1,11 +1,71 @@
|
|
|
1
1
|
"""Grouping bucket implementation for aggregating GeneralManager instances."""
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
|
-
from typing import Any, Generator, Generic, Type
|
|
4
|
+
from typing import Any, Generator, Generic, Type, cast
|
|
5
5
|
from general_manager.manager.group_manager import GroupManager
|
|
6
|
+
from general_manager.manager.general_manager import GeneralManager
|
|
6
7
|
from general_manager.bucket.base_bucket import Bucket, GeneralManagerType
|
|
7
8
|
|
|
8
9
|
|
|
10
|
+
def _freeze_group_value(value: Any) -> Any:
|
|
11
|
+
"""Return a hashable identity for values used to distinguish groups."""
|
|
12
|
+
if isinstance(value, GeneralManager):
|
|
13
|
+
return (
|
|
14
|
+
value.__class__,
|
|
15
|
+
tuple(
|
|
16
|
+
sorted(
|
|
17
|
+
(
|
|
18
|
+
key,
|
|
19
|
+
_freeze_group_value(identifier),
|
|
20
|
+
)
|
|
21
|
+
for key, identifier in value.identification.items()
|
|
22
|
+
)
|
|
23
|
+
),
|
|
24
|
+
)
|
|
25
|
+
if isinstance(value, dict):
|
|
26
|
+
return tuple(
|
|
27
|
+
sorted(
|
|
28
|
+
(
|
|
29
|
+
_freeze_group_value(key),
|
|
30
|
+
_freeze_group_value(item),
|
|
31
|
+
)
|
|
32
|
+
for key, item in value.items()
|
|
33
|
+
)
|
|
34
|
+
)
|
|
35
|
+
if isinstance(value, (list, tuple)):
|
|
36
|
+
return tuple(_freeze_group_value(item) for item in value)
|
|
37
|
+
if isinstance(value, set):
|
|
38
|
+
return frozenset(_freeze_group_value(item) for item in value)
|
|
39
|
+
return value
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _group_filter_kwargs(
|
|
43
|
+
manager_class: Type[GeneralManagerType],
|
|
44
|
+
group_by_value: tuple[tuple[str, Any], ...],
|
|
45
|
+
) -> dict[str, Any]:
|
|
46
|
+
"""Translate grouped manager values into backend-neutral relation lookups."""
|
|
47
|
+
filters: dict[str, Any] = {}
|
|
48
|
+
get_attribute_types = getattr(
|
|
49
|
+
manager_class.Interface,
|
|
50
|
+
"get_attribute_types",
|
|
51
|
+
None,
|
|
52
|
+
)
|
|
53
|
+
attributes = get_attribute_types() if callable(get_attribute_types) else {}
|
|
54
|
+
for key, value in group_by_value:
|
|
55
|
+
attribute_info = cast(dict[str, Any], attributes.get(key, {}))
|
|
56
|
+
filter_key = attribute_info.get("filter_lookup", key)
|
|
57
|
+
if isinstance(value, GeneralManager):
|
|
58
|
+
filters.update(
|
|
59
|
+
{
|
|
60
|
+
f"{filter_key}__{identifier_key}": identifier_value
|
|
61
|
+
for identifier_key, identifier_value in value.identification.items()
|
|
62
|
+
}
|
|
63
|
+
)
|
|
64
|
+
continue
|
|
65
|
+
filters[filter_key] = value
|
|
66
|
+
return filters
|
|
67
|
+
|
|
68
|
+
|
|
9
69
|
class InvalidGroupByKeyTypeError(TypeError):
|
|
10
70
|
"""Raised when a non-string value is provided as a group-by key."""
|
|
11
71
|
|
|
@@ -191,15 +251,25 @@ class GroupBucket(Generic[GeneralManagerType]):
|
|
|
191
251
|
Returns:
|
|
192
252
|
list[GroupManager[GeneralManagerType]]: A list of GroupManager objects, one per unique tuple of group-by key values; groups are produced in order sorted by the string representation of their key tuples.
|
|
193
253
|
"""
|
|
194
|
-
group_by_values:
|
|
254
|
+
group_by_values: dict[
|
|
255
|
+
tuple[tuple[str, Any], ...],
|
|
256
|
+
tuple[tuple[str, Any], ...],
|
|
257
|
+
] = {}
|
|
195
258
|
for entry in data:
|
|
196
|
-
|
|
197
|
-
|
|
259
|
+
group_by_value = tuple(
|
|
260
|
+
(arg, getattr(entry, arg)) for arg in self._group_by_keys
|
|
261
|
+
)
|
|
262
|
+
group_identity = tuple(
|
|
263
|
+
(arg, _freeze_group_value(value)) for arg, value in group_by_value
|
|
264
|
+
)
|
|
265
|
+
group_by_values.setdefault(group_identity, group_by_value)
|
|
198
266
|
|
|
199
267
|
groups: list[GroupManager[GeneralManagerType]] = []
|
|
200
|
-
for group_by_value in sorted(group_by_values, key=str):
|
|
268
|
+
for group_by_value in sorted(group_by_values.values(), key=str):
|
|
201
269
|
group_by_dict = {key: value for key, value in group_by_value}
|
|
202
|
-
grouped_manager_objects = data.filter(
|
|
270
|
+
grouped_manager_objects = data.filter(
|
|
271
|
+
**_group_filter_kwargs(self._manager_class, group_by_value)
|
|
272
|
+
)
|
|
203
273
|
groups.append(
|
|
204
274
|
GroupManager(
|
|
205
275
|
self._manager_class, group_by_dict, grouped_manager_objects
|
|
@@ -567,6 +567,10 @@ def _iter_foreign_key_fields(
|
|
|
567
567
|
An iterable of Django `Field` objects for each many-to-one or one-to-one relation on the model, excluding `GenericForeignKey` fields.
|
|
568
568
|
"""
|
|
569
569
|
for field in model._meta.get_fields():
|
|
570
|
+
if getattr(field, "auto_created", False) and not getattr(
|
|
571
|
+
field, "concrete", False
|
|
572
|
+
):
|
|
573
|
+
continue
|
|
570
574
|
if not field.is_relation:
|
|
571
575
|
continue
|
|
572
576
|
if isinstance(field, GenericForeignKey):
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/manager/group_manager.py
RENAMED
|
@@ -12,6 +12,35 @@ from general_manager.bucket.base_bucket import (
|
|
|
12
12
|
)
|
|
13
13
|
|
|
14
14
|
|
|
15
|
+
def _freeze_manager_value(value: Any) -> Any:
|
|
16
|
+
"""Return a hashable representation for manager-backed group state."""
|
|
17
|
+
if isinstance(value, GeneralManager):
|
|
18
|
+
return tuple(
|
|
19
|
+
sorted(
|
|
20
|
+
(
|
|
21
|
+
key,
|
|
22
|
+
_freeze_manager_value(identifier),
|
|
23
|
+
)
|
|
24
|
+
for key, identifier in value.identification.items()
|
|
25
|
+
)
|
|
26
|
+
)
|
|
27
|
+
if isinstance(value, dict):
|
|
28
|
+
return tuple(
|
|
29
|
+
sorted(
|
|
30
|
+
(
|
|
31
|
+
_freeze_manager_value(key),
|
|
32
|
+
_freeze_manager_value(item),
|
|
33
|
+
)
|
|
34
|
+
for key, item in value.items()
|
|
35
|
+
)
|
|
36
|
+
)
|
|
37
|
+
if isinstance(value, (list, tuple)):
|
|
38
|
+
return tuple(_freeze_manager_value(item) for item in value)
|
|
39
|
+
if isinstance(value, set):
|
|
40
|
+
return frozenset(_freeze_manager_value(item) for item in value)
|
|
41
|
+
return value
|
|
42
|
+
|
|
43
|
+
|
|
15
44
|
class MissingGroupAttributeError(AttributeError):
|
|
16
45
|
"""Raised when a GroupManager access attempts to use an undefined attribute."""
|
|
17
46
|
|
|
@@ -61,8 +90,8 @@ class GroupManager(Generic[GeneralManagerType]):
|
|
|
61
90
|
return hash(
|
|
62
91
|
(
|
|
63
92
|
self._manager_class,
|
|
64
|
-
|
|
65
|
-
frozenset(self._data),
|
|
93
|
+
_freeze_manager_value(self._group_by_value),
|
|
94
|
+
frozenset(_freeze_manager_value(entry) for entry in self._data),
|
|
66
95
|
)
|
|
67
96
|
)
|
|
68
97
|
|
|
@@ -80,7 +109,8 @@ class GroupManager(Generic[GeneralManagerType]):
|
|
|
80
109
|
isinstance(other, self.__class__)
|
|
81
110
|
and self._manager_class == other._manager_class
|
|
82
111
|
and self._group_by_value == other._group_by_value
|
|
83
|
-
and frozenset(
|
|
112
|
+
and frozenset(_freeze_manager_value(entry) for entry in self._data)
|
|
113
|
+
== frozenset(_freeze_manager_value(entry) for entry in other._data)
|
|
84
114
|
)
|
|
85
115
|
|
|
86
116
|
def __repr__(self) -> str:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/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.41.7 → generalmanager-0.41.9}/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.41.7 → generalmanager-0.41.9}/src/general_manager/api/graphql_mutations.py
RENAMED
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/api/graphql_resolvers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/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.41.7 → generalmanager-0.41.9}/src/general_manager/api/remote_invalidation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/bucket/calculation_bucket.py
RENAMED
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/bucket/database_bucket.py
RENAMED
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/bucket/request_bucket.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/cache/cache_decorator.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/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
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/factory/factory_methods.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/base_interface.py
RENAMED
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/bundles/__init__.py
RENAMED
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/bundles/calculation.py
RENAMED
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/bundles/database.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/bundles/request.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/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
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/interfaces/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/interfaces/database.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/interfaces/request.py
RENAMED
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/manifests/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/orm_interface.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/utils/errors.py
RENAMED
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/interface/utils/models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/management/commands/shell.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/manager/general_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/measurement/measurement.py
RENAMED
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/measurement/measurement_field.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/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.41.7 → generalmanager-0.41.9}/src/general_manager/permission/base_permission.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/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.41.7 → generalmanager-0.41.9}/src/general_manager/search/backend_registry.py
RENAMED
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/search/backends/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/search/backends/meilisearch.py
RENAMED
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/search/backends/opensearch.py
RENAMED
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/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.41.7 → generalmanager-0.41.9}/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.41.7 → generalmanager-0.41.9}/src/general_manager/workflow/backend_registry.py
RENAMED
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/workflow/backends/__init__.py
RENAMED
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/workflow/backends/celery.py
RENAMED
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/workflow/backends/local.py
RENAMED
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/workflow/backends/n8n.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/src/general_manager/workflow/event_registry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.7 → generalmanager-0.41.9}/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
|