fastgenerateapi 0.0.25__py2.py3-none-any.whl → 0.0.27__py2.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.

Potentially problematic release.


This version of fastgenerateapi might be problematic. Click here for more details.

@@ -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
  # 多对多关联 >> 查和改
@@ -8,7 +8,7 @@
8
8
  # d8888P
9
9
 
10
10
 
11
- VERSION = (0, 0, 25)
11
+ VERSION = (0, 0, 27)
12
12
 
13
13
  __version__ = '.'.join(map(str, VERSION))
14
14
 
@@ -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(
@@ -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):
@@ -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
- return list(model_class._meta.fk_fields)
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
 
@@ -6,6 +6,11 @@ from starlette.endpoints import WebSocketEndpoint
6
6
 
7
7
 
8
8
  class Consumer(WebSocketEndpoint):
9
+ """
10
+ 群聊
11
+ redis_conn: must
12
+ 使用 aioredis
13
+ """
9
14
  redis_conn: aioredis.Redis
10
15
  encoding = "json"
11
16
  group_id = None
@@ -8,6 +8,9 @@ from fastgenerateapi.data_type.data_type import DEPENDENCIES
8
8
 
9
9
 
10
10
  class WebsocketView(BaseView):
11
+ """
12
+ 客户端与服务器之间通信
13
+ """
11
14
  websocket_route: Union[bool, DEPENDENCIES] = True
12
15
  redis_conn: aioredis.Redis
13
16
 
@@ -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.replace("__", "/").split("_")
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
+
@@ -1,8 +1,8 @@
1
1
  from fastapi import APIRouter
2
2
  from starlette.routing import WebSocketRoute
3
3
 
4
- from fastgenerateapi.example.views import ChatView, Consumer
5
- from modules.example.views import StaffView, CompanyView
4
+ from fastgenerateapi.example.views import ChatView, ChatGroupView
5
+ from fastgenerateapi.example.views import StaffView, CompanyView
6
6
 
7
7
  router = APIRouter()
8
8
 
@@ -10,6 +10,6 @@ router.include_router(StaffView())
10
10
  router.include_router(CompanyView())
11
11
 
12
12
  router.include_router(ChatView())
13
- router.routes.append(WebSocketRoute("/group", Consumer, name="群聊测试"))
13
+ router.routes.append(WebSocketRoute("/group", ChatGroupView, name="群聊测试"))
14
14
 
15
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 modules.example.models import CompanyInfo, StaffInfo
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 modules.example.models import StaffInfo, CompanyInfo
8
- from modules.example.schemas import CompanyInfoRead, CompanyInfoCreate, ListTestSchema, StaffReadSchema
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["generated"] = False
33
- kwargs["unique"] = True
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:
@@ -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.update_exclude)
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="函数转换路由时:前缀添加字段")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastgenerateapi
3
- Version: 0.0.25
3
+ Version: 0.0.27
4
4
  Summary: FastAPIView Class View
5
5
  Author: ShiLiang
6
6
  Author-email: 2509144896@qq.com
@@ -1,12 +1,13 @@
1
- fastgenerateapi/__init__.py,sha256=vD8nsRX72c8qMUK32Nfw7HlNkPJHmq9WUDza2jDGu_c,1190
2
- fastgenerateapi/__version__.py,sha256=kadg5MMs8CBCh3djQMBR6w-riTAe37JEt6tHp2KIPmo,497
1
+ fastgenerateapi/__init__.py,sha256=70KtJJxhQcntZJTt2ilIR2pvokI4X6Xp200nHGZ5dkU,1264
2
+ fastgenerateapi/__version__.py,sha256=hNlrB8vfijMOVmLkR6tG51VWVhHxOtpSW1pkaoRy1nc,497
3
3
  fastgenerateapi/api_view/__init__.py,sha256=zkaTX5JxsNfjF-dFeEbHfUB58vhPMjm6Iiqx9HgJOrY,14
