Skip to content

Commit 502eeaf

Browse files
author
Nekrasov Aleksey
committed
Merge branch 'feature/suren-updates' into 'master'
Some updates and improvements See merge request inner-source/fastapi-rest-jsonapi!1
2 parents e1443a4 + 1a73d3d commit 502eeaf

File tree

18 files changed

+430
-140
lines changed

18 files changed

+430
-140
lines changed

README.md

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,22 @@
44

55
### 1. App API-FOR-TORTOISE-ORM
66

7+
8+
#### Install dependencies
9+
```shell
10+
pip install -r requirements.txt
11+
pip install -r requirements-dev.txt
12+
```
13+
14+
715
#### Start app
816
```shell
917
# in dir fastapi-rest-jsonapi
1018

11-
export PYTHOPATH="${PYTHONPATH}:./"
19+
export PYTHOPATH="${PYTHONPATH}:./"
20+
# reload may not work :(
1221
python examples/api_for_tortoise_orm/main.py
1322
```
14-
http://0.0.0.0:8080/docs
23+
24+
Visit http://0.0.0.0:8080/docs
25+

examples/api_for_tortoise_orm/api/user.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
from fastapi_rest_jsonapi.schema import JSONAPIResultListSchema
2525

2626

27-
class UserDetail(object):
27+
class UserDetail:
2828
@classmethod
2929
async def get_user(cls, user_id, query_params: QueryStringManager) -> User:
3030
"""
@@ -65,17 +65,17 @@ async def patch(cls, obj_id, data: UserPatchSchema, query_params: QueryStringMan
6565
except ObjectNotFound as ex:
6666
raise HTTPException(status_code=HTTPStatus.NOT_FOUND, detail=ex.description)
6767

68-
device = UserSchema.from_orm(user_obj)
69-
return device
68+
user = UserSchema.from_orm(user_obj)
69+
return user
7070

7171

72-
class UserList(object):
72+
class UserList:
7373
@classmethod
7474
async def get(cls, query_params: QueryStringManager) -> Union[QuerySet, JSONAPIResultListSchema]:
7575
extended_fields: List[str] = query_params.fields.get("users", [])
7676
if not extended_fields:
77-
device_query = User.filter().order_by("-id")
78-
return await json_api_filter(query=device_query, schema=UserSchema, query_params=query_params)
77+
user_query = User.filter().order_by("-id")
78+
return await json_api_filter(query=user_query, schema=UserSchema, query_params=query_params)
7979

8080
user_query = User.filter().order_by("-id")
8181
query: QuerySet = await json_api_filter(query=user_query, schema=UserSchema, query_params=query_params)
@@ -85,19 +85,19 @@ async def get(cls, query_params: QueryStringManager) -> Union[QuerySet, JSONAPIR
8585

8686
return JSONAPIResultListSchema(
8787
meta={"count": count, "totalPages": total_pages},
88-
data=[{"id": i_obj.id, "type": "Device", "attributes": i_obj.dict()} for i_obj in users],
88+
data=[{"id": i_obj.id, "attributes": i_obj.dict()} for i_obj in users],
8989
)
9090

9191
@classmethod
9292
async def post(cls, data: UserInSchema, query_params: QueryStringManager) -> UserSchema:
9393
try:
94-
device_obj = await UserFactory.create(
94+
user_obj = await UserFactory.create(
9595
data=data.dict(),
9696
mode=FactoryUseMode.production,
9797
header=query_params.headers,
9898
)
9999
except ErrorCreateUserObject as ex:
100100
raise BadRequest(ex.description, ex.field)
101101

102-
user = UserSchema.from_orm(device_obj)
102+
user = UserSchema.from_orm(user_obj)
103103
return user

examples/api_for_tortoise_orm/helpers/factories/user.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,6 @@ def _set_last_name(cls, data_for_create_user: Dict, kwargs: Dict):
6161
data_for_create_user["last_name"] = kwargs.get("last_name", "Last name")
6262

6363
@classmethod
64-
def _set_status(cls, data_for_create_device: Dict, kwargs: Dict):
64+
def _set_status(cls, data_for_create_user: Dict, kwargs: Dict):
6565
"""Status setter."""
66-
data_for_create_device["status"] = UserStatusEnum.active
66+
data_for_create_user["status"] = UserStatusEnum.active
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
"""W-mount updaters package. Contains updaters for comment, device, file, mount-session and sbc-api-key models."""

examples/api_for_tortoise_orm/helpers/updaters/update_user.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
"""Update device helper."""
1+
"""Update user helper."""
22

33
from typing import (
44
Any,
@@ -16,17 +16,16 @@
1616
from ...models.tortoise import User
1717

1818

19-
2019
class ErrorUpdateUserObject(ErrorUpdateObject):
21-
"""Exception class for device update helper."""
20+
"""Exception class for user update helper."""
2221

2322
def __init__(self, description, field: str = ""):
2423
"""Initialize constructor for exception while updating object."""
2524
super().__init__(User, description, field)
2625

2726

2827
class UpdateUser(BaseUpdater):
29-
"""Device update helper."""
28+
"""User update helper."""
3029

3130
class Meta(object):
3231
"""Type of model."""

examples/api_for_tortoise_orm/main.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,22 @@
33
44
In module placed db initialization functions, app factory.
55
"""
6+
import sys
7+
from pathlib import Path
68

