fastgenerateapi 1.1.15__py2.py3-none-any.whl → 1.1.18__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.
- fastgenerateapi/__version__.py +1 -1
- fastgenerateapi/api_view/get_all_view.py +14 -5
- fastgenerateapi/api_view/get_one_view.py +10 -1
- fastgenerateapi/pydantic_utils/json_encoders.py +2 -1
- fastgenerateapi/schemas_factory/common_function.py +6 -7
- fastgenerateapi/schemas_factory/get_all_schema_factory.py +2 -2
- fastgenerateapi/settings/all_settings.py +34 -8
- fastgenerateapi/settings/etcd_settings.py +31 -0
- {fastgenerateapi-1.1.15.dist-info → fastgenerateapi-1.1.18.dist-info}/METADATA +1 -1
- {fastgenerateapi-1.1.15.dist-info → fastgenerateapi-1.1.18.dist-info}/RECORD +13 -12
- {fastgenerateapi-1.1.15.dist-info → fastgenerateapi-1.1.18.dist-info}/LICENSE +0 -0
- {fastgenerateapi-1.1.15.dist-info → fastgenerateapi-1.1.18.dist-info}/WHEEL +0 -0
- {fastgenerateapi-1.1.15.dist-info → fastgenerateapi-1.1.18.dist-info}/top_level.txt +0 -0
fastgenerateapi/__version__.py
CHANGED
|
@@ -33,6 +33,7 @@ class GetAllView(BaseView, GetMixin):
|
|
|
33
33
|
filter_schema: Optional[Type[PYDANTIC_SCHEMA]] = None
|
|
34
34
|
filter_fields: Union[None, list] = None
|
|
35
35
|
order_by_fields: Union[None, list] = None
|
|
36
|
+
auto_add_id_order: bool = True
|
|
36
37
|
"""
|
|
37
38
|
get_all_route: 获取详情路由开关,可以放依赖函数列表
|
|
38
39
|
get_all_schema: 返回序列化
|
|
@@ -45,6 +46,7 @@ class GetAllView(BaseView, GetMixin):
|
|
|
45
46
|
filter_fields: 筛选对应字段
|
|
46
47
|
example: name__contains or (create_at__gt, datetime) or (create_at__gt, datetime, create_time)
|
|
47
48
|
order_by_fields: 排序对应字段
|
|
49
|
+
auto_add_id_order: 是否自动在 order_by_fields 后面追加id排序
|
|
48
50
|
"""
|
|
49
51
|
|
|
50
52
|
async def get_all(self, search: Optional[str], filters: dict, *args, **kwargs) -> Union[BaseModel, dict, None]:
|
|
@@ -60,10 +62,11 @@ class GetAllView(BaseView, GetMixin):
|
|
|
60
62
|
queryset = await self.filter_queryset(queryset, filters, *args, **kwargs)
|
|
61
63
|
queryset = self.filter_controller.query(queryset=queryset, values=filters)
|
|
62
64
|
queryset = queryset.prefetch_related(*self.prefetch_related_fields.keys())
|
|
65
|
+
if self.auto_add_id_order:
|
|
66
|
+
self.order_by_fields = self.order_by_fields or []
|
|
67
|
+
self.order_by_fields.append("id")
|
|
63
68
|
if self.order_by_fields:
|
|
64
|
-
queryset = queryset.order_by(*self.order_by_fields
|
|
65
|
-
else:
|
|
66
|
-
queryset = queryset.order_by("id")
|
|
69
|
+
queryset = queryset.order_by(*self.order_by_fields)
|
|
67
70
|
|
|
68
71
|
return queryset
|
|
69
72
|
|
|
@@ -166,9 +169,15 @@ class GetAllView(BaseView, GetMixin):
|
|
|
166
169
|
return
|
|
167
170
|
self.search_controller = SearchController(self.get_base_filter(self.search_fields))
|
|
168
171
|
self.filter_controller = FilterController(self.get_base_filter(self.filter_fields, self.filter_schema))
|
|
172
|
+
get_all_schema_include = []
|
|
173
|
+
if self.prefetch_related_fields:
|
|
174
|
+
for key, value in self.prefetch_related_fields.items():
|
|
175
|
+
if value and type(value) in [list, tuple, set]:
|
|
176
|
+
for val in value:
|
|
177
|
+
get_all_schema_include.append(key + "__" + val)
|
|
169
178
|
self.get_all_schema = self.get_all_schema or get_all_schema_factory(
|
|
170
|
-
self.model_class
|
|
171
|
-
|
|
179
|
+
self.model_class, include=get_all_schema_include
|
|
180
|
+
) or self.get_one_schema if hasattr(self, "get_one_schema") else get_one_schema_factory(self.model_class)
|
|
172
181
|
self.get_page_schema = get_page_schema_factory(self.get_all_schema)
|
|
173
182
|
self.get_list_schema = get_list_schema_factory(self.get_all_schema)
|
|
174
183
|
self.get_all_response_schema = response_factory(self.get_page_schema, name="GetPage")
|
|
@@ -66,7 +66,16 @@ class GetOneView(BaseView, GetMixin):
|
|
|
66
66
|
def _handler_get_one_settings(self):
|
|
67
67
|
if not self.get_one_route:
|
|
68
68
|
return
|
|
69
|
-
|
|
69
|
+
get_one_schema_include = []
|
|
70
|
+
if self.is_with_prefetch and self.prefetch_related_fields:
|
|
71
|
+
for key, value in self.prefetch_related_fields.items():
|
|
72
|
+
if value and type(value) in [list, tuple, set]:
|
|
73
|
+
for val in value:
|
|
74
|
+
get_one_schema_include.append(key + "__" + val)
|
|
75
|
+
self.get_one_schema = self.schema or self.get_one_schema or get_one_schema_factory(
|
|
76
|
+
model_class=self.model_class,
|
|
77
|
+
include=get_one_schema_include,
|
|
78
|
+
)
|
|
70
79
|
self.get_one_response_schema = response_factory(self.get_one_schema, name="GetOne")
|
|
71
80
|
doc = self.get_one.__doc__
|
|
72
81
|
summary = doc.strip().split("\n")[0] if self.get_one.__doc__ else "Get One"
|
|
@@ -40,8 +40,9 @@ common_format_with_s_time = new_time_type("COMMON_FORMAT_WITH_S_TIME", format_st
|
|
|
40
40
|
|
|
41
41
|
JSON_ENCODERS = {
|
|
42
42
|
time: lambda v: v.strftime(TIME_FORMAT_TIME_COMMON),
|
|
43
|
-
date: lambda v: v.strftime(DATE_FORMAT_COMMON),
|
|
43
|
+
# date: lambda v: v.strftime(DATE_FORMAT_COMMON),
|
|
44
44
|
# datetime: lambda v: v.strftime(DATETIME_FORMAT_COMMON),
|
|
45
|
+
date: lambda v: int(datetime.combine(v, time.min).timestamp() * 1000),
|
|
45
46
|
datetime: lambda v: int(v.timestamp() * 1000),
|
|
46
47
|
|
|
47
48
|
# special date type
|
|
@@ -15,15 +15,14 @@ def get_field_info(value, description="", default_field_type=None) -> (Type, Fie
|
|
|
15
15
|
required = False
|
|
16
16
|
if value.field_type is None:
|
|
17
17
|
if default_field_type:
|
|
18
|
-
field_type =
|
|
18
|
+
value.field_type = default_field_type
|
|
19
19
|
else:
|
|
20
|
-
field_type =
|
|
20
|
+
value.field_type = str
|
|
21
|
+
if hasattr(value, "null") and value.null:
|
|
22
|
+
field_type = Optional[value.field_type]
|
|
21
23
|
else:
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
else:
|
|
25
|
-
field_type = value.field_type
|
|
26
|
-
required = True
|
|
24
|
+
field_type = value.field_type
|
|
25
|
+
required = True
|
|
27
26
|
field_info_dict = {"required": required}
|
|
28
27
|
if not required and hasattr(value, "default") and not hasattr(value.default, '__call__'):
|
|
29
28
|
field_info_dict.setdefault("default", value.default)
|
|
@@ -16,14 +16,14 @@ def get_all_schema_factory(
|
|
|
16
16
|
include: Union[list, tuple, set] = None,
|
|
17
17
|
extra_include: Union[list, tuple, set] = None,
|
|
18
18
|
exclude: Union[list, tuple, set] = None,
|
|
19
|
-
name: Optional[str] = None
|
|
19
|
+
name: Optional[str] = None,
|
|
20
20
|
) -> Optional[Type[T]]:
|
|
21
21
|
"""
|
|
22
22
|
Is used to create a GetAllSchema
|
|
23
23
|
"""
|
|
24
24
|
if not hasattr(model_class, "PydanticMeta"):
|
|
25
25
|
return None
|
|
26
|
-
if not hasattr(model_class.PydanticMeta, "get_all_include") and not hasattr(model_class.PydanticMeta, "get_all_exclude"):
|
|
26
|
+
if not include and not extra_include and not exclude and not hasattr(model_class.PydanticMeta, "get_all_include") and not hasattr(model_class.PydanticMeta, "get_all_exclude"):
|
|
27
27
|
return None
|
|
28
28
|
|
|
29
29
|
all_fields_info = get_dict_from_model_fields(model_class)
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
+
import os
|
|
1
2
|
from functools import lru_cache
|
|
2
3
|
from pathlib import Path
|
|
3
|
-
from typing import Union
|
|
4
|
+
from typing import Union, Optional
|
|
4
5
|
|
|
5
6
|
import yaml
|
|
7
|
+
from fastapi.exceptions import ValidationException
|
|
6
8
|
from pydantic import BaseModel
|
|
7
9
|
from pydantic.fields import FieldInfo
|
|
8
10
|
|
|
11
|
+
from fastgenerateapi.settings.etcd_settings import EtcdSettings
|
|
9
12
|
from fastgenerateapi.settings.redis_settings import RedisSettings
|
|
10
13
|
from fastgenerateapi.settings.app_settings import AppSettings
|
|
11
14
|
from fastgenerateapi.settings.system_settings import SystemSettings
|
|
@@ -20,12 +23,17 @@ class SettingsModel(BaseModel):
|
|
|
20
23
|
redis_settings: RedisSettings = RedisSettings()
|
|
21
24
|
|
|
22
25
|
@classmethod
|
|
23
|
-
def generate_file(
|
|
26
|
+
def generate_file(
|
|
27
|
+
cls,
|
|
28
|
+
path='./.env',
|
|
29
|
+
etcd_settings: Optional[EtcdSettings] = None,
|
|
30
|
+
):
|
|
24
31
|
"""
|
|
25
32
|
生成配置文件
|
|
26
33
|
.env 会增加前缀
|
|
27
34
|
.yaml 忽略前缀
|
|
28
35
|
:param path: 可选 .env / application.yaml
|
|
36
|
+
:param etcd_settings:
|
|
29
37
|
:return:
|
|
30
38
|
"""
|
|
31
39
|
content = ''
|
|
@@ -57,15 +65,25 @@ class SettingsModel(BaseModel):
|
|
|
57
65
|
else:
|
|
58
66
|
content += f" # {v.description}\n"
|
|
59
67
|
content += "\n"
|
|
60
|
-
|
|
61
|
-
|
|
68
|
+
if etcd_settings and etcd_settings.ETCD_SETTING_KEY:
|
|
69
|
+
import etcd3
|
|
70
|
+
etcd = etcd3.client(**etcd_settings.model_dump(exclude_unset=True))
|
|
71
|
+
etcd.put(etcd_settings.ETCD_SETTING_KEY, content)
|
|
72
|
+
else:
|
|
73
|
+
with open(file=path, mode='w', encoding='utf-8') as f:
|
|
74
|
+
f.writelines(content)
|
|
62
75
|
|
|
63
76
|
@classmethod
|
|
64
77
|
@lru_cache
|
|
65
|
-
def get_global_settings(
|
|
78
|
+
def get_global_settings(
|
|
79
|
+
cls,
|
|
80
|
+
path: Union[Path, str, None] = '.env',
|
|
81
|
+
etcd_settings: Optional[EtcdSettings] = None,
|
|
82
|
+
):
|
|
66
83
|
"""
|
|
67
84
|
get global settings and set into cache
|
|
68
|
-
:param path: 可选 .env / application.yaml
|
|
85
|
+
:param path: 可选 .env / application.yaml / etcd.yaml
|
|
86
|
+
:param etcd_settings: 当储配置 存在etcd 时
|
|
69
87
|
:return:
|
|
70
88
|
"""
|
|
71
89
|
setting_models = cls.model_fields.copy()
|
|
@@ -76,8 +94,16 @@ class SettingsModel(BaseModel):
|
|
|
76
94
|
if isinstance(v, FieldInfo):
|
|
77
95
|
setting_dict[k] = v.annotation(_env_file=str(path))
|
|
78
96
|
elif str(path).__contains__('.yaml'):
|
|
79
|
-
|
|
80
|
-
|
|
97
|
+
if os.path.isfile(path):
|
|
98
|
+
with open(path, 'r', encoding='utf-8') as file:
|
|
99
|
+
data_dict = yaml.safe_load(file)
|
|
100
|
+
elif etcd_settings and etcd_settings.ETCD_SETTING_KEY:
|
|
101
|
+
import etcd3
|
|
102
|
+
etcd = etcd3.client(**etcd_settings.model_dump(exclude_unset=True))
|
|
103
|
+
res, metadata = etcd.get(etcd_settings.ETCD_SETTING_KEY)
|
|
104
|
+
data_dict = yaml.safe_load(res)
|
|
105
|
+
else:
|
|
106
|
+
raise ValidationException(errors="配置错误")
|
|
81
107
|
for k, v in setting_models.items():
|
|
82
108
|
if isinstance(v, FieldInfo):
|
|
83
109
|
setting_dict[k] = v.annotation(**data_dict.get(v.annotation.__name__, {}))
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from typing import Optional, Any
|
|
2
|
+
|
|
3
|
+
from pydantic import Field
|
|
4
|
+
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class EtcdSettings(BaseSettings):
|
|
8
|
+
"""
|
|
9
|
+
Etcd Settings
|
|
10
|
+
"""
|
|
11
|
+
ETCD_SETTING_KEY: Optional[str] = Field(default=None, description="当使用etcd做配置储存时的键值")
|
|
12
|
+
ETCD_HOST: Optional[str] = Field(default='localhost', description="地址")
|
|
13
|
+
ETCD_PORT: Optional[int] = Field(default=2379, description="端口")
|
|
14
|
+
ETCD_CA_CERT: Optional[str] = Field(default=None, description="Ca证书")
|
|
15
|
+
ETCD_CERT_KEY: Optional[str] = Field(default=None, description="证书key")
|
|
16
|
+
ETCD_CERT_CERT: Optional[str] = Field(default=None, description="证书密钥")
|
|
17
|
+
ETCD_TIMEOUT: Optional[int] = Field(default=None, description="超时试剂")
|
|
18
|
+
ETCD_USER: Optional[str] = Field(default=None, description="账号")
|
|
19
|
+
ETCD_PASSWORD: Optional[str] = Field(default=None, description="密码")
|
|
20
|
+
ETCD_GRPC_OPTIONS: Optional[Any] = Field(default=None, description="grpc参数")
|
|
21
|
+
|
|
22
|
+
model_config = SettingsConfigDict(
|
|
23
|
+
env_prefix="",
|
|
24
|
+
env_file=".env",
|
|
25
|
+
case_sensitive=True,
|
|
26
|
+
extra='ignore'
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
fastgenerateapi/__init__.py,sha256=eh2qtp7FbjrgaRX5b3H3UWpasFdNHbVFqLUhpqVbaTU,1287
|
|
2
|
-
fastgenerateapi/__version__.py,sha256=
|
|
2
|
+
fastgenerateapi/__version__.py,sha256=gGiH1aF2jZOpi5oIq-BQ3smPy88ykxJZykKfGpmDlVM,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=AUWMd2Ys5mVwifN5iOs7BjpBqCF_ktv23oEp7sHR1g0,9984
|
|
@@ -7,8 +7,8 @@ fastgenerateapi/api_view/create_view.py,sha256=NvJ0ocD2UMHcdipA4W7MYamxAw8sYeXAc
|
|
|
7
7
|
fastgenerateapi/api_view/delete_filter_view.py,sha256=ZP9pmRNeCTu_Go4ErfnDPnkPMShEh_Ql18iNCfMNJ3s,2838
|
|
8
8
|
fastgenerateapi/api_view/delete_tree_view.py,sha256=oqkWQNlA7TNZHHRTJJwxidOHxOgmvUpcnu81cT3oTA0,4083
|
|
9
9
|
fastgenerateapi/api_view/delete_view.py,sha256=FvaltPR1ttLfUvBoRoSHP-dGb79LRZlEMSEbYzE_W1E,3497
|
|
10
|
-
fastgenerateapi/api_view/get_all_view.py,sha256=
|
|
11
|
-
fastgenerateapi/api_view/get_one_view.py,sha256=
|
|
10
|
+
fastgenerateapi/api_view/get_all_view.py,sha256=KnbjEZZ6FxxoVDbIqkgL4DoVmzqVjelmeLOZCcg-FOI,9721
|
|
11
|
+
fastgenerateapi/api_view/get_one_view.py,sha256=N54M5F_vtjDlB7XlnPNhIbzEJ-KHyN5q4_jnIGkZ5eo,4201
|
|
12
12
|
fastgenerateapi/api_view/get_relation_view.py,sha256=coVqhD29WW7SzdAeqM5LFtNzMulzzJyELT2En-56CF4,9780
|
|
13
13
|
fastgenerateapi/api_view/get_tree_view.py,sha256=8BQomoOU954bXrqGzeFrKS8ydHL9VPxQfwvhV59rQxg,9312
|
|
14
14
|
fastgenerateapi/api_view/sql_get_view.py,sha256=wxYI0JuH8Gw99LfMMwA4rQ_a_tBrKYxYhA7MNGQOx3A,6691
|
|
@@ -69,13 +69,13 @@ fastgenerateapi/my_fields/validator.py,sha256=0mPsV4tOIw1YYuBCN7YJPYCWstIsCsy9K3
|
|
|
69
69
|
fastgenerateapi/pydantic_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
70
70
|
fastgenerateapi/pydantic_utils/base_model.py,sha256=kHFcx48UbpMgLfKdNT351p74PZCdPxx3vVs3ho0qrgs,2600
|
|
71
71
|
fastgenerateapi/pydantic_utils/base_settings.py,sha256=JydmNHS_vl3ys7yiXwkZuRZ-4tIgf0a_kfft7WNf4kY,533
|
|
72
|
-
fastgenerateapi/pydantic_utils/json_encoders.py,sha256=
|
|
72
|
+
fastgenerateapi/pydantic_utils/json_encoders.py,sha256=EdQfpADCB5Ims3EWtTxhGZj4ypTm7EMmmnjS9-IzPWI,2946
|
|
73
73
|
fastgenerateapi/schemas_factory/__init__.py,sha256=X9U96fiyRfCY0u6SzaCYG62RdpEGFX7yOZh_cJl6R2E,472
|
|
74
|
-
fastgenerateapi/schemas_factory/common_function.py,sha256=
|
|
74
|
+
fastgenerateapi/schemas_factory/common_function.py,sha256=ECTCFEVuMg2uQMuFGq66XhcIPZWeXLNba2PUXC4FGvA,5589
|
|
75
75
|
fastgenerateapi/schemas_factory/common_schema_factory.py,sha256=ac_tYOcBqpnGVSkx4NCAZz3Hd1PHmwSocBRld5Jxro4,2904
|
|
76
76
|
fastgenerateapi/schemas_factory/create_schema_factory.py,sha256=rkah8geyfMkfqA6IhHDxq-lFomn8DA3bca1AtFcrLpQ,3733
|
|
77
77
|
fastgenerateapi/schemas_factory/filter_schema_factory.py,sha256=T4Kpv8G9VAOOZKnRDh2oD3tE_xhsjw2FtEmncJa_MYM,1531
|
|
78
|
-
fastgenerateapi/schemas_factory/get_all_schema_factory.py,sha256=
|
|
78
|
+
fastgenerateapi/schemas_factory/get_all_schema_factory.py,sha256=RYqEtlwWHXu1Ti7P2MPP2C9xfQ_JJzoeSk-0qps9AA0,5232
|
|
79
79
|
fastgenerateapi/schemas_factory/get_one_schema_factory.py,sha256=cgKoCOSK-4Lky8xUoZHIMAZmVSyWOW5-DmxaM6RAQEY,3431
|
|
80
80
|
fastgenerateapi/schemas_factory/get_relation_schema_factory.py,sha256=VvzWaxAwOnMdtaUYxmWw1tOw3KP0KBwmR6J3UAld2x0,3111
|
|
81
81
|
fastgenerateapi/schemas_factory/get_tree_schema_factory.py,sha256=v0DAf7kwB-17rHbkzVscLkm6Jh53qa2cieQ7awH78pw,7259
|
|
@@ -83,9 +83,10 @@ fastgenerateapi/schemas_factory/response_factory.py,sha256=C-E3lqIdfIJCIZhvmSaAi
|
|
|
83
83
|
fastgenerateapi/schemas_factory/sql_get_all_schema_factory.py,sha256=dhgMvXZIq4av7puIMiQOTuVqNOuBoMvBZVd98GWJTRg,1810
|
|
84
84
|
fastgenerateapi/schemas_factory/update_schema_factory.py,sha256=E-86vF98Ed92Q2VFqtS35xqxr_c34du9ok42JBfnj1g,3729
|
|
85
85
|
fastgenerateapi/settings/__init__.py,sha256=dlyJb7BNh8Svau-UOrV4pxfoSYnNTA6eE41fu43vlT8,173
|
|
86
|
-
fastgenerateapi/settings/all_settings.py,sha256=
|
|
86
|
+
fastgenerateapi/settings/all_settings.py,sha256=X-qzZ3bkZhgILDk4l6y7fQkT83D4ZBwbaa5HCezIdZI,4913
|
|
87
87
|
fastgenerateapi/settings/app_settings.py,sha256=kq0O4FZMveiLdzwRkkH1E1byccoNGlLyz7G4fNTZm6w,7357
|
|
88
88
|
fastgenerateapi/settings/db_settings.py,sha256=duTgLjMHO6MTDfEZ2tkAGiSXrTKuHSLBJW00l5_rv7g,1570
|
|
89
|
+
fastgenerateapi/settings/etcd_settings.py,sha256=z93EoutIrrbc0ZMae-6lA2Vik1z3D_hO9OXtjtfRV5I,1205
|
|
89
90
|
fastgenerateapi/settings/file_settings.py,sha256=8Ra5H0nxRp1r_Ib_RGbNO0rUFaxqYMjuJT9A4fHE3Oo,857
|
|
90
91
|
fastgenerateapi/settings/jwt_settings.py,sha256=mRtzLZz1bntrl6UXAnIq6xilEEN8NS8oJSv62CGXOEs,971
|
|
91
92
|
fastgenerateapi/settings/otlp_settings.py,sha256=4haWpSdJBeor-rq_rBOgQl6oYRv9eppdwm1yWGt6GyE,3161
|
|
@@ -103,8 +104,8 @@ fastgenerateapi/utils/snowflake.py,sha256=GiFVkE10sPiqJ094sMfrPsaV7Y9Y3c1djrSfgs
|
|
|
103
104
|
fastgenerateapi/utils/str_util.py,sha256=c-jUlCFw-Dz4W1W9Jc1TqGZw3JXu-qN5ovnE6fjc9j0,3445
|
|
104
105
|
fastgenerateapi/utils/swagger_to_js.py,sha256=pPPTag6TYtxdbKMHD3m8lJvc8Gv9HC97CGHt4esU1-E,530
|
|
105
106
|
script/__init__.py,sha256=26UWatnbm6ZIwQMuu9NNzQ0IW1ACO4Oe9caModuTpWM,4
|
|
106
|
-
fastgenerateapi-1.1.
|
|
107
|
-
fastgenerateapi-1.1.
|
|
108
|
-
fastgenerateapi-1.1.
|
|
109
|
-
fastgenerateapi-1.1.
|
|
110
|
-
fastgenerateapi-1.1.
|
|
107
|
+
fastgenerateapi-1.1.18.dist-info/LICENSE,sha256=gcuuhKKc5-dwvyvHsXjlC9oM6N5gZ6umYbC8ewW1Yvg,35821
|
|
108
|
+
fastgenerateapi-1.1.18.dist-info/METADATA,sha256=oGrQjDP8H9tk33ek2X-_Q7fg3pfkZmyu5g3rAK3juh8,6025
|
|
109
|
+
fastgenerateapi-1.1.18.dist-info/WHEEL,sha256=iYlv5fX357PQyRT2o6tw1bN-YcKFFHKqB_LwHO5wP-g,110
|
|
110
|
+
fastgenerateapi-1.1.18.dist-info/top_level.txt,sha256=CW2SlpYjTRdacF-5ufnPMtwpYcR0XYn_bDxa2ZrrTBI,23
|
|
111
|
+
fastgenerateapi-1.1.18.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|