fastgenerateapi 1.2.1__tar.gz → 1.2.3__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.
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/PKG-INFO +8 -7
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/README.md +7 -6
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/__version__.py +1 -1
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/create_view.py +15 -15
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/delete_filter_view.py +2 -3
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/delete_tree_view.py +2 -3
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/delete_view.py +2 -3
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/get_relation_view.py +1 -1
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/get_tree_view.py +3 -3
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/save_mixin.py +1 -1
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/update_relation_view.py +4 -2
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/update_view.py +19 -12
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/controller/filter_controller.py +7 -3
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/schemas_factory/common_function.py +5 -2
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/settings/all_settings.py +2 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/settings/app_settings.py +2 -1
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi.egg-info/PKG-INFO +8 -7
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/LICENSE +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/__init__.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/__init__.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/api_view.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/base_view.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/get_all_view.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/get_one_view.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/__init__.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/base_mixin.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/get_mixin.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/response_mixin.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/tool_mixin.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/utils/__init__.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/utils/docx_util.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/utils/file_util.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/utils/pdf_util.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/utils/xlsx_util.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/utils/zip_util.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/sql_get_view.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/switch_view.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/cache/__init__.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/cache/cache_decorator.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/cache/key_builder.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/channel/__init__.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/channel/connection_manager.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/channel/consumer.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/channel/websocket_view.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/controller/__init__.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/controller/router_controller.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/controller/rpc_controller.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/controller/search_controller.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/controller/ws_controller.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/data_type/__init__.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/data_type/data_type.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/data_type/mysql_data_type.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/deps/__init__.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/deps/filter_params_deps.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/deps/paginator_deps.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/deps/tree_params_deps.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/example/__init__.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/example/models.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/example/routers.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/example/schemas.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/example/views.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/fastapi_utils/__init__.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/fastapi_utils/all.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/fastapi_utils/param_utils.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/fastapi_utils/response_utils.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/model/__init__.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/model/base_model.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/my_fields/__init__.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/my_fields/aes_field.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/my_fields/enum_field.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/my_fields/pk_field.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/my_fields/pwd_field.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/my_fields/soft_delete_field.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/my_fields/validator.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/pydantic_utils/__init__.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/pydantic_utils/base_model.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/pydantic_utils/base_settings.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/pydantic_utils/json_encoders.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/schemas_factory/__init__.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/schemas_factory/common_schema_factory.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/schemas_factory/create_schema_factory.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/schemas_factory/filter_schema_factory.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/schemas_factory/get_all_schema_factory.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/schemas_factory/get_one_schema_factory.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/schemas_factory/get_relation_schema_factory.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/schemas_factory/get_tree_schema_factory.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/schemas_factory/response_factory.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/schemas_factory/sql_get_all_schema_factory.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/schemas_factory/update_schema_factory.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/settings/__init__.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/settings/db_settings.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/settings/etcd_settings.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/settings/file_settings.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/settings/jwt_settings.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/settings/otlp_settings.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/settings/redis_settings.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/settings/sms_settings.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/settings/system_settings.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/utils/__init__.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/utils/aes.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/utils/auto_discover.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/utils/exception.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/utils/file_utils.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/utils/pwd_utils.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/utils/ramdom_utils.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/utils/snowflake.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/utils/str_util.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/utils/swagger_to_js.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi.egg-info/SOURCES.txt +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi.egg-info/dependency_links.txt +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi.egg-info/top_level.txt +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/script/__init__.py +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/setup.cfg +0 -0
- {fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fastgenerateapi
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.3
|
|
4
4
|
Summary: FastAPIView Class View
|
|
5
5
|
Author: ShiLiang
|
|
6
6
|
Author-email: 2509144896@qq.com
|
|
@@ -94,14 +94,14 @@ uvicorn.run(app)
|
|
|
94
94
|
- get_one_include, get_one_exclude
|
|
95
95
|
- 与include同时生效,无include自动包含数据库模型搜友字段
|
|
96
96
|
- 可添加跨表字段,自动生成校验和文档
|
|
97
|
-
- 其他字段: ("test",
|
|
97
|
+
- 其他字段: ("test", Optional[str], FieldInfo(..., description="文档描述"))
|
|
98
98
|
- get_all_include, get_all_exclude
|
|
99
99
|
- create_include, create_exclude
|
|
100
100
|
- update_include, update_exclude
|
|
101
101
|
|
|
102
102
|
#### 指定模型
|
|
103
103
|
```python
|
|
104
|
-
from
|
|
104
|
+
from fastgenerateapi import APIView
|
|
105
105
|
|
|
106
106
|
class XxxView(APIView):
|
|
107
107
|
model_class = XxxModel
|
|
@@ -110,7 +110,7 @@ class XxxView(APIView):
|
|
|
110
110
|
#### 查询/创建/修改字段限制及校验示例
|
|
111
111
|
- 如果有唯一字段或者联合唯一字段自动校验是否为唯一值
|
|
112
112
|
```python
|
|
113
|
-
from
|
|
113
|
+
from fastgenerateapi import APIView
|
|
114
114
|
|
|
115
115
|
class XxxView(APIView):
|
|
116
116
|
list_schema = HeathInfoList
|
|
@@ -126,11 +126,12 @@ class XxxView(APIView):
|
|
|
126
126
|
```python
|
|
127
127
|
class XxxView(APIView):
|
|
128
128
|
|
|
129
|
-
def
|
|
129
|
+
def view_get_user_list(self):
|
|
130
130
|
"""
|
|
131
|
-
|
|
131
|
+
文档Summary注释
|
|
132
|
+
生成 get方法,路由为 前缀/user_list
|
|
132
133
|
"""
|
|
133
|
-
return
|
|
134
|
+
return self.success(data={"list": []})
|
|
134
135
|
```
|
|
135
136
|
|
|
136
137
|
|
|
@@ -76,14 +76,14 @@ uvicorn.run(app)
|
|
|
76
76
|
- get_one_include, get_one_exclude
|
|
77
77
|
- 与include同时生效,无include自动包含数据库模型搜友字段
|
|
78
78
|
- 可添加跨表字段,自动生成校验和文档
|
|
79
|
-
- 其他字段: ("test",
|
|
79
|
+
- 其他字段: ("test", Optional[str], FieldInfo(..., description="文档描述"))
|
|
80
80
|
- get_all_include, get_all_exclude
|
|
81
81
|
- create_include, create_exclude
|
|
82
82
|
- update_include, update_exclude
|
|
83
83
|
|
|
84
84
|
#### 指定模型
|
|
85
85
|
```python
|
|
86
|
-
from
|
|
86
|
+
from fastgenerateapi import APIView
|
|
87
87
|
|
|
88
88
|
class XxxView(APIView):
|
|
89
89
|
model_class = XxxModel
|
|
@@ -92,7 +92,7 @@ class XxxView(APIView):
|
|
|
92
92
|
#### 查询/创建/修改字段限制及校验示例
|
|
93
93
|
- 如果有唯一字段或者联合唯一字段自动校验是否为唯一值
|
|
94
94
|
```python
|
|
95
|
-
from
|
|
95
|
+
from fastgenerateapi import APIView
|
|
96
96
|
|
|
97
97
|
class XxxView(APIView):
|
|
98
98
|
list_schema = HeathInfoList
|
|
@@ -108,11 +108,12 @@ class XxxView(APIView):
|
|
|
108
108
|
```python
|
|
109
109
|
class XxxView(APIView):
|
|
110
110
|
|
|
111
|
-
def
|
|
111
|
+
def view_get_user_list(self):
|
|
112
112
|
"""
|
|
113
|
-
|
|
113
|
+
文档Summary注释
|
|
114
|
+
生成 get方法,路由为 前缀/user_list
|
|
114
115
|
"""
|
|
115
|
-
return
|
|
116
|
+
return self.success(data={"list": []})
|
|
116
117
|
```
|
|
117
118
|
|
|
118
119
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import inspect
|
|
2
2
|
from typing import Optional, Type, Union, Any
|
|
3
3
|
|
|
4
|
+
from pydantic import BaseModel as PydanticBaseModel
|
|
5
|
+
|
|
4
6
|
from fastapi import Depends
|
|
5
7
|
from fastapi.security import OAuth2PasswordBearer
|
|
6
8
|
from fastapi.types import DecoratedCallable
|
|
@@ -48,14 +50,7 @@ class CreateView(BaseView, SaveMixin):
|
|
|
48
50
|
await self.check_unique_field(data_dict, model_class=self.model_class)
|
|
49
51
|
await model.save()
|
|
50
52
|
|
|
51
|
-
|
|
52
|
-
if self.is_with_prefetch:
|
|
53
|
-
model = await self.get_object(model.id, self.model_class, self.is_with_prefetch)
|
|
54
|
-
await self.setattr_model(model, prefetch_related_fields=self.prefetch_related_fields)
|
|
55
|
-
|
|
56
|
-
return self.create_response_schema.model_validate(model)
|
|
57
|
-
|
|
58
|
-
return
|
|
53
|
+
return model
|
|
59
54
|
|
|
60
55
|
async def set_create_fields(self, request_data, *args, **kwargs) -> dict:
|
|
61
56
|
"""
|
|
@@ -94,7 +89,17 @@ class CreateView(BaseView, SaveMixin):
|
|
|
94
89
|
*args,
|
|
95
90
|
**kwargs
|
|
96
91
|
)
|
|
97
|
-
|
|
92
|
+
if isinstance(data, JSONResponse):
|
|
93
|
+
return data
|
|
94
|
+
if isinstance(data, PydanticBaseModel):
|
|
95
|
+
return self.success(data=data)
|
|
96
|
+
if settings.app_settings.WHETHER_CREATE_RESPONSE_DATA:
|
|
97
|
+
if self.is_with_prefetch:
|
|
98
|
+
data = await self.get_object(data.id, self.model_class, self.is_with_prefetch)
|
|
99
|
+
await self.setattr_model(data, prefetch_related_fields=self.prefetch_related_fields)
|
|
100
|
+
|
|
101
|
+
return self.success(data=self.create_response_schema.model_validate(data))
|
|
102
|
+
return self.success()
|
|
98
103
|
return route
|
|
99
104
|
|
|
100
105
|
def _handler_create_settings(self):
|
|
@@ -109,6 +114,7 @@ class CreateView(BaseView, SaveMixin):
|
|
|
109
114
|
self.create_response_schema_factory = response_factory(self.create_response_schema, name="Create")
|
|
110
115
|
else:
|
|
111
116
|
self.create_response_schema_factory = self.gen_get_one_response_schema_factory()
|
|
117
|
+
self.create_response_schema = self.get_one_schema
|
|
112
118
|
|
|
113
119
|
doc = self.create.__doc__
|
|
114
120
|
summary = doc.strip().split("\n")[0] if doc else f"Create"
|
|
@@ -124,9 +130,3 @@ class CreateView(BaseView, SaveMixin):
|
|
|
124
130
|
|
|
125
131
|
|
|
126
132
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/delete_filter_view.py
RENAMED
|
@@ -56,13 +56,12 @@ class DeleteFilterView(BaseView):
|
|
|
56
56
|
if self.delete_filter_route:
|
|
57
57
|
return
|
|
58
58
|
|
|
59
|
+
self.delete_filter_response_schema_factory = None
|
|
59
60
|
func_type = inspect.signature(self.destroy_filter).return_annotation
|
|
60
61
|
if func_type != inspect._empty and func_type is not None:
|
|
61
62
|
self.delete_filter_response_schema = func_type
|
|
62
63
|
if self.delete_filter_response_schema:
|
|
63
64
|
self.delete_filter_response_schema_factory = response_factory(self.delete_filter_response_schema, name="DeleteFilter")
|
|
64
|
-
else:
|
|
65
|
-
self.delete_filter_response_schema_factory = self.gen_get_one_response_schema_factory()
|
|
66
65
|
|
|
67
66
|
doc = self.destroy_filter.__doc__
|
|
68
67
|
summary = doc.strip().split("\n")[0] if doc else "Delete Filter"
|
|
@@ -71,7 +70,7 @@ class DeleteFilterView(BaseView):
|
|
|
71
70
|
path=path,
|
|
72
71
|
endpoint=self._delete_filter_decorator(),
|
|
73
72
|
methods=["DELETE"],
|
|
74
|
-
response_model=
|
|
73
|
+
response_model=self.delete_filter_response_schema_factory,
|
|
75
74
|
summary=summary,
|
|
76
75
|
dependencies=self.delete_filter_route,
|
|
77
76
|
)
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/delete_tree_view.py
RENAMED
|
@@ -81,13 +81,12 @@ class DeleteTreeView(BaseView):
|
|
|
81
81
|
if self.delete_tree_route:
|
|
82
82
|
return
|
|
83
83
|
|
|
84
|
+
self.delete_tree_response_schema_factory = None
|
|
84
85
|
func_type = inspect.signature(self.destroy_tree).return_annotation
|
|
85
86
|
if func_type != inspect._empty and func_type is not None:
|
|
86
87
|
self.delete_tree_response_schema = func_type
|
|
87
88
|
if self.delete_tree_response_schema:
|
|
88
89
|
self.delete_tree_response_schema_factory = response_factory(self.delete_tree_response_schema, name="DeleteTree")
|
|
89
|
-
else:
|
|
90
|
-
self.delete_tree_response_schema_factory = self.gen_get_one_response_schema_factory()
|
|
91
90
|
|
|
92
91
|
doc = self.destroy_tree.__doc__
|
|
93
92
|
summary = doc.strip().split("\n")[0] if doc else "Delete Tree"
|
|
@@ -96,7 +95,7 @@ class DeleteTreeView(BaseView):
|
|
|
96
95
|
path=path,
|
|
97
96
|
endpoint=self._delete_tree_decorator(),
|
|
98
97
|
methods=["DELETE"],
|
|
99
|
-
response_model=
|
|
98
|
+
response_model=self.delete_tree_response_schema_factory,
|
|
100
99
|
summary=summary,
|
|
101
100
|
dependencies=self.delete_tree_route,
|
|
102
101
|
)
|
|
@@ -71,13 +71,12 @@ class DeleteView(BaseView):
|
|
|
71
71
|
if not self.delete_route:
|
|
72
72
|
return
|
|
73
73
|
|
|
74
|
+
self.delete_response_schema_factory = None
|
|
74
75
|
func_type = inspect.signature(self.destroy).return_annotation
|
|
75
76
|
if func_type != inspect._empty and func_type is not None:
|
|
76
77
|
self.delete_response_schema = func_type
|
|
77
78
|
if self.delete_response_schema:
|
|
78
79
|
self.delete_response_schema_factory = response_factory(self.delete_response_schema, name="Delete")
|
|
79
|
-
else:
|
|
80
|
-
self.delete_response_schema_factory = self.gen_get_one_response_schema_factory()
|
|
81
80
|
|
|
82
81
|
doc = self.destroy.__doc__
|
|
83
82
|
summary = doc.strip().split("\n")[0] if doc else "Delete All"
|
|
@@ -86,7 +85,7 @@ class DeleteView(BaseView):
|
|
|
86
85
|
path=path,
|
|
87
86
|
endpoint=self._delete_decorator(),
|
|
88
87
|
methods=["DELETE"],
|
|
89
|
-
response_model=
|
|
88
|
+
response_model=self.delete_response_schema_factory,
|
|
90
89
|
summary=summary,
|
|
91
90
|
dependencies=self.delete_route,
|
|
92
91
|
)
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/get_relation_view.py
RENAMED
|
@@ -56,7 +56,7 @@ class GetRelationView(BaseView):
|
|
|
56
56
|
|
|
57
57
|
async def get_relation(self, pk: str, search: str, filters: dict, relation_filters: dict, *args, **kwargs):
|
|
58
58
|
relation_queryset = await self.get_relation_queryset(filters=relation_filters, *args, **kwargs)
|
|
59
|
-
id_list = relation_queryset.filter(
|
|
59
|
+
id_list = relation_queryset.filter(Q(**{self.path_id_name: pk})).values_list(self.relation_id_name, flat=True)
|
|
60
60
|
|
|
61
61
|
queryset = await self.get_queryset(search=search, filters=filters, *args, **kwargs)
|
|
62
62
|
|
|
@@ -109,7 +109,7 @@ class GetTreeView(BaseView):
|
|
|
109
109
|
top_nodes = [top_node]
|
|
110
110
|
else:
|
|
111
111
|
queryset = self.queryset.filter(
|
|
112
|
-
|
|
112
|
+
Q(**{settings.app_settings.DEFAULT_TREE_PARENT_FIELD + '_id__isnull': True})
|
|
113
113
|
).prefetch_related(settings.app_settings.DEFAULT_TREE_PARENT_FIELD)
|
|
114
114
|
|
|
115
115
|
queryset = await self.get_tree_queryset(queryset, search, filters)
|
|
@@ -133,9 +133,9 @@ class GetTreeView(BaseView):
|
|
|
133
133
|
return queryset
|
|
134
134
|
|
|
135
135
|
async def get_tree_recursion(self, node, search: str, filters: dict,):
|
|
136
|
-
data = self.get_tree_schema.
|
|
136
|
+
data = self.get_tree_schema.model_validate(node)
|
|
137
137
|
pk = getattr(data, self._get_pk_field(self.model_class))
|
|
138
|
-
children_queryset = self.queryset.filter(
|
|
138
|
+
children_queryset = self.queryset.filter(Q(**{settings.app_settings.DEFAULT_TREE_PARENT_FIELD + '_id': pk}))
|
|
139
139
|
children_queryset = await self.get_tree_queryset(children_queryset, search, filters)
|
|
140
140
|
children_objs = await children_queryset
|
|
141
141
|
if not children_objs:
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/save_mixin.py
RENAMED
|
@@ -5,7 +5,7 @@ from fastgenerateapi.pydantic_utils.base_model import BaseModel
|
|
|
5
5
|
|
|
6
6
|
class SaveMixin:
|
|
7
7
|
|
|
8
|
-
async def set_save_fields(self, data_dict: dict, *args, **kwargs) -> dict:
|
|
8
|
+
async def set_save_fields(self, data_dict: dict, request_data, *args, **kwargs) -> dict:
|
|
9
9
|
"""
|
|
10
10
|
添加属性: data_dict['user_id'] = current_user.id
|
|
11
11
|
kwargs 包含 request_data
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/update_relation_view.py
RENAMED
|
@@ -35,7 +35,7 @@ class UpdateRelationView(BaseView, SaveMixin):
|
|
|
35
35
|
|
|
36
36
|
@atomic()
|
|
37
37
|
async def update_relation(self, pk: str, request_data, *args, **kwargs):
|
|
38
|
-
active_id_list = set(await self.queryset.filter(
|
|
38
|
+
active_id_list = set(await self.queryset.filter(Q(**{self.path_id_name: pk})).values_list(
|
|
39
39
|
self._get_pk_field(model_class=self.model_class), flat=True
|
|
40
40
|
))
|
|
41
41
|
add_id_list = set(request_data.id_list) - active_id_list
|
|
@@ -75,10 +75,12 @@ class UpdateRelationView(BaseView, SaveMixin):
|
|
|
75
75
|
if not self.update_relation_route:
|
|
76
76
|
return
|
|
77
77
|
|
|
78
|
+
self.update_relation_response_schema_factory = None
|
|
78
79
|
func_type = inspect.signature(self.create).return_annotation
|
|
79
80
|
if func_type != inspect._empty and func_type is not None:
|
|
80
81
|
self.update_relation_response_schema = func_type
|
|
81
|
-
|
|
82
|
+
if self.update_relation_response_schema:
|
|
83
|
+
self.update_relation_response_schema_factory = response_factory(self.update_relation_response_schema, name="UpdateRelation")
|
|
82
84
|
|
|
83
85
|
doc = self.update_relation.__doc__
|
|
84
86
|
summary = doc.strip().split("\n")[0] if doc else f"Update {self.model_class.__name__.title()}"
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import inspect
|
|
2
2
|
from typing import Optional, Type, Union, Any
|
|
3
3
|
|
|
4
|
+
from pydantic import BaseModel as PydanticBaseModel
|
|
5
|
+
|
|
4
6
|
from fastapi import Depends
|
|
5
7
|
from fastapi.security import OAuth2PasswordBearer
|
|
6
8
|
from fastapi.types import DecoratedCallable
|
|
@@ -32,23 +34,16 @@ class UpdateView(BaseView, SaveMixin):
|
|
|
32
34
|
@atomic()
|
|
33
35
|
async def update(self, pk: str, request_data, *args, **kwargs):
|
|
34
36
|
model = await self.get_object(pk, self.model_class, self.is_with_prefetch)
|
|
35
|
-
data_dict = await self.set_update_fields(request_data=request_data, *args, **kwargs)
|
|
36
|
-
data_dict = await self.set_save_fields(data_dict, request_data=request_data, *args, **kwargs)
|
|
37
|
+
data_dict = await self.set_update_fields(model=model, request_data=request_data, *args, **kwargs)
|
|
38
|
+
data_dict = await self.set_save_fields(data_dict, model=model, request_data=request_data, *args, **kwargs)
|
|
37
39
|
|
|
38
40
|
await self.check_unique_field(data_dict, model_class=self.model_class, model=model)
|
|
39
41
|
model = await self.set_update_model(model, data_dict, request_data=request_data, *args, **kwargs)
|
|
40
42
|
await model.save()
|
|
41
43
|
|
|
42
|
-
|
|
43
|
-
if self.is_with_prefetch:
|
|
44
|
-
await self.setattr_model(model, prefetch_related_fields=self.prefetch_related_fields, *args, **kwargs)
|
|
45
|
-
|
|
46
|
-
return self.update_response_schema.from_orm(model)
|
|
47
|
-
|
|
48
|
-
return
|
|
44
|
+
return model
|
|
49
45
|
|
|
50
|
-
|
|
51
|
-
async def set_update_fields(request_data, *args, **kwargs):
|
|
46
|
+
async def set_update_fields(self, model, request_data, *args, **kwargs) -> dict:
|
|
52
47
|
"""
|
|
53
48
|
修改属性:
|
|
54
49
|
data_dict = request_data.dict(exclude_unset=True)
|
|
@@ -86,7 +81,18 @@ class UpdateView(BaseView, SaveMixin):
|
|
|
86
81
|
token=token,
|
|
87
82
|
*args, **kwargs
|
|
88
83
|
)
|
|
89
|
-
|
|
84
|
+
if isinstance(data, JSONResponse):
|
|
85
|
+
return data
|
|
86
|
+
if isinstance(data, PydanticBaseModel):
|
|
87
|
+
return self.success(data=data)
|
|
88
|
+
if settings.app_settings.WHETHER_UPDATE_RESPONSE_DATA:
|
|
89
|
+
if self.is_with_prefetch:
|
|
90
|
+
await self.setattr_model(data, prefetch_related_fields=self.prefetch_related_fields, *args,
|
|
91
|
+
**kwargs)
|
|
92
|
+
|
|
93
|
+
return self.success(data=self.update_response_schema.model_validate(data))
|
|
94
|
+
|
|
95
|
+
return self.success()
|
|
90
96
|
return route
|
|
91
97
|
|
|
92
98
|
def _handler_update_settings(self):
|
|
@@ -101,6 +107,7 @@ class UpdateView(BaseView, SaveMixin):
|
|
|
101
107
|
self.update_response_schema_factory = response_factory(self.update_response_schema, name="Update")
|
|
102
108
|
else:
|
|
103
109
|
self.update_response_schema_factory = self.gen_get_one_response_schema_factory()
|
|
110
|
+
self.update_response_schema = self.get_one_schema
|
|
104
111
|
|
|
105
112
|
doc = self.update.__doc__
|
|
106
113
|
summary = doc.strip().split("\n")[0] if doc else f"Update"
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/controller/filter_controller.py
RENAMED
|
@@ -89,11 +89,15 @@ class BaseFilter:
|
|
|
89
89
|
:param value:
|
|
90
90
|
:return:
|
|
91
91
|
"""
|
|
92
|
+
q_dict = {}
|
|
92
93
|
if isinstance(value, (str, datetime, date, time)):
|
|
93
94
|
if hasattr(value, "upper") and value.upper() in ["NONE", "NULL", "NIL"]:
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
95
|
+
q_dict[self.model_field] = None
|
|
96
|
+
else:
|
|
97
|
+
q_dict[self.model_field] = str(value)
|
|
98
|
+
else:
|
|
99
|
+
q_dict[self.model_field] = value
|
|
100
|
+
return Q(**q_dict)
|
|
97
101
|
|
|
98
102
|
def query(self, queryset: QuerySet, value: Union[str, list, bool]) -> QuerySet:
|
|
99
103
|
"""
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/schemas_factory/common_function.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from typing import Type, Optional, Union
|
|
2
2
|
|
|
3
|
-
from pydantic import
|
|
3
|
+
from pydantic import field_validator
|
|
4
4
|
from pydantic.fields import FieldInfo
|
|
5
5
|
from tortoise import Model
|
|
6
6
|
|
|
@@ -144,7 +144,10 @@ def get_validate_dict_from_fields(fields_info: dict) -> dict:
|
|
|
144
144
|
for filed, field_tuple in fields_info.items():
|
|
145
145
|
if field_tuple[0] == str:
|
|
146
146
|
method_name = "check_%s" % filed
|
|
147
|
-
|
|
147
|
+
# v1
|
|
148
|
+
# validator_method = validator(filed, pre=True, allow_reuse=True)(remove_blank_strings)
|
|
149
|
+
# v2
|
|
150
|
+
validator_method = field_validator(filed, mode='before')(remove_blank_strings)
|
|
148
151
|
validator_dict[method_name] = validator_method
|
|
149
152
|
return validator_dict
|
|
150
153
|
|
|
@@ -108,6 +108,8 @@ class SettingsModel(BaseModel):
|
|
|
108
108
|
etcd_settings = EtcdSettings(**data_dict.get("EtcdSettings", {}))
|
|
109
109
|
if etcd_settings.ETCD_SETTING_KEY:
|
|
110
110
|
res, metadata = etcd_settings.client.get(etcd_settings.ETCD_SETTING_KEY)
|
|
111
|
+
if not res:
|
|
112
|
+
raise ValidationException("未读取到Etcd的配置文件")
|
|
111
113
|
data_dict.update(yaml.safe_load(res))
|
|
112
114
|
if not data_dict:
|
|
113
115
|
raise ValidationException(errors="配置错误")
|
|
@@ -8,7 +8,8 @@ from fastgenerateapi.pydantic_utils.base_settings import BaseSettings
|
|
|
8
8
|
|
|
9
9
|
class AppSettings(BaseSettings):
|
|
10
10
|
# 字段配置 驼峰格式:新版本(pydantic.alias_generators:to_camel)、老版本(pydantic.utils.to_lower_camel)
|
|
11
|
-
|
|
11
|
+
# 下划线:pydantic.alias_generators.to_snake
|
|
12
|
+
ALIAS_GENERATOR: Optional[str] = Field(default="pydantic.alias_generators.to_camel", description="序列化参数命名方法路径")
|
|
12
13
|
|
|
13
14
|
# 分页对应字段以及配置默认值
|
|
14
15
|
CURRENT_PAGE_FIELD: Optional[str] = Field(default="page", description="当前页字段")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fastgenerateapi
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.3
|
|
4
4
|
Summary: FastAPIView Class View
|
|
5
5
|
Author: ShiLiang
|
|
6
6
|
Author-email: 2509144896@qq.com
|
|
@@ -94,14 +94,14 @@ uvicorn.run(app)
|
|
|
94
94
|
- get_one_include, get_one_exclude
|
|
95
95
|
- 与include同时生效,无include自动包含数据库模型搜友字段
|
|
96
96
|
- 可添加跨表字段,自动生成校验和文档
|
|
97
|
-
- 其他字段: ("test",
|
|
97
|
+
- 其他字段: ("test", Optional[str], FieldInfo(..., description="文档描述"))
|
|
98
98
|
- get_all_include, get_all_exclude
|
|
99
99
|
- create_include, create_exclude
|
|
100
100
|
- update_include, update_exclude
|
|
101
101
|
|
|
102
102
|
#### 指定模型
|
|
103
103
|
```python
|
|
104
|
-
from
|
|
104
|
+
from fastgenerateapi import APIView
|
|
105
105
|
|
|
106
106
|
class XxxView(APIView):
|
|
107
107
|
model_class = XxxModel
|
|
@@ -110,7 +110,7 @@ class XxxView(APIView):
|
|
|
110
110
|
#### 查询/创建/修改字段限制及校验示例
|
|
111
111
|
- 如果有唯一字段或者联合唯一字段自动校验是否为唯一值
|
|
112
112
|
```python
|
|
113
|
-
from
|
|
113
|
+
from fastgenerateapi import APIView
|
|
114
114
|
|
|
115
115
|
class XxxView(APIView):
|
|
116
116
|
list_schema = HeathInfoList
|
|
@@ -126,11 +126,12 @@ class XxxView(APIView):
|
|
|
126
126
|
```python
|
|
127
127
|
class XxxView(APIView):
|
|
128
128
|
|
|
129
|
-
def
|
|
129
|
+
def view_get_user_list(self):
|
|
130
130
|
"""
|
|
131
|
-
|
|
131
|
+
文档Summary注释
|
|
132
|
+
生成 get方法,路由为 前缀/user_list
|
|
132
133
|
"""
|
|
133
|
-
return
|
|
134
|
+
return self.success(data={"list": []})
|
|
134
135
|
```
|
|
135
136
|
|
|
136
137
|
|
|
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-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/base_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/response_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/tool_mixin.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/utils/__init__.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/utils/docx_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/utils/file_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/utils/pdf_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/utils/xlsx_util.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/api_view/mixin/utils/zip_util.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/channel/connection_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/controller/router_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/controller/rpc_controller.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/controller/search_controller.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/data_type/mysql_data_type.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
|
|
File without changes
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/fastapi_utils/param_utils.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/fastapi_utils/response_utils.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-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/my_fields/soft_delete_field.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/pydantic_utils/base_model.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/pydantic_utils/base_settings.py
RENAMED
|
File without changes
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/pydantic_utils/json_encoders.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
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi/schemas_factory/response_factory.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
|
|
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
|
|
File without changes
|
{fastgenerateapi-1.2.1 → fastgenerateapi-1.2.3}/fastgenerateapi.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|