GeneralManager 0.41.0__tar.gz → 0.41.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {generalmanager-0.41.0/src/GeneralManager.egg-info → generalmanager-0.41.2}/PKG-INFO +1 -1
- {generalmanager-0.41.0 → generalmanager-0.41.2}/pyproject.toml +1 -1
- {generalmanager-0.41.0 → generalmanager-0.41.2/src/GeneralManager.egg-info}/PKG-INFO +1 -1
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/orm_utils/field_descriptors.py +61 -2
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/measurement/measurement.py +46 -1
- {generalmanager-0.41.0 → generalmanager-0.41.2}/LICENSE +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/README.md +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/setup.cfg +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/GeneralManager.egg-info/SOURCES.txt +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/GeneralManager.egg-info/dependency_links.txt +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/GeneralManager.egg-info/requires.txt +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/GeneralManager.egg-info/top_level.txt +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/_types/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/_types/api.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/_types/bucket.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/_types/cache.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/_types/factory.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/_types/general_manager.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/_types/interface.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/_types/manager.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/_types/measurement.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/_types/permission.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/_types/rule.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/_types/search.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/_types/utils.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/api/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/api/graphql.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/api/graphql_errors.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/api/graphql_mutations.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/api/graphql_resolvers.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/api/graphql_search.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/api/graphql_subscription_consumer.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/api/graphql_subscriptions.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/api/graphql_view.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/api/mutation.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/api/property.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/api/registry.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/api/remote_api.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/api/remote_invalidation.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/api/remote_invalidation_client.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/apps.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/bootstrap.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/bucket/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/bucket/base_bucket.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/bucket/calculation_bucket.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/bucket/database_bucket.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/bucket/group_bucket.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/bucket/request_bucket.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/cache/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/cache/cache_decorator.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/cache/cache_tracker.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/cache/dependency_index.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/cache/model_dependency_collector.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/cache/signals.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/conf.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/factory/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/factory/auto_factory.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/factory/factories.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/factory/factory_methods.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/base_interface.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/bundles/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/bundles/calculation.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/bundles/database.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/bundles/remote_manager.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/bundles/request.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/base.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/builtin.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/calculation/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/calculation/_compat.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/calculation/lifecycle.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/configuration.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/core/observability.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/core/utils.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/exceptions.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/existing_model/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/existing_model/_compat.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/existing_model/resolution.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/factory.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/orm/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/orm/_compat.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/orm/history.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/orm/lifecycle.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/orm/mutations.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/orm/support.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/orm_utils/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/orm_utils/django_manager_utils.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/orm_utils/payload_normalizer.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/read_only/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/read_only/_compat.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/read_only/lifecycle.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/read_only/management.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/registry.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/remote_manager.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/capabilities/request/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/infrastructure/startup_hooks.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/infrastructure/system_checks.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/interfaces/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/interfaces/calculation.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/interfaces/database.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/interfaces/existing_model.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/interfaces/read_only.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/interfaces/remote_manager.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/interfaces/request.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/manifests/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/manifests/capability_builder.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/manifests/capability_manifest.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/manifests/capability_models.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/orm_interface.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/requests.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/utils/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/utils/database_interface_protocols.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/utils/errors.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/utils/models.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/logging.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/management/commands/search_index.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/management/commands/seed_manager_landscape.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/management/commands/shell.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/management/commands/workflow_drain_outbox.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/management/commands/workflow_replay_dead_letters.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/manager/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/manager/general_manager.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/manager/group_manager.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/manager/input.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/manager/meta.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/measurement/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/measurement/measurement_field.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/metrics/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/metrics/graphql.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/migrations/0001_initial.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/migrations/0002_workflow_outbox_scaling_indexes.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/migrations/0003_workflow_execution_correlation_constraint.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/migrations/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/models.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/permission/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/permission/audit.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/permission/base_permission.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/permission/graphql_capabilities.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/permission/manager_based_permission.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/permission/mutation_permission.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/permission/permission_checks.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/permission/permission_data_manager.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/permission/utils.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/public_api_registry.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/py.typed +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/rule/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/rule/handler.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/rule/rule.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/search/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/search/async_tasks.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/search/backend.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/search/backend_registry.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/search/backends/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/search/backends/dev.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/search/backends/meilisearch.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/search/backends/opensearch.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/search/backends/typesense.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/search/config.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/search/indexer.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/search/registry.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/search/utils.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/seeding/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/seeding/manager_landscape.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/utils/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/utils/args_to_kwargs.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/utils/filter_parser.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/utils/format_string.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/utils/json_encoder.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/utils/make_cache_key.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/utils/none_to_zero.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/utils/path_mapping.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/utils/public_api.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/utils/testing.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/utils/type_checks.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/workflow/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/workflow/actions.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/workflow/backend_registry.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/workflow/backends/__init__.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/workflow/backends/celery.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/workflow/backends/local.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/workflow/backends/n8n.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/workflow/config.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/workflow/engine.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/workflow/event_registry.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/workflow/events.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/workflow/models.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/workflow/signal_bridge.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/workflow/tasks.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/workflow/telemetry.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/tests/test_settings.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/tests/test_urls.py +0 -0
- {generalmanager-0.41.0 → generalmanager-0.41.2}/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.2
|
|
4
4
|
Summary: Modular Django-based data management framework with ORM, GraphQL, fine-grained permissions, rule validation, calculations and caching.
|
|
5
5
|
Author-email: Tim Kleindick <tkleindick@yahoo.de>
|
|
6
6
|
License: MIT License
|
|
@@ -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.2"
|
|
8
8
|
description = "Modular Django-based data management framework with ORM, GraphQL, fine-grained permissions, rule validation, calculations and caching."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [{ name = "Tim Kleindick", email = "tkleindick@yahoo.de" }]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: GeneralManager
|
|
3
|
-
Version: 0.41.
|
|
3
|
+
Version: 0.41.2
|
|
4
4
|
Summary: Modular Django-based data management framework with ORM, GraphQL, fine-grained permissions, rule validation, calculations and caching.
|
|
5
5
|
Author-email: Tim Kleindick <tkleindick@yahoo.de>
|
|
6
6
|
License: MIT License
|
|
@@ -11,6 +11,7 @@ from uuid import UUID
|
|
|
11
11
|
|
|
12
12
|
from django.apps import apps
|
|
13
13
|
from django.contrib.contenttypes.fields import GenericForeignKey
|
|
14
|
+
from django.core.exceptions import ObjectDoesNotExist
|
|
14
15
|
from django.db import models
|
|
15
16
|
|
|
16
17
|
from general_manager.interface.base_interface import AttributeTypedDict
|
|
@@ -135,6 +136,7 @@ class _FieldDescriptorBuilder:
|
|
|
135
136
|
self._add_custom_fields()
|
|
136
137
|
self._add_model_fields()
|
|
137
138
|
self._add_foreign_key_fields()
|
|
139
|
+
self._add_reverse_one_to_one_relations()
|
|
138
140
|
self._add_collection_relations()
|
|
139
141
|
return self._descriptors
|
|
140
142
|
|
|
@@ -209,6 +211,41 @@ class _FieldDescriptorBuilder:
|
|
|
209
211
|
filter_lookup=field.name,
|
|
210
212
|
)
|
|
211
213
|
|
|
214
|
+
def _add_reverse_one_to_one_relations(self) -> None:
|
|
215
|
+
"""Register snake_case aliases for reverse one-to-one relation accessors."""
|
|
216
|
+
for relation in _iter_reverse_one_to_one_relations(self.model):
|
|
217
|
+
related_model = self._resolve_related_model(
|
|
218
|
+
getattr(relation, "related_model", None)
|
|
219
|
+
)
|
|
220
|
+
if related_model is None:
|
|
221
|
+
continue
|
|
222
|
+
accessor_name = relation.get_accessor_name() or relation.name
|
|
223
|
+
attribute_name = _to_snake_case(related_model.__name__)
|
|
224
|
+
if attribute_name in self._descriptors:
|
|
225
|
+
continue
|
|
226
|
+
general_manager_class = getattr(
|
|
227
|
+
related_model, "_general_manager_class", None
|
|
228
|
+
)
|
|
229
|
+
if general_manager_class:
|
|
230
|
+
accessor = _general_manager_accessor(
|
|
231
|
+
accessor_name, general_manager_class
|
|
232
|
+
)
|
|
233
|
+
relation_type = cast(type, general_manager_class)
|
|
234
|
+
else:
|
|
235
|
+
accessor = _instance_attribute_accessor(accessor_name)
|
|
236
|
+
relation_type = cast(type, related_model)
|
|
237
|
+
self._register(
|
|
238
|
+
attribute_name=attribute_name,
|
|
239
|
+
raw_type=relation_type,
|
|
240
|
+
is_required=False,
|
|
241
|
+
is_editable=False,
|
|
242
|
+
default=None,
|
|
243
|
+
is_derived=True,
|
|
244
|
+
accessor=accessor,
|
|
245
|
+
relation_kind="direct",
|
|
246
|
+
filter_lookup=relation.name,
|
|
247
|
+
)
|
|
248
|
+
|
|
212
249
|
def _add_collection_relations(self) -> None:
|
|
213
250
|
"""
|
|
214
251
|
Register collection relation field descriptors for the builder's model.
|
|
@@ -521,6 +558,22 @@ def _iter_many_to_many_fields(
|
|
|
521
558
|
yield cast(models.Field, field)
|
|
522
559
|
|
|
523
560
|
|
|
561
|
+
def _iter_reverse_one_to_one_relations(
|
|
562
|
+
model: type[models.Model],
|
|
563
|
+
) -> Iterable[models.OneToOneRel]:
|
|
564
|
+
"""Yield reverse one-to-one relations declared on a Django model."""
|
|
565
|
+
meta = getattr(model, "_meta", None)
|
|
566
|
+
get_fields = getattr(meta, "get_fields", None)
|
|
567
|
+
if not callable(get_fields):
|
|
568
|
+
return
|
|
569
|
+
for field in get_fields():
|
|
570
|
+
if getattr(field, "is_relation", False) and getattr(field, "one_to_one", False):
|
|
571
|
+
if getattr(field, "auto_created", False) and not getattr(
|
|
572
|
+
field, "concrete", False
|
|
573
|
+
):
|
|
574
|
+
yield cast(models.OneToOneRel, field)
|
|
575
|
+
|
|
576
|
+
|
|
524
577
|
def _iter_reverse_relations(
|
|
525
578
|
model: type[models.Model],
|
|
526
579
|
) -> Iterable[models.ManyToOneRel]:
|
|
@@ -558,7 +611,10 @@ def _instance_attribute_accessor(field_name: str) -> DescriptorAccessor:
|
|
|
558
611
|
Returns:
|
|
559
612
|
The attribute value retrieved from the underlying model instance.
|
|
560
613
|
"""
|
|
561
|
-
|
|
614
|
+
try:
|
|
615
|
+
return getattr(self._instance, field_name)
|
|
616
|
+
except ObjectDoesNotExist:
|
|
617
|
+
return None
|
|
562
618
|
|
|
563
619
|
return getter
|
|
564
620
|
|
|
@@ -584,7 +640,10 @@ def _general_manager_accessor(
|
|
|
584
640
|
Returns:
|
|
585
641
|
The value produced by calling `manager_class` with the related object's primary key, or `None` if the related object is `None`.
|
|
586
642
|
"""
|
|
587
|
-
|
|
643
|
+
try:
|
|
644
|
+
related = getattr(self._instance, field_name)
|
|
645
|
+
except ObjectDoesNotExist:
|
|
646
|
+
return None
|
|
588
647
|
if related is None:
|
|
589
648
|
return None
|
|
590
649
|
return manager_class(related.pk)
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/measurement/measurement.py
RENAMED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# units.py
|
|
4
4
|
from __future__ import annotations
|
|
5
|
-
from typing import Any, Callable
|
|
5
|
+
from typing import Any, Callable, cast
|
|
6
6
|
import math
|
|
7
7
|
import pint
|
|
8
8
|
from decimal import Decimal, getcontext, InvalidOperation
|
|
@@ -104,6 +104,27 @@ def _convert_quantity(quantity: PlainQuantity, target_unit: str) -> PlainQuantit
|
|
|
104
104
|
return source_quantity.to(target_unit)
|
|
105
105
|
|
|
106
106
|
|
|
107
|
+
def _currency_component(unit: str) -> tuple[str, int] | None:
|
|
108
|
+
"""Return the single configured currency component in a unit expression."""
|
|
109
|
+
|
|
110
|
+
parsed_unit = ureg.parse_units(str(unit))
|
|
111
|
+
currency_components = [
|
|
112
|
+
(unit_name, int(cast(Any, power)))
|
|
113
|
+
for unit_name, power in parsed_unit._units.items()
|
|
114
|
+
if unit_name in currency_units
|
|
115
|
+
]
|
|
116
|
+
if len(currency_components) != 1:
|
|
117
|
+
return None
|
|
118
|
+
return currency_components[0]
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def _unit_without_currency(unit: str, currency: str, power: int) -> str:
|
|
122
|
+
"""Return a unit expression with one currency component removed."""
|
|
123
|
+
|
|
124
|
+
stripped_unit = ureg.parse_units(str(unit)) / (ureg.parse_units(currency) ** power)
|
|
125
|
+
return str(stripped_unit)
|
|
126
|
+
|
|
127
|
+
|
|
107
128
|
def convert_magnitude(value: Decimal, source_unit: str, target_unit: str) -> Decimal:
|
|
108
129
|
"""
|
|
109
130
|
Convert a magnitude between units while keeping offset-unit math away from Decimal.
|
|
@@ -457,6 +478,30 @@ class Measurement:
|
|
|
457
478
|
Raises:
|
|
458
479
|
MissingExchangeRateError: If converting between two different currencies without providing an exchange rate.
|
|
459
480
|
"""
|
|
481
|
+
source_currency = _currency_component(self.unit)
|
|
482
|
+
target_currency = _currency_component(target_unit)
|
|
483
|
+
if (
|
|
484
|
+
source_currency is not None
|
|
485
|
+
and target_currency is not None
|
|
486
|
+
and source_currency[0] != target_currency[0]
|
|
487
|
+
):
|
|
488
|
+
if exchange_rate is None:
|
|
489
|
+
raise MissingExchangeRateError()
|
|
490
|
+
source_currency_name, source_currency_power = source_currency
|
|
491
|
+
target_currency_name, target_currency_power = target_currency
|
|
492
|
+
if source_currency_power == target_currency_power:
|
|
493
|
+
value = convert_magnitude(
|
|
494
|
+
self.magnitude,
|
|
495
|
+
_unit_without_currency(
|
|
496
|
+
self.unit, source_currency_name, source_currency_power
|
|
497
|
+
),
|
|
498
|
+
_unit_without_currency(
|
|
499
|
+
target_unit, target_currency_name, target_currency_power
|
|
500
|
+
),
|
|
501
|
+
)
|
|
502
|
+
value *= Decimal(str(exchange_rate)) ** source_currency_power
|
|
503
|
+
return Measurement(value, target_unit)
|
|
504
|
+
|
|
460
505
|
if self.is_currency():
|
|
461
506
|
if str(self.unit) == str(target_unit):
|
|
462
507
|
return self # Same currency, no conversion needed
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/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.0 → generalmanager-0.41.2}/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.0 → generalmanager-0.41.2}/src/general_manager/api/graphql_mutations.py
RENAMED
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/api/graphql_resolvers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/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.0 → generalmanager-0.41.2}/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.0 → generalmanager-0.41.2}/src/general_manager/bucket/calculation_bucket.py
RENAMED
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/bucket/database_bucket.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/bucket/request_bucket.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/cache/cache_decorator.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/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.0 → generalmanager-0.41.2}/src/general_manager/factory/factory_methods.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/base_interface.py
RENAMED
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/bundles/__init__.py
RENAMED
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/bundles/calculation.py
RENAMED
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/bundles/database.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/bundles/request.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/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.0 → generalmanager-0.41.2}/src/general_manager/interface/interfaces/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/interfaces/database.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/interfaces/request.py
RENAMED
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/manifests/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/orm_interface.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/utils/errors.py
RENAMED
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/interface/utils/models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/management/commands/shell.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/manager/general_manager.py
RENAMED
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/manager/group_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/measurement/measurement_field.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/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.0 → generalmanager-0.41.2}/src/general_manager/permission/base_permission.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/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.0 → generalmanager-0.41.2}/src/general_manager/search/backend_registry.py
RENAMED
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/search/backends/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/search/backends/meilisearch.py
RENAMED
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/search/backends/opensearch.py
RENAMED
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/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.0 → generalmanager-0.41.2}/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.0 → generalmanager-0.41.2}/src/general_manager/workflow/backend_registry.py
RENAMED
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/workflow/backends/__init__.py
RENAMED
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/workflow/backends/celery.py
RENAMED
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/workflow/backends/local.py
RENAMED
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/workflow/backends/n8n.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/src/general_manager/workflow/event_registry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{generalmanager-0.41.0 → generalmanager-0.41.2}/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
|