9+
CURRENT_FILE = Path(__file__).resolve()
10+
CURRENT_DIR = CURRENT_FILE.parent
11+
PROJECT_DIR = CURRENT_DIR.parent.parent
12+
13+
sys.path.append(str(PROJECT_DIR))
714

815
import uvicorn
916
from fastapi import FastAPI
1017
from tortoise import Tortoise
1118

1219
from examples.api_for_tortoise_orm.urls import add_routes
13-
from fastapi_rest_jsonapi.openapi import custom_openapi
1420
from fastapi_rest_jsonapi.schema import collect_app_orm_schemas
21+
from fastapi_rest_jsonapi.openapi import custom_openapi
1522

1623

1724
async def tortoise_init() -> None:
@@ -50,6 +57,7 @@ def create_app() -> FastAPI:
5057
"asgi:app",
5158
host="0.0.0.0",
5259
port=8080,
53-
reload=True, # enable hot reload for local
54-
log_config=None, # remove uvicorn's default logging config
60+
debug=True,
61+
reload=True,
62+
app_dir=str(CURRENT_DIR),
5563
)

examples/api_for_tortoise_orm/models/enums.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
"""Enums for device model in w-mount service."""
21
from fastapi_rest_jsonapi.data_layers.fields.enum import Enum
32

43

examples/api_for_tortoise_orm/models/pydantic/user.py

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,36 +14,33 @@
1414
class UserBaseSchema(BaseModel):
1515
"""User base schema."""
1616

17-
class Config(object):
17+
class Config:
1818
"""Pydantic schema config."""
1919

2020
orm_mode = True
2121

22-
class Enum(object):
23-
"""Device enums."""
22+
class Enum:
23+
"""User enums."""
2424

2525
status = UserStatusEnum
2626

27-
28-
class UserPatchSchema(UserBaseSchema):
29-
"""User PATCH schema."""
3027
first_name: Optional[str] = None
3128
last_name: Optional[str] = None
3229
status: UserStatusEnum = Field(default=UserStatusEnum.active)
3330

3431

32+
class UserPatchSchema(UserBaseSchema):
33+
"""User PATCH schema."""
34+
35+
3536
class UserInSchema(UserBaseSchema):
3637
"""User input schema."""
3738

38-
first_name: Optional[str] = None
39-
last_name: Optional[str] = None
40-
status: UserStatusEnum = Field(default=UserStatusEnum.active)
41-
4239

4340
class UserSchema(UserInSchema):
4441
"""User item schema."""
4542

46-
class Config(object):
43+
class Config:
4744
"""Pydantic model config."""
4845

4946
orm_mode = True
@@ -52,6 +49,3 @@ class Config(object):
5249
id: int
5350
created_at: datetime = Field(description="Время создания данных")
5451
modified_at: datetime = Field(description="Время изменения данных")
55-
first_name: Optional[str] = None
56-
last_name: Optional[str] = None
57-
status: UserStatusEnum = Field(default=UserStatusEnum.active)

examples/api_for_tortoise_orm/models/tortoise/user.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
"""Device model."""
1+
"""User model."""
22

33

44
from tortoise import (
@@ -13,9 +13,9 @@
1313

1414

1515
class User(models.Model):
16-
"""The device model."""
16+
"""The user model."""
1717

18-
class Enum(object):
18+
class Enum:
1919
status = UserStatusEnum
2020

2121
id: int = fields.IntField(pk=True)
@@ -25,5 +25,5 @@ class Enum(object):
2525
created_at = fields.DatetimeField(null=True, auto_now_add=True)
2626
modified_at = fields.DatetimeField(null=True, auto_now=True)
2727

28-
class Meta(object):
28+
class Meta:
2929
table = "users"

examples/api_for_tortoise_orm/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def add_routes(app: FastAPI) -> List[Dict[str, Any]]:
3838
class_detail=UserDetail,
3939
class_list=UserList,
4040
schema=UserSchema,
41-
type_resource="users",
41+
type_resource="user",
4242
schema_in_patch=UserPatchSchema,
4343
schema_in_post=UserInSchema,
4444
)

0 commit comments

Comments
 (0)