base-api-utils 1.1.117.dev3__tar.gz → 1.1.117.dev4__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.
- {base_api_utils-1.1.117.dev3/src/base_api_utils.egg-info → base_api_utils-1.1.117.dev4}/PKG-INFO +1 -1
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/pyproject.toml +1 -1
- base_api_utils-1.1.117.dev4/src/base_api_utils/__init__.py +11 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/serializers/v2/abstract_serializer.py +10 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4/src/base_api_utils.egg-info}/PKG-INFO +1 -1
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/tests/test_lazy_imports.py +34 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/tests/test_v2_abstract_serializer.py +58 -0
- base_api_utils-1.1.117.dev3/src/base_api_utils/__init__.py +0 -1
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/LICENSE +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/README.md +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/setup.cfg +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/commands/__init__.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/commands/failed_task_management_mixin.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/domain/__init__.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/domain/event_message.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/domain/event_message_factory.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/domain/events.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/dtos/__init__.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/dtos/authz_user.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/fields/__init__.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/fields/email_list_field.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/filters/__init__.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/filters/base_filter.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/filters/custom_ordering_filter.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/filters/filter_utils_mixin.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/handlers/__init__.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/handlers/base_event_handler.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/handlers/sponsor_event_handler.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/handlers/sponsorship_addon_event_handler.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/handlers/sponsorship_event_handler.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/handlers/summit_event_handler.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/ioc/__init__.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/ioc/container.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/models/__init__.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/models/item_image.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/security/__init__.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/security/abstract_access_token_service.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/security/abstract_oauth2_api_client.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/security/access_token_service.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/security/check_sponsor_user_permissions.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/security/group_required.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/security/oauth2_authentication.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/security/oauth2_client_factory.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/security/oauth2_scope_required.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/security/permission_event_handler.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/security/shared.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/security/user_permissions_service.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/serializers/__init__.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/serializers/base_model_serializer.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/serializers/email_list_char_field.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/serializers/nullable_slug_related_field.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/serializers/serializers_registry.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/serializers/task_result_serializer.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/serializers/timestamp_field.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/serializers/v2/__init__.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/serializers/v2/base_model_serializer.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/serializers/v2/expands.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/serializers/v2/query_params.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/serializers/v2/spectacular.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/services/__init__.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/services/abstract_domain_events_service.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/services/abstract_event_dispatcher.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/services/abstract_images_service.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/services/abstract_sponsor_metadata_service.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/services/abstract_storage_service.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/services/abstract_summit_metadata_service.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/services/amqp_service.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/services/celery_failed.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/services/event_dispatcher.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/services/images_service.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/services/s3_service.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/services/strategies/__init__.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/services/strategies/abstract_task_runner_strategy.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/services/strategies/publish_domain_event_strategy.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/tests/__init__.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/tests/test_failed_celery_task_management.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/tests/test_task_status_endpoints.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/urls.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/__init__.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/async_helpers.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/circuit_breaker.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/config.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/custom_auto_schema.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/db_connection_helpers.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/debounce_helpers.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/enums.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/env_var_eval.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/exceptions.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/expand_queryset_optimization_mixin.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/external_errors.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/file_lock.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/fingerprint_helpers.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/http_helpers.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/inject_job.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/look_up_value_mixin.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/model_helpers.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/oauth2_custom_schema_base.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/pagination.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/rate_utils.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/read_write_serializer_mixin.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/serializers.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/service_utils.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/string.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/tests.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/views/__init__.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/views/base_view.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/views/parent_children_crud.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/views/root_entity_crud.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/views/tasks_result_view.py +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils.egg-info/SOURCES.txt +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils.egg-info/dependency_links.txt +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils.egg-info/requires.txt +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils.egg-info/top_level.txt +0 -0
- {base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/tests/test_circuit_breaker.py +0 -0
{base_api_utils-1.1.117.dev3/src/base_api_utils.egg-info → base_api_utils-1.1.117.dev4}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: base-api-utils
|
|
3
|
-
Version: 1.1.117.
|
|
3
|
+
Version: 1.1.117.dev4
|
|
4
4
|
Summary: Django Rest Framework micro services common utilities
|
|
5
5
|
Author-email: Román Gutierrez <roman@tipit.net>, Sebastian Marcet <sebastian@tipit.net>
|
|
6
6
|
Project-URL: Homepage, https://github.com/fntechgit/base-api-utils
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
def __getattr__(name: str):
|
|
2
|
+
# Lazy import: loading private_tasks_admin_patterns eagerly chains through
|
|
3
|
+
# views → tasks_result_view → @extend_schema → DEFAULT_SCHEMA_CLASS,
|
|
4
|
+
# which causes a circular import when any consumer of this package is
|
|
5
|
+
# itself imported as DEFAULT_SCHEMA_CLASS (e.g. a custom AutoSchema
|
|
6
|
+
# subclass that inherits from base_api_utils.utils.CustomAutoSchema).
|
|
7
|
+
if name == "private_tasks_admin_patterns":
|
|
8
|
+
from .urls import private_tasks_admin_patterns
|
|
9
|
+
|
|
10
|
+
return private_tasks_admin_patterns
|
|
11
|
+
raise AttributeError(f"module 'base_api_utils' has no attribute {name!r}")
|
|
@@ -133,6 +133,16 @@ class AbstractSerializer:
|
|
|
133
133
|
# here and let the deeper constraints apply at child serializers.
|
|
134
134
|
has_explicit_leaf = any(not subtree for subtree in ft.values())
|
|
135
135
|
if not has_explicit_leaf:
|
|
136
|
+
af = self._merged_allowed_fields()
|
|
137
|
+
if af is not None:
|
|
138
|
+
allowed_keep = (
|
|
139
|
+
set(af)
|
|
140
|
+
| set(ctx.get("expand_tree", {}).keys())
|
|
141
|
+
| set(ctx.get("relations_tree", {}).keys())
|
|
142
|
+
)
|
|
143
|
+
for k in list(fields.keys()):
|
|
144
|
+
if k not in allowed_keep:
|
|
145
|
+
fields.pop(k, None)
|
|
136
146
|
return fields
|
|
137
147
|
keep = (
|
|
138
148
|
set(ft.keys())
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4/src/base_api_utils.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: base-api-utils
|
|
3
|
-
Version: 1.1.117.
|
|
3
|
+
Version: 1.1.117.dev4
|
|
4
4
|
Summary: Django Rest Framework micro services common utilities
|
|
5
5
|
Author-email: Román Gutierrez <roman@tipit.net>, Sebastian Marcet <sebastian@tipit.net>
|
|
6
6
|
Project-URL: Homepage, https://github.com/fntechgit/base-api-utils
|
|
@@ -56,3 +56,37 @@ class TestExpandQuerysetOptimizationMixinImports:
|
|
|
56
56
|
|
|
57
57
|
# query_params should NOT be loaded at module level
|
|
58
58
|
assert "base_api_utils.serializers.v2.query_params" not in sys.modules
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
@pytest.mark.unit
|
|
62
|
+
class TestBaseApiUtilsInitLazyImport:
|
|
63
|
+
"""Regression: importing base_api_utils must NOT eagerly load
|
|
64
|
+
urls → views → tasks_result_view → @extend_schema → DEFAULT_SCHEMA_CLASS.
|
|
65
|
+
That chain causes a circular import when base_api_utils is imported by
|
|
66
|
+
a custom AutoSchema subclass that is itself registered as DEFAULT_SCHEMA_CLASS.
|
|
67
|
+
|
|
68
|
+
private_tasks_admin_patterns must be accessible but only materialised on
|
|
69
|
+
first attribute access, not at package-import time.
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
def test_import_base_api_utils_does_not_load_views(self):
|
|
73
|
+
"""Importing the package must not pull in views/tasks_result_view."""
|
|
74
|
+
for key in list(sys.modules):
|
|
75
|
+
if key.startswith("base_api_utils"):
|
|
76
|
+
del sys.modules[key]
|
|
77
|
+
|
|
78
|
+
_base_dir = Path(__file__).resolve().parent.parent / "src" / "base_api_utils"
|
|
79
|
+
_load_module("base_api_utils", _base_dir / "__init__.py")
|
|
80
|
+
|
|
81
|
+
assert "base_api_utils.views" not in sys.modules
|
|
82
|
+
assert "base_api_utils.views.tasks_result_view" not in sys.modules
|
|
83
|
+
assert "base_api_utils.urls" not in sys.modules
|
|
84
|
+
|
|
85
|
+
def test_private_tasks_admin_patterns_accessible_via_getattr(self):
|
|
86
|
+
"""private_tasks_admin_patterns is reachable even with the lazy import."""
|
|
87
|
+
import base_api_utils # noqa: F401 — confirm attribute exists when accessed
|
|
88
|
+
# We can't resolve the attribute without Django apps ready (Django model
|
|
89
|
+
# registration); confirming the __getattr__ path exists is sufficient here.
|
|
90
|
+
assert hasattr(type(sys.modules["base_api_utils"]), "__getattr__") or callable(
|
|
91
|
+
getattr(sys.modules["base_api_utils"], "__getattr__", None)
|
|
92
|
+
)
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/tests/test_v2_abstract_serializer.py
RENAMED
|
@@ -140,3 +140,61 @@ class TestFilterLocalFieldsEmptyOrMissing:
|
|
|
140
140
|
fields = {"id": object(), "name": object()}
|
|
141
141
|
result = s._filter_local_fields(fields)
|
|
142
142
|
assert set(result.keys()) == {"id", "name"}
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
@pytest.mark.unit
|
|
146
|
+
class TestFilterLocalFieldsAllowedFieldsWithNavigation:
|
|
147
|
+
"""Regression (Copilot r3229018506): navigation-only fields_tree must still
|
|
148
|
+
respect allowed_fields defined on a subclass, not expose every DRF field."""
|
|
149
|
+
|
|
150
|
+
def _make(self, fields_tree, allowed_fields_list=None, expand_tree=None, relations_tree=None):
|
|
151
|
+
class _Serializer(AbstractSerializer):
|
|
152
|
+
pass
|
|
153
|
+
if allowed_fields_list is not None:
|
|
154
|
+
_Serializer.allowed_fields = allowed_fields_list
|
|
155
|
+
s = object.__new__(_Serializer)
|
|
156
|
+
s._original_context = {
|
|
157
|
+
"fields_tree": fields_tree,
|
|
158
|
+
"expand_tree": expand_tree or {},
|
|
159
|
+
"relations_tree": relations_tree or {},
|
|
160
|
+
}
|
|
161
|
+
return s
|
|
162
|
+
|
|
163
|
+
def test_navigation_only_respects_allowed_fields(self):
|
|
164
|
+
"""?fields=sample_configuration_types.id on a serializer with restricted
|
|
165
|
+
allowed_fields must not expose fields outside the allowed set."""
|
|
166
|
+
s = self._make(
|
|
167
|
+
fields_tree={"sample_configuration_types": {"id": {}}},
|
|
168
|
+
allowed_fields_list=["id", "name", "sample_configuration_types"],
|
|
169
|
+
)
|
|
170
|
+
fields = {
|
|
171
|
+
"id": object(),
|
|
172
|
+
"name": object(),
|
|
173
|
+
"sample_configuration_types": object(),
|
|
174
|
+
"internal_notes": object(),
|
|
175
|
+
"draft_flag": object(),
|
|
176
|
+
}
|
|
177
|
+
result = s._filter_local_fields(fields)
|
|
178
|
+
assert set(result.keys()) == {"id", "name", "sample_configuration_types"}
|
|
179
|
+
|
|
180
|
+
def test_navigation_key_not_in_allowed_fields_is_stripped(self):
|
|
181
|
+
"""A navigation key absent from allowed_fields is dropped when
|
|
182
|
+
allowed_fields is configured and no scalar leaf exists at this level."""
|
|
183
|
+
s = self._make(
|
|
184
|
+
fields_tree={"foo": {"bar": {}}},
|
|
185
|
+
allowed_fields_list=["id", "name"],
|
|
186
|
+
)
|
|
187
|
+
fields = {"id": object(), "name": object(), "foo": object(), "secret": object()}
|
|
188
|
+
result = s._filter_local_fields(fields)
|
|
189
|
+
assert set(result.keys()) == {"id", "name"}
|
|
190
|
+
|
|
191
|
+
def test_navigation_only_without_allowed_fields_returns_all(self):
|
|
192
|
+
"""When allowed_fields is None, navigation-only fields_tree preserves
|
|
193
|
+
all fields — existing behaviour for unrestricted serializers unchanged."""
|
|
194
|
+
s = self._make(
|
|
195
|
+
fields_tree={"foo": {"bar": {}}},
|
|
196
|
+
allowed_fields_list=None,
|
|
197
|
+
)
|
|
198
|
+
fields = {"id": object(), "name": object(), "foo": object()}
|
|
199
|
+
result = s._filter_local_fields(fields)
|
|
200
|
+
assert set(result.keys()) == {"id", "name", "foo"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
from .urls import private_tasks_admin_patterns # noqa: F401
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/commands/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/domain/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/domain/events.py
RENAMED
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/dtos/__init__.py
RENAMED
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/dtos/authz_user.py
RENAMED
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/fields/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/filters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/handlers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/ioc/__init__.py
RENAMED
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/ioc/container.py
RENAMED
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/models/__init__.py
RENAMED
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/models/item_image.py
RENAMED
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/security/__init__.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
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/security/shared.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
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/services/__init__.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
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/tests/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/enums.py
RENAMED
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/env_var_eval.py
RENAMED
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/file_lock.py
RENAMED
|
File without changes
|
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/http_helpers.py
RENAMED
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/inject_job.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/pagination.py
RENAMED
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/rate_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/serializers.py
RENAMED
|
File without changes
|
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/string.py
RENAMED
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/utils/tests.py
RENAMED
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/views/__init__.py
RENAMED
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils/views/base_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{base_api_utils-1.1.117.dev3 → base_api_utils-1.1.117.dev4}/src/base_api_utils.egg-info/requires.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|