springbootAI 1.8.0__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.
Files changed (175) hide show
  1. spring/__init__.py +66 -0
  2. spring/ai/__init__.py +78 -0
  3. spring/ai/advisors.py +139 -0
  4. spring/ai/annotations.py +74 -0
  5. spring/ai/autoconfig.py +481 -0
  6. spring/ai/core.py +391 -0
  7. spring/ai/etl.py +188 -0
  8. spring/ai/memory.py +109 -0
  9. spring/ai/observability.py +129 -0
  10. spring/ai/providers.py +789 -0
  11. spring/ai/resilience.py +258 -0
  12. spring/ai/tools.py +106 -0
  13. spring/ai/vectorstore.py +303 -0
  14. spring/annotations/__init__.py +188 -0
  15. spring/annotations/cache.py +126 -0
  16. spring/annotations/cloud.py +207 -0
  17. spring/annotations/conditional.py +272 -0
  18. spring/annotations/core.py +864 -0
  19. spring/annotations/messaging.py +107 -0
  20. spring/aop/__init__.py +4 -0
  21. spring/aop/cloud_aop.py +404 -0
  22. spring/aop/comprehensive_aop.py +1015 -0
  23. spring/aop/method_interceptor.py +19 -0
  24. spring/aop/proxy_factory.py +55 -0
  25. spring/cloud/__init__.py +76 -0
  26. spring/cloud/discovery.py +364 -0
  27. spring/cloud/feign.py +469 -0
  28. spring/cloud/gateway.py +452 -0
  29. spring/cloud/load_balancer.py +149 -0
  30. spring/cloud/seata.py +557 -0
  31. spring/cloud/sentinel.py +525 -0
  32. spring/cloud/tracer.py +337 -0
  33. spring/config/__init__.py +21 -0
  34. spring/config/binding.py +206 -0
  35. spring/config/config_loader.py +405 -0
  36. spring/context/__init__.py +13 -0
  37. spring/context/application_context.py +589 -0
  38. spring/context/bean_definition.py +70 -0
  39. spring/context/bean_factory.py +1052 -0
  40. spring/context/registry.py +58 -0
  41. spring/context/scanner.py +106 -0
  42. spring/core/__init__.py +3 -0
  43. spring/core/graceful_shutdown.py +196 -0
  44. spring/core/typing_utils.py +50 -0
  45. spring/csv/__init__.py +52 -0
  46. spring/csv/annotations.py +402 -0
  47. spring/csv/converters.py +69 -0
  48. spring/csv/easy_csv.py +95 -0
  49. spring/csv/exceptions.py +27 -0
  50. spring/csv/reader.py +195 -0
  51. spring/csv/writer.py +155 -0
  52. spring/data/__init__.py +54 -0
  53. spring/data/page.py +181 -0
  54. spring/data/repository.py +274 -0
  55. spring/data/specification.py +228 -0
  56. spring/datasource/__init__.py +66 -0
  57. spring/datasource/annotations.py +133 -0
  58. spring/datasource/context.py +69 -0
  59. spring/datasource/dynamic.py +148 -0
  60. spring/event/__init__.py +7 -0
  61. spring/event/publisher.py +69 -0
  62. spring/excel/__init__.py +51 -0
  63. spring/excel/annotations.py +405 -0
  64. spring/excel/converters.py +231 -0
  65. spring/excel/easy_excel.py +94 -0
  66. spring/excel/exceptions.py +31 -0
  67. spring/excel/reader.py +254 -0
  68. spring/excel/style.py +95 -0
  69. spring/excel/writer.py +197 -0
  70. spring/i18n/__init__.py +97 -0
  71. spring/i18n/accessor.py +94 -0
  72. spring/i18n/auto_config.py +177 -0
  73. spring/i18n/holder.py +106 -0
  74. spring/i18n/locale.py +152 -0
  75. spring/i18n/locale_resolver.py +367 -0
  76. spring/i18n/message_source.py +250 -0
  77. spring/i18n/middleware.py +79 -0
  78. spring/i18n/properties.py +168 -0
  79. spring/i18n/sources.py +255 -0
  80. spring/logging/__init__.py +1 -0
  81. spring/logging/loguru_logger.py +228 -0
  82. spring/main.py +378 -0
  83. spring/messaging/__init__.py +1 -0
  84. spring/messaging/rabbitmq.py +302 -0
  85. spring/monitoring/__init__.py +1 -0
  86. spring/monitoring/prometheus.py +199 -0
  87. spring/orm/__init__.py +258 -0
  88. spring/orm/database.py +222 -0
  89. spring/orm/ddl_auto.py +1217 -0
  90. spring/orm/migration.py +419 -0
  91. spring/orm/mybatis_integration.py +400 -0
  92. spring/orm/pymybatis/__init__.py +86 -0
  93. spring/orm/pymybatis/annotations/__init__.py +30 -0
  94. spring/orm/pymybatis/annotations/annotations.py +332 -0
  95. spring/orm/pymybatis/cache/__init__.py +47 -0
  96. spring/orm/pymybatis/cache/cache.py +371 -0
  97. spring/orm/pymybatis/cache/redis_cache.py +434 -0
  98. spring/orm/pymybatis/circuit_breaker/__init__.py +21 -0
  99. spring/orm/pymybatis/circuit_breaker/circuit_breaker.py +424 -0
  100. spring/orm/pymybatis/configuration.py +525 -0
  101. spring/orm/pymybatis/core/__init__.py +10 -0
  102. spring/orm/pymybatis/core/sql_session.py +1382 -0
  103. spring/orm/pymybatis/core/sql_session_factory.py +76 -0
  104. spring/orm/pymybatis/dialect/__init__.py +9 -0
  105. spring/orm/pymybatis/dialect/dialect.py +445 -0
  106. spring/orm/pymybatis/dynamic_sql/__init__.py +9 -0
  107. spring/orm/pymybatis/dynamic_sql/dynamic_sql.py +900 -0
  108. spring/orm/pymybatis/interceptor/__init__.py +31 -0
  109. spring/orm/pymybatis/interceptor/interceptor.py +427 -0
  110. spring/orm/pymybatis/mapper/__init__.py +9 -0
  111. spring/orm/pymybatis/mapper/mapper.py +540 -0
  112. spring/orm/pymybatis/metrics/__init__.py +41 -0
  113. spring/orm/pymybatis/metrics/metrics.py +595 -0
  114. spring/orm/pymybatis/pool/__init__.py +9 -0
  115. spring/orm/pymybatis/pool/connection_pool.py +711 -0
  116. spring/orm/pymybatis/security/__init__.py +19 -0
  117. spring/orm/pymybatis/security/access_control.py +415 -0
  118. spring/orm/pymybatis/security/password_encoder.py +293 -0
  119. spring/orm/pymybatis/security/sensitive_data_masker.py +326 -0
  120. spring/orm/pymybatis/security/sql_injection_detector.py +675 -0
  121. spring/orm/pymybatis/transaction/__init__.py +9 -0
  122. spring/orm/pymybatis/transaction/transaction.py +288 -0
  123. spring/orm/pymybatis/type_handler/__init__.py +37 -0
  124. spring/orm/pymybatis/type_handler/type_handler.py +473 -0
  125. spring/orm/pymybatis/version.py +9 -0
  126. spring/orm/pymybatis/xml_parser/__init__.py +9 -0
  127. spring/orm/pymybatis/xml_parser/xml_parser.py +761 -0
  128. spring/retry/__init__.py +12 -0
  129. spring/retry/retry_annotations.py +71 -0
  130. spring/retry/retry_decorator.py +155 -0
  131. spring/scheduling/__init__.py +3 -0
  132. spring/scheduling/scheduler.py +389 -0
  133. spring/security/__init__.py +39 -0
  134. spring/security/jwt_utils.py +281 -0
  135. spring/security/replay_protection.py +206 -0
  136. spring/security/secret_manager.py +226 -0
  137. spring/security/security_aop.py +248 -0
  138. spring/security/security_context.py +172 -0
  139. spring/test/__init__.py +45 -0
  140. spring/test/slicing.py +341 -0
  141. spring/tracing/__init__.py +11 -0
  142. spring/tracing/skywalking.py +229 -0
  143. spring/tx/__init__.py +52 -0
  144. spring/tx/events.py +172 -0
  145. spring/tx/synchronization.py +143 -0
  146. spring/utils/__init__.py +5 -0
  147. spring/utils/banner.py +32 -0
  148. spring/utils/logger.py +73 -0
  149. spring/utils/redis_client.py +526 -0
  150. spring/validation/__init__.py +55 -0
  151. spring/validation/aop.py +141 -0
  152. spring/validation/constraints.py +357 -0
  153. spring/validation/exceptions.py +55 -0
  154. spring/validation/validator.py +139 -0
  155. spring/web/__init__.py +12 -0
  156. spring/web/actuator.py +319 -0
  157. spring/web/exception_handler.py +61 -0
  158. spring/web/health.py +399 -0
  159. spring/web/interceptor.py +91 -0
  160. spring/web/result.py +44 -0
  161. spring/web/swagger.py +601 -0
  162. spring/web/web_context.py +755 -0
  163. spring/websocket/__init__.py +86 -0
  164. spring/websocket/annotations.py +169 -0
  165. spring/websocket/broker.py +238 -0
  166. spring/websocket/exceptions.py +26 -0
  167. spring/websocket/handler.py +243 -0
  168. spring/websocket/router.py +526 -0
  169. spring/websocket/session.py +216 -0
  170. springbootai-1.8.0.dist-info/METADATA +2796 -0
  171. springbootai-1.8.0.dist-info/RECORD +175 -0
  172. springbootai-1.8.0.dist-info/WHEEL +5 -0
  173. springbootai-1.8.0.dist-info/entry_points.txt +2 -0
  174. springbootai-1.8.0.dist-info/licenses/LICENSE +7 -0
  175. springbootai-1.8.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,288 @@