4
4
  fastgenerateapi/api_view/api_view.py,sha256=mfD8GB-hnyI2XO3tkSOlEa2FfBLdq0_Wqvp8gFrXFKU,1160
5
5
  fastgenerateapi/api_view/base_view.py,sha256=EvEVPJIkJNQct-s_DtN1YdRA3r97RDRYmLsPGbZOPzU,9245
6
6
  fastgenerateapi/api_view/create_view.py,sha256=q8vlTvJfjmhqLKA4WAiIzpSSgKEvo96Ftkaa2cGwUSo,4409
7
+ fastgenerateapi/api_view/delete_filter_view.py,sha256=QSrFEjYmhCkSJIZw6XYl7elJr4PycxqkhMmT1D8JjJk,2479
7
8
  fastgenerateapi/api_view/delete_tree_view.py,sha256=11kdktfLuUAnI381_uVoBw_PwCTquigQjADG7JPJEuo,3695
8
- fastgenerateapi/api_view/delete_view.py,sha256=BuZ4hZ1wSGHBlWTS4wKFA1w5IfEaFDdgzUFvHKv3WBo,3104
9
- fastgenerateapi/api_view/get_all_view.py,sha256=bokoPbB1yPZqxVuH8gQSz_2CrMyS3aQBNCMFgZTAccw,8313
9
+ fastgenerateapi/api_view/delete_view.py,sha256=KVgUr_8ElLKUHg282Ew7A61zLNAtckUJhrAQ4CyliSg,3109
10
+ fastgenerateapi/api_view/get_all_view.py,sha256=pwnvxxrstVnnfnPFYrgrAbBbUYQ__WvAg-tW2f9inq0,8453
10
11
  fastgenerateapi/api_view/get_one_view.py,sha256=BhhQMdcD85W2FgGiJBCdQfI1TYldVAGREK1ZQFPXjnc,3359
11
12
  fastgenerateapi/api_view/get_relation_view.py,sha256=h8D6N71L51Ifu2SkM3DcmYIICQTprrNmdW1Wbl_qeoM,9583
12
13
  fastgenerateapi/api_view/get_tree_view.py,sha256=VRg9xqBcxXfrHrDeOUshsbEuOX8UExvB-WMWaa9-Ad8,9129
@@ -15,8 +16,8 @@ fastgenerateapi/api_view/switch_view.py,sha256=TSkvNDzYXZJbdUmh505-YInFdniCgAYUu
15
16
  fastgenerateapi/api_view/update_relation_view.py,sha256=UvCdnhazEein2jSRx-KFbMe7LK4ojoFXAwRwxCumOZQ,3550
16
17
  fastgenerateapi/api_view/update_view.py,sha256=9b5-RxfSAGJIiQheM_qgin8Tkd9-Nz8LOCHw6IPatJk,3894
17
18
  fastgenerateapi/api_view/mixin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- fastgenerateapi/api_view/mixin/base_mixin.py,sha256=AqAWsS2obNt7e1cwzUccGas1ifqrit6PyTXtEpH325k,6577
19
- fastgenerateapi/api_view/mixin/dbmodel_mixin.py,sha256=2JY04R3_d_mxK_yp4iS746L8Gd4iONqOWHLpGerwyRk,4258
19
+ fastgenerateapi/api_view/mixin/base_mixin.py,sha256=JI9xFkWCTLVKI7aP92v2cXCIY8GPAIE46JxJgNKSbEw,6595
20
+ fastgenerateapi/api_view/mixin/dbmodel_mixin.py,sha256=b5H8ARZOtEWaKgD2Q-mPaX7Mr9wPnGfef3EBkpBFPH0,4402
20
21
  fastgenerateapi/api_view/mixin/get_mixin.py,sha256=cpyTHaKFNsAhbtnLkz057rGcaKJXipNS-m9ftITsz1I,266
21
22
  fastgenerateapi/api_view/mixin/response_mixin.py,sha256=zhWK6aqJtSvsjm6vkaDRXpYPGzh7FgLPyQS_SIoZWNc,2888
