fastgenerateapi 1.1.6__py2.py3-none-any.whl → 1.1.8__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.

@@ -8,7 +8,7 @@
8
8
  # d8888P
9
9
 
10
10
 
11
- VERSION = (1, 1, 6)
11
+ VERSION = (1, 1, 8)
12
12
 
13
13
  __version__ = '.'.join(map(str, VERSION))
14
14
 
@@ -78,9 +78,11 @@ class BaseView(BaseMixin, ResponseMixin, ToolMixin, DBModelMixin):
78
78
  return self.error(msg="relation_model_class not allow None")
79
79
  return self.get_active_queryset(self.relation_model_class)
80
80
 
81
- async def get_object(self, pk):
82
- model = await self.queryset.filter(pk=pk).prefetch_related(
83
- *self.prefetch_related_fields.keys()).first()
81
+ async def get_object(self, pk, is_with_prefetch):
82
+ queryset = self.queryset.filter(id=pk)
83
+ if is_with_prefetch:
84
+ queryset = queryset.prefetch_related(*self.prefetch_related_fields.keys())
85
+ model = await queryset.first()
84
86
  if model:
85
87
  return model
86
88
  else:
@@ -22,6 +22,7 @@ class GetOneView(BaseView, GetMixin):
22
22
 
23
23
  get_one_route: Union[bool, DEPENDENCIES] = True
24
24
  get_one_schema: Optional[Type[BaseModel]] = None
25
+ is_with_prefetch: Optional[bool] = False
25
26
  """
26
27
  get_one_route: 获取详情路由开关,可以放依赖函数列表
27
28
  get_one_schema: 返回序列化
@@ -31,12 +32,13 @@ class GetOneView(BaseView, GetMixin):
31
32
  - 优选模型层get_one_include和get_one_exclude(同时存在交集)
32
33
  - 合并模型层include和exclude(同时存在交集)
33
34
  - 模型层所有字段
35
+ is_with_prefetch: 是否带有列表的prefetch_related_fields
34
36
  """
35
37
 
36
38
  async def get_one(self, pk: str, *args, **kwargs):
37
- model = await self.get_object(pk)
38
-
39
- await self.setattr_model(model, prefetch_related_fields=self.prefetch_related_fields, *args, **kwargs)
39
+ model = await self.get_object(pk, self.is_with_prefetch)
40
+ if self.is_with_prefetch:
41
+ await self.setattr_model(model, prefetch_related_fields=self.prefetch_related_fields, *args, **kwargs)
40
42
 
41
43
  # await self.setattr_model_rpc(self.rpc_class, model, self.rpc_param)
42
44
  model = await self.set_get_model(model)
@@ -22,7 +22,7 @@ class ResponseMixin:
22
22
  msg: str = "请求成功",
23
23
  status_code: int = 200,
24
24
  code: Optional[int] = None,
25
- data: Union[BaseModel, dict, str, None] = None,
25
+ data: Any = None,
26
26
  background: Optional[BackgroundTask] = None,
27
27
  *args,
28
28
  **kwargs
@@ -37,7 +37,7 @@ class ResponseMixin:
37
37
  "success": True,
38
38
  "code": code,
39
39
  settings.app_settings.MESSAGE_RESPONSE_FIELD: msg,
40
- "data": json_compatible_data
40
+ settings.app_settings.DATA_RESPONSE_FIELD: json_compatible_data
41
41
  })
42
42
  kwargs.update(resp.dict())
43
43
  return JSONResponse(kwargs, status_code=status_code, background=background)
@@ -48,7 +48,7 @@ class ResponseMixin:
48
48
  status_code: int = 200,
49
49
  code: Optional[int] = None,
50
50
  # success: bool = False,
51
- data: Union[BaseModel, dict, str, None] = None,
51
+ data: Any = None,
52
52
  background: Optional[BackgroundTask] = None,
53
53
  headers: Optional[Dict[str, Any]] = None,
54
54
  *args,
@@ -65,7 +65,7 @@ class ResponseMixin:
65
65
  "success": False,
66
66
  "code": code,
