fastgenerateapi 1.1.16__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.

@@ -8,7 +8,7 @@
8
8
  # d8888P
9
9
 
10
10
 
11
- VERSION = (1, 1, 16)
11
+ VERSION = (1, 1, 18)
12
12
 
13
13
  __version__ = '.'.join(map(str, VERSION))
14
14
 
@@ -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)
@@ -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(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,25 @@ 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 = 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(cls, path: Union[Path, str, None] = '.env'):
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
- with open(path, 'r', encoding='utf-8') as file:
80
- data_dict = yaml.safe_load(file)
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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastgenerateapi
3
- Version: 1.1.16
3
+ Version: 1.1.18
4
4
  Summary: FastAPIView Class View
5
5
  Author: ShiLiang
6
6
  Author-email: 2509144896@qq.com
@@ -1,5 +1,5 @@
1
1
  fastgenerateapi/__init__.py,sha256=eh2qtp7FbjrgaRX5b3H3UWpasFdNHbVFqLUhpqVbaTU,1287
2
- fastgenerateapi/__version__.py,sha256=Rbs2BZJch_RxKPV_BVZVOFep8pmhL38yOtnYE29TE9s,497
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
@@ -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=NPvaYDHu9GBtYNnNpbh35VUd1JWy4Mx4nAzOK4cvVo0,2868
72
+ fastgenerateapi/pydantic_utils/json_encoders.py,sha256=EdQfpADCB5Ims3EWtTxhGZj4ypTm7EMmmnjS9-IzPWI,2946
73
73
  fastgenerateapi/schemas_factory/__init__.py,sha256=X9U96fiyRfCY0u6SzaCYG62RdpEGFX7yOZh_cJl6R2E,472
74
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=gM2pYAGxNiqy3cmwW5lYcZHucilhI1aqCVRj2nt0EWw,5177
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=ylABCKJzh_US4ZfZQgDEYFYm75Zz-0mL8pqziFdgudY,3795
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.16.dist-info/LICENSE,sha256=gcuuhKKc5-dwvyvHsXjlC9oM6N5gZ6umYbC8ewW1Yvg,35821
107
- fastgenerateapi-1.1.16.dist-info/METADATA,sha256=vpM75h8HPEx3iIv7y6OkdceWovTcft_IpCrdy8O_USE,6025
108
- fastgenerateapi-1.1.16.dist-info/WHEEL,sha256=iYlv5fX357PQyRT2o6tw1bN-YcKFFHKqB_LwHO5wP-g,110
109
- fastgenerateapi-1.1.16.dist-info/top_level.txt,sha256=CW2SlpYjTRdacF-5ufnPMtwpYcR0XYn_bDxa2ZrrTBI,23
110
- fastgenerateapi-1.1.16.dist-info/RECORD,,
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,,