22
23
  fastgenerateapi/api_view/mixin/save_mixin.py,sha256=inRppAov9ruKqTgGhxPto84ETp1T1WP62n6OgEBIgyU,317
@@ -25,14 +26,14 @@ fastgenerateapi/cache/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
25
26
  fastgenerateapi/cache/cache_decorator.py,sha256=Mbxev-3BuTb61AsQ1x9iu29zOSN5SsdVhPgn7RonxUU,584
26
27
  fastgenerateapi/cache/key_builder.py,sha256=6Vudd19EGg1IUGT5ftPDqLUNCCqXzmQNV69zBfjGf9A,503
27
28
  fastgenerateapi/channel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- fastgenerateapi/channel/consumer.py,sha256=R4VIG5knuEZJ9eHryTK6tPcs7XRUR1ZQhX7Y7LYyPfM,2995
29
- fastgenerateapi/channel/websocket_view.py,sha256=GE-R9tNYS0SMW_WGYFhMMZGY9eoIsRFUCMKAAyOojno,738
29
+ fastgenerateapi/channel/consumer.py,sha256=qaxv2M750EFxuWSnu-T74D-mBBL_pIn7zbA-3GUoOso,3069
30
+ fastgenerateapi/channel/websocket_view.py,sha256=3oGppnu1HTQbK-HquGFT04AKj1T7lDkW0lmMQYeh5yI,795
30
31
  fastgenerateapi/controller/__init__.py,sha256=eM5a3k_G0bf-k_WcwfcBbI-M3kLFJIITBWX85lVyClE,316
31
32
  fastgenerateapi/controller/filter_controller.py,sha256=yqeOJpXeNYUQc_ueWM1cZgP4rIOyvO-LnQqX-eNavJs,3391
32
33
  fastgenerateapi/controller/router_controller.py,sha256=yq7oz8oiHKGbxWT5RvFXNQXYewzGaH0ODJFBrZewJEA,5321
33
34
  fastgenerateapi/controller/rpc_controller.py,sha256=keH9U5zWOaO3QArTl6uR6PxTNEh0Vb0uZ6gbE5_ugu4,2298
34
35
  fastgenerateapi/controller/search_controller.py,sha256=7L4aOF6s6XAVk7swP7KYS57fXiSu8VCBOibzgPlczrc,873
35
- fastgenerateapi/controller/ws_controller.py,sha256=olxJaPpa68nnyOdPOqDcTJz8Qxr3bRUbd10jQ1XO7yw,1589
36
+ fastgenerateapi/controller/ws_controller.py,sha256=QUJVsPo-M8s9bbewmIN_9oIOZGUXYh0YEqUZvAWfIqA,1667
36
37
  fastgenerateapi/data_type/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
38
  fastgenerateapi/data_type/data_type.py,sha256=mWxnXck-QkjmdkhFxjvr7GOQtyzuMIlSJfb4QsVuYBM,727
38
39
  fastgenerateapi/data_type/mysql_data_type.py,sha256=DOa-9DdyzG_Pvg1ESmSFa-e_fP_SP5KzDu9JLr1b2vw,233
@@ -42,17 +43,17 @@ fastgenerateapi/deps/paginator_deps.py,sha256=SWXXNK9f9PXDzccHieNICSgPAG-5qMOKX2
42
43
  fastgenerateapi/deps/tree_params_deps.py,sha256=qpDc_HEg9FJqxJkmiGMGm04qvRs4cwII63t-aGHWTA4,1264
43
44
  fastgenerateapi/example/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
45
  fastgenerateapi/example/models.py,sha256=ewtkl_JcBaPXPvVxhKW98jYaED3PS7GYarfdrjrch1o,2134