67
67
  settings.app_settings.MESSAGE_RESPONSE_FIELD: msg,
68
- "data": json_compatible_data
68
+ settings.app_settings.DATA_RESPONSE_FIELD: json_compatible_data
69
69
  })
70
70
  kwargs.update(resp.dict())
71
71
  return JSONResponse(
@@ -13,7 +13,7 @@ class StaffInfo(Model):
13
13
  """
14
14
  员工信息
15
15
  """
16
- delete_at: Optional[datetime.datetime] = my_fields.SoftDeleteField()
16
+ deleted_at: Optional[datetime.datetime] = my_fields.SoftDeleteField()
17
17
  created_at: Optional[datetime.datetime] = fields.DatetimeField(null=True, auto_now_add=True, description="创建时间")
18
18
  category: Optional[IntEnumClass] = my_fields.IntEnumField(enum_list=["总经理", '主管', '员工'], description="职位分类")
19
19
  name: Optional[str] = fields.CharField(description="名字", max_length=255)
@@ -31,7 +31,7 @@ class StaffInfo(Model):
31
31
 
32
32
  class PydanticMeta:
33
33
  # 以下内容仅用于演示,存在重复和多余写法
34
- exclude = ["delete_at", "created_at"]
34
+ exclude = ["deleted_at", "created_at"]
35
35
  get_include = ["category_name", "name"]
36
36
  get_all_include = ["company__name"]
37
37
  get_one_include = [("test", Optional[str], FieldInfo(default="", description="测试字段")), ]
@@ -42,7 +42,7 @@ class CompanyInfo(Model):
42
42
  """
43
43
  公司信息
44
44
  """
45
- delete_at: Optional[datetime.datetime] = my_fields.SoftDeleteField()
45
+ deleted_at: Optional[datetime.datetime] = my_fields.SoftDeleteField()
46
46
  name: str = fields.CharField(description="岗位名称", max_length=255)
47
47
  boss_name: str = fields.CharField(description="老板名字", max_length=255)
48
48
  parent: fields.ForeignKeyNullableRelation["CompanyInfo"] = fields.ForeignKeyField(
@@ -53,7 +53,7 @@ class CompanyInfo(Model):
53
53
  description='父级')
54
54
 
55
55
  class PydanticMeta:
56
- exclude = ["delete_at"]
56
+ exclude = ["deleted_at"]
57
57
 
58
58
 
59
59
 
@@ -45,12 +45,21 @@ class BaseActiveMixin(models.Model):
45
45
  class Meta:
46
46
  abstract = True
47
47
 
48
-
49
48
  class TortoiseOrmAbstractModel(PrimaryKeyMixin, TimestampMixin, BaseDeleteMixin):
50
49
  ...
51
50
 
52
51
  class PydanticMeta:
53
- exclude = ["delete_at"]
52
+ exclude = ["deleted_at"]
53
+
54
+ class Meta:
55
+ abstract = True
56
+
57
+
58
+ class TortoiseOrmAbstractBaseModel(PrimaryKeyMixin, TimestampMixin, BaseActiveMixin):
59
+ ...
60
+
61
+ class PydanticMeta:
62
+ exclude = ["is_active"]
54
63
 
55
64
  class Meta:
56
65
  abstract = True
@@ -23,7 +23,8 @@ if TYPE_CHECKING: # pragma: nocoverage
23
23
 
24
24
  class IntEnumField(IntEnumFieldInstance):
25
25
  """
26
- 传入参数数组,默认生成枚举类,数字从 1 开始
26
+ 传入参数数组,默认生成枚举类,数字从 0 开始
27
+ 可以通过 start_num=1 设置从1开始
27
28
  例如:
28
29
  enum_list = ["A", "B"]
29
30
  相当于枚举
@@ -33,10 +34,10 @@ class IntEnumField(IntEnumFieldInstance):
33
34
  通过方法 get_name 获取对应的值, "A"
34
35
  """
35
36
 
36
- def __init__(self, enum_list: List[any], **kwargs: Any) -> None:
37
+ def __init__(self, enum_list: List[any], start_num=0, **kwargs: Any) -> None:
37
38
  self.enum_list = enum_list
38
39
  self.description = kwargs.get("description", "") + " >> " + self.get_description(enum_list)
39
- super().__init__(enum_type=self.create_enum(enum_list), **kwargs)
40
+ super().__init__(enum_type=self.create_enum(enum_list, start_num=start_num), **kwargs)
40
41
 
41
42
  @property
42
43
  def constraints(self) -> dict:
@@ -73,10 +74,10 @@ class IntEnumField(IntEnumFieldInstance):
73
74
  description += f"{index}:{val};"
74
75
  return description
75
76
 
76
- def create_enum(self, enum_list):
77
+ def create_enum(self, enum_list, start_num=0):
77
78
  # 创建枚举类的成员字典,确保值是唯一的
78
79
 
79
- members = {self.number_to_words(name): name for name, _ in enumerate(enum_list, 0)}
80
+ members = {self.number_to_words(name): name for name, _ in enumerate(enum_list, start_num)}
80
81
 
81
82
  # 使用Enum的元类EnumMeta来动态创建枚举类
82
83
  enum_class = IntEnum("CategoryEnum", members)
@@ -29,7 +29,7 @@ def response_factory(schema_cls: Union[Type[T], BaseModel, None] = None, name: s
29
29
  else:
30
30
  fields.setdefault(
31
31
  settings.app_settings.DATA_RESPONSE_FIELD,
32
- (Union[dict, str, None], FieldInfo(default={}, description="数据内容"))
32
+ (Union[dict, list, str, None], FieldInfo(default={}, description="数据内容"))
33
33
  )
34
34
 
35
35
  try:
@@ -55,7 +55,7 @@ def discover_routes(
55
55
 
56
56
 
57
57
  if __name__ == '__main__':
58
- # print(discover_models("../../modules"))
59
- print(get_path_list("../../modules", "router"))
58
+ print(discover_models("../../apps"))
59
+ # print(get_path_list("../../apps", "router"))
60
60
 
61
61
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastgenerateapi
3
- Version: 1.1.6
3
+ Version: 1.1.8
4
4
  Summary: FastAPIView Class View
5
5
  Author: ShiLiang
6
6
  Author-email: 2509144896@qq.com
@@ -24,7 +24,7 @@ License-File: LICENSE
24
24
  [Github](https://github.com/ShiLiangAPI)
25
25
 
26
26
  #### 版本说明
27
- 最新版本:v1.1.6
27
+ 最新版本:v1.1.7
28
28
  建议python版本:3.9+
29
29
  推荐fastapi版本:0.103.2
30
30
  推荐pydantic版本:2.11.5
@@ -1,14 +1,14 @@
1
1
  fastgenerateapi/__init__.py,sha256=eh2qtp7FbjrgaRX5b3H3UWpasFdNHbVFqLUhpqVbaTU,1287
2
- fastgenerateapi/__version__.py,sha256=9ky3ecSteNvevlAiyLVyHQD7z0lr7u7aDUPrNuxs0VU,496
2
+ fastgenerateapi/__version__.py,sha256=5TuAIUmKHEiY-E9rL3nClZhktmSp7FPyQig25FgIz1A,496
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
- fastgenerateapi/api_view/base_view.py,sha256=AzOS8q_IUUMSOsd2E2lIxj-YtX8vya967Oc1HXelysQ,9570
5
+ fastgenerateapi/api_view/base_view.py,sha256=gSvDW_uUu4a8FKg9rQlKH60m_W04VtpsqPFc4nnyMAk,9666
6
6
  fastgenerateapi/api_view/create_view.py,sha256=1w32kuCHMNSHrjC_6jaONi5IZg--oVrjpQdAOCqEH9s,4404
7
7
  fastgenerateapi/api_view/delete_filter_view.py,sha256=Tms1h-VYV2yeCkQLlW8cAEJO4zr3NhrNEgpIjiWGNpw,2474
8
8
  fastgenerateapi/api_view/delete_tree_view.py,sha256=-fve4SlZE8XTY9es1JiTH8bD5uxiIndpP4d4MNu0aBs,3690
9
9
  fastgenerateapi/api_view/delete_view.py,sha256=9tXuGfY_aS3kH8Fi1ylsoOv709PS4Dz8E7FVgXxN8Xc,3104
10
10
  fastgenerateapi/api_view/get_all_view.py,sha256=Bnnx0yZ125g4VWLj_wbDl3Aq9dGAb6hiZpe6C52rqbY,8834
11
- fastgenerateapi/api_view/get_one_view.py,sha256=f2ETMspQ2A7NjQEiLI745vHdExeSetcSsJ8q2MUC-E4,3354
11
+ fastgenerateapi/api_view/get_one_view.py,sha256=yKBw7BQOhCyyaTExszF17liHNT1S4lXo0SevJco-fh8,3528
12
12
  fastgenerateapi/api_view/get_relation_view.py,sha256=ybBi-wGLE97k9jwyxYOdYKD6qHSoQ2ZZVTHRLBNDcPE,9578
13
13
  fastgenerateapi/api_view/get_tree_view.py,sha256=l3y1FF-ybbjWTSC33CYc9xlo1qLiWNUg2XGc1uiCXnk,9124
14
14
  fastgenerateapi/api_view/sql_get_view.py,sha256=wxYI0JuH8Gw99LfMMwA4rQ_a_tBrKYxYhA7MNGQOx3A,6691
@@ -19,7 +19,7 @@ fastgenerateapi/api_view/mixin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
19
19
  fastgenerateapi/api_view/mixin/base_mixin.py,sha256=Aq12fTnL_Un3pPYFOE9Vo38j-mpePz9PJsLm0Rv2hu8,6862
20
20
  fastgenerateapi/api_view/mixin/dbmodel_mixin.py,sha256=T09Ydqr9Mt75CW6imxyNa8FsZ3wHaVS8WRmViGBmDSc,4757
21
21
  fastgenerateapi/api_view/mixin/get_mixin.py,sha256=cpyTHaKFNsAhbtnLkz057rGcaKJXipNS-m9ftITsz1I,266
22
- fastgenerateapi/api_view/mixin/response_mixin.py,sha256=d0pY6RfMjV-VXPNp29axtjvyEUXxsMlM0gL8_32L2DM,4394
22
+ fastgenerateapi/api_view/mixin/response_mixin.py,sha256=cTKmrPAxjG-28Ls94-YWCl-YgvGB_0VLdYyR6t_RIhA,4404
23
23
  fastgenerateapi/api_view/mixin/save_mixin.py,sha256=inRppAov9ruKqTgGhxPto84ETp1T1WP62n6OgEBIgyU,317
24
24
  fastgenerateapi/api_view/mixin/tool_mixin.py,sha256=B0c3fHXjHqUduu_hchA9Ssp6NDVdQGZv7NJOOs41Rj8,265
25
25
  fastgenerateapi/api_view/mixin/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -48,7 +48,7 @@ fastgenerateapi/deps/filter_params_deps.py,sha256=yynwWRQlRgY1cTQEpkd1_BX0Gr0XT1
48
48
  fastgenerateapi/deps/paginator_deps.py,sha256=EZWh11v2XAHVICYe-MNqlWeUuYrnYULnD-eX7B2N8Dc,3167
49
49
  fastgenerateapi/deps/tree_params_deps.py,sha256=yVenKx5X3MAOrUNe_dE94L7RzGfGyVxawF_VE1jbNck,1304
50
50
  fastgenerateapi/example/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
- fastgenerateapi/example/models.py,sha256=eR0fUiMNSH6fwzwBtGZOukcxPI-_uyS7vP4nHukpIc8,2203
51
+ fastgenerateapi/example/models.py,sha256=QGRt6OUTP4eGRXuSX_1F9q0C_yn7RUF3fkQBk6e94Gw,2207
52
52
  fastgenerateapi/example/routers.py,sha256=gsmViGNqO1JbVc0M8tZPvD46kReOYJ5I457WwBHt4l4,437
53
53
  fastgenerateapi/example/schemas.py,sha256=8UjQxy0lAvQ-nY2-PPNcsmzfg5TZJe0bVyhuIokPlgY,1677
54
54
  fastgenerateapi/example/views.py,sha256=eYy5jgcc-IVwKREMA3U4RNDku27Nn9NJU_Flwbp3R-4,3258
@@ -57,10 +57,10 @@ fastgenerateapi/fastapi_utils/all.py,sha256=QO-VcNGKFbpP7OfAl9EUtZYIjSvqSrHoyFjr
57
57
  fastgenerateapi/fastapi_utils/param_utils.py,sha256=Y2ktF8_ul9mg3V8elMTpz_Pp_iio0wqoQ7Yg_IGaGto,1219
58
58
  fastgenerateapi/fastapi_utils/response_utils.py,sha256=dqQHIeAe6N1zA5diUfDdGBQkyzZ82b-8GrgWzqrkw18,15922
59
59
  fastgenerateapi/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
- fastgenerateapi/model/base_model.py,sha256=cgGUSZ7E7auG3z2gsAvduFiL6lhZRdJ4m5q05eFhP2o,1573
60
+ fastgenerateapi/model/base_model.py,sha256=0eeIOHvkR4ZBpcs9mh-zlgMglJ8IGX9x7-lxdq8RPfI,1776
61
61
  fastgenerateapi/my_fields/__init__.py,sha256=StbTm3_2IBZ8U5kEWxtNyZ3I-Qs-pCFd5vtAZTq52wA,202
62
62
  fastgenerateapi/my_fields/aes_field.py,sha256=r4_Jhuq5lgwmITWjUYcFrv5uBR57GPGCVMgy3yNDvp4,4518
63
- fastgenerateapi/my_fields/enum_field.py,sha256=zs4d2RoqkACLY2KfKlDDoz5MDdY2gFLV_GJuC9XcBSs,7796
63
+ fastgenerateapi/my_fields/enum_field.py,sha256=QwOz7d3DGUA9kAzyA8VVPKSdYRdxo-YQLXl4BmIJwAE,7898
64
64
  fastgenerateapi/my_fields/pk_field.py,sha256=0rZIylE98xyW9QNlInr-HN843sxChwpoO4wRumWNKw4,1317
65
65
  fastgenerateapi/my_fields/pwd_field.py,sha256=eUnarxEyHgpOzTBmsl0KxsI8lR7FzUDjxyFCKTqJDBU,2191
66
66
  fastgenerateapi/my_fields/soft_delete_field.py,sha256=0Vf_BWewF71M27pAXkaUM82EyMe_pf3KDnW2aZmToEQ,1452
@@ -78,7 +78,7 @@ fastgenerateapi/schemas_factory/get_all_schema_factory.py,sha256=oNF7eATZvA58Uu_
78
78
  fastgenerateapi/schemas_factory/get_one_schema_factory.py,sha256=cgKoCOSK-4Lky8xUoZHIMAZmVSyWOW5-DmxaM6RAQEY,3431
79
79
  fastgenerateapi/schemas_factory/get_relation_schema_factory.py,sha256=VvzWaxAwOnMdtaUYxmWw1tOw3KP0KBwmR6J3UAld2x0,3111
80
80
  fastgenerateapi/schemas_factory/get_tree_schema_factory.py,sha256=v0DAf7kwB-17rHbkzVscLkm6Jh53qa2cieQ7awH78pw,7259
81
- fastgenerateapi/schemas_factory/response_factory.py,sha256=bUYoB6t1r2e7dE1okNoCSeLNU7jXv11aNyS3A5rrcz4,1661
81
+ fastgenerateapi/schemas_factory/response_factory.py,sha256=exsy_7Flz3yzMpYUDoQ7rUijwzWE6wEZiWcrkdP1mRE,1667
82
82
  fastgenerateapi/schemas_factory/sql_get_all_schema_factory.py,sha256=dhgMvXZIq4av7puIMiQOTuVqNOuBoMvBZVd98GWJTRg,1810
83
83
  fastgenerateapi/schemas_factory/update_schema_factory.py,sha256=E-86vF98Ed92Q2VFqtS35xqxr_c34du9ok42JBfnj1g,3729
84
84
  fastgenerateapi/settings/__init__.py,sha256=dlyJb7BNh8Svau-UOrV4pxfoSYnNTA6eE41fu43vlT8,173
@@ -93,7 +93,7 @@ fastgenerateapi/settings/sms_settings.py,sha256=qJP9v9fENs9fOoHh8-NCliusYrkOAzBn
93
93
  fastgenerateapi/settings/system_settings.py,sha256=sH7mEaFUHWVKX2YmArhijYmxzG82W4HSRKxZIp2oqIw,1146
94
94
  fastgenerateapi/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
95
  fastgenerateapi/utils/aes.py,sha256=2ewx-qc7wAN68iExyNM97F8dB1sXhfGYVpNWFYR_a1k,3569
96
- fastgenerateapi/utils/auto_discover.py,sha256=HRenTSOMyLSB55_YNjdoYFe--hDG3Oo-di9x9LXldCo,2322
96
+ fastgenerateapi/utils/auto_discover.py,sha256=1R5weLj1moWbRiUXQA0dKJvsaJw4wwE-YM57bUVrGgU,2316
97
97
  fastgenerateapi/utils/exception.py,sha256=dnBmVpHLUS_PZ2cwIvpAJ3ncswZnn31L98gNmCoe8_k,121
98
98
  fastgenerateapi/utils/file_utils.py,sha256=m9PrWLQ6mpT2XJyDxJtNzV3HnhQubqGb3awswSb-miM,2389
99
99
  fastgenerateapi/utils/pwd_utils.py,sha256=Ub_CANZNX9Thv4I3U8f7op2pT_cqjxC3viqYxtZFYeA,1448
@@ -102,8 +102,8 @@ fastgenerateapi/utils/snowflake.py,sha256=AXQWvKNdqj5eWcs8_SBRd5GMOQa_QnFD37qVGO
102
102
  fastgenerateapi/utils/str_util.py,sha256=c-jUlCFw-Dz4W1W9Jc1TqGZw3JXu-qN5ovnE6fjc9j0,3445
103
103
  fastgenerateapi/utils/swagger_to_js.py,sha256=pPPTag6TYtxdbKMHD3m8lJvc8Gv9HC97CGHt4esU1-E,530
104
104
  script/__init__.py,sha256=26UWatnbm6ZIwQMuu9NNzQ0IW1ACO4Oe9caModuTpWM,4
105
- fastgenerateapi-1.1.6.dist-info/LICENSE,sha256=gcuuhKKc5-dwvyvHsXjlC9oM6N5gZ6umYbC8ewW1Yvg,35821
106
- fastgenerateapi-1.1.6.dist-info/METADATA,sha256=ocjGUl37J5T8arirmxDVAByvMAKnEP9-RVZvl8smqsY,5960
107
- fastgenerateapi-1.1.6.dist-info/WHEEL,sha256=iYlv5fX357PQyRT2o6tw1bN-YcKFFHKqB_LwHO5wP-g,110
108
- fastgenerateapi-1.1.6.dist-info/top_level.txt,sha256=CW2SlpYjTRdacF-5ufnPMtwpYcR0XYn_bDxa2ZrrTBI,23
109
- fastgenerateapi-1.1.6.dist-info/RECORD,,
105
+ fastgenerateapi-1.1.8.dist-info/LICENSE,sha256=gcuuhKKc5-dwvyvHsXjlC9oM6N5gZ6umYbC8ewW1Yvg,35821
106
+ fastgenerateapi-1.1.8.dist-info/METADATA,sha256=8PiQST2S5-BDV0NUUAr2yFzf_qJbLwQoX1mqkXion0Q,5960
107
+ fastgenerateapi-1.1.8.dist-info/WHEEL,sha256=iYlv5fX357PQyRT2o6tw1bN-YcKFFHKqB_LwHO5wP-g,110
108
+ fastgenerateapi-1.1.8.dist-info/top_level.txt,sha256=CW2SlpYjTRdacF-5ufnPMtwpYcR0XYn_bDxa2ZrrTBI,23
109
+ fastgenerateapi-1.1.8.dist-info/RECORD,,