Skip to content

Commit a447605

Browse files
committed
added schemas and fixture helper
1 parent 2fac686 commit a447605

File tree

2 files changed

+111
-1
lines changed

2 files changed

+111
-1
lines changed

tests/fixtures/app.py

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
from pathlib import Path
2-
from typing import Type
2+
from typing import Optional, Type
33

44
import pytest
55
from fastapi import APIRouter, FastAPI
6+
from pydantic import BaseModel
67

78
from fastapi_jsonapi import RoutersJSONAPI, init
89
from fastapi_jsonapi.atomic import AtomicOperations
10+
from fastapi_jsonapi.data_typing import TypeModel
911
from fastapi_jsonapi.views.detail_view import DetailViewBase
1012
from fastapi_jsonapi.views.list_view import ListViewBase
1113
from tests.fixtures.views import (
@@ -245,3 +247,43 @@ def build_app_custom(
245247
app.include_router(atomic.router, prefix="")
246248
init(app)
247249
return app
250+
251+
252+
class ResourceInfoDTO(BaseModel):
253+
path: str
254+
resource_type: str
255+
model: Type[TypeModel]
256+
schema_: Type[BaseModel]
257+
schema_in_patch: Optional[BaseModel] = None
258+
schema_in_post: Optional[BaseModel] = None
259+
class_list: Type[ListViewBase] = ListViewBaseGeneric
260+
class_detail: Type[DetailViewBase] = DetailViewBaseGeneric
261+
262+
class Config:
263+
arbitrary_types_allowed = True
264+
265+
266+
def build_custom_app_by_schemas(resources_info: list[ResourceInfoDTO]):
267+
router: APIRouter = APIRouter()
268+
269+
for info in resources_info:
270+
RoutersJSONAPI(
271+
router=router,
272+
path=info.path,
273+
tags=["Misc"],
274+
class_list=info.class_list,
275+
class_detail=info.class_detail,
276+
schema=info.schema_,
277+
resource_type=info.resource_type,
278+
schema_in_patch=info.schema_in_patch,
279+
schema_in_post=info.schema_in_post,
280+
model=info.model,
281+
)
282+
283+
app = build_app_plain()
284+
app.include_router(router, prefix="")
285+
286+
atomic = AtomicOperations()
287+
app.include_router(atomic.router, prefix="")
288+
init(app)
289+
return app

tests/schemas.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,3 +412,71 @@ class SelfRelationshipSchema(BaseModel):
412412
class CustomUserAttributesSchema(UserBaseSchema):
413413
spam: str
414414
eggs: str
415+
416+
417+
class AlphaSchema(BaseModel):
418+
beta: Optional["BetaSchema"] = Field(
419+
relationship=RelationshipInfo(
420+
resource_type="beta",
421+
),
422+
)
423+
gamma: Optional["GammaSchema"] = Field(
424+
relationship=RelationshipInfo(
425+
resource_type="gamma",
426+
),
427+
)
428+
429+
430+
class BetaSchema(BaseModel):
431+
alphas: Optional["AlphaSchema"] = Field(
432+
relationship=RelationshipInfo(
433+
resource_type="alpha",
434+
),
435+
)
436+
gammas: Optional["GammaSchema"] = Field(
437+
None,
438+
relationship=RelationshipInfo(
439+
resource_type="gamma",
440+
many=True,
441+
),
442+
)
443+
deltas: Optional["DeltaSchema"] = Field(
444+
None,
445+
relationship=RelationshipInfo(
446+
resource_type="delta",
447+
many=True,
448+
),
449+
)
450+
451+
452+
class GammaSchema(BaseModel):
453+
betas: Optional["BetaSchema"] = Field(
454+
None,
455+
relationship=RelationshipInfo(
456+
resource_type="beta",
457+
many=True,
458+
),
459+
)
460+
delta: Optional["DeltaSchema"] = Field(
461+
None,
462+
relationship=RelationshipInfo(
463+
resource_type="Delta",
464+
),
465+
)
466+
467+
468+
class DeltaSchema(BaseModel):
469+
gammas: Optional["GammaSchema"] = Field(
470+
None,
471+
relationship=RelationshipInfo(
472+
resource_type="gamma",
473+
many=True,
474+
),
475+
)
476+
betas: Optional["BetaSchema"] = Field(
477+
None,
478+
relationship=RelationshipInfo(
479+
resource_type="beta",
480+
many=True,
481+
),
482+
)

0 commit comments

Comments
 (0)