sycommon-python-lib 0.1.2__tar.gz → 0.1.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.

Potentially problematic release.


This version of sycommon-python-lib might be problematic. Click here for more details.

Files changed (51) hide show
  1. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/PKG-INFO +1 -1
  2. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/pyproject.toml +1 -1
  3. sycommon_python_lib-0.1.3/src/sycommon/middleware/middleware.py +39 -0
  4. sycommon_python_lib-0.1.3/src/sycommon/models/base_http.py +99 -0
  5. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/services.py +48 -4
  6. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
  7. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon_python_lib.egg-info/SOURCES.txt +1 -0
  8. sycommon_python_lib-0.1.2/src/sycommon/middleware/middleware.py +0 -36
  9. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/README.md +0 -0
  10. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/setup.cfg +0 -0
  11. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/__init__.py +0 -0
  12. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/config/Config.py +0 -0
  13. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/config/DatabaseConfig.py +0 -0
  14. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/config/EmbeddingConfig.py +0 -0
  15. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/config/LLMConfig.py +0 -0
  16. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/config/MQConfig.py +0 -0
  17. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/config/RerankerConfig.py +0 -0
  18. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/config/__init__.py +0 -0
  19. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/database/base_db_service.py +0 -0
  20. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/database/database_service.py +0 -0
  21. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/health/__init__.py +0 -0
  22. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/health/health_check.py +0 -0
  23. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/health/ping.py +0 -0
  24. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/logging/__init__.py +0 -0
  25. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/logging/kafka_log.py +0 -0
  26. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/logging/logger_wrapper.py +0 -0
  27. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/middleware/__init__.py +0 -0
  28. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/middleware/context.py +0 -0
  29. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/middleware/cors.py +0 -0
  30. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/middleware/exception.py +0 -0
  31. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/middleware/monitor_memory.py +0 -0
  32. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/middleware/mq.py +0 -0
  33. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/middleware/timeout.py +0 -0
  34. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/middleware/traceid.py +0 -0
  35. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/models/__init__.py +0 -0
  36. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/models/log.py +0 -0
  37. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/models/mqlistener_config.py +0 -0
  38. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/models/mqmsg_model.py +0 -0
  39. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/models/mqsend_config.py +0 -0
  40. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/models/sso_user.py +0 -0
  41. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
  42. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
  43. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/synacos/__init__.py +0 -0
  44. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/synacos/feign.py +0 -0
  45. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/synacos/nacos_service.py +0 -0
  46. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/tools/__init__.py +0 -0
  47. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/tools/snowflake.py +0 -0
  48. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon/tools/timing.py +0 -0
  49. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
  50. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
  51. {sycommon_python_lib-0.1.2 → sycommon_python_lib-0.1.3}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sycommon-python-lib"
3
- version = "0.1.2"
3
+ version = "0.1.3"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -0,0 +1,39 @@
1
+ from sycommon.health.ping import setup_ping_handler
2
+ from sycommon.middleware.cors import setup_cors_handler
3
+ from sycommon.middleware.exception import setup_exception_handler
4
+ from sycommon.middleware.monitor_memory import setup_monitor_memory_middleware
5
+ from sycommon.middleware.mq import setup_mq_middleware
6
+ from sycommon.middleware.timeout import setup_request_timeout_middleware
7
+ from sycommon.middleware.traceid import setup_trace_id_handler
8
+ from sycommon.health.health_check import setup_health_handler
9
+
10
+
11
+ class Middleware:
12
+
13
+ @classmethod
14
+ def setup_middleware(cls, app, config: dict):
15
+ # 设置请求超时中间件
16
+ app = setup_request_timeout_middleware(app, config)
17
+
18
+ # 设置异常处理
19
+ app = setup_exception_handler(app, config)
20
+
21
+ # 设置 trace_id 处理中间件
22
+ app = setup_trace_id_handler(app)
23
+
24
+ # 设置内存监控中间件
25
+ # app = setup_monitor_memory_middleware(app)
26
+
27
+ # 设置cors
28
+ # app = setup_cors_handler(app)
29
+
30
+ # 健康检查
31
+ app = setup_health_handler(app)
32
+
33
+ # ping
34
+ app = setup_ping_handler(app)
35
+
36
+ # 添加mq中间件
37
+ # app = setup_mq_middleware(app)
38
+
39
+ return app
@@ -0,0 +1,99 @@
1
+ from typing import TypeVar, Any, Generic
2
+ from pydantic import BaseModel, Field
3
+ from fastapi.responses import JSONResponse
4
+ from fastapi import status
5
+
6
+ # 修改泛型约束,支持任意类型(包括基础类型和BaseModel)
7
+ T = TypeVar('T')
8
+
9
+
10
+ class BaseResponseModel(BaseModel, Generic[T]):
11
+ """基础响应模型,支持多种数据类型(包括字符串、字典和Pydantic模型)"""
12
+ code: int = Field(default=0, description="业务响应码,成功0,失败非0")
13
+ message: str = Field(default="success", description="业务响应信息")
14
+ data: T | None = Field(default=None, description="业务响应数据,支持任意类型")
15
+ traceId: str | None = Field(default=None, description="请求链路追踪ID")
16
+
17
+ class Config:
18
+ arbitrary_types_allowed = True
19
+ from_attributes = True
20
+
21
+
22
+ def build_response_content(
23
+ data: T | Any = None,
24
+ code: int = 0,
25
+ message: str = "success"
26
+ ) -> dict:
27
+ """
28
+ 只构建响应内容的字典部分
29
+
30
+ Args:
31
+ data: 响应数据(支持字符串、字典、Pydantic模型等)
32
+ code: 业务响应码
33
+ message: 响应信息
34
+
35
+ Returns:
36
+ 响应内容字典,格式为{"code": int, "message": str, "data": Any}
37
+ """
38
+ response = BaseResponseModel(
39
+ code=code,
40
+ message=message,
41
+ data=data
42
+ )
43
+
44
+ if isinstance(response.data, BaseModel):
45
+ return {
46
+ "code": response.code,
47
+ "message": response.message,
48
+ "data": response.data.model_dump()
49
+ }
50
+ else:
51
+ return response.model_dump()
52
+
53
+
54
+ def create_response(
55
+ data: T | Any = None,
56
+ code: int = 0,
57
+ message: str = "success",
58
+ status_code: int = status.HTTP_200_OK
59
+ ) -> JSONResponse:
60
+ """创建完整的JSONResponse响应"""
61
+ content = build_response_content(data=data, code=code, message=message)
62
+ return JSONResponse(
63
+ content=content,
64
+ status_code=status_code
65
+ )
66
+
67
+
68
+ def success_response(data: T | Any = None, message: str = "success") -> JSONResponse:
69
+ """快捷创建成功响应"""
70
+ return create_response(data=data, message=message)
71
+
72
+
73
+ def error_response(
74
+ message: str = "error",
75
+ code: int = 1,
76
+ data: T | Any = None,
77
+ status_code: int = status.HTTP_500_INTERNAL_SERVER_ERROR
78
+ ) -> JSONResponse:
79
+ """快捷创建错误响应"""
80
+ return create_response(
81
+ data=data,
82
+ code=code,
83
+ message=message,
84
+ status_code=status_code
85
+ )
86
+
87
+
88
+ def success_content(data: T | Any = None, message: str = "success") -> dict:
89
+ """只构建成功响应的内容字典"""
90
+ return build_response_content(data=data, message=message)
91
+
92
+
93
+ def error_content(
94
+ message: str = "error",
95
+ code: int = 1,
96
+ data: T | Any = None
97
+ ) -> dict:
98
+ """只构建错误响应的内容字典"""
99
+ return build_response_content(data=data, code=code, message=message)
@@ -2,7 +2,10 @@ from typing import Any, Callable, Dict, List, Tuple, Union, Optional, Awaitable
2
2
  import asyncio
3
3
  import logging
4
4
  from contextlib import asynccontextmanager
5
+ from dotenv import load_dotenv
6
+ from fastapi import FastAPI
5
7
  from pydantic import BaseModel
8
+ import yaml
6
9
  from sycommon.config.Config import SingletonMeta
7
10
  from sycommon.models.mqlistener_config import RabbitMQListenerConfig
8
11
  from sycommon.models.mqsend_config import RabbitMQSendConfig
@@ -16,19 +19,21 @@ class Services(metaclass=SingletonMeta):
16
19
  _registered_senders: List[str] = []
17
20
  _mq_tasks: List[asyncio.Task] = []
18
21
  _pending_setup: Optional[Callable[..., Awaitable[None]]] = None
22
+ _instance: Optional['Services'] = None
19
23
 
20
24
  def __init__(self, config):
21
25
  if not Services._config:
22
26
  Services._config = config
23
- RabbitMQService.init(config)
27
+ Services._instance = self
24
28
 
25
29
  @classmethod
26
30
  def get_lifespan(cls, config):
27
31
  """返回 FastAPI 的 lifespan 管理器"""
32
+ cls._config = config
33
+
28
34
  @asynccontextmanager
29
35
  async def lifespan(app):
30
36
  # 应用启动时初始化
31
- cls._config = config
32
37
  cls._loop = asyncio.get_running_loop()
33
38
  cls._initialized = True
34
39
  logging.info("Services initialized with FastAPI event loop")
@@ -51,8 +56,38 @@ class Services(metaclass=SingletonMeta):
51
56
 
52
57
  return lifespan
53
58
 
54
- def plugins(
59
+ @classmethod
60
+ def plugins(cls,
61
+ middleware: Optional[Tuple[Callable, FastAPI]] = None,
62
+ nacos_service: Optional[Callable] = None,
63
+ logging_service: Optional[Callable] = None,
64
+ database_service: Optional[Union[Tuple[Callable, str],
65
+ List[Tuple[Callable, str]]]] = None,
66
+ rabbitmq_listeners: Optional[List[RabbitMQListenerConfig]] = None,
67
+ rabbitmq_senders: Optional[List[RabbitMQSendConfig]] = None
68
+ ) -> None:
69
+ """
70
+ 类方法:注册各种服务插件
71
+ 确保单例实例存在后调用实例方法的register_plugins
72
+ """
73
+ # 确保实例已创建
74
+ if not cls._instance:
75
+ if not cls._config:
76
+ raise ValueError("Services尚未初始化,请先提供配置")
77
+ cls._instance = Services(cls._config)
78
+
79
+ cls._instance.register_plugins(
80
+ middleware=middleware,
81
+ nacos_service=nacos_service,
82
+ logging_service=logging_service,
83
+ database_service=database_service,
84
+ rabbitmq_listeners=rabbitmq_listeners,
85
+ rabbitmq_senders=rabbitmq_senders
86
+ )
87
+
88
+ def register_plugins(
55
89
  self,
90
+ middleware: Optional[Tuple[Callable, FastAPI]] = None,
56
91
  nacos_service: Optional[Callable] = None,
57
92
  logging_service: Optional[Callable] = None,
58
93
  database_service: Optional[Union[Tuple[Callable,
@@ -60,8 +95,10 @@ class Services(metaclass=SingletonMeta):
60
95
  rabbitmq_listeners: Optional[List[RabbitMQListenerConfig]] = None,
61
96
  rabbitmq_senders: Optional[List[RabbitMQSendConfig]] = None
62
97
  ) -> None:
63
- """注册各种服务插件"""
98
+ """实例方法:实际执行各种服务插件的注册逻辑"""
64
99
  # 注册非异步服务
100
+ if middleware:
101
+ self._setup_middleware(middleware)
65
102
  if nacos_service:
66
103
  nacos_service(self._config)
67
104
  if logging_service:
@@ -69,6 +106,8 @@ class Services(metaclass=SingletonMeta):
69
106
  if database_service:
70
107
  self._setup_database(database_service)
71
108
 
109
+ RabbitMQService.init(self._config)
110
+
72
111
  # MQ设置异步函数
73
112
  async def setup_mq_components():
74
113
  if rabbitmq_senders:
@@ -87,6 +126,11 @@ class Services(metaclass=SingletonMeta):
87
126
  for db_setup, db_name in database_service:
88
127
  db_setup(self._config, db_name)
89
128
 
129
+ def _setup_middleware(self, middleware):
130
+ if isinstance(middleware, tuple):
131
+ middleware_setup, app = middleware
132
+ middleware_setup(app, self._config)
133
+
90
134
  def _setup_senders(self, rabbitmq_senders):
91
135
  Services._registered_senders = [
92
136
  sender.queue_name for sender in rabbitmq_senders]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -27,6 +27,7 @@ src/sycommon/middleware/mq.py
27
27
  src/sycommon/middleware/timeout.py
28
28
  src/sycommon/middleware/traceid.py
29
29
  src/sycommon/models/__init__.py
30
+ src/sycommon/models/base_http.py
30
31
  src/sycommon/models/log.py
31
32
  src/sycommon/models/mqlistener_config.py
32
33
  src/sycommon/models/mqmsg_model.py
@@ -1,36 +0,0 @@
1
- from sycommon.health.ping import setup_ping_handler
2
- from sycommon.middleware.cors import setup_cors_handler
3
- from sycommon.middleware.exception import setup_exception_handler
4
- from sycommon.middleware.monitor_memory import setup_monitor_memory_middleware
5
- from sycommon.middleware.mq import setup_mq_middleware
6
- from sycommon.middleware.timeout import setup_request_timeout_middleware
7
- from sycommon.middleware.traceid import setup_trace_id_handler
8
- from sycommon.health.health_check import setup_health_handler
9
-
10
-
11
- def setup_middleware(app, config: dict):
12
- # 设置请求超时中间件
13
- app = setup_request_timeout_middleware(app, config)
14
-
15
- # 设置异常处理
16
- app = setup_exception_handler(app, config)
17
-
18
- # 设置 trace_id 处理中间件
19
- app = setup_trace_id_handler(app)
20
-
21
- # 设置内存监控中间件
22
- # app = setup_monitor_memory_middleware(app)
23
-
24
- # 设置cors
25
- # app = setup_cors_handler(app)
26
-
27
- # 健康检查
28
- app = setup_health_handler(app)
29
-
30
- # ping
31
- app = setup_ping_handler(app)
32
-
33
- # 添加mq中间件
34
- # app = setup_mq_middleware(app)
35
-
36
- return app