fastgenerateapi 0.0.25__tar.gz → 0.0.27__tar.gz
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.
Potentially problematic release.
This version of fastgenerateapi might be problematic. Click here for more details.
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/PKG-INFO +1 -1
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/__init__.py +1 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/__version__.py +1 -1
- fastgenerateapi-0.0.27/fastgenerateapi/api_view/delete_filter_view.py +67 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/delete_view.py +13 -11
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/get_all_view.py +3 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/mixin/base_mixin.py +1 -1
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py +5 -2
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/channel/consumer.py +5 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/channel/websocket_view.py +3 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/controller/ws_controller.py +8 -6
- fastgenerateapi-0.0.27/fastgenerateapi/example/routers.py +15 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/example/schemas.py +1 -1
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/example/views.py +31 -7
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/my_fields/enum_field.py +5 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/my_fields/pk_field.py +2 -4
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/pydantic_utils/base_model.py +3 -1
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/schemas_factory/update_schema_factory.py +1 -1
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/settings/settings.py +1 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi.egg-info/PKG-INFO +1 -1
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi.egg-info/SOURCES.txt +1 -0
- fastgenerateapi-0.0.25/fastgenerateapi/example/routers.py +0 -15
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/LICENSE +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/README.md +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/__init__.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/api_view.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/base_view.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/create_view.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/delete_tree_view.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/get_one_view.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/get_relation_view.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/get_tree_view.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/mixin/__init__.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/mixin/get_mixin.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/mixin/response_mixin.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/mixin/save_mixin.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/mixin/tool_mixin.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/sql_get_view.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/switch_view.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/update_relation_view.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/update_view.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/cache/__init__.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/cache/cache_decorator.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/cache/key_builder.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/channel/__init__.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/controller/__init__.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/controller/filter_controller.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/controller/router_controller.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/controller/rpc_controller.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/controller/search_controller.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/data_type/__init__.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/data_type/data_type.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/data_type/mysql_data_type.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/deps/__init__.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/deps/filter_params_deps.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/deps/paginator_deps.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/deps/tree_params_deps.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/example/__init__.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/example/models.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/my_fields/__init__.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/my_fields/aes_field.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/my_fields/pwd_field.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/my_fields/soft_delete_field.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/pydantic_utils/__init__.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/pydantic_utils/json_encoders.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/schemas_factory/__init__.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/schemas_factory/common_function.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/schemas_factory/common_schema_factory.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/schemas_factory/create_schema_factory.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/schemas_factory/filter_schema_factory.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/schemas_factory/get_all_schema_factory.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/schemas_factory/get_one_schema_factory.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/schemas_factory/get_relation_schema_factory.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/schemas_factory/get_tree_schema_factory.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/schemas_factory/response_factory.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/schemas_factory/sql_get_all_schema_factory.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/settings/__init__.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/settings/register_settings.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/utils/__init__.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/utils/aes.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/utils/exception.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/utils/parse_str.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/utils/snowflake.py +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi.egg-info/dependency_links.txt +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi.egg-info/top_level.txt +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/setup.cfg +0 -0
- {fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/setup.py +0 -0
|
@@ -12,6 +12,7 @@ from fastgenerateapi.api_view.api_view import APIView, CreateView, GetOneView, G
|
|
|
12
12
|
SwitchView
|
|
13
13
|
from fastgenerateapi.api_view.get_tree_view import GetTreeView
|
|
14
14
|
from fastgenerateapi.api_view.delete_tree_view import DeleteTreeView
|
|
15
|
+
from fastgenerateapi.api_view.delete_filter_view import DeleteFilterView
|
|
15
16
|
from fastgenerateapi.api_view.base_view import BaseView
|
|
16
17
|
|
|
17
18
|
# 多对多关联 >> 查和改
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
from typing import Optional, Type, Any, Union
|
|
2
|
+
|
|
3
|
+
from fastapi import Query, Depends
|
|
4
|
+
from fastapi.types import DecoratedCallable
|
|
5
|
+
from starlette.requests import Request
|
|
6
|
+
from starlette.responses import JSONResponse
|
|
7
|
+
from tortoise.transactions import atomic
|
|
8
|
+
|
|
9
|
+
from fastgenerateapi.api_view.base_view import BaseView
|
|
10
|
+
from fastgenerateapi.data_type.data_type import CALLABLE, DEPENDENCIES
|
|
11
|
+
from fastgenerateapi.deps import filter_params_deps
|
|
12
|
+
from fastgenerateapi.schemas_factory import response_factory
|
|
13
|
+
from fastgenerateapi.settings.register_settings import settings
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class DeleteFilterView(BaseView):
|
|
17
|
+
|
|
18
|
+
delete_filter_route: Union[bool, DEPENDENCIES] = True
|
|
19
|
+
"""
|
|
20
|
+
必须继承 GetAllView 才能使用
|
|
21
|
+
与 GetAllView 同步的筛选条件
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
@atomic()
|
|
25
|
+
async def destroy_filter(self, search: str, filters: dict, *args, **kwargs):
|
|
26
|
+
queryset = await self.get_queryset(search=search, filters=filters, *args, **kwargs)
|
|
27
|
+
|
|
28
|
+
await self.delete_queryset(queryset)
|
|
29
|
+
|
|
30
|
+
return
|
|
31
|
+
|
|
32
|
+
def _delete_filter_decorator(self, *args: Any, **kwargs: Any) -> DecoratedCallable:
|
|
33
|
+
async def route(
|
|
34
|
+
request: Request,
|
|
35
|
+
search: str = Query(default="", description="搜索"),
|
|
36
|
+
filters: dict = Depends(filter_params_deps(model_class=self.model_class, fields=self.filter_fields)),
|
|
37
|
+
) -> JSONResponse:
|
|
38
|
+
await self.destroy_filter(
|
|
39
|
+
search=search,
|
|
40
|
+
filters=filters,
|
|
41
|
+
request=request,
|
|
42
|
+
*args, **kwargs
|
|
43
|
+
)
|
|
44
|
+
return self.success(msg="删除成功")
|
|
45
|
+
return route
|
|
46
|
+
|
|
47
|
+
def _handler_destroy_filter_settings(self):
|
|
48
|
+
if self.delete_filter_route:
|
|
49
|
+
return
|
|
50
|
+
if not hasattr(self, "get_one_response_schema"):
|
|
51
|
+
self.get_one_response_schema = response_factory(None, name="GetOne")
|
|
52
|
+
doc = self.destroy_filter.__doc__
|
|
53
|
+
summary = doc.strip().split("\n")[0] if doc else "Delete Filter"
|
|
54
|
+
path = f"/{settings.app_settings.ROUTER_FILTER_DELETE_SUFFIX_FIELD}" if settings.app_settings.ROUTER_WHETHER_ADD_SUFFIX else ""
|
|
55
|
+
self._add_api_route(
|
|
56
|
+
path=path,
|
|
57
|
+
endpoint=self._delete_filter_decorator(),
|
|
58
|
+
methods=["DELETE"],
|
|
59
|
+
response_model=Optional[self.get_one_response_schema],
|
|
60
|
+
summary=summary,
|
|
61
|
+
dependencies=self.delete_filter_route,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
@@ -28,19 +28,21 @@ class DeleteView(BaseView):
|
|
|
28
28
|
queryset = await self.get_del_queryset(request_data=request_data, *args, **kwargs)
|
|
29
29
|
await self.delete_queryset(queryset)
|
|
30
30
|
|
|
31
|
-
# if unique_fields := self._get_unique_fields(self.model_class):
|
|
32
|
-
# for model in await queryset:
|
|
33
|
-
# model.is_active = False
|
|
34
|
-
# for field in unique_fields:
|
|
35
|
-
# try:
|
|
36
|
-
# setattr(model, field, getattr(model, field) + f"__{int(time.time() * 1000)}")
|
|
37
|
-
# except Exception as e:
|
|
38
|
-
# setattr(model, field, getattr(model, field) + f"__{int(time.time() * 1000)}")
|
|
39
|
-
# await model.save()
|
|
40
|
-
# else:
|
|
41
|
-
# await queryset.update(is_active=False)
|
|
42
31
|
return
|
|
43
32
|
|
|
33
|
+
# 弃用思路:唯一字段加时间戳
|
|
34
|
+
# if unique_fields := self._get_unique_fields(self.model_class):
|
|
35
|
+
# for model in await queryset:
|
|
36
|
+
# model.is_active = False
|
|
37
|
+
# for field in unique_fields:
|
|
38
|
+
# try:
|
|
39
|
+
# setattr(model, field, getattr(model, field) + f"__{int(time.time() * 1000)}")
|
|
40
|
+
# except Exception as e:
|
|
41
|
+
# setattr(model, field, getattr(model, field) + f"__{int(time.time() * 1000)}")
|
|
42
|
+
# await model.save()
|
|
43
|
+
# else:
|
|
44
|
+
# await queryset.update(is_active=False)
|
|
45
|
+
|
|
44
46
|
async def get_del_queryset(self, request_data, *args, **kwargs):
|
|
45
47
|
queryset = self.queryset.filter(id__in=request_data.id_list)
|
|
46
48
|
return queryset
|
|
@@ -130,6 +130,9 @@ class GetAllView(BaseView, GetMixin):
|
|
|
130
130
|
settings.app_settings.LIST_RESPONSE_FIELD: data_list,
|
|
131
131
|
})
|
|
132
132
|
|
|
133
|
+
def get_page_list(self, page_result: BaseModel):
|
|
134
|
+
return getattr(page_result, settings.app_settings.LIST_RESPONSE_FIELD, [])
|
|
135
|
+
|
|
133
136
|
def _get_all_decorator(self, *args: Any, **kwargs: Any) -> DecoratedCallable:
|
|
134
137
|
@get_all_cache_decorator(cache(expire=settings.app_settings.CACHE_GET_ALL_SECONDS, coder=JsonCoder, key_builder=generate_key_builder))
|
|
135
138
|
async def route(
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/mixin/base_mixin.py
RENAMED
|
@@ -64,7 +64,7 @@ class BaseMixin(Generic[T], APIRouter, ABC):
|
|
|
64
64
|
"update_route", "update_relation_route", "delete_route", "delete_tree_route", "switch_route_fields",
|
|
65
65
|
"websocket_route"]
|
|
66
66
|
return ["get_one", "get_all", "get_tree", "create", "update", "update_relation", "destroy", "destroy_tree",
|
|
67
|
-
"switch"]
|
|
67
|
+
"destroy_filter", "switch"]
|
|
68
68
|
|
|
69
69
|
@classmethod
|
|
70
70
|
def _get_cls_api_func(cls):
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py
RENAMED
|
@@ -84,9 +84,12 @@ class DBModelMixin:
|
|
|
84
84
|
return []
|
|
85
85
|
|
|
86
86
|
@staticmethod
|
|
87
|
-
def _get_foreign_key_fields(model_class: Type[Model] = None) -> List[str]:
|
|
87
|
+
def _get_foreign_key_fields(model_class: Type[Model] = None, is_with_id: bool = True) -> List[str]:
|
|
88
88
|
try:
|
|
89
|
-
|
|
89
|
+
fields = list(model_class._meta.fk_fields)
|
|
90
|
+
if is_with_id:
|
|
91
|
+
fields = [field + "_id" for field in fields]
|
|
92
|
+
return fields
|
|
90
93
|
except:
|
|
91
94
|
return []
|
|
92
95
|
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/controller/ws_controller.py
RENAMED
|
@@ -27,16 +27,18 @@ class WsController:
|
|
|
27
27
|
def __init__(self, router_class, func_name_list):
|
|
28
28
|
self.ws_router_data = []
|
|
29
29
|
for func_name in func_name_list:
|
|
30
|
-
route_info_list = func_name.
|
|
30
|
+
route_info_list = func_name.split("__")
|
|
31
|
+
if route_info_list[-1] in ["pk", "id"]:
|
|
32
|
+
route_info_list[-1] = "{" + route_info_list[-1] + "}"
|
|
33
|
+
route_name = "/".join(route_info_list)
|
|
34
|
+
route_info_list = route_name.split("_")
|
|
35
|
+
# method = route_info_list[0] # ws
|
|
31
36
|
middle_list = route_info_list[1:]
|
|
32
|
-
pk_field = ""
|
|
33
|
-
if route_info_list[-1] == "pk":
|
|
34
|
-
pk_field = "/{pk}"
|
|
35
|
-
middle_list = middle_list[:-1]
|
|
36
37
|
if settings.app_settings.ROUTER_WHETHER_UNDERLINE_TO_STRIKE:
|
|
37
38
|
path = "-".join(middle_list)
|
|
38
39
|
else:
|
|
39
40
|
path = "_".join(middle_list)
|
|
40
|
-
path += pk_field
|
|
41
41
|
|
|
42
42
|
self.ws_router_data.append(WsRouter(router_class, path, func_name))
|
|
43
|
+
|
|
44
|
+
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from fastapi import APIRouter
|
|
2
|
+
from starlette.routing import WebSocketRoute
|
|
3
|
+
|
|
4
|
+
from fastgenerateapi.example.views import ChatView, ChatGroupView
|
|
5
|
+
from fastgenerateapi.example.views import StaffView, CompanyView
|
|
6
|
+
|
|
7
|
+
router = APIRouter()
|
|
8
|
+
|
|
9
|
+
router.include_router(StaffView())
|
|
10
|
+
router.include_router(CompanyView())
|
|
11
|
+
|
|
12
|
+
router.include_router(ChatView())
|
|
13
|
+
router.routes.append(WebSocketRoute("/group", ChatGroupView, name="群聊测试"))
|
|
14
|
+
|
|
15
|
+
|
|
@@ -6,7 +6,7 @@ from tortoise.contrib.pydantic import pydantic_model_creator
|
|
|
6
6
|
from fastgenerateapi.pydantic_utils.base_model import BaseModel
|
|
7
7
|
from fastgenerateapi.schemas_factory import get_all_schema_factory
|
|
8
8
|
from fastgenerateapi.schemas_factory.common_schema_factory import common_schema_factory
|
|
9
|
-
from
|
|
9
|
+
from fastgenerateapi.example.models import CompanyInfo, StaffInfo
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
# 方式一:解决了方式二存在的问题
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
from fastapi import Depends
|
|
2
2
|
from fastapi_cache.decorator import cache
|
|
3
|
+
from starlette.websockets import WebSocket
|
|
3
4
|
|
|
4
|
-
from fastgenerateapi import APIView, DeleteTreeView, GetTreeView
|
|
5
|
+
from fastgenerateapi import APIView, DeleteTreeView, GetTreeView, WebsocketView, Consumer
|
|
5
6
|
from fastgenerateapi.deps import paginator_deps
|
|
6
|
-
from middlewares.jwt_middleware.schemas import UserObject
|
|
7
|
-
from
|
|
8
|
-
from
|
|
7
|
+
# from middlewares.jwt_middleware.schemas import UserObject
|
|
8
|
+
from fastgenerateapi.example.models import StaffInfo, CompanyInfo
|
|
9
|
+
from fastgenerateapi.example.schemas import CompanyInfoRead, CompanyInfoCreate, ListTestSchema, StaffReadSchema
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
class CompanyView(APIView, DeleteTreeView, GetTreeView):
|
|
@@ -63,9 +64,32 @@ class StaffView(APIView):
|
|
|
63
64
|
# table_name = "staffinfo"
|
|
64
65
|
|
|
65
66
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
class ChatView(WebsocketView):
|
|
68
|
+
"""
|
|
69
|
+
客户端与服务端场链接测试
|
|
70
|
+
"""
|
|
71
|
+
# redis_conn = default_redis
|
|
72
|
+
tags = ["ws测试"]
|
|
73
|
+
|
|
74
|
+
async def ws_wschat_pk(self, websocket: WebSocket, pk: str):
|
|
75
|
+
"""
|
|
76
|
+
测试
|
|
77
|
+
"""
|
|
78
|
+
await websocket.accept()
|
|
79
|
+
while True:
|
|
80
|
+
try:
|
|
81
|
+
data = await websocket.receive_json()
|
|
82
|
+
await websocket.send_text(f"接受到的消息是: {data}")
|
|
83
|
+
except Exception:
|
|
84
|
+
print(1)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
class ChatGroupView(Consumer):
|
|
88
|
+
"""
|
|
89
|
+
群聊测试
|
|
90
|
+
"""
|
|
91
|
+
# redis_conn = default_redis
|
|
92
|
+
...
|
|
69
93
|
|
|
70
94
|
|
|
71
95
|
|
|
@@ -51,6 +51,8 @@ class IntEnumField(IntEnumFieldInstance):
|
|
|
51
51
|
Converts from the Python type to the DB type.
|
|
52
52
|
"""
|
|
53
53
|
if value is not None:
|
|
54
|
+
if isinstance(value, IntEnumClass):
|
|
55
|
+
value = value.value
|
|
54
56
|
value = int(value) # pylint: disable=E1102
|
|
55
57
|
if value > len(self.enum_list) or 0 > value:
|
|
56
58
|
raise HTTPException(detail=f"枚举值:{value} 校验失败。【{self.description}】", status_code=422)
|
|
@@ -125,6 +127,9 @@ class IntEnumClass:
|
|
|
125
127
|
def __str__(self):
|
|
126
128
|
return f"{self.value}"
|
|
127
129
|
|
|
130
|
+
def __int__(self):
|
|
131
|
+
return self.value
|
|
132
|
+
|
|
128
133
|
@property
|
|
129
134
|
def name(self):
|
|
130
135
|
try:
|
|
@@ -29,10 +29,8 @@ class PrimaryKeyField(Field[str], str):
|
|
|
29
29
|
allows_generated = True
|
|
30
30
|
|
|
31
31
|
def __init__(self, **kwargs: Any) -> None:
|
|
32
|
-
kwargs
|
|
33
|
-
kwargs
|
|
34
|
-
kwargs["description"] = "主键"
|
|
35
|
-
kwargs["default"] = worker.get_id
|
|
32
|
+
kwargs.setdefault("description", "主键")
|
|
33
|
+
kwargs.setdefault("default", worker.get_id)
|
|
36
34
|
super().__init__(pk=True, **kwargs)
|
|
37
35
|
|
|
38
36
|
def to_db_value(self, value: Any, instance: "Union[Type[Model], Model]") -> Any:
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/pydantic_utils/base_model.py
RENAMED
|
@@ -10,12 +10,14 @@ class BaseModel(PydanticBaseModel):
|
|
|
10
10
|
json_encoders = JSON_ENCODERS
|
|
11
11
|
extra = Extra.ignore
|
|
12
12
|
orm_mode = True
|
|
13
|
+
from_attributes = True
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
class Config(BaseConfig):
|
|
16
17
|
json_encoders = JSON_ENCODERS
|
|
17
18
|
extra = Extra.ignore
|
|
18
|
-
orm_mode = True
|
|
19
|
+
orm_mode = True # v1 版本
|
|
20
|
+
from_attributes = True # v2 版本
|
|
19
21
|
|
|
20
22
|
|
|
21
23
|
class QueryConfig(BaseConfig):
|
|
@@ -43,7 +43,7 @@ def update_schema_factory(
|
|
|
43
43
|
all_fields_info.update(update_include_fields_dict)
|
|
44
44
|
include_fields.update(update_include_fields_dict.keys())
|
|
45
45
|
if hasattr(model_class.PydanticMeta, "save_exclude"):
|
|
46
|
-
exclude_fields.update(model_class.PydanticMeta.
|
|
46
|
+
exclude_fields.update(model_class.PydanticMeta.save_exclude)
|
|
47
47
|
if hasattr(model_class.PydanticMeta, "update_exclude"):
|
|
48
48
|
exclude_fields.update(model_class.PydanticMeta.update_exclude)
|
|
49
49
|
else:
|
|
@@ -35,6 +35,7 @@ class AppSettings(BaseSettings):
|
|
|
35
35
|
ROUTER_UPDATE_SUFFIX_FIELD: Optional[str] = Field(default='update', description="修改路由后缀字段")
|
|
36
36
|
ROUTER_DELETE_SUFFIX_FIELD: Optional[str] = Field(default='delete', description="删除路由后缀字段")
|
|
37
37
|
ROUTER_RECURSION_DELETE_SUFFIX_FIELD: Optional[str] = Field(default='delete_tree', description="递归删除路由后缀字段")
|
|
38
|
+
ROUTER_FILTER_DELETE_SUFFIX_FIELD: Optional[str] = Field(default='delete_filter', description="递归删除路由后缀字段")
|
|
38
39
|
|
|
39
40
|
# 函数转换路由时,默认添加字段,(遵循restful规范时,get路由处理方案)
|
|
40
41
|
RESTFUL_GET_ROUTER_ADD_PREFIX: Optional[str] = Field(default='', description="函数转换路由时:前缀添加字段")
|
|
@@ -11,6 +11,7 @@ fastgenerateapi/api_view/__init__.py
|
|
|
11
11
|
fastgenerateapi/api_view/api_view.py
|
|
12
12
|
fastgenerateapi/api_view/base_view.py
|
|
13
13
|
fastgenerateapi/api_view/create_view.py
|
|
14
|
+
fastgenerateapi/api_view/delete_filter_view.py
|
|
14
15
|
fastgenerateapi/api_view/delete_tree_view.py
|
|
15
16
|
fastgenerateapi/api_view/delete_view.py
|
|
16
17
|
fastgenerateapi/api_view/get_all_view.py
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
from fastapi import APIRouter
|
|
2
|
-
from starlette.routing import WebSocketRoute
|
|
3
|
-
|
|
4
|
-
from fastgenerateapi.example.views import ChatView, Consumer
|
|
5
|
-
from modules.example.views import StaffView, CompanyView
|
|
6
|
-
|
|
7
|
-
router = APIRouter()
|
|
8
|
-
|
|
9
|
-
router.include_router(StaffView())
|
|
10
|
-
router.include_router(CompanyView())
|
|
11
|
-
|
|
12
|
-
router.include_router(ChatView())
|
|
13
|
-
router.routes.append(WebSocketRoute("/group", Consumer, name="群聊测试"))
|
|
14
|
-
|
|
15
|
-
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/delete_tree_view.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/get_relation_view.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/mixin/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/mixin/get_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/mixin/response_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/mixin/save_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/mixin/tool_mixin.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/api_view/update_relation_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/controller/filter_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/controller/router_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/controller/rpc_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/controller/search_controller.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/data_type/mysql_data_type.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/deps/filter_params_deps.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/my_fields/soft_delete_field.py
RENAMED
|
File without changes
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/pydantic_utils/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/pydantic_utils/json_encoders.py
RENAMED
|
File without changes
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/schemas_factory/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/schemas_factory/common_function.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi/settings/register_settings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-0.0.25 → fastgenerateapi-0.0.27}/fastgenerateapi.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|