Skip to content

Commit d6066b5

Browse files
committed
refactor
1 parent 886269d commit d6066b5

File tree

3 files changed

+38
-39
lines changed

3 files changed

+38
-39
lines changed

fastapi_jsonapi/data_layers/base.py

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@
55
"""
66

77
import types
8-
from typing import List, Optional, Tuple, Type
8+
from typing import Dict, List, Optional, Tuple, Type
99

1010
from fastapi_jsonapi.data_typing import TypeModel, TypeSchema
1111
from fastapi_jsonapi.querystring import QueryStringManager
1212
from fastapi_jsonapi.schema import BaseJSONAPIItemInSchema
13+
from fastapi_jsonapi.schema_builder import FieldConfig, TransferSaveWrapper
1314

1415

1516
class BaseDataLayer:
@@ -75,6 +76,38 @@ async def atomic_start(self, previous_dl: Optional["BaseDataLayer"] = None):
7576
async def atomic_end(self, success: bool = True):
7677
raise NotImplementedError
7778

79+
def _unwrap_field_config(self, extra: Dict):
80+
field_config_wrapper: Optional[TransferSaveWrapper] = extra.get("field_config")
81+
82+
if field_config_wrapper:
83+
return field_config_wrapper.get_field_config()
84+
85+
return FieldConfig()
86+
87+
def _apply_client_generated_id(
88+
self,
89+
data_create: BaseJSONAPIItemInSchema,
90+
model_kwargs: dict,
91+
):
92+
"""
93+
:param data_create: the data validated by pydantic.
94+
:param model_kwargs: the data validated by pydantic.
95+
"""
96+
if data_create.id is None:
97+
return model_kwargs
98+
99+
extra = data_create.__fields__["id"].field_info.extra
100+
if extra.get("client_can_set_id"):
101+
id_value = data_create.id
102+
field_config = self._unwrap_field_config(extra)
103+
104+
if field_config.cast_type:
105+
id_value = field_config.cast_type(id_value)
106+
107+
model_kwargs["id"] = id_value
108+
109+
return model_kwargs
110+
78111
async def create_object(self, data_create: BaseJSONAPIItemInSchema, view_kwargs: dict) -> TypeModel:
79112
"""
80113
Create an object

fastapi_jsonapi/data_layers/sqla_orm.py

Lines changed: 1 addition & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""This module is a CRUD interface between resource managers and the sqlalchemy ORM"""
22
import logging
3-
from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Optional, Tuple, Type
3+
from typing import TYPE_CHECKING, Any, Iterable, List, Optional, Tuple, Type
44

55
from sqlalchemy import delete, func, select
66
from sqlalchemy.exc import DBAPIError, IntegrityError, NoResultFound
@@ -32,7 +32,6 @@
3232
get_related_schema,
3333
)
3434
from fastapi_jsonapi.schema_base import RelationshipInfo
35-
from fastapi_jsonapi.schema_builder import FieldConfig, TransferSaveWrapper
3635
from fastapi_jsonapi.splitter import SPLIT_REL
3736
from fastapi_jsonapi.utils.sqla import get_related_model_cls
3837

@@ -185,38 +184,6 @@ async def apply_relationships(self, obj: TypeModel, data_create: BaseJSONAPIItem
185184
# todo: relation name may be different?
186185
setattr(obj, relation_name, related_data)
187186

188-
def _unwrap_field_config(self, extra: Dict):
189-
field_config_wrapper: TransferSaveWrapper = extra.get("field_config")
190-
191-
if field_config_wrapper:
192-
return field_config_wrapper.field_config
193-
194-
return FieldConfig()
195-
196-
def _apply_client_generated_id(
197-
self,
198-
data_create: BaseJSONAPIItemInSchema,
199-
model_kwargs: dict,
200-
):
201-
"""
202-
:param data_create: the data validated by pydantic.
203-
:param model_kwargs: the data validated by pydantic.
204-
"""
205-
if data_create.id is None:
206-
return model_kwargs
207-
208-
extra = data_create.__fields__["id"].field_info.extra
209-
if extra.get("client_can_set_id"):
210-
id_value = data_create.id
211-
field_config = self._unwrap_field_config(extra)
212-
213-
if field_config.cast_type:
214-
id_value = field_config.cast_type(id_value)
215-
216-
model_kwargs["id"] = id_value
217-
218-
return model_kwargs
219-
220187
async def create_object(self, data_create: BaseJSONAPIItemInSchema, view_kwargs: dict) -> TypeModel:
221188
"""
222189
Create an object through sqlalchemy.

fastapi_jsonapi/schema_builder.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,10 @@ class TransferSaveWrapper:
6262
"""
6363

6464
def __init__(self, field_config: FieldConfig):
65-
self.get_config = lambda: field_config
65+
def get_field_config() -> FieldConfig:
66+
return field_config
6667

67-
@property
68-
def field_config(self) -> FieldConfig:
69-
return self.get_config()
68+
self.get_field_config = get_field_config
7069

7170

7271
@dataclass(frozen=True)

0 commit comments

Comments
 (0)