base-api-utils 1.1.110.dev1__py3-none-any.whl → 1.1.111.dev1__py3-none-any.whl

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.
@@ -1,2 +1,7 @@
1
1
  from .abstract_serializer import AbstractSerializer
2
- from .base_model_serializer import BaseModelSerializer
2
+ from .base_model_serializer import BaseModelSerializer
3
+
4
+ try:
5
+ import base_api_utils.serializers.v2.spectacular # noqa: F401
6
+ except ImportError:
7
+ pass # drf-spectacular not installed
@@ -0,0 +1,54 @@
1
+ from drf_spectacular.extensions import OpenApiSerializerExtension
2
+
3
+
4
+ class ExpandMappingSerializerExtension(OpenApiSerializerExtension):
5
+ """Generate OpenAPI schemas with all expand_mappings expanded.
6
+
7
+ Without this extension, drf-spectacular calls get_fields() on our serializers
8
+ without request context, which collapses all relations to ID fields. This
9
+ extension builds a synthetic "all expanded" context so the schema shows
10
+ nested serializer types ($ref) instead of integer IDs.
11
+ """
12
+
13
+ target_class = (
14
+ "base_api_utils.serializers.v2.base_model_serializer.AbstractSerializer"
15
+ )
16
+ match_subclasses = True
17
+
18
+ def map_serializer(self, auto_schema, direction):
19
+ serializer = self.target
20
+ mappings = serializer._merged_expand_mappings()
21
+
22
+ # Leaf serializers (no expand_mappings) — delegate to default handling
23
+ if not mappings:
24
+ return auto_schema._map_serializer(serializer, direction, bypass_extensions=True)
25
+
26
+ # Build synthetic context with all relations expanded
27
+ expand_tree = {}
28
+ for attr, spec in mappings.items():
29
+ child_serializer_cls = spec["serializer"]
30
+ child_mappings = {}
31
+ # Build child expand tree from the child serializer's own mappings
32
+ if hasattr(child_serializer_cls, "_merged_expand_mappings"):
33
+ try:
34
+ child_instance = child_serializer_cls(context={})
35
+ child_mappings = child_instance._merged_expand_mappings()
36
+ except Exception:
37
+ pass
38
+ expand_tree[attr] = {k: {} for k in child_mappings}
39
+
40
+ relations_tree = {attr: {} for attr in mappings}
41
+ # Also include any allowed_relations not covered by expand_mappings
42
+ for rel in serializer._merged_allowed_relations():
43
+ if rel not in relations_tree:
44
+ relations_tree[rel] = {}
45
+
46
+ context = {
47
+ "expand_tree": expand_tree,
48
+ "fields_tree": None,
49
+ "relations_tree": relations_tree,
50
+ }
51
+
52
+ # Create a new instance with the synthetic context
53
+ expanded = serializer.__class__(context=context)
54
+ return auto_schema._map_serializer(expanded, direction, bypass_extensions=True)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: base-api-utils
3
- Version: 1.1.110.dev1
3
+ Version: 1.1.111.dev1
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
@@ -43,11 +43,12 @@ base_api_utils/serializers/nullable_slug_related_field.py,sha256=drNIpKoDps2DOYR
43
43
  base_api_utils/serializers/serializers_registry.py,sha256=V4teS5tCNQ2WdzN-tYNJSMp4QK97lyO3TA5_xyPo2BY,758
44
44
  base_api_utils/serializers/task_result_serializer.py,sha256=oUqD9EDQr2oxyIpgZJ1lpSGKF5Vhhy25TOQUCGTPqFY,218
45
45
  base_api_utils/serializers/timestamp_field.py,sha256=uZXbJ7BnabJylSZPt_dQEUBuT_XL3khhGjzJ08ji-DY,682