1
+ """
2
+ PyMyBatis事务管理模块
3
+
4
+ 实现事务隔离级别控制和事务边界管理
5
+ """
6
+
7
+ from enum import Enum
8
+ from typing import Optional, Any, Dict
9
+ from contextlib import contextmanager
10
+ import re
11
+ import threading
12
+
13
+
14
+ class TransactionIsolationLevel(Enum):
15
+ """
16
+ 事务隔离级别
17
+
18
+ 定义数据库事务的隔离程度:
19
+ - READ_UNCOMMITTED: 读未提交,允许读取未提交的数据
20
+ - READ_COMMITTED: 读已提交,只允许读取已提交的数据
21
+ - REPEATABLE_READ: 可重复读,保证同一事务内多次读取相同数据的一致性
22
+ - SERIALIZABLE: 串行化,最高隔离级别,完全串行化执行
23
+ """
24
+ READ_UNCOMMITTED = 'READ_UNCOMMITTED'
25
+ READ_COMMITTED = 'READ_COMMITTED'
26
+ REPEATABLE_READ = 'REPEATABLE_READ'
27
+ SERIALIZABLE = 'SERIALIZABLE'
28
+
29
+
30
+ class TransactionStatus(Enum):
31
+ """
32
+ 事务状态
33
+
34
+ - ACTIVE: 事务活跃中
35
+ - COMMITTED: 事务已提交
36
+ - ROLLED_BACK: 事务已回滚
37
+ - FAILED: 事务失败
38
+ """
39
+ ACTIVE = 'ACTIVE'
40
+ COMMITTED = 'COMMITTED'
41
+ ROLLED_BACK = 'ROLLED_BACK'
42
+ FAILED = 'FAILED'
43
+
44
+
45
+ class Transaction:
46
+ """
47
+ 事务管理类
48
+
49
+ 核心功能:
50
+ 1. 管理事务边界(begin/commit/rollback)
51
+ 2. 控制事务隔离级别
52
+ 3. 管理事务嵌套
53
+ 4. 支持保存点
54
+ """
55
+
56
+ def __init__(self, connection: Any, isolation_level: Optional[TransactionIsolationLevel] = None):
57
+ """
58
+ 初始化事务
59
+
60
+ Args:
61
+ connection: 数据库连接对象
62
+ isolation_level: 事务隔离级别
63
+ """
64
+ self.connection = connection
65
+ self.isolation_level = isolation_level or TransactionIsolationLevel.READ_COMMITTED
66
+ self.status = TransactionStatus.ACTIVE
67
+ self.nested_count = 0
68
+ self.savepoints: Dict[str, Any] = {}
69
+
70
+ # 设置隔离级别
71
+ self._set_isolation_level()
72
+
73
+ def _set_isolation_level(self) -> None:
74
+ """设置事务隔离级别"""
75
+ # sqlite3 的 isolation_level 表示 BEGIN 模式而非 ANSI 隔离级别。
76
+ if self.connection.__class__.__module__.startswith('sqlite3'):
77
+ return
78
+
79
+ set_session = getattr(self.connection, 'set_session', None)
80
+ if callable(set_session):
81
+ set_session(isolation_level=self.isolation_level.value.replace('_', ' '))
82
+
83
+ def begin(self) -> None:
84
+ """开始事务"""
85
+ if self.nested_count == 0:
86
+ if hasattr(self.connection, 'begin'):
87
+ self.connection.begin()
88
+ else:
89
+ self.connection.execute('BEGIN')
90
+ self.nested_count += 1
91
+ self.status = TransactionStatus.ACTIVE
92
+
93
+ def commit(self) -> None:
94
+ """提交事务"""
95
+ if self.nested_count <= 0 or not self.is_active():
96
+ raise RuntimeError("没有可提交的活动事务")
97
+ self.nested_count -= 1
98
+ if self.nested_count == 0:
99
+ self.connection.commit()
100
+ self.status = TransactionStatus.COMMITTED
101
+
102
+ def rollback(self, savepoint: Optional[str] = None) -> None:
103
+ """
104
+ 回滚事务
105
+
106
+ Args:
107
+ savepoint: 保存点名称,如果指定则回滚到该保存点
108
+ """
109
+ if savepoint is not None and savepoint in self.savepoints:
110
+ self._execute_savepoint_sql(f'ROLLBACK TO SAVEPOINT "{savepoint}"')
111
+ else:
112
+ self.connection.rollback()
113
+ self.nested_count = 0
114
+ self.status = TransactionStatus.ROLLED_BACK
115
+
116
+ def create_savepoint(self, name: str) -> None:
117
+ """
118
+ 创建保存点
119
+
120
+ Args:
121
+ name: 保存点名称
122
+ """
123
+ self._validate_savepoint_name(name)
124
+ self._execute_savepoint_sql(f'SAVEPOINT "{name}"')
125
+ self.savepoints[name] = name
126
+
127
+ def release_savepoint(self, name: str) -> None:
128
+ """
129
+ 释放保存点
130
+
131
+ Args:
132
+ name: 保存点名称
133
+ """
134
+ if name in self.savepoints:
135
+ self._execute_savepoint_sql(f'RELEASE SAVEPOINT "{name}"')
136
+ del self.savepoints[name]
137
+
138
+ @staticmethod
139
+ def _validate_savepoint_name(name: str) -> None:
140
+ if not re.fullmatch(r'[A-Za-z_][A-Za-z0-9_]*', name):
141
+ raise ValueError("保存点名称只能包含字母、数字和下划线,且不能以数字开头")
142
+
143
+ def _execute_savepoint_sql(self, sql: str) -> None:
144
+ cursor = self.connection.cursor()
145
+ try:
146
+ cursor.execute(sql)
147
+ finally:
148
+ cursor.close()
149
+
150
+ def is_active(self) -> bool:
151
+ """检查事务是否活跃"""
152
+ return self.status == TransactionStatus.ACTIVE
153
+
154
+ def is_committed(self) -> bool:
155
+ """检查事务是否已提交"""
156
+ return self.status == TransactionStatus.COMMITTED
157
+
158
+ def is_rolled_back(self) -> bool:
159
+ """检查事务是否已回滚"""
160
+ return self.status == TransactionStatus.ROLLED_BACK
161
+
162
+ def __enter__(self):
163
+ """上下文管理器进入,自动开始事务"""
164
+ self.begin()
165
+ return self
166
+
167
+ def __exit__(self, exc_type, exc_val, exc_tb):
168
+ """上下文管理器退出,根据异常决定提交或回滚"""
169
+ if exc_type is not None:
170
+ self.rollback()
171
+ return False
172
+ self.commit()
173
+ return False
174
+
175
+
176
+ class TransactionManager:
177
+ """
178
+ 事务管理器
179
+
180
+ 负责管理事务的创建、提交和回滚,支持:
181
+ - 编程式事务
182
+ - 声明式事务
183
+ - 嵌套事务
184
+ """
185
+
186
+ def __init__(self, isolation_level: Optional[TransactionIsolationLevel] = None):
187
+ """
188
+ 初始化事务管理器
189
+
190
+ Args:
191
+ isolation_level: 默认事务隔离级别
192
+ """
193
+ self.default_isolation_level = isolation_level or TransactionIsolationLevel.READ_COMMITTED
194
+ self._local = threading.local()
195
+
196
+ @property
197
+ def current_transaction(self) -> Optional[Transaction]:
198
+ return getattr(self._local, 'current_transaction', None)
199
+
200
+ @current_transaction.setter
201
+ def current_transaction(self, value: Optional[Transaction]) -> None:
202
+ self._local.current_transaction = value
203
+
204
+ @contextmanager
205
+ def transaction(self, isolation_level: Optional[TransactionIsolationLevel] = None):
206
+ """
207
+ 创建事务上下文管理器
208
+
209
+ Args:
210
+ isolation_level: 事务隔离级别,不指定则使用默认级别
211
+
212
+ Yields:
213
+ 事务对象
214
+ """
215
+ if self.current_transaction is not None:
216
+ # 嵌套事务
217
+ self.current_transaction.begin()
218
+ try:
219
+ yield self.current_transaction
220
+ except Exception:
221
+ self.current_transaction.rollback()
222
+ self.current_transaction = None
223
+ raise
224
+ else:
225
+ self.current_transaction.commit()
226
+ else:
227
+ # 新事务
228
+ raise ValueError("事务必须在SqlSession上下文中使用")
229
+
230
+ def begin(self, connection: Any, isolation_level: Optional[TransactionIsolationLevel] = None) -> Transaction:
231
+ """
232
+ 开始新事务
233
+
234
+ Args:
235
+ connection: 数据库连接对象
236
+ isolation_level: 事务隔离级别
237
+
238
+ Returns:
239
+ 事务对象
240
+ """
241
+ level = isolation_level or self.default_isolation_level
242
+ if self.current_transaction is not None and self.current_transaction.is_active():
243
+ self.current_transaction.begin()
244
+ return self.current_transaction
245
+ transaction = Transaction(connection, level)
246
+ transaction.begin()
247
+ self.current_transaction = transaction
248
+ return transaction
249
+
250
+ def commit(self) -> None:
251
+ """提交当前事务"""
252
+ if self.current_transaction is not None:
253
+ self.current_transaction.commit()
254
+ if self.current_transaction.nested_count == 0:
255
+ self.current_transaction = None
256
+
257
+ def rollback(self) -> None:
258
+ """回滚当前事务"""
259
+ if self.current_transaction is not None:
260
+ self.current_transaction.rollback()
261
+ self.current_transaction = None
262
+
263
+ def get_current_transaction(self) -> Optional[Transaction]:
264
+ """获取当前事务"""
265
+ return self.current_transaction
266
+
267
+ def is_in_transaction(self) -> bool:
268
+ """检查是否在事务中"""
269
+ return self.current_transaction is not None and self.current_transaction.is_active()
270
+
271
+
272
+ def get_isolation_level_code(isolation_level: TransactionIsolationLevel) -> int:
273
+ """
274
+ 获取隔离级别对应的数值代码
275
+
276
+ Args:
277
+ isolation_level: 事务隔离级别
278
+
279
+ Returns:
280
+ 隔离级别代码
281
+ """
282
+ isolation_map = {
283
+ TransactionIsolationLevel.READ_UNCOMMITTED: 1,
284
+ TransactionIsolationLevel.READ_COMMITTED: 2,
285
+ TransactionIsolationLevel.REPEATABLE_READ: 4,
286
+ TransactionIsolationLevel.SERIALIZABLE: 8
287
+ }
288
+ return isolation_map.get(isolation_level, 2)
@@ -0,0 +1,37 @@
1
+ """
2
+ PyMyBatis类型处理器模块
3
+
4
+ 支持自定义类型转换,适配不同数据库类型
5
+ """
6
+
7
+ from .type_handler import (
8
+ TypeHandler,
9
+ IntegerTypeHandler,
10
+ LongTypeHandler,
11
+ StringTypeHandler,
12
+ BooleanTypeHandler,
13
+ FloatTypeHandler,
14
+ DoubleTypeHandler,
15
+ DateTypeHandler,
16
+ DateTimeTypeHandler,
17
+ DecimalTypeHandler,
18
+ UUIDTypeHandler,
19
+ TypeHandlerRegistry,
20
+ DEFAULT_REGISTRY
21
+ )
22
+
23
+ __all__ = [
24
+ 'TypeHandler',
25
+ 'IntegerTypeHandler',
26
+ 'LongTypeHandler',
27
+ 'StringTypeHandler',
28
+ 'BooleanTypeHandler',
29
+ 'FloatTypeHandler',
30
+ 'DoubleTypeHandler',
31
+ 'DateTypeHandler',
32
+ 'DateTimeTypeHandler',
33
+ 'DecimalTypeHandler',
34
+ 'UUIDTypeHandler',
35
+ 'TypeHandlerRegistry',
36
+ 'DEFAULT_REGISTRY'
37
+ ]