45
- fastgenerateapi/example/routers.py,sha256=hxwMFxF12ACLM03gRHaeFVasdxWP17cTX5EIdwypTP4,419
46
- fastgenerateapi/example/schemas.py,sha256=l-nPnocW5sqTpF3RRbpKOwJzBbrkORIjqw_O2lcVGng,1674
47
- fastgenerateapi/example/views.py,sha256=wxNhlC6G4uTz-7g2rP9zwhbNTgffdbwWlPLISVAbQg8,2557
46
+ fastgenerateapi/example/routers.py,sha256=gsmViGNqO1JbVc0M8tZPvD46kReOYJ5I457WwBHt4l4,437
47
+ fastgenerateapi/example/schemas.py,sha256=MRtyfWUjRSNPJKWPUHGXyMFUugGY8kylPAdq9gJE2CU,1682
48
+ fastgenerateapi/example/views.py,sha256=vj-Nk3z8tA0q8_blyAKzg_s7OEByPBos-2T-9ksl3Gc,3276
48
49
  fastgenerateapi/my_fields/__init__.py,sha256=StbTm3_2IBZ8U5kEWxtNyZ3I-Qs-pCFd5vtAZTq52wA,202
49
50
  fastgenerateapi/my_fields/aes_field.py,sha256=r4_Jhuq5lgwmITWjUYcFrv5uBR57GPGCVMgy3yNDvp4,4518
50
- fastgenerateapi/my_fields/enum_field.py,sha256=uTzYFexX1uCPxVzvrCXSSqvpw134vlZDKBrzElmvDuw,7672
51
- fastgenerateapi/my_fields/pk_field.py,sha256=JUjIpLb2qoNhAMELSOIahlNEk2gTe7KL3DaEZJBWrQk,1376
51
+ fastgenerateapi/my_fields/enum_field.py,sha256=lFSGCIFR-EsmZpKOtBPdTqsb1i4a2mV_7EQcpIE0ZXY,7811
52
+ fastgenerateapi/my_fields/pk_field.py,sha256=xQ8ksp2txFAGa5PLm9-ZfAks_5iYnbC63LNmZlDzS34,1326
52
53
  fastgenerateapi/my_fields/pwd_field.py,sha256=eUnarxEyHgpOzTBmsl0KxsI8lR7FzUDjxyFCKTqJDBU,2191
53
54
  fastgenerateapi/my_fields/soft_delete_field.py,sha256=aZ1ThTzRmB3OF0ffVCzT5pQ8nFVEOPvOHHz3lyf5ZBE,1450
54
55
  fastgenerateapi/pydantic_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
- fastgenerateapi/pydantic_utils/base_model.py,sha256=9D6Co19IRix35hjltTmnMuDTpSe5lqa7EDLHFkc83-M,694
56
+ fastgenerateapi/pydantic_utils/base_model.py,sha256=Yg7929Q4Zsquijc2sKt6T81aU-djqMWJ4HMYgpUHhjY,781
56
57
  fastgenerateapi/pydantic_utils/json_encoders.py,sha256=yzmezJk1FsLtuZ7gEM-xW1YWAO0aBf4615V6AgMrK4M,2814
57
58
  fastgenerateapi/schemas_factory/__init__.py,sha256=X9U96fiyRfCY0u6SzaCYG62RdpEGFX7yOZh_cJl6R2E,472
58
59
  fastgenerateapi/schemas_factory/common_function.py,sha256=zU46EbMm0NQndMpUuDSuxe2WcEr4puibehZMudbrifo,5229
@@ -65,17 +66,17 @@ fastgenerateapi/schemas_factory/get_relation_schema_factory.py,sha256=00Mpz6kO4p
65
66
  fastgenerateapi/schemas_factory/get_tree_schema_factory.py,sha256=6HSXOKu73p4o2ugf4LnY8SJ18npdIGMqZ0itZVOATHU,7265
66
67
  fastgenerateapi/schemas_factory/response_factory.py,sha256=E5NAUcI9IWkH9xT517udWzOexF7U6sgVomcnHh2PxVc,1647