46
- base_api_utils/serializers/v2/__init__.py,sha256=7PIk2k7whEtLNoHN-G7ScU4YgKmpvyEj-NC0dpuLnZI,106
46
+ base_api_utils/serializers/v2/__init__.py,sha256=hOWxvmFSrKpkB19x3MPz37Pz1BjJqaymqs5Dt6m4_fA,241
47
47
  base_api_utils/serializers/v2/abstract_serializer.py,sha256=OwRfK9VIV4Y0ybB0j8xQawM-_ac1L1q8KXGDE45i6kY,6370
48
48
  base_api_utils/serializers/v2/base_model_serializer.py,sha256=S9AO0GXUcOvA6wCO88VoSSVFHBwe2fFAHZe4gmZKn6M,720
49
49
  base_api_utils/serializers/v2/expands.py,sha256=2wp34usPZ7Bvr-yhEgkTrV8D-uSJTDpruEVNSXzm4Bc,4555
50
50
  base_api_utils/serializers/v2/query_params.py,sha256=6b6rnV0Ye37xWun72x7zHKtspWzn4tdf2gVaFEaqp9M,1821
51
+ base_api_utils/serializers/v2/spectacular.py,sha256=a7Z4o9uoMddnyQ1DT4dTrUp5s-U0GZ93twIc0PAWo64,2281
51
52
  base_api_utils/services/__init__.py,sha256=9ftsKre12VuQTYCzSilvJ8gFJXaKtJ1L87hYPdVr-5k,708
52
53
  base_api_utils/services/abstract_domain_events_service.py,sha256=iD49zg8IKZ8t0OQ5i5rgJLmttksifR4eDSJpSwDxiJM,311
53
54
  base_api_utils/services/abstract_event_dispatcher.py,sha256=nX8N79vPtqxEezbVxxNEAl4cOxwwUM0mjc6T_-8CJRE,195
@@ -96,8 +97,8 @@ base_api_utils/views/base_view.py,sha256=A49KZr03qxjBQvCLLdtbg4s3f9Gn9C63gwcpme2
96
97
  base_api_utils/views/parent_children_crud.py,sha256=79vB044kmY9kefb6YxekPriO3FKYV85zn3PgCmSSKFw,3261
97
98
  base_api_utils/views/root_entity_crud.py,sha256=eIhZfjouNxYAVIfGPuEPp80b50hM2CAG_L0nh6-Gdjw,2830
98
99
  base_api_utils/views/tasks_result_view.py,sha256=__i1_uG73-YgL61ZMyldfcMTrpP3sTSLBnzEh-GD5Cs,1575
99
- base_api_utils-1.1.110.dev1.dist-info/licenses/LICENSE,sha256=JKqaWBs87qnqDsZ1EEF0gnWR2iSAh92F9TJ7tqg2OwQ,547
100
- base_api_utils-1.1.110.dev1.dist-info/METADATA,sha256=FkuH_KQZVPb2FGQx8QinnohrNqFO6o5aLNDBz_s0XnU,2386
101
- base_api_utils-1.1.110.dev1.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
102
- base_api_utils-1.1.110.dev1.dist-info/top_level.txt,sha256=uRTtK_DlttSQ1sVajv2TKZy5XLVWawLxi2PUU-uCR7A,15
103
- base_api_utils-1.1.110.dev1.dist-info/RECORD,,
100
+ base_api_utils-1.1.111.dev1.dist-info/licenses/LICENSE,sha256=JKqaWBs87qnqDsZ1EEF0gnWR2iSAh92F9TJ7tqg2OwQ,547
101
+ base_api_utils-1.1.111.dev1.dist-info/METADATA,sha256=C3-GuWvEv4Bj9hnVF0dRiKo-HW2U__rpyCU-j4ig0zg,2386
102
+ base_api_utils-1.1.111.dev1.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
103
+ base_api_utils-1.1.111.dev1.dist-info/top_level.txt,sha256=uRTtK_DlttSQ1sVajv2TKZy5XLVWawLxi2PUU-uCR7A,15
104
+ base_api_utils-1.1.111.dev1.dist-info/RECORD,,