LStartlet 0.1.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 (84) hide show
  1. core/__init__.py +256 -0
  2. core/cicd/__init__.py +21 -0
  3. core/cicd/builder.py +226 -0
  4. core/cicd/cicd_controller.py +375 -0
  5. core/cicd/dependency_installer.py +343 -0
  6. core/cicd/deployer.py +526 -0
  7. core/cicd/pipeline.py +120 -0
  8. core/cicd/tester.py +363 -0
  9. core/command/__init__.py +27 -0
  10. core/command/command_base.py +107 -0
  11. core/command/command_events.py +106 -0
  12. core/command/command_executor.py +192 -0
  13. core/command/command_registry.py +136 -0
  14. core/command/commands/__init__.py +3 -0
  15. core/command/commands/system_commands.py +136 -0
  16. core/config/__init__.py +98 -0
  17. core/config/config_item.py +53 -0
  18. core/config/config_manager.py +395 -0
  19. core/config/constants.py +25 -0
  20. core/config/utils.py +174 -0
  21. core/decorators.py +576 -0
  22. core/di/__init__.py +11 -0
  23. core/di/app_container.py +22 -0
  24. core/di/container_config.py +78 -0
  25. core/di/exceptions.py +63 -0
  26. core/di/service_container.py +233 -0
  27. core/di/service_descriptor.py +54 -0
  28. core/di/service_registry.py +25 -0
  29. core/error/__init__.py +49 -0
  30. core/error/error_handler.py +178 -0
  31. core/error/exceptions.py +56 -0
  32. core/error/formatter.py +77 -0
  33. core/event/__init__.py +24 -0
  34. core/event/base_event.py +109 -0
  35. core/event/event_bus.py +498 -0
  36. core/event/event_handler.py +172 -0
  37. core/event/event_interceptor.py +67 -0
  38. core/event/event_type_registry.py +133 -0
  39. core/event/events/scheduler_events.py +313 -0
  40. core/event/events/ui_events.py +94 -0
  41. core/logger/__init__.py +213 -0
  42. core/logger/handler.py +243 -0
  43. core/logger/level.py +25 -0
  44. core/logger/logger.py +227 -0
  45. core/path/__init__.py +109 -0
  46. core/path/constants.py +36 -0
  47. core/path/path_manager.py +113 -0
  48. core/path/utils.py +204 -0
  49. core/persistence/__init__.py +42 -0
  50. core/persistence/exceptions/persistence_exceptions.py +43 -0
  51. core/persistence/models/persistence_models.py +47 -0
  52. core/persistence/persistence_manager.py +196 -0
  53. core/persistence/storage/kv_storage.py +267 -0
  54. core/process/__init__.py +7 -0
  55. core/process/process_manager.py +342 -0
  56. core/scheduler/__init__.py +25 -0
  57. core/scheduler/config_manager.py +136 -0
  58. core/scheduler/process_manager.py +200 -0
  59. core/scheduler/scheduler.py +392 -0
  60. core/scheduler/scheduler_factory.py +84 -0
  61. core/scheduler/simple_thread_scheduler.py +92 -0
  62. core/scheduler/task_dispatcher.py +377 -0
  63. core/scheduler/thread_safe_scheduler.py +176 -0
  64. core/scheduler/tick.py +299 -0
  65. core/system/__init__.py +8 -0
  66. core/system/config_manager.py +243 -0
  67. core/system/system_detector.py +356 -0
  68. core/version_control/__init__.py +17 -0
  69. core/version_control/dependency_resolver.py +291 -0
  70. core/version_control/version_controller.py +299 -0
  71. lstartlet-0.1.0.dist-info/METADATA +492 -0
  72. lstartlet-0.1.0.dist-info/RECORD +84 -0
  73. lstartlet-0.1.0.dist-info/WHEEL +5 -0
  74. lstartlet-0.1.0.dist-info/licenses/LICENSE +21 -0
  75. lstartlet-0.1.0.dist-info/top_level.txt +2 -0
  76. plugin/__init__.py +46 -0
  77. plugin/base/plugin_base.py +224 -0
  78. plugin/base/plugin_interface.py +94 -0
  79. plugin/events/plugin_events.py +128 -0
  80. plugin/exceptions/plugin_exceptions.py +60 -0
  81. plugin/manager/dependency_manager.py +368 -0
  82. plugin/manager/plugin_loader.py +257 -0
  83. plugin/manager/plugin_manager.py +454 -0
  84. plugin/metadata.py +239 -0
