GeneralManager 0.41.5__tar.gz → 0.41.7__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.5/src/GeneralManager.egg-info → generalmanager-0.41.7}/PKG-INFO +1 -1
- {generalmanager-0.41.5 → generalmanager-0.41.7}/pyproject.toml +1 -1
- {generalmanager-0.41.5 → generalmanager-0.41.7/src/GeneralManager.egg-info}/PKG-INFO +1 -1
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +50 -2
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/permission/base_permission.py +9 -2
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/permission/graphql_capabilities.py +10 -9
- {generalmanager-0.41.5 → generalmanager-0.41.7}/LICENSE +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/README.md +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/setup.cfg +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/GeneralManager.egg-info/SOURCES.txt +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/GeneralManager.egg-info/requires.txt +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/GeneralManager.egg-info/top_level.txt +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/api.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/bucket.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/cache.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/factory.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/general_manager.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/interface.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/manager.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/measurement.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/permission.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/rule.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/search.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/_types/utils.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/graphql.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/graphql_errors.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/graphql_mutations.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/graphql_resolvers.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/graphql_search.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/graphql_subscriptions.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/graphql_view.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/mutation.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/property.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/registry.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/remote_api.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/remote_invalidation.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/remote_invalidation_client.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/apps.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/bootstrap.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/bucket/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/bucket/base_bucket.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/bucket/calculation_bucket.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/bucket/database_bucket.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/bucket/group_bucket.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/bucket/request_bucket.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/cache/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/cache/cache_decorator.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/cache/cache_tracker.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/cache/dependency_index.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/cache/model_dependency_collector.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/cache/signals.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/conf.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/factory/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/factory/auto_factory.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/factory/factories.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/factory/factory_methods.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/base_interface.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/bundles/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/bundles/calculation.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/bundles/database.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/bundles/remote_manager.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/bundles/request.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/base.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/builtin.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/configuration.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/core/observability.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/core/utils.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/exceptions.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/factory.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/orm/history.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/orm/support.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/registry.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/interfaces/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/interfaces/calculation.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/interfaces/database.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/interfaces/existing_model.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/interfaces/read_only.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/interfaces/request.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/manifests/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/manifests/capability_builder.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/manifests/capability_models.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/orm_interface.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/requests.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/utils/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/utils/errors.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/utils/models.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/logging.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/management/commands/search_index.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/management/commands/shell.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/manager/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/manager/general_manager.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/manager/group_manager.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/manager/input.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/manager/meta.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/measurement/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/measurement/measurement.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/measurement/measurement_field.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/metrics/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/metrics/graphql.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/migrations/0001_initial.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/migrations/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/models.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/permission/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/permission/audit.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/permission/manager_based_permission.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/permission/mutation_permission.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/permission/permission_checks.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/permission/permission_data_manager.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/permission/utils.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/public_api_registry.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/py.typed +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/rule/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/rule/handler.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/rule/rule.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/async_tasks.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/backend.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/backend_registry.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/backends/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/backends/dev.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/backends/meilisearch.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/backends/opensearch.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/backends/typesense.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/config.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/indexer.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/registry.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/utils.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/seeding/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/seeding/manager_landscape.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/args_to_kwargs.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/filter_parser.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/format_string.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/json_encoder.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/make_cache_key.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/none_to_zero.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/path_mapping.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/public_api.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/testing.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/utils/type_checks.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/actions.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/backend_registry.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/backends/__init__.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/backends/celery.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/backends/local.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/backends/n8n.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/config.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/engine.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/event_registry.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/events.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/models.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/signal_bridge.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/tasks.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/telemetry.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/tests/test_settings.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/tests/test_urls.py +0 -0
- {generalmanager-0.41.5 → generalmanager-0.41.7}/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.7
|
|
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.7"
|
|
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.7
|
|
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
|
|
@@ -270,10 +270,27 @@ class _FieldDescriptorBuilder:
|
|
|
270
270
|
Iterates the model's many-to-many and reverse (one-to-many) relations and registers a collection descriptor for each, deriving descriptor names from each relation's base name and accessor name.
|
|
271
271
|
"""
|
|
272
272
|
for m2m_field in _iter_many_to_many_fields(self.model):
|
|
273
|
+
if getattr(m2m_field, "auto_created", False) and not getattr(
|
|
274
|
+
m2m_field, "concrete", False
|
|
275
|
+
):
|
|
276
|
+
relation_field_name = getattr(
|
|
277
|
+
getattr(m2m_field, "field", None),
|
|
278
|
+
"name",
|
|
279
|
+
None,
|
|
280
|
+
)
|
|
281
|
+
relation_filter_name = None
|
|
282
|
+
else:
|
|
283
|
+
relation_field_name = None
|
|
284
|
+
relation_filter_name = _many_to_many_relation_filter_name(
|
|
285
|
+
m2m_field,
|
|
286
|
+
self.model,
|
|
287
|
+
)
|
|
273
288
|
self._register_collection_field(
|
|
274
289
|
field=m2m_field,
|
|
275
290
|
base_name=m2m_field.name,
|
|
276
291
|
accessor_name=m2m_field.name,
|
|
292
|
+
relation_field_name=relation_field_name,
|
|
293
|
+
relation_filter_name=relation_filter_name,
|
|
277
294
|
)
|
|
278
295
|
for reverse_relation in _iter_reverse_relations(self.model):
|
|
279
296
|
accessor_name = (
|
|
@@ -305,6 +322,7 @@ class _FieldDescriptorBuilder:
|
|
|
305
322
|
base_name: str,
|
|
306
323
|
accessor_name: str,
|
|
307
324
|
relation_field_name: str | None = None,
|
|
325
|
+
relation_filter_name: str | None = None,
|
|
308
326
|
) -> None:
|
|
309
327
|
"""
|
|
310
328
|
Register a collection relation as a FieldDescriptor under the generated "<base>_list" attribute.
|
|
@@ -341,6 +359,7 @@ class _FieldDescriptorBuilder:
|
|
|
341
359
|
general_manager_class=general_manager_class,
|
|
342
360
|
source_model=self.model,
|
|
343
361
|
relation_field_name=relation_field_name,
|
|
362
|
+
relation_filter_name=relation_filter_name,
|
|
344
363
|
)
|
|
345
364
|
relation_type = cast(type, general_manager_class)
|
|
346
365
|
else:
|
|
@@ -675,6 +694,7 @@ def _general_manager_many_accessor(
|
|
|
675
694
|
general_manager_class: type,
|
|
676
695
|
source_model: type[models.Model],
|
|
677
696
|
relation_field_name: str | None = None,
|
|
697
|
+
relation_filter_name: str | None = None,
|
|
678
698
|
) -> DescriptorAccessor:
|
|
679
699
|
"""
|
|
680
700
|
Create an accessor that returns a manager filtered to objects related to the given source model instance.
|
|
@@ -688,7 +708,9 @@ def _general_manager_many_accessor(
|
|
|
688
708
|
Returns:
|
|
689
709
|
DescriptorAccessor: A callable that accepts an OrmInterfaceBase instance and returns the manager/QuerySet of related_model instances whose foreign-key fields pointing to `source_model` match the instance's primary key.
|
|
690
710
|
"""
|
|
691
|
-
if
|
|
711
|
+
if relation_filter_name is not None:
|
|
712
|
+
related_fields: list[models.Field] = []
|
|
713
|
+
elif relation_field_name is not None:
|
|
692
714
|
related_fields = [
|
|
693
715
|
cast(models.Field, related_model._meta.get_field(relation_field_name))
|
|
694
716
|
]
|
|
@@ -706,7 +728,10 @@ def _general_manager_many_accessor(
|
|
|
706
728
|
Returns:
|
|
707
729
|
A manager or queryset containing related model instances whose foreign-key fields equal this interface instance's primary key.
|
|
708
730
|
"""
|
|
709
|
-
|
|
731
|
+
if relation_filter_name is not None:
|
|
732
|
+
filter_kwargs = {relation_filter_name: self.pk}
|
|
733
|
+
else:
|
|
734
|
+
filter_kwargs = {field.name: self.pk for field in related_fields}
|
|
710
735
|
manager_cls = cast(Any, general_manager_class)
|
|
711
736
|
if not filter_kwargs:
|
|
712
737
|
raise MissingRelatedFieldsError(
|
|
@@ -719,6 +744,29 @@ def _general_manager_many_accessor(
|
|
|
719
744
|
return getter
|
|
720
745
|
|
|
721
746
|
|
|
747
|
+
def _many_to_many_relation_filter_name(
|
|
748
|
+
field: models.Field,
|
|
749
|
+
source_model: type[models.Model],
|
|
750
|
+
) -> str | None:
|
|
751
|
+
"""Return the target-side query lookup for a direct many-to-many field."""
|
|
752
|
+
remote_field = getattr(field, "remote_field", None)
|
|
753
|
+
related_query_name = getattr(remote_field, "related_query_name", None)
|
|
754
|
+
if callable(related_query_name):
|
|
755
|
+
related_query_name = related_query_name()
|
|
756
|
+
if isinstance(related_query_name, str) and related_query_name:
|
|
757
|
+
return related_query_name
|
|
758
|
+
related_name = getattr(remote_field, "related_name", None)
|
|
759
|
+
if related_name == "+":
|
|
760
|
+
return None
|
|
761
|
+
if isinstance(related_name, str) and related_name:
|
|
762
|
+
return related_name
|
|
763
|
+
source_meta = getattr(source_model, "_meta", None)
|
|
764
|
+
source_model_name = getattr(source_meta, "model_name", None)
|
|
765
|
+
if isinstance(source_model_name, str) and source_model_name:
|
|
766
|
+
return source_model_name
|
|
767
|
+
return None
|
|
768
|
+
|
|
769
|
+
|
|
722
770
|
def _direct_many_accessor(
|
|
723
771
|
resolver: Callable[["OrmInterfaceBase", str, str], Any],
|
|
724
772
|
field_call: str,
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/permission/base_permission.py
RENAMED
|
@@ -5,9 +5,10 @@ from __future__ import annotations
|
|
|
5
5
|
from abc import ABC, abstractmethod
|
|
6
6
|
from collections.abc import Mapping
|
|
7
7
|
from dataclasses import dataclass
|
|
8
|
-
from typing import TYPE_CHECKING, Any, Literal, TypeAlias
|
|
8
|
+
from typing import TYPE_CHECKING, Any, Literal, TypeAlias, cast
|
|
9
9
|
|
|
10
10
|
from django.contrib.auth.models import AbstractBaseUser, AnonymousUser
|
|
11
|
+
from django.utils.functional import SimpleLazyObject, empty
|
|
11
12
|
|
|
12
13
|
from general_manager.logging import get_logger
|
|
13
14
|
from general_manager.permission.audit import (
|
|
@@ -74,7 +75,7 @@ class BasePermission(ABC):
|
|
|
74
75
|
) -> None:
|
|
75
76
|
"""Initialise the permission context for a specific manager and user."""
|
|
76
77
|
self._instance = instance
|
|
77
|
-
self._request_user = request_user
|
|
78
|
+
self._request_user = self.get_user_with_id(request_user)
|
|
78
79
|
|
|
79
80
|
@property
|
|
80
81
|
def instance(self) -> PermissionDataManager | GeneralManager | GeneralManagerMeta:
|
|
@@ -446,6 +447,12 @@ class BasePermission(ABC):
|
|
|
446
447
|
"""
|
|
447
448
|
from django.contrib.auth import get_user_model
|
|
448
449
|
|
|
450
|
+
if isinstance(user, SimpleLazyObject):
|
|
451
|
+
lazy_user = cast(Any, user)
|
|
452
|
+
if lazy_user._wrapped is empty:
|
|
453
|
+
lazy_user._setup()
|
|
454
|
+
user = lazy_user._wrapped
|
|
455
|
+
|
|
449
456
|
User = get_user_model()
|
|
450
457
|
if isinstance(user, (AbstractBaseUser, AnonymousUser)):
|
|
451
458
|
return user
|
|
@@ -100,7 +100,15 @@ class CapabilityEvaluationContext:
|
|
|
100
100
|
"""Operation-scoped cache for GraphQL permission capability evaluation."""
|
|
101
101
|
|
|
102
102
|
def __init__(self, *, user: Any | None = None) -> None:
|
|
103
|
-
|
|
103
|
+
from django.contrib.auth.models import AnonymousUser
|
|
104
|
+
|
|
105
|
+
from general_manager.permission.base_permission import BasePermission
|
|
106
|
+
|
|
107
|
+
self.user = (
|
|
108
|
+
BasePermission.get_user_with_id(user)
|
|
109
|
+
if user is not None
|
|
110
|
+
else AnonymousUser()
|
|
111
|
+
)
|
|
104
112
|
self._cache: dict[tuple[str, str, str, str], bool] = {}
|
|
105
113
|
|
|
106
114
|
def evaluate(self, declaration: GraphQLPermissionCapability, instance: Any) -> bool:
|
|
@@ -210,7 +218,7 @@ def get_graphql_capabilities(
|
|
|
210
218
|
def get_capability_context(info: Any) -> CapabilityEvaluationContext:
|
|
211
219
|
"""Return the operation-scoped capability context for a GraphQL resolver."""
|
|
212
220
|
request_context = getattr(info, "context", None)
|
|
213
|
-
user = getattr(request_context, "user",
|
|
221
|
+
user = getattr(request_context, "user", None)
|
|
214
222
|
operation_key = id(getattr(info, "operation", None))
|
|
215
223
|
storage_name = "_general_manager_graphql_capability_contexts"
|
|
216
224
|
contexts = getattr(request_context, storage_name, None)
|
|
@@ -272,10 +280,3 @@ def _instance_identity(instance: Any) -> str:
|
|
|
272
280
|
|
|
273
281
|
def _user_identity(user: Any) -> str:
|
|
274
282
|
return repr(getattr(user, "pk", getattr(user, "id", None)))
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
class _AnonymousUser:
|
|
278
|
-
is_authenticated = False
|
|
279
|
-
is_superuser = False
|
|
280
|
-
pk = None
|
|
281
|
-
id = None
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/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.5 → generalmanager-0.41.7}/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.5 → generalmanager-0.41.7}/src/general_manager/api/graphql_mutations.py
RENAMED
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/api/graphql_resolvers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/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.5 → generalmanager-0.41.7}/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.41.5 → generalmanager-0.41.7}/src/general_manager/bucket/calculation_bucket.py
RENAMED
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/bucket/database_bucket.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/bucket/request_bucket.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/cache/cache_decorator.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/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.5 → generalmanager-0.41.7}/src/general_manager/factory/factory_methods.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/base_interface.py
RENAMED
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/bundles/__init__.py
RENAMED
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/bundles/calculation.py
RENAMED
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/bundles/database.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/bundles/request.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/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.5 → generalmanager-0.41.7}/src/general_manager/interface/interfaces/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/interfaces/database.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/interfaces/request.py
RENAMED
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/manifests/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/orm_interface.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/utils/errors.py
RENAMED
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/interface/utils/models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/management/commands/shell.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/manager/general_manager.py
RENAMED
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/manager/group_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/measurement/measurement.py
RENAMED
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/measurement/measurement_field.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/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
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/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.5 → generalmanager-0.41.7}/src/general_manager/search/backend_registry.py
RENAMED
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/backends/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/backends/meilisearch.py
RENAMED
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/search/backends/opensearch.py
RENAMED
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/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.5 → generalmanager-0.41.7}/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.5 → generalmanager-0.41.7}/src/general_manager/workflow/backend_registry.py
RENAMED
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/backends/__init__.py
RENAMED
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/backends/celery.py
RENAMED
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/backends/local.py
RENAMED
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/backends/n8n.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/src/general_manager/workflow/event_registry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.5 → generalmanager-0.41.7}/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
|