fastgenerateapi 1.1.16__tar.gz → 1.1.20__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (115) hide show
  1. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/PKG-INFO +1 -1
  2. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/__version__.py +1 -1
  3. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/get_all_view.py +4 -1
  4. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/get_one_view.py +4 -1
  5. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/pydantic_utils/json_encoders.py +2 -1
  6. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/schemas_factory/get_all_schema_factory.py +2 -2
  7. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/settings/__init__.py +0 -2
  8. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/settings/all_settings.py +45 -9
  9. fastgenerateapi-1.1.20/fastgenerateapi/settings/etcd_settings.py +32 -0
  10. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi.egg-info/PKG-INFO +1 -1
  11. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi.egg-info/SOURCES.txt +1 -0
  12. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/LICENSE +0 -0
  13. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/README.md +0 -0
  14. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/__init__.py +0 -0
  15. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/__init__.py +0 -0
  16. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/api_view.py +0 -0
  17. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/base_view.py +0 -0
  18. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/create_view.py +0 -0
  19. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/delete_filter_view.py +0 -0
  20. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/delete_tree_view.py +0 -0
  21. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/delete_view.py +0 -0
  22. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/get_relation_view.py +0 -0
  23. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/get_tree_view.py +0 -0
  24. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/mixin/__init__.py +0 -0
  25. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/mixin/base_mixin.py +0 -0
  26. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/mixin/dbmodel_mixin.py +0 -0
  27. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/mixin/get_mixin.py +0 -0
  28. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/mixin/response_mixin.py +0 -0
  29. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/mixin/save_mixin.py +0 -0
  30. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/mixin/tool_mixin.py +0 -0
  31. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/mixin/utils/__init__.py +0 -0
  32. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/mixin/utils/docx_util.py +0 -0
  33. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/mixin/utils/file_util.py +0 -0
  34. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/mixin/utils/pdf_util.py +0 -0
  35. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/mixin/utils/xlsx_util.py +0 -0
  36. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/mixin/utils/zip_util.py +0 -0
  37. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/sql_get_view.py +0 -0
  38. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/switch_view.py +0 -0
  39. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/update_relation_view.py +0 -0
  40. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/api_view/update_view.py +0 -0
  41. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/cache/__init__.py +0 -0
  42. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/cache/cache_decorator.py +0 -0
  43. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/cache/key_builder.py +0 -0
  44. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/channel/__init__.py +0 -0
  45. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/channel/connection_manager.py +0 -0
  46. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/channel/consumer.py +0 -0
  47. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/channel/websocket_view.py +0 -0
  48. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/controller/__init__.py +0 -0
  49. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/controller/filter_controller.py +0 -0
  50. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/controller/router_controller.py +0 -0
  51. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/controller/rpc_controller.py +0 -0
  52. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/controller/search_controller.py +0 -0
  53. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/controller/ws_controller.py +0 -0
  54. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/data_type/__init__.py +0 -0
  55. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/data_type/data_type.py +0 -0
  56. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/data_type/mysql_data_type.py +0 -0
  57. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/deps/__init__.py +0 -0
  58. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/deps/filter_params_deps.py +0 -0
  59. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/deps/paginator_deps.py +0 -0
  60. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/deps/tree_params_deps.py +0 -0
  61. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/example/__init__.py +0 -0
  62. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/example/models.py +0 -0
  63. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/example/routers.py +0 -0
  64. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/example/schemas.py +0 -0
  65. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/example/views.py +0 -0
  66. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/fastapi_utils/__init__.py +0 -0
  67. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/fastapi_utils/all.py +0 -0
  68. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/fastapi_utils/param_utils.py +0 -0
  69. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/fastapi_utils/response_utils.py +0 -0
  70. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/model/__init__.py +0 -0
  71. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/model/base_model.py +0 -0
  72. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/my_fields/__init__.py +0 -0
  73. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/my_fields/aes_field.py +0 -0
  74. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/my_fields/enum_field.py +0 -0
  75. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/my_fields/pk_field.py +0 -0
  76. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/my_fields/pwd_field.py +0 -0
  77. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/my_fields/soft_delete_field.py +0 -0
  78. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/my_fields/validator.py +0 -0
  79. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/pydantic_utils/__init__.py +0 -0
  80. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/pydantic_utils/base_model.py +0 -0
  81. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/pydantic_utils/base_settings.py +0 -0
  82. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/schemas_factory/__init__.py +0 -0
  83. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/schemas_factory/common_function.py +0 -0
  84. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/schemas_factory/common_schema_factory.py +0 -0
  85. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/schemas_factory/create_schema_factory.py +0 -0
  86. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/schemas_factory/filter_schema_factory.py +0 -0
  87. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/schemas_factory/get_one_schema_factory.py +0 -0
  88. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/schemas_factory/get_relation_schema_factory.py +0 -0
  89. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/schemas_factory/get_tree_schema_factory.py +0 -0
  90. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/schemas_factory/response_factory.py +0 -0
  91. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/schemas_factory/sql_get_all_schema_factory.py +0 -0
  92. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/schemas_factory/update_schema_factory.py +0 -0
  93. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/settings/app_settings.py +0 -0
  94. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/settings/db_settings.py +0 -0
  95. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/settings/file_settings.py +0 -0
  96. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/settings/jwt_settings.py +0 -0
  97. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/settings/otlp_settings.py +0 -0
  98. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/settings/redis_settings.py +0 -0
  99. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/settings/sms_settings.py +0 -0
  100. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/settings/system_settings.py +0 -0
  101. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/utils/__init__.py +0 -0
  102. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/utils/aes.py +0 -0
  103. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/utils/auto_discover.py +0 -0
  104. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/utils/exception.py +0 -0
  105. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/utils/file_utils.py +0 -0
  106. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/utils/pwd_utils.py +0 -0
  107. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/utils/ramdom_utils.py +0 -0
  108. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/utils/snowflake.py +0 -0
  109. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/utils/str_util.py +0 -0
  110. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi/utils/swagger_to_js.py +0 -0
  111. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi.egg-info/dependency_links.txt +0 -0
  112. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/fastgenerateapi.egg-info/top_level.txt +0 -0
  113. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/script/__init__.py +0 -0
  114. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/setup.cfg +0 -0
  115. {fastgenerateapi-1.1.16 → fastgenerateapi-1.1.20}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastgenerateapi
3
- Version: 1.1.16
3
+ Version: 1.1.20
4
4
  Summary: FastAPIView Class View
5
5
  Author: ShiLiang
6
6
  Author-email: 2509144896@qq.com
@@ -8,7 +8,7 @@
8
8
  # d8888P
9
9
 
10
10
 
11
- VERSION = (1, 1, 16)
11
+ VERSION = (1, 1, 20)
12
12
 
13
13
  __version__ = '.'.join(map(str, VERSION))
14
14
 
@@ -174,7 +174,10 @@ class GetAllView(BaseView, GetMixin):
174
174
  for key, value in self.prefetch_related_fields.items():
175
175
  if value and type(value) in [list, tuple, set]:
176
176
  for val in value:
177
- get_all_schema_include.append(key + "__" + val)
177
+ val_str = val
178
+ if type(val) in [list, tuple, set]:
179
+ val_str = val[0]
180
+ get_all_schema_include.append(key + "__" + val_str)
178
181
  self.get_all_schema = self.get_all_schema or get_all_schema_factory(
179
182
  self.model_class, include=get_all_schema_include
180
183
  ) or self.get_one_schema if hasattr(self, "get_one_schema") else get_one_schema_factory(self.model_class)
@@ -71,7 +71,10 @@ class GetOneView(BaseView, GetMixin):
71
71
  for key, value in self.prefetch_related_fields.items():
72
72
  if value and type(value) in [list, tuple, set]:
73
73
  for val in value:
74
- get_one_schema_include.append(key + "__" + val)
74
+ val_str = val
75
+ if type(val) in [list, tuple, set]:
76
+ val_str = val[0]
77
+ get_one_schema_include.append(key + "__" + val_str)
75
78
  self.get_one_schema = self.schema or self.get_one_schema or get_one_schema_factory(
76
79
  model_class=self.model_class,
77
80
  include=get_one_schema_include,
@@ -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
@@ -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)
@@ -5,5 +5,3 @@ from .file_settings import *
5
5
  from .jwt_settings import *
6
6
  from .sms_settings import *
7
7
 
8
-
9
-
@@ -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, Type
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(cls, path='./.env'):
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,26 @@ class SettingsModel(BaseModel):
57
65
  else:
58
66
  content += f" # {v.description}\n"
59
67
  content += "\n"
60
- with open(file=path, mode='w', encoding='utf-8') as f:
61
- f.writelines(content)
68
+ if etcd_settings and etcd_settings.ETCD_SETTING_KEY:
69
+ import etcd3
70
+ etcd_dict = etcd_settings.model_dump(exclude_unset=True, by_alias=True, exclude={"ETCD_SETTING_KEY", })
71
+ etcd = etcd3.client(**{key.removeprefix("ETCD_").lower(): value for key, value in etcd_dict.items()})
72
+ etcd.put(etcd_settings.ETCD_SETTING_KEY, content)
73
+ else:
74
+ with open(file=path, mode='w', encoding='utf-8') as f:
75
+ f.writelines(content)
62
76
 
63
77
  @classmethod
64
78
  @lru_cache
65
- def get_global_settings(cls, path: Union[Path, str, None] = '.env'):
79
+ def get_global_settings(
80
+ cls,
81
+ path: Union[Path, str, None] = '.env',
82
+ etcd_settings: Optional[EtcdSettings] = None,
83
+ ):
66
84
  """
67
85
  get global settings and set into cache
68
- :param path: 可选 .env / application.yaml
86
+ :param path: 可选 .env / application.yaml / etcd.yaml
87
+ :param etcd_settings: 当储配置 存在etcd 时
69
88
  :return:
70
89
  """
71
90
  setting_models = cls.model_fields.copy()
@@ -76,11 +95,28 @@ class SettingsModel(BaseModel):
76
95
  if isinstance(v, FieldInfo):
77
96
  setting_dict[k] = v.annotation(_env_file=str(path))
78
97
  elif str(path).__contains__('.yaml'):
79
- with open(path, 'r', encoding='utf-8') as file:
80
- data_dict = yaml.safe_load(file)
98
+ data_dict = None
99
+ if os.path.isfile(path):
100
+ with open(path, 'r', encoding='utf-8') as file:
101
+ data_dict = yaml.safe_load(file)
102
+ else:
103
+ if not etcd_settings:
104
+ etcd_settings = EtcdSettings()
105
+ if etcd_settings.ETCD_SETTING_KEY:
106
+ import etcd3
107
+ etcd_dict = etcd_settings.model_dump(exclude_unset=True, by_alias=True, exclude={"ETCD_SETTING_KEY",})
108
+ etcd = etcd3.client(**{key.removeprefix("ETCD_").lower(): value for key, value in etcd_dict.items()})
109
+ res, metadata = etcd.get(etcd_settings.ETCD_SETTING_KEY)
110
+ data_dict = yaml.safe_load(res)
111
+ if not data_dict:
112
+ raise ValidationException(errors="配置错误")
81
113
  for k, v in setting_models.items():
82
114
  if isinstance(v, FieldInfo):
83
- setting_dict[k] = v.annotation(**data_dict.get(v.annotation.__name__, {}))
115
+ if hasattr(v.annotation, "Config") and v.annotation.Config.env_prefix:
116
+ annotation_dict = {k_i.removeprefix(v.annotation.Config.env_prefix): v_i for k_i, v_i in data_dict.get(v.annotation.__name__, {}).items()}
117
+ else:
118
+ annotation_dict = data_dict.get(v.annotation.__name__, {})
119
+ setting_dict[k] = v.annotation(**annotation_dict)
84
120
 
85
121
  setting_data = cls(**setting_dict)
86
122
  global settings
@@ -0,0 +1,32 @@
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
+ frozen=True,
28
+ )
29
+
30
+
31
+
32
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastgenerateapi
3
- Version: 1.1.16
3
+ Version: 1.1.20
4
4
  Summary: FastAPIView Class View
5
5
  Author: ShiLiang
6
6
  Author-email: 2509144896@qq.com
@@ -93,6 +93,7 @@ fastgenerateapi/settings/__init__.py
93
93
  fastgenerateapi/settings/all_settings.py
94
94
  fastgenerateapi/settings/app_settings.py
95
95
  fastgenerateapi/settings/db_settings.py
96
+ fastgenerateapi/settings/etcd_settings.py
96
97
  fastgenerateapi/settings/file_settings.py
97
98
  fastgenerateapi/settings/jwt_settings.py
98
99
  fastgenerateapi/settings/otlp_settings.py