67
68
  fastgenerateapi/schemas_factory/sql_get_all_schema_factory.py,sha256=fr-_J2FdLfhAQTXZHMwhF56KIf_y7suI9TCOmAV4zI8,1816
68
- fastgenerateapi/schemas_factory/update_schema_factory.py,sha256=_PRSNn8gy_DYoEFEQKWMYBMzyksJeKM2AyFUrVcYmFU,3737
69
+ fastgenerateapi/schemas_factory/update_schema_factory.py,sha256=c2K0RnKcwMaoYHJ_ak94vgvkeW4B_WIBXL-EQy9uGTY,3735
69
70
  fastgenerateapi/settings/__init__.py,sha256=rqUtJyMLicobcyhmr74TepjmUQAEmlazKT3vjV_n3aA,6
70
71
  fastgenerateapi/settings/register_settings.py,sha256=yeVkXuarA_OdxPQ6F4y1eW-_OuFAm9eJcFaz-YZwodg,97
71
- fastgenerateapi/settings/settings.py,sha256=bqAexikRbYoG4kbRVFHnCFz1ZF3FxtjJ_IIeHEM6Hb8,6748
72
+ fastgenerateapi/settings/settings.py,sha256=A0smBQ8YpDfvo6jjD4ztRhS2A_9stqS5hwsODwdu4Xw,6881
72
73
  fastgenerateapi/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
74
  fastgenerateapi/utils/aes.py,sha256=2ewx-qc7wAN68iExyNM97F8dB1sXhfGYVpNWFYR_a1k,3569
74
75
  fastgenerateapi/utils/exception.py,sha256=dnBmVpHLUS_PZ2cwIvpAJ3ncswZnn31L98gNmCoe8_k,121
75
76
  fastgenerateapi/utils/parse_str.py,sha256=vDUjx_Fx0nOHwtkWnOauN21NB_ecNglr5bVBKrLL33g,850
76
77
  fastgenerateapi/utils/snowflake.py,sha256=ufr6aayY0McRp6epw2AGMqSA-CEzvXwSF5VmnIzPhLo,4539
77
- fastgenerateapi-0.0.25.dist-info/LICENSE,sha256=gcuuhKKc5-dwvyvHsXjlC9oM6N5gZ6umYbC8ewW1Yvg,35821
78
- fastgenerateapi-0.0.25.dist-info/METADATA,sha256=FETdukG1kDCvVpng8hN1eTwGRj1w6bp5sLs8QZtg2bU,4887
79
- fastgenerateapi-0.0.25.dist-info/WHEEL,sha256=iYlv5fX357PQyRT2o6tw1bN-YcKFFHKqB_LwHO5wP-g,110
80
- fastgenerateapi-0.0.25.dist-info/top_level.txt,sha256=7RBBRe1lBEnxZtP89_Wj1QwI2KE8r3Pi9IwywUHTdVg,16
81
- fastgenerateapi-0.0.25.dist-info/RECORD,,
78
+ fastgenerateapi-0.0.27.dist-info/LICENSE,sha256=gcuuhKKc5-dwvyvHsXjlC9oM6N5gZ6umYbC8ewW1Yvg,35821
79
+ fastgenerateapi-0.0.27.dist-info/METADATA,sha256=FBvlJLjj8ARLxQrmUJMCSy7qPe5FE05Ie7FmjMhvzI8,4887
80
+ fastgenerateapi-0.0.27.dist-info/WHEEL,sha256=a-zpFRIJzOq5QfuhBzbhiA1eHTzNCJn8OdRvhdNX0Rk,110
81
+ fastgenerateapi-0.0.27.dist-info/top_level.txt,sha256=7RBBRe1lBEnxZtP89_Wj1QwI2KE8r3Pi9IwywUHTdVg,16
82
+ fastgenerateapi-0.0.27.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.41.2)
2
+ Generator: bdist_wheel (0.40.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py2-none-any
5
5
  Tag: py3-none-any