core/__init__.py ADDED
@@ -0,0 +1,256 @@
1
+ """Core module exports"""
2
+
3
+ # 装饰器
4
+ from .decorators import (
5
+ with_error_handling,
6
+ with_logging,
7
+ plugin_component,
8
+ plugin_event_handler,
9
+ # 异步装饰器
10
+ with_error_handling_async,
11
+ with_logging_async,
12
+ cached_async,
13
+ # 权限装饰器
14
+ require_permission,
15
+ require_permission_async,
16
+ PermissionLevel,
17
+ # 监控装饰器
18
+ monitor_metrics,
19
+ monitor_metrics_async,
20
+ MetricsCollector,
21
+ )
22
+
23
+ # 命令系统
24
+ from .command import (
25
+ BaseCommand,
26
+ CommandResult,
27
+ CommandMetadata,
28
+ CommandExecutor,
29
+ CommandRegistry,
30
+ command_registry,
31
+ CommandExecutionEvent,
32
+ CommandCompletedEvent,
33
+ CommandFailedEvent,
34
+ CommandCancelledEvent,
35
+ )
36
+
37
+ # 配置系统
38
+ from .config import (
39
+ ConfigManager,
40
+ get_config,
41
+ set_config,
42
+ has_config,
43
+ get_all_configs,
44
+ register_config,
45
+ add_config_listener,
46
+ remove_config_listener,
47
+ add_config_key_listener,
48
+ remove_config_key_listener,
49
+ save_config,
50
+ load_config,
51
+ reset_all_configs,
52
+ reset_config,
53
+ )
54
+
55
+ # 依赖注入系统
56
+ from .di import (
57
+ ServiceContainer,
58
+ ServiceLifetime,
59
+ configure_default_container,
60
+ ServiceResolutionError,
61
+ ServiceRegistrationError,
62
+ )
63
+
64
+ # 错误处理
65
+ from .error import ErrorHandler
66
+
67
+ # 事件系统
68
+ from .event import (
69
+ BaseEvent,
70
+ CancelableEvent,
71
+ EventMetadata,
72
+ EventTypeRegistry,
73
+ EventHandler,
74
+ LambdaEventHandler,
75
+ CompositeEventHandler,
76
+ EventBus,
77
+ event_bus,
78
+ )
79
+
80
+ # 日志系统
81
+ from .logger import (
82
+ MultiProcessLogger,
83
+ LoggerCore,
84
+ LogLevel,
85
+ ConsoleHandler,
86
+ RotatingFileHandler,
87
+ configure_logger,
88
+ set_process_type,
89
+ debug,
90
+ info,
91
+ warning,
92
+ error,
93
+ critical,
94
+ )
95
+
96
+ # 路径管理
97
+ from .path import PathManager, get_project_root, join_paths
98
+
99
+ # 持久化
100
+ from .persistence import PersistenceManager, initialize_persistence_system
101
+
102
+ # 进程管理
103
+ from .process import GlobalProcessManager, ProcessInfo
104
+
105
+ # 调度器
106
+ from .scheduler import (
107
+ Scheduler,
108
+ ProcessManager as SchedulerProcessManager,
109
+ TaskDispatcher,
110
+ ConfigManager as SchedulerConfigManager,
111
+ SchedulerFactory,
112
+ TickComponent,
113
+ TickConfig,
114
+ SimpleThreadScheduler,
115
+ ThreadSafeScheduler,
116
+ )
117
+
118
+ # 系统检测
119
+ from .system import SystemDetector, SystemConfigManager
120
+
121
+ # 版本控制
122
+ from .version_control import (
123
+ VersionController,
124
+ ChangeAnalyzer,
125
+ IncrementalPackageGenerator,
126
+ DependencyResolver,
127
+ )
128
+
129
+ # CI/CD
130
+ from .cicd import (
131
+ Pipeline,
132
+ Stage,
133
+ Step,
134
+ Builder,
135
+ Tester,
136
+ Deployer,
137
+ CICDController,
138
+ DependencyInstaller,
139
+ )
140
+
141
+ # 框架版本
142
+ __version__ = "1.0.0"
143
+
144
+ # 明确导出的符号
145
+ __all__ = [
146
+ # 装饰器
147
+ "with_error_handling",
148
+ "with_logging",
149
+ "plugin_component",
150
+ "plugin_event_handler",
151
+ "with_error_handling_async",
152
+ "with_logging_async",
153
+ "cached_async",
154
+ "require_permission",
155
+ "require_permission_async",
156
+ "PermissionLevel",
157
+ "monitor_metrics",
158
+ "monitor_metrics_async",
159
+ "MetricsCollector",
160
+ # 命令系统
161
+ "BaseCommand",
162
+ "CommandResult",
163
+ "CommandMetadata",
164
+ "CommandExecutor",
165
+ "CommandRegistry",
166
+ "command_registry",
167
+ "CommandExecutionEvent",
168
+ "CommandCompletedEvent",
169
+ "CommandFailedEvent",
170
+ "CommandCancelledEvent",
171
+ # 配置系统
172
+ "ConfigManager",
173
+ "get_config",
174
+ "set_config",
175
+ "has_config",
176
+ "get_all_configs",
177
+ "register_config",
178
+ "add_config_listener",
179
+ "remove_config_listener",
180
+ "add_config_key_listener",
181
+ "remove_config_key_listener",
182
+ "save_config",
183
+ "load_config",
184
+ "reset_all_configs",
185
+ "reset_config",
186
+ # 依赖注入系统
187
+ "ServiceContainer",
188
+ "ServiceLifetime",
189
+ "configure_default_container",
190
+ "ServiceResolutionError",
191
+ "ServiceRegistrationError",
192
+ # 错误处理
193
+ "ErrorHandler",
194
+ # 事件系统
195
+ "BaseEvent",
196
+ "CancelableEvent",
197
+ "EventMetadata",
198
+ "EventTypeRegistry",
199
+ "EventHandler",
200
+ "LambdaEventHandler",
201
+ "CompositeEventHandler",
202
+ "EventBus",
203
+ "event_bus",
204
+ # 日志系统
205
+ "MultiProcessLogger",
206
+ "LoggerCore",
207
+ "LogLevel",
208
+ "ConsoleHandler",
209
+ "RotatingFileHandler",
210
+ "configure_logger",
211
+ "set_process_type",
212
+ "debug",
213
+ "info",
214
+ "warning",
215
+ "error",
216
+ "critical",
217
+ # 路径管理
218
+ "PathManager",
219
+ "get_project_root",
220
+ "join_paths",
221
+ # 持久化
222
+ "PersistenceManager",
223
+ "initialize_persistence_system",
224
+ # 进程管理
225
+ "GlobalProcessManager",
226
+ "ProcessInfo",
227
+ # 调度器
228
+ "Scheduler",
229
+ "SchedulerProcessManager",
230
+ "TaskDispatcher",
231
+ "SchedulerConfigManager",
232
+ "SchedulerFactory",
233
+ "TickComponent",
234
+ "TickConfig",
235
+ "SimpleThreadScheduler",
236
+ "ThreadSafeScheduler",
237
+ # 系统检测
238
+ "SystemDetector",
239
+ "SystemConfigManager",
240
+ # 版本控制
241
+ "VersionController",
242
+ "ChangeAnalyzer",
243
+ "IncrementalPackageGenerator",
244
+ "DependencyResolver",
245
+ # CI/CD
246
+ "Pipeline",
247
+ "Stage",
248
+ "Step",
249
+ "Builder",
250
+ "Tester",
251
+ "Deployer",
252
+ "CICDController",
253
+ "DependencyInstaller",
254
+ # 版本
255
+ "__version__",
256
+ ]
core/cicd/__init__.py ADDED
@@ -0,0 +1,21 @@
1
+ """
2
+ CI/CD 模块初始化
3
+ """
4
+
5
+ from .pipeline import Pipeline, Stage, Step
6
+ from .builder import Builder
7
+ from .tester import Tester
8
+ from .deployer import Deployer
9
+ from .cicd_controller import CICDController
10
+ from .dependency_installer import DependencyInstaller
11
+
12
+ __all__ = [
13
+ "Pipeline",
14
+ "Stage",
15
+ "Step",
16
+ "Builder",
17
+ "Tester",
18
+ "Deployer",
19
+ "CICDController",
20
+ "DependencyInstaller",
21
+ ]
core/cicd/builder.py ADDED
@@ -0,0 +1,226 @@
1
+ """
2
+ 构建器 - 负责项目的编译、打包等构建过程
3
+ """
4
+
5
+ import os
6
+ import shutil
7
+ import subprocess
8
+ import tarfile
9
+ from typing import List, Optional
10
+ from datetime import datetime
11
+
12
+ from core.logger import info, warning, error
13
+ from core.config import get_config
14
+ from core.path import get_project_root
15
+
16
+
17
+ class Builder:
18
+ """构建器"""
19
+
20
+ def __init__(self, project_root: Optional[str] = None):
21
+ self.project_root = project_root or get_project_root()
22
+ self.build_dir = get_config("cicd.build.output_dir", "./build")
23
+ self.artifacts: List[str] = []
24
+
25
+ def build(self, targets: Optional[List[str]] = None) -> bool:
26
+ """
27
+ 执行构建过程
28
+
29
+ Args:
30
+ targets: 构建目标列表
31
+
32
+ Returns:
33
+ 是否构建成功
34
+ """
35
+ info("开始执行构建过程")
36
+
37
+ try:
38
+ # 创建构建目录
39
+ os.makedirs(self.build_dir, exist_ok=True)
40
+
41
+ # 默认构建目标
42
+ if targets is None:
43
+ targets = ["package"]
44
+
45
+ for target in targets:
46
+ if target == "package":
47
+ success = self._build_package()
48
+ elif target == "docs":
49
+ success = self._build_docs()
50
+ elif target == "requirements":
51
+ success = self._build_requirements()
52
+ else:
53
+ warning(f"未知的构建目标: {target}")
54
+ continue
55
+
56
+ if not success:
57
+ error(f"构建目标失败: {target}")
58
+ return False
59
+
60
+ info("构建过程完成")
61
+ return True
62
+
63
+ except Exception as e:
64
+ error(f"构建过程异常: {e}")
65
+ return False
66
+
67
+ def _build_package(self) -> bool:
68
+ """构建项目包"""
69
+ info("开始打包项目")
70
+
71
+ try:
72
+ # 创建版本化的目录名
73
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
74
+ version = self._get_current_version()
75
+ package_name = f"app_{version}_{timestamp}"
76
+ package_dir = os.path.join(self.build_dir, package_name)
77
+
78
+ os.makedirs(package_dir, exist_ok=True)
79
+
80
+ # 复制项目文件(排除不需要的文件)
81
+ exclude_patterns = [".git", "__pycache__", "*.pyc", ".gitignore", "tests/"]
82
+
83
+ for root, dirs, files in os.walk(self.project_root):
84
+ # 过滤不需要的目录
85
+ dirs[:] = [d for d in dirs if d not in exclude_patterns]
86
+
87
+ for file in files:
88
+ if any(
89
+ pattern in file or file == pattern
90
+ for pattern in exclude_patterns
91
+ ):
92
+ continue
93
+
94
+ src_path = os.path.join(root, file)
95
+ rel_path = os.path.relpath(src_path, self.project_root)
96
+ dst_path = os.path.join(package_dir, rel_path)
97
+
98
+ # 确保目标目录存在
99
+ os.makedirs(os.path.dirname(dst_path), exist_ok=True)
100
+
101
+ # 复制文件
102
+ shutil.copy2(src_path, dst_path)
103
+
104
+ # 创建压缩包
105
+ archive_path = f"{package_dir}.tar.gz"
106
+ with tarfile.open(archive_path, "w:gz") as tar:
107
+ tar.add(package_dir, arcname=os.path.basename(package_dir))
108
+
109
+ self.artifacts.append(archive_path)
110
+ info(f"项目包已创建: {archive_path}")
111
+
112
+ return True
113
+
114
+ except Exception as e:
115
+ error(f"打包项目时出错: {e}")
116
+ return False
117
+
118
+ def _build_docs(self) -> bool:
119
+ """构建文档"""
120
+ info("开始构建文档")
121
+
122
+ try:
123
+ docs_src = os.path.join(self.project_root, "docs")
124
+ docs_build_dir = os.path.join(self.build_dir, "docs")
125
+
126
+ if not os.path.exists(docs_src):
127
+ info("文档源目录不存在,跳过文档构建")
128
+ return True
129
+
130
+ # 清理之前的构建
131
+ if os.path.exists(docs_build_dir):
132
+ shutil.rmtree(docs_build_dir)
133
+
134
+ # 复制文档
135
+ shutil.copytree(docs_src, docs_build_dir)
136
+
137
+ info(f"文档已构建到: {docs_build_dir}")
138
+ return True
139
+
140
+ except Exception as e:
141
+ error(f"构建文档时出错: {e}")
142
+ return False
143
+
144
+ def _build_requirements(self) -> bool:
145
+ """构建依赖文件"""
146
+ info("开始构建依赖文件")
147
+
148
+ try:
149
+ # 检查是否存在requirements.txt
150
+ req_file = os.path.join(self.project_root, "requirements.txt")
151
+
152
+ if not os.path.exists(req_file):
153
+ warning("requirements.txt 不存在,跳过依赖构建")
154
+ return True
155
+
156
+ # 复制到构建目录
157
+ target_req_file = os.path.join(self.build_dir, "requirements.txt")
158
+ shutil.copy2(req_file, target_req_file)
159
+
160
+ # 如果有额外的依赖处理需求,可以在这里添加
161
+ info(f"依赖文件已复制到: {target_req_file}")
162
+ return True
163
+
164
+ except Exception as e:
165
+ error(f"构建依赖文件时出错: {e}")
166
+ return False
167
+
168
+ def get_build_artifacts(self) -> List[str]:
169
+ """
170
+ 获取构建产物列表
171
+
172
+ Returns:
173
+ 构建产物路径列表
174
+ """
175
+ return self.artifacts
176
+
177
+ def clean_build_artifacts(self) -> bool:
178
+ """
179
+ 清理构建产物
180
+
181
+ Returns:
182
+ 是否清理成功
183
+ """
184
+ try:
185
+ for artifact in self.artifacts:
186
+ if os.path.exists(artifact):
187
+ os.remove(artifact)
188
+ info(f"已删除构建产物: {artifact}")
189
+
190
+ # 清理构建目录
191
+ if os.path.exists(self.build_dir):
192
+ shutil.rmtree(self.build_dir)
193
+ info(f"已删除构建目录: {self.build_dir}")
194
+
195
+ self.artifacts = []
196
+ info("构建产物清理完成")
197
+ return True
198
+
199
+ except Exception as e:
200
+ error(f"清理构建产物时出错: {e}")
201
+ return False
202
+
203
+ def _get_current_version(self) -> str:
204
+ """获取当前版本"""
205
+ try:
206
+ # 尝试从Git获取版本
207
+ result = subprocess.run(
208
+ ["git", "describe", "--tags", "--always"],
209
+ cwd=self.project_root,
210
+ capture_output=True,
211
+ text=True,
212
+ )
213
+ if result.returncode == 0:
214
+ return result.stdout.strip().replace("-", "_").replace(".", "_")
215
+ else:
216
+ # 如果没有标签,使用commit hash
217
+ result = subprocess.run(
218
+ ["git", "rev-parse", "--short", "HEAD"],
219
+ cwd=self.project_root,
220
+ capture_output=True,
221
+ text=True,
222
+ )
223
+ return result.stdout.strip() if result.returncode == 0 else "unknown"
224
+ except Exception as e:
225
+ error(f"获取当前版本时出错: {e}")
226
+ return "unknown"