base-api-utils 1.1.111.dev3__py3-none-any.whl → 1.1.111.dev5__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.
@@ -13,7 +13,6 @@ class ExpandMapping:
13
13
  original_attribute: str | None = None
14
14
  source: str | None = None
15
15
  verify_relation: bool = False
16
- schema_override: type | None = None
17
16
 
18
17
  @property
19
18
  def source_kwargs(self) -> dict:
@@ -87,17 +86,6 @@ class One2ManyExpandSerializer(IExpandSerializer):
87
86
  fields[fk] = serializers.IntegerField(read_only=True)
88
87
 
89
88
 
90
- class _IDListField(serializers.Field):
91
- """Runtime: returns list of PKs. Schema: annotated externally via _spectacular_annotation."""
92
- def to_representation(self, value):
93
- if hasattr(value, 'all'):
94
- return [item.pk for item in value.all()]
95
- return [item.pk for item in value]
96
-
97
- def to_internal_value(self, data):
98
- return data
99
-
100
-
101
89
  class Many2OneExpandSerializer(IExpandSerializer):
102
90
  # to-many: keep same key; not expanded => list[int]; expanded => list[object]
103
91
  def apply(self, *, fields: dict, mapping: ExpandMapping, context: dict) -> None:
@@ -116,6 +104,9 @@ class Many2OneExpandSerializer(IExpandSerializer):
116
104
  mapping.verify_relation,
117
105
  )
118
106
 
107
+ if attr not in fields:
108
+ return
109
+
119
110
  if do_expand:
120
111
  fields[attr] = mapping.serializer(
121
112
  many=True,
@@ -124,9 +115,8 @@ class Many2OneExpandSerializer(IExpandSerializer):
124
115
  **mapping.source_kwargs,
125
116
  )
126
117
  else:
127
- if attr not in fields:
128
- return
129
- schema_cls = mapping.schema_override or mapping.serializer
130
- id_field = _IDListField(read_only=True, **mapping.source_kwargs)
131
- id_field._spectacular_annotation = {"field": schema_cls(many=True, read_only=True)}
132
- fields[attr] = id_field
118
+ fields[attr] = serializers.PrimaryKeyRelatedField(
119
+ many=True,
120
+ read_only=True,
121
+ **mapping.source_kwargs,
122
+ )
@@ -1,7 +1,5 @@
1
1
  from drf_spectacular.extensions import OpenApiSerializerExtension
2
2
 
3
- from .abstract_serializer import AbstractSerializer
4
-
5
3
 
6
4
  class ExpandMappingSerializerExtension(OpenApiSerializerExtension):
7
5
  """Generate OpenAPI schemas with all expand_mappings expanded.
@@ -12,7 +10,9 @@ class ExpandMappingSerializerExtension(OpenApiSerializerExtension):
12
10
  nested serializer types ($ref) instead of integer IDs.
13
11
  """
14
12
 
15
- target_class = AbstractSerializer
13
+ target_class = (
14
+ "base_api_utils.serializers.v2.abstract_serializer.AbstractSerializer"
15
+ )
16
16
  match_subclasses = True
17
17
 
18
18
  def map_serializer(self, auto_schema, direction):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: base-api-utils
3
- Version: 1.1.111.dev3
3
+ Version: 1.1.111.dev5
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
@@ -46,9 +46,9 @@ base_api_utils/serializers/timestamp_field.py,sha256=uZXbJ7BnabJylSZPt_dQEUBuT_X
46
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
- base_api_utils/serializers/v2/expands.py,sha256=DtZDInbyEmriLx7LOzd-dE0coly9IDCKY7uOSlO82v4,4562
49
+ base_api_utils/serializers/v2/expands.py,sha256=ihfWTDeFusCrSBO6t89-lGCETiDjQf7CCewIqK6jOK0,4043
50
50
  base_api_utils/serializers/v2/query_params.py,sha256=6b6rnV0Ye37xWun72x7zHKtspWzn4tdf2gVaFEaqp9M,1821
51
- base_api_utils/serializers/v2/spectacular.py,sha256=sk9fpqS0CSwJXS2z03Jz0pAInzrb2MxWa8dpJUuqBbE,2264
51
+ base_api_utils/serializers/v2/spectacular.py,sha256=0A7QVyto_vbFFgU7KS-1kz8ui4SHKFOXRaN-LLQ2WeE,2279
52
52
  base_api_utils/services/__init__.py,sha256=9ftsKre12VuQTYCzSilvJ8gFJXaKtJ1L87hYPdVr-5k,708
53
53
  base_api_utils/services/abstract_domain_events_service.py,sha256=iD49zg8IKZ8t0OQ5i5rgJLmttksifR4eDSJpSwDxiJM,311
54
54
  base_api_utils/services/abstract_event_dispatcher.py,sha256=nX8N79vPtqxEezbVxxNEAl4cOxwwUM0mjc6T_-8CJRE,195
@@ -97,8 +97,8 @@ base_api_utils/views/base_view.py,sha256=A49KZr03qxjBQvCLLdtbg4s3f9Gn9C63gwcpme2
97
97
  base_api_utils/views/parent_children_crud.py,sha256=79vB044kmY9kefb6YxekPriO3FKYV85zn3PgCmSSKFw,3261
98
98
  base_api_utils/views/root_entity_crud.py,sha256=eIhZfjouNxYAVIfGPuEPp80b50hM2CAG_L0nh6-Gdjw,2830
99
99
  base_api_utils/views/tasks_result_view.py,sha256=__i1_uG73-YgL61ZMyldfcMTrpP3sTSLBnzEh-GD5Cs,1575
100
- base_api_utils-1.1.111.dev3.dist-info/licenses/LICENSE,sha256=JKqaWBs87qnqDsZ1EEF0gnWR2iSAh92F9TJ7tqg2OwQ,547
101
- base_api_utils-1.1.111.dev3.dist-info/METADATA,sha256=zNn0uurarmuOpYAj07AX5GOxBRUG49dtOwIjLRbVT98,2386
102
- base_api_utils-1.1.111.dev3.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
103
- base_api_utils-1.1.111.dev3.dist-info/top_level.txt,sha256=uRTtK_DlttSQ1sVajv2TKZy5XLVWawLxi2PUU-uCR7A,15
104
- base_api_utils-1.1.111.dev3.dist-info/RECORD,,
100
+ base_api_utils-1.1.111.dev5.dist-info/licenses/LICENSE,sha256=JKqaWBs87qnqDsZ1EEF0gnWR2iSAh92F9TJ7tqg2OwQ,547
101
+ base_api_utils-1.1.111.dev5.dist-info/METADATA,sha256=dWUyNy4P-MM8C3lQo-G9fJUSIqP6YGgLhKUHwXIWksc,2386
102
+ base_api_utils-1.1.111.dev5.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
103
+ base_api_utils-1.1.111.dev5.dist-info/top_level.txt,sha256=uRTtK_DlttSQ1sVajv2TKZy5XLVWawLxi2PUU-uCR7A,15
104
+ base_api_utils-1.1.111.dev5.dist-info/RECORD,,