unrealon 1.0.9__py3-none-any.whl → 1.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 (302) hide show
  1. unrealon/__init__.py +23 -21
  2. unrealon-1.1.0.dist-info/METADATA +164 -0
  3. unrealon-1.1.0.dist-info/RECORD +82 -0
  4. {unrealon-1.0.9.dist-info → unrealon-1.1.0.dist-info}/WHEEL +1 -1
  5. unrealon-1.1.0.dist-info/entry_points.txt +9 -0
  6. {unrealon-1.0.9.dist-info → unrealon-1.1.0.dist-info/licenses}/LICENSE +1 -1
  7. unrealon_bridge/__init__.py +114 -0
  8. unrealon_bridge/cli.py +316 -0
  9. unrealon_bridge/client/__init__.py +93 -0
  10. unrealon_bridge/client/base.py +78 -0
  11. unrealon_bridge/client/commands.py +89 -0
  12. unrealon_bridge/client/connection.py +90 -0
  13. unrealon_bridge/client/events.py +65 -0
  14. unrealon_bridge/client/health.py +38 -0
  15. unrealon_bridge/client/html_parser.py +146 -0
  16. unrealon_bridge/client/logging.py +139 -0
  17. unrealon_bridge/client/proxy.py +70 -0
  18. unrealon_bridge/client/scheduler.py +450 -0
  19. unrealon_bridge/client/session.py +70 -0
  20. unrealon_bridge/configs/__init__.py +14 -0
  21. unrealon_bridge/configs/bridge_config.py +212 -0
  22. unrealon_bridge/configs/bridge_config.yaml +39 -0
  23. unrealon_bridge/models/__init__.py +138 -0
  24. unrealon_bridge/models/base.py +28 -0
  25. unrealon_bridge/models/command.py +41 -0
  26. unrealon_bridge/models/events.py +40 -0
  27. unrealon_bridge/models/html_parser.py +79 -0
  28. unrealon_bridge/models/logging.py +55 -0
  29. unrealon_bridge/models/parser.py +63 -0
  30. unrealon_bridge/models/proxy.py +41 -0
  31. unrealon_bridge/models/requests.py +95 -0
  32. unrealon_bridge/models/responses.py +88 -0
  33. unrealon_bridge/models/scheduler.py +592 -0
  34. unrealon_bridge/models/session.py +28 -0
  35. unrealon_bridge/server/__init__.py +91 -0
  36. unrealon_bridge/server/base.py +171 -0
  37. unrealon_bridge/server/handlers/__init__.py +23 -0
  38. unrealon_bridge/server/handlers/command.py +110 -0
  39. unrealon_bridge/server/handlers/html_parser.py +139 -0
  40. unrealon_bridge/server/handlers/logging.py +95 -0
  41. unrealon_bridge/server/handlers/parser.py +95 -0
  42. unrealon_bridge/server/handlers/proxy.py +75 -0
  43. unrealon_bridge/server/handlers/scheduler.py +545 -0
  44. unrealon_bridge/server/handlers/session.py +66 -0
  45. unrealon_browser/__init__.py +61 -18
  46. unrealon_browser/{src/cli → cli}/browser_cli.py +6 -13
  47. unrealon_browser/{src/cli → cli}/cookies_cli.py +5 -1
  48. unrealon_browser/{src/core → core}/browser_manager.py +2 -2
  49. unrealon_browser/{src/managers → managers}/captcha.py +1 -1
  50. unrealon_browser/{src/managers → managers}/cookies.py +1 -1
  51. unrealon_browser/managers/logger_bridge.py +231 -0
  52. unrealon_browser/{src/managers → managers}/profile.py +1 -1
  53. unrealon_driver/__init__.py +73 -19
  54. unrealon_driver/browser/__init__.py +8 -0
  55. unrealon_driver/browser/config.py +74 -0
  56. unrealon_driver/browser/manager.py +416 -0
  57. unrealon_driver/exceptions.py +28 -0
  58. unrealon_driver/parser/__init__.py +55 -0
  59. unrealon_driver/parser/cli_manager.py +141 -0
  60. unrealon_driver/parser/daemon_manager.py +227 -0
  61. unrealon_driver/parser/managers/__init__.py +46 -0
  62. unrealon_driver/parser/managers/browser.py +51 -0
  63. unrealon_driver/parser/managers/config.py +281 -0
  64. unrealon_driver/parser/managers/error.py +412 -0
  65. unrealon_driver/parser/managers/html.py +732 -0
  66. unrealon_driver/parser/managers/logging.py +609 -0
  67. unrealon_driver/parser/managers/result.py +321 -0
  68. unrealon_driver/parser/parser_manager.py +628 -0
  69. unrealon/sdk_config.py +0 -88
  70. unrealon-1.0.9.dist-info/METADATA +0 -810
  71. unrealon-1.0.9.dist-info/RECORD +0 -246
  72. unrealon_browser/pyproject.toml +0 -182
  73. unrealon_browser/src/__init__.py +0 -62
  74. unrealon_browser/src/managers/logger_bridge.py +0 -395
  75. unrealon_driver/README.md +0 -204
  76. unrealon_driver/pyproject.toml +0 -187
  77. unrealon_driver/src/__init__.py +0 -90
  78. unrealon_driver/src/cli/__init__.py +0 -10
  79. unrealon_driver/src/cli/main.py +0 -66
  80. unrealon_driver/src/cli/simple.py +0 -510
  81. unrealon_driver/src/config/__init__.py +0 -11
  82. unrealon_driver/src/config/auto_config.py +0 -478
  83. unrealon_driver/src/core/__init__.py +0 -18
  84. unrealon_driver/src/core/exceptions.py +0 -289
  85. unrealon_driver/src/core/parser.py +0 -638
  86. unrealon_driver/src/dto/__init__.py +0 -66
  87. unrealon_driver/src/dto/cli.py +0 -119
  88. unrealon_driver/src/dto/config.py +0 -18
  89. unrealon_driver/src/dto/events.py +0 -237
  90. unrealon_driver/src/dto/execution.py +0 -313
  91. unrealon_driver/src/dto/services.py +0 -311
  92. unrealon_driver/src/execution/__init__.py +0 -23
  93. unrealon_driver/src/execution/daemon_mode.py +0 -317
  94. unrealon_driver/src/execution/interactive_mode.py +0 -88
  95. unrealon_driver/src/execution/modes.py +0 -45
  96. unrealon_driver/src/execution/scheduled_mode.py +0 -209
  97. unrealon_driver/src/execution/test_mode.py +0 -250
  98. unrealon_driver/src/logging/__init__.py +0 -24
  99. unrealon_driver/src/logging/driver_logger.py +0 -512
  100. unrealon_driver/src/services/__init__.py +0 -24
  101. unrealon_driver/src/services/browser_service.py +0 -726
  102. unrealon_driver/src/services/llm/__init__.py +0 -15
  103. unrealon_driver/src/services/llm/browser_llm_service.py +0 -363
  104. unrealon_driver/src/services/llm/llm.py +0 -195
  105. unrealon_driver/src/services/logger_service.py +0 -232
  106. unrealon_driver/src/services/metrics_service.py +0 -185
  107. unrealon_driver/src/services/scheduler_service.py +0 -489
  108. unrealon_driver/src/services/websocket_service.py +0 -362
  109. unrealon_driver/src/utils/__init__.py +0 -16
  110. unrealon_driver/src/utils/service_factory.py +0 -317
  111. unrealon_driver/src/utils/time_formatter.py +0 -338
  112. unrealon_llm/README.md +0 -44
  113. unrealon_llm/__init__.py +0 -26
  114. unrealon_llm/pyproject.toml +0 -154
  115. unrealon_llm/src/__init__.py +0 -228
  116. unrealon_llm/src/cli/__init__.py +0 -0
  117. unrealon_llm/src/core/__init__.py +0 -11
  118. unrealon_llm/src/core/smart_client.py +0 -438
  119. unrealon_llm/src/dto/__init__.py +0 -155
  120. unrealon_llm/src/dto/models/__init__.py +0 -0
  121. unrealon_llm/src/dto/models/config.py +0 -343
  122. unrealon_llm/src/dto/models/core.py +0 -328
  123. unrealon_llm/src/dto/models/enums.py +0 -123
  124. unrealon_llm/src/dto/models/html_analysis.py +0 -345
  125. unrealon_llm/src/dto/models/statistics.py +0 -473
  126. unrealon_llm/src/dto/models/translation.py +0 -383
  127. unrealon_llm/src/dto/models/type_conversion.py +0 -462
  128. unrealon_llm/src/dto/schemas/__init__.py +0 -0
  129. unrealon_llm/src/exceptions.py +0 -392
  130. unrealon_llm/src/llm_config/__init__.py +0 -20
  131. unrealon_llm/src/llm_config/logging_config.py +0 -178
  132. unrealon_llm/src/llm_logging/__init__.py +0 -42
  133. unrealon_llm/src/llm_logging/llm_events.py +0 -107
  134. unrealon_llm/src/llm_logging/llm_logger.py +0 -466
  135. unrealon_llm/src/managers/__init__.py +0 -15
  136. unrealon_llm/src/managers/cache_manager.py +0 -67
  137. unrealon_llm/src/managers/cost_manager.py +0 -107
  138. unrealon_llm/src/managers/request_manager.py +0 -298
  139. unrealon_llm/src/modules/__init__.py +0 -0
  140. unrealon_llm/src/modules/html_processor/__init__.py +0 -25
  141. unrealon_llm/src/modules/html_processor/base_processor.py +0 -415
  142. unrealon_llm/src/modules/html_processor/details_processor.py +0 -85
  143. unrealon_llm/src/modules/html_processor/listing_processor.py +0 -91
  144. unrealon_llm/src/modules/html_processor/models/__init__.py +0 -20
  145. unrealon_llm/src/modules/html_processor/models/processing_models.py +0 -40
  146. unrealon_llm/src/modules/html_processor/models/universal_model.py +0 -56
  147. unrealon_llm/src/modules/html_processor/processor.py +0 -102
  148. unrealon_llm/src/modules/llm/__init__.py +0 -0
  149. unrealon_llm/src/modules/translator/__init__.py +0 -0
  150. unrealon_llm/src/provider.py +0 -116
  151. unrealon_llm/src/utils/__init__.py +0 -95
  152. unrealon_llm/src/utils/common.py +0 -64
  153. unrealon_llm/src/utils/data_extractor.py +0 -188
  154. unrealon_llm/src/utils/html_cleaner.py +0 -767
  155. unrealon_llm/src/utils/language_detector.py +0 -308
  156. unrealon_llm/src/utils/models_cache.py +0 -592
  157. unrealon_llm/src/utils/smart_counter.py +0 -229
  158. unrealon_llm/src/utils/token_counter.py +0 -189
  159. unrealon_sdk/README.md +0 -25
  160. unrealon_sdk/__init__.py +0 -30
  161. unrealon_sdk/pyproject.toml +0 -231
  162. unrealon_sdk/src/__init__.py +0 -150
  163. unrealon_sdk/src/cli/__init__.py +0 -12
  164. unrealon_sdk/src/cli/commands/__init__.py +0 -22
  165. unrealon_sdk/src/cli/commands/benchmark.py +0 -42
  166. unrealon_sdk/src/cli/commands/diagnostics.py +0 -573
  167. unrealon_sdk/src/cli/commands/health.py +0 -46
  168. unrealon_sdk/src/cli/commands/integration.py +0 -498
  169. unrealon_sdk/src/cli/commands/reports.py +0 -43
  170. unrealon_sdk/src/cli/commands/security.py +0 -36
  171. unrealon_sdk/src/cli/commands/server.py +0 -483
  172. unrealon_sdk/src/cli/commands/servers.py +0 -56
  173. unrealon_sdk/src/cli/commands/tests.py +0 -55
  174. unrealon_sdk/src/cli/main.py +0 -126
  175. unrealon_sdk/src/cli/utils/reporter.py +0 -519
  176. unrealon_sdk/src/clients/openapi.yaml +0 -3347
  177. unrealon_sdk/src/clients/python_http/__init__.py +0 -3
  178. unrealon_sdk/src/clients/python_http/api_config.py +0 -228
  179. unrealon_sdk/src/clients/python_http/models/BaseModel.py +0 -12
  180. unrealon_sdk/src/clients/python_http/models/BroadcastDeliveryStats.py +0 -33
  181. unrealon_sdk/src/clients/python_http/models/BroadcastMessage.py +0 -17
  182. unrealon_sdk/src/clients/python_http/models/BroadcastMessageRequest.py +0 -35
  183. unrealon_sdk/src/clients/python_http/models/BroadcastPriority.py +0 -10
  184. unrealon_sdk/src/clients/python_http/models/BroadcastResponse.py +0 -21
  185. unrealon_sdk/src/clients/python_http/models/BroadcastResultResponse.py +0 -33
  186. unrealon_sdk/src/clients/python_http/models/BroadcastTarget.py +0 -11
  187. unrealon_sdk/src/clients/python_http/models/ConnectionStats.py +0 -27
  188. unrealon_sdk/src/clients/python_http/models/ConnectionsResponse.py +0 -21
  189. unrealon_sdk/src/clients/python_http/models/DeveloperMessageResponse.py +0 -23
  190. unrealon_sdk/src/clients/python_http/models/ErrorResponse.py +0 -25
  191. unrealon_sdk/src/clients/python_http/models/HTTPValidationError.py +0 -16
  192. unrealon_sdk/src/clients/python_http/models/HealthResponse.py +0 -23
  193. unrealon_sdk/src/clients/python_http/models/HealthStatus.py +0 -33
  194. unrealon_sdk/src/clients/python_http/models/LogLevel.py +0 -10
  195. unrealon_sdk/src/clients/python_http/models/LoggingRequest.py +0 -27
  196. unrealon_sdk/src/clients/python_http/models/LoggingResponse.py +0 -23
  197. unrealon_sdk/src/clients/python_http/models/MaintenanceMode.py +0 -9
  198. unrealon_sdk/src/clients/python_http/models/MaintenanceModeRequest.py +0 -33
  199. unrealon_sdk/src/clients/python_http/models/MaintenanceStatusResponse.py +0 -39
  200. unrealon_sdk/src/clients/python_http/models/ParserCommandRequest.py +0 -25
  201. unrealon_sdk/src/clients/python_http/models/ParserMessageResponse.py +0 -21
  202. unrealon_sdk/src/clients/python_http/models/ParserRegistrationRequest.py +0 -28
  203. unrealon_sdk/src/clients/python_http/models/ParserRegistrationResponse.py +0 -25
  204. unrealon_sdk/src/clients/python_http/models/ParserType.py +0 -10
  205. unrealon_sdk/src/clients/python_http/models/ProxyBlockRequest.py +0 -19
  206. unrealon_sdk/src/clients/python_http/models/ProxyEndpointResponse.py +0 -20
  207. unrealon_sdk/src/clients/python_http/models/ProxyListResponse.py +0 -19
  208. unrealon_sdk/src/clients/python_http/models/ProxyProvider.py +0 -10
  209. unrealon_sdk/src/clients/python_http/models/ProxyPurchaseRequest.py +0 -25
  210. unrealon_sdk/src/clients/python_http/models/ProxyResponse.py +0 -47
  211. unrealon_sdk/src/clients/python_http/models/ProxyRotationRequest.py +0 -23
  212. unrealon_sdk/src/clients/python_http/models/ProxyStatus.py +0 -10
  213. unrealon_sdk/src/clients/python_http/models/ProxyUsageRequest.py +0 -19
  214. unrealon_sdk/src/clients/python_http/models/ProxyUsageStatsResponse.py +0 -26
  215. unrealon_sdk/src/clients/python_http/models/ServiceRegistrationDto.py +0 -23
  216. unrealon_sdk/src/clients/python_http/models/ServiceStatsResponse.py +0 -31
  217. unrealon_sdk/src/clients/python_http/models/SessionStartRequest.py +0 -23
  218. unrealon_sdk/src/clients/python_http/models/SuccessResponse.py +0 -25
  219. unrealon_sdk/src/clients/python_http/models/SystemNotificationResponse.py +0 -23
  220. unrealon_sdk/src/clients/python_http/models/ValidationError.py +0 -18
  221. unrealon_sdk/src/clients/python_http/models/ValidationErrorResponse.py +0 -21
  222. unrealon_sdk/src/clients/python_http/models/WebSocketMetrics.py +0 -21
  223. unrealon_sdk/src/clients/python_http/models/__init__.py +0 -44
  224. unrealon_sdk/src/clients/python_http/services/None_service.py +0 -35
  225. unrealon_sdk/src/clients/python_http/services/ParserManagement_service.py +0 -190
  226. unrealon_sdk/src/clients/python_http/services/ProxyManagement_service.py +0 -289
  227. unrealon_sdk/src/clients/python_http/services/SocketLogging_service.py +0 -187
  228. unrealon_sdk/src/clients/python_http/services/SystemHealth_service.py +0 -119
  229. unrealon_sdk/src/clients/python_http/services/WebSocketAPI_service.py +0 -198
  230. unrealon_sdk/src/clients/python_http/services/__init__.py +0 -0
  231. unrealon_sdk/src/clients/python_http/services/admin_service.py +0 -125
  232. unrealon_sdk/src/clients/python_http/services/async_None_service.py +0 -35
  233. unrealon_sdk/src/clients/python_http/services/async_ParserManagement_service.py +0 -190
  234. unrealon_sdk/src/clients/python_http/services/async_ProxyManagement_service.py +0 -289
  235. unrealon_sdk/src/clients/python_http/services/async_SocketLogging_service.py +0 -189
  236. unrealon_sdk/src/clients/python_http/services/async_SystemHealth_service.py +0 -123
  237. unrealon_sdk/src/clients/python_http/services/async_WebSocketAPI_service.py +0 -200
  238. unrealon_sdk/src/clients/python_http/services/async_admin_service.py +0 -125
  239. unrealon_sdk/src/clients/python_websocket/__init__.py +0 -28
  240. unrealon_sdk/src/clients/python_websocket/client.py +0 -490
  241. unrealon_sdk/src/clients/python_websocket/events.py +0 -732
  242. unrealon_sdk/src/clients/python_websocket/example.py +0 -136
  243. unrealon_sdk/src/clients/python_websocket/types.py +0 -871
  244. unrealon_sdk/src/core/__init__.py +0 -64
  245. unrealon_sdk/src/core/client.py +0 -556
  246. unrealon_sdk/src/core/config.py +0 -465
  247. unrealon_sdk/src/core/exceptions.py +0 -239
  248. unrealon_sdk/src/core/metadata.py +0 -191
  249. unrealon_sdk/src/core/models.py +0 -142
  250. unrealon_sdk/src/core/types.py +0 -68
  251. unrealon_sdk/src/dto/__init__.py +0 -268
  252. unrealon_sdk/src/dto/authentication.py +0 -108
  253. unrealon_sdk/src/dto/cache.py +0 -208
  254. unrealon_sdk/src/dto/common.py +0 -19
  255. unrealon_sdk/src/dto/concurrency.py +0 -393
  256. unrealon_sdk/src/dto/events.py +0 -108
  257. unrealon_sdk/src/dto/health.py +0 -339
  258. unrealon_sdk/src/dto/load_balancing.py +0 -336
  259. unrealon_sdk/src/dto/logging.py +0 -230
  260. unrealon_sdk/src/dto/performance.py +0 -165
  261. unrealon_sdk/src/dto/rate_limiting.py +0 -295
  262. unrealon_sdk/src/dto/resource_pooling.py +0 -128
  263. unrealon_sdk/src/dto/structured_logging.py +0 -112
  264. unrealon_sdk/src/dto/task_scheduling.py +0 -121
  265. unrealon_sdk/src/dto/websocket.py +0 -55
  266. unrealon_sdk/src/enterprise/__init__.py +0 -59
  267. unrealon_sdk/src/enterprise/authentication.py +0 -401
  268. unrealon_sdk/src/enterprise/cache_manager.py +0 -578
  269. unrealon_sdk/src/enterprise/error_recovery.py +0 -494
  270. unrealon_sdk/src/enterprise/event_system.py +0 -549
  271. unrealon_sdk/src/enterprise/health_monitor.py +0 -747
  272. unrealon_sdk/src/enterprise/load_balancer.py +0 -964
  273. unrealon_sdk/src/enterprise/logging/__init__.py +0 -68
  274. unrealon_sdk/src/enterprise/logging/cleanup.py +0 -156
  275. unrealon_sdk/src/enterprise/logging/development.py +0 -744
  276. unrealon_sdk/src/enterprise/logging/service.py +0 -410
  277. unrealon_sdk/src/enterprise/multithreading_manager.py +0 -853
  278. unrealon_sdk/src/enterprise/performance_monitor.py +0 -539
  279. unrealon_sdk/src/enterprise/proxy_manager.py +0 -696
  280. unrealon_sdk/src/enterprise/rate_limiter.py +0 -652
  281. unrealon_sdk/src/enterprise/resource_pool.py +0 -763
  282. unrealon_sdk/src/enterprise/task_scheduler.py +0 -709
  283. unrealon_sdk/src/internal/__init__.py +0 -10
  284. unrealon_sdk/src/internal/command_router.py +0 -497
  285. unrealon_sdk/src/internal/connection_manager.py +0 -397
  286. unrealon_sdk/src/internal/http_client.py +0 -446
  287. unrealon_sdk/src/internal/websocket_client.py +0 -420
  288. unrealon_sdk/src/provider.py +0 -471
  289. unrealon_sdk/src/utils.py +0 -234
  290. /unrealon_browser/{src/cli → cli}/__init__.py +0 -0
  291. /unrealon_browser/{src/cli → cli}/interactive_mode.py +0 -0
  292. /unrealon_browser/{src/cli → cli}/main.py +0 -0
  293. /unrealon_browser/{src/core → core}/__init__.py +0 -0
  294. /unrealon_browser/{src/dto → dto}/__init__.py +0 -0
  295. /unrealon_browser/{src/dto → dto}/models/config.py +0 -0
  296. /unrealon_browser/{src/dto → dto}/models/core.py +0 -0
  297. /unrealon_browser/{src/dto → dto}/models/dataclasses.py +0 -0
  298. /unrealon_browser/{src/dto → dto}/models/detection.py +0 -0
  299. /unrealon_browser/{src/dto → dto}/models/enums.py +0 -0
  300. /unrealon_browser/{src/dto → dto}/models/statistics.py +0 -0
  301. /unrealon_browser/{src/managers → managers}/__init__.py +0 -0
  302. /unrealon_browser/{src/managers → managers}/stealth.py +0 -0
@@ -1,88 +0,0 @@
1
- """
2
- Interactive Mode implementation for UnrealOn Driver v3.0 (Stub Implementation)
3
-
4
- Live development and debugging shell.
5
- TODO: Full implementation to be completed.
6
- """
7
-
8
- import asyncio
9
- from typing import Any, Dict
10
-
11
- from unrealon_driver.src.dto.execution import InteractiveModeConfig
12
-
13
-
14
- class InteractiveMode:
15
- """
16
- 🎮 Interactive Mode - Live Development Shell
17
-
18
- TODO: Full implementation with interactive shell
19
- """
20
-
21
- def __init__(self, parser: Any, config: InteractiveModeConfig):
22
- """Initialize interactive mode."""
23
- self.parser = parser
24
- self.config = config
25
- self.logger = parser.logger
26
- self._is_running = False
27
-
28
- async def start(self, **kwargs):
29
- """Start interactive mode."""
30
- if self.logger:
31
- self.logger.warning("Interactive mode not yet implemented")
32
- self.logger.info(f"Parser: {self.parser.parser_name}")
33
-
34
- print("\n" + "=" * 60)
35
- print("🎮 UnrealOn Driver v3.0 - Interactive Mode")
36
- print("📝 Parser:", self.parser.parser_name)
37
- print("🆔 ID:", self.parser.parser_id)
38
- print("\n⚠️ Interactive mode is not yet implemented")
39
- print("Available commands will include:")
40
- print(" - run : Execute parser")
41
- print(" - config : Show configuration")
42
- print(" - browser : Browser debugging tools")
43
- print(" - llm : AI extraction tools")
44
- print(" - metrics : Performance metrics")
45
- print(" - help : Show help")
46
- print(" - exit : Exit interactive mode")
47
- print("=" * 60)
48
-
49
- # Simple simulation
50
- self._is_running = True
51
-
52
- try:
53
- while self._is_running:
54
- try:
55
- command = input("\nunrealon> ").strip().lower()
56
-
57
- if command in ["exit", "quit"]:
58
- break
59
- elif command == "run":
60
- print("🚀 Running parser...")
61
- result = await self.parser.test()
62
- print(f"✅ Result: {result.get('success', False)}")
63
- elif command == "config":
64
- print("� Configuration:")
65
- print(f" Environment: {self.parser._config.environment}")
66
- print(f" Debug mode: {self.parser._config.debug_mode}")
67
- elif command == "help":
68
- print("� Interactive mode commands (planned):")
69
- print(" run, config, browser, llm, metrics, help, exit")
70
- else:
71
- print(
72
- f"❓ Unknown command: {command}. Type 'help' for available commands."
73
- )
74
-
75
- except KeyboardInterrupt:
76
- print("\n👋 Use 'exit' to quit interactive mode")
77
- except EOFError:
78
- break
79
- finally:
80
- await self.stop()
81
-
82
- async def stop(self):
83
- """Stop interactive mode."""
84
- self._is_running = False
85
- print("\n👋 Interactive mode stopped")
86
-
87
- def __repr__(self) -> str:
88
- return f"<InteractiveMode(running={self._is_running}, stub=True)>"
@@ -1,45 +0,0 @@
1
- """
2
- Execution mode enumeration and utilities for UnrealOn Driver v3.0
3
- """
4
-
5
- from enum import Enum, auto
6
- from typing import Any, Dict
7
-
8
-
9
- class ExecutionMode(Enum):
10
- """Enumeration of available execution modes."""
11
-
12
- TEST = auto() # Development testing
13
- DAEMON = auto() # Production WebSocket service
14
- SCHEDULED = auto() # Automated recurring execution
15
- INTERACTIVE = auto() # Live development shell
16
-
17
- @classmethod
18
- def from_string(cls, mode_str: str) -> "ExecutionMode":
19
- """Convert string to ExecutionMode."""
20
- mode_map = {
21
- "test": cls.TEST,
22
- "daemon": cls.DAEMON,
23
- "scheduled": cls.SCHEDULED,
24
- "interactive": cls.INTERACTIVE,
25
- }
26
-
27
- mode_str = mode_str.lower().strip()
28
- if mode_str not in mode_map:
29
- raise ValueError(f"Unknown execution mode: {mode_str}")
30
-
31
- return mode_map[mode_str]
32
-
33
- def to_string(self) -> str:
34
- """Convert ExecutionMode to string."""
35
- return self.name.lower()
36
-
37
- def get_description(self) -> str:
38
- """Get human-readable description."""
39
- descriptions = {
40
- self.TEST: "Development testing and debugging",
41
- self.DAEMON: "Production WebSocket service",
42
- self.SCHEDULED: "Automated recurring execution",
43
- self.INTERACTIVE: "Live development shell",
44
- }
45
- return descriptions[self]
@@ -1,209 +0,0 @@
1
- """
2
- Scheduled Mode implementation for UnrealOn Driver v3.0
3
-
4
- Automated recurring execution with human-readable intervals.
5
- Full implementation using enterprise SchedulerService.
6
- """
7
-
8
- import asyncio
9
- import signal
10
- from typing import Any, Optional
11
-
12
- from unrealon_driver.src.dto.execution import ScheduledModeConfig, ScheduledModeStatus
13
- from unrealon_driver.src.dto.services import SchedulerConfig
14
-
15
- from unrealon_driver.src.services.scheduler_service import SchedulerService
16
-
17
-
18
- class ScheduledMode:
19
- """
20
- ⏰ Scheduled Mode - Automated Recurring Execution
21
-
22
- Full implementation with enterprise features:
23
- - Human-readable intervals ("30m", "1h", "daily")
24
- - Smart load balancing with jitter
25
- - Error recovery and retries
26
- - Health monitoring and alerting
27
- - Production-ready reliability
28
- """
29
-
30
- def __init__(self, parser: Any, config: ScheduledModeConfig):
31
- """Initialize scheduled mode."""
32
- self.parser = parser
33
- self.config = config
34
- self.logger = parser.logger
35
- self._is_running = False
36
- self._scheduler_service = None
37
- self._shutdown_event = asyncio.Event()
38
-
39
- async def start(self, every: str, at: Optional[str] = None, **kwargs):
40
- """Start scheduled execution with full enterprise features."""
41
- if self.logger:
42
- self.logger.info(
43
- f"⏰ Starting scheduled mode for: {self.parser.parser_name}"
44
- )
45
- self.logger.info(f"📅 Schedule: every {every}")
46
- if at:
47
- self.logger.info(f"🕘 At time: {at}")
48
-
49
- # Setup scheduler service with type safety
50
- scheduler_config = SchedulerConfig(
51
- parser_id=self.parser.parser_id,
52
- max_concurrent_tasks=kwargs.get(
53
- "max_concurrent", self.config.max_concurrent
54
- ),
55
- enable_jitter=kwargs.get("jitter", self.config.jitter),
56
- jitter_range=kwargs.get("jitter_range", self.config.jitter_range),
57
- default_timeout=kwargs.get("timeout", self.config.timeout),
58
- default_retries=kwargs.get("retry_attempts", self.config.retry_attempts),
59
- enable_task_monitoring=True,
60
- health_check_interval=60,
61
- )
62
-
63
- self._scheduler_service = SchedulerService(
64
- config=scheduler_config,
65
- logger=self.logger,
66
- metrics=self.parser.metrics if hasattr(self.parser, "metrics") else None,
67
- )
68
-
69
- # Create scheduled parse task with type safety
70
- self._scheduler_service.add_task(
71
- task_id=f"{self.parser.parser_id}_scheduled",
72
- name=f"Scheduled {self.parser.parser_name}",
73
- func=self._scheduled_parse_task,
74
- every=every,
75
- enabled=True,
76
- timeout=kwargs.get("timeout", 300),
77
- retry_attempts=kwargs.get("retry_attempts", 3),
78
- max_runs=kwargs.get("max_runs"),
79
- )
80
-
81
- # Setup signal handlers for graceful shutdown
82
- self._setup_signal_handlers()
83
-
84
- self._is_running = True
85
-
86
- try:
87
- if self.logger:
88
- self.logger.info("✅ Scheduler configured successfully")
89
- self.logger.info("👂 Starting scheduled execution...")
90
- self.logger.info(" Press Ctrl+C to stop")
91
-
92
- # Start scheduler service
93
- await self._scheduler_service.start()
94
-
95
- except KeyboardInterrupt:
96
- if self.logger:
97
- self.logger.info("⏹️ Scheduled mode interrupted")
98
- except Exception as e:
99
- if self.logger:
100
- self.logger.error(f"❌ Scheduled mode error: {e}")
101
- raise
102
- finally:
103
- await self.stop()
104
-
105
- def _setup_signal_handlers(self):
106
- """Setup signal handlers for graceful shutdown."""
107
-
108
- def signal_handler(signum, frame):
109
- if self.logger:
110
- self.logger.info(f"\n🛑 Shutdown signal received (signal {signum})...")
111
- self._shutdown_event.set()
112
-
113
- # Stop scheduler
114
- if self._scheduler_service:
115
- asyncio.create_task(self._scheduler_service.stop())
116
-
117
- # Register signal handlers
118
- try:
119
- signal.signal(signal.SIGINT, signal_handler)
120
- signal.signal(signal.SIGTERM, signal_handler)
121
- except Exception as e:
122
- if self.logger:
123
- self.logger.warning(f"Could not register signal handlers: {e}")
124
-
125
- async def _scheduled_parse_task(self):
126
- """Scheduled parse task handler with full monitoring."""
127
- start_time = asyncio.get_event_loop().time()
128
-
129
- try:
130
- if self.logger:
131
- self.logger.info("🚀 Executing scheduled parse task")
132
-
133
- # Setup parser if needed
134
- if hasattr(self.parser, "setup"):
135
- await self.parser.setup()
136
-
137
- # Execute parse method
138
- result = await self.parser.parse()
139
-
140
- # Cleanup if needed
141
- if hasattr(self.parser, "cleanup"):
142
- await self.parser.cleanup()
143
-
144
- duration = asyncio.get_event_loop().time() - start_time
145
- items_count = len(result) if isinstance(result, (list, dict)) else 1
146
-
147
- if self.logger:
148
- self.logger.info(
149
- f"✅ Scheduled task completed in {duration:.2f}s - {items_count} items"
150
- )
151
-
152
- return result
153
-
154
- except Exception as e:
155
- duration = asyncio.get_event_loop().time() - start_time
156
-
157
- if self.logger:
158
- self.logger.error(
159
- f"❌ Scheduled task failed after {duration:.2f}s: {e}"
160
- )
161
-
162
- # Re-raise for scheduler error handling
163
- raise
164
-
165
- async def get_status(self) -> ScheduledModeStatus:
166
- """Get current scheduling status with type safety."""
167
-
168
- if not self._scheduler_service:
169
- return ScheduledModeStatus(
170
- status="not_started",
171
- is_running=False,
172
- parser_id=self.parser.parser_id,
173
- parser_name=self.parser.parser_name,
174
- scheduler_health=None,
175
- )
176
-
177
- health = await self._scheduler_service.health_check()
178
- return ScheduledModeStatus(
179
- status="running" if self._is_running else "stopped",
180
- is_running=self._is_running,
181
- parser_id=self.parser.parser_id,
182
- parser_name=self.parser.parser_name,
183
- scheduler_health=health,
184
- )
185
-
186
- async def stop(self):
187
- """Stop scheduled mode gracefully."""
188
- if self.logger:
189
- self.logger.info("🛑 Stopping scheduled mode...")
190
-
191
- self._is_running = False
192
- self._shutdown_event.set()
193
-
194
- # Stop scheduler service
195
- if self._scheduler_service:
196
- try:
197
- await self._scheduler_service.stop()
198
- except Exception as e:
199
- if self.logger:
200
- self.logger.error(f"Error stopping scheduler: {e}")
201
-
202
- if self.logger:
203
- self.logger.info("✅ Scheduled mode stopped")
204
-
205
- def __repr__(self) -> str:
206
- task_count = (
207
- len(self._scheduler_service._tasks) if self._scheduler_service else 0
208
- )
209
- return f"<ScheduledMode(running={self._is_running}, tasks={task_count})>"
@@ -1,250 +0,0 @@
1
- """
2
- Test Mode implementation for UnrealOn Driver v3.0
3
-
4
- Development and debugging execution mode with detailed output and error reporting.
5
- COMPLIANCE: 100% Pydantic v2 compliant, no Dict[str, Any] usage.
6
- """
7
-
8
- import asyncio
9
- import time
10
- from datetime import datetime
11
- from typing import Any, Optional
12
-
13
- from unrealon_driver.src.core.exceptions import ParserError
14
- from unrealon_driver.src.dto.execution import (
15
- ParserTestConfig,
16
- ExecutionResult,
17
- ErrorInfo,
18
- PerformanceMetrics,
19
- ExecutionEnvironment,
20
- )
21
-
22
-
23
- class TestMode:
24
- """
25
- 🧪 Test Mode - Development and debugging
26
-
27
- Single execution for development and testing with:
28
- - Detailed logging and debugging
29
- - Error reporting with suggestions
30
- - Performance metrics
31
- - Results visualization
32
- """
33
-
34
- def __init__(self, parser: Any, config: ParserTestConfig):
35
- """Initialize test mode with type-safe configuration."""
36
- self.parser = parser
37
- self.config = config
38
- self.logger = parser.logger
39
- self.metrics = parser.metrics
40
-
41
- async def execute(self, **kwargs) -> ExecutionResult:
42
- """Execute parser in test mode with type-safe results."""
43
- start_time = time.time()
44
- start_datetime = datetime.now()
45
- execution_id = f"test_{int(start_time)}"
46
-
47
- if self.config.verbose:
48
- self._print_test_header()
49
-
50
- try:
51
- # Initialize parser if needed
52
- await self._initialize_test_environment()
53
-
54
- # Execute the parse method
55
- if self.config.verbose:
56
- print("🚀 Starting parse execution...")
57
-
58
- parse_start = time.time()
59
- result = await self.parser.parse()
60
- parse_duration = time.time() - parse_start
61
-
62
- # Process results
63
- processed_result = await self._process_test_result(
64
- result, parse_duration, execution_id, start_datetime
65
- )
66
-
67
- if self.config.verbose:
68
- self._print_test_success(processed_result, time.time() - start_time)
69
-
70
- return processed_result
71
-
72
- except Exception as e:
73
- # In test mode, let critical exceptions propagate for debugging
74
- if isinstance(e, (RuntimeError, NotImplementedError)):
75
- raise
76
-
77
- error_result = await self._handle_test_error(
78
- e, execution_id, start_datetime, time.time() - start_time
79
- )
80
-
81
- if self.config.verbose:
82
- self._print_test_error(error_result)
83
-
84
- return error_result
85
-
86
- finally:
87
- await self._cleanup_test_environment()
88
-
89
- def _print_test_header(self):
90
- """Print test mode header."""
91
- print("\n" + "=" * 60)
92
- print(f"🧪 UnrealOn Driver v3.0 - Test Mode")
93
- print(f"📝 Parser: {self.parser.parser_name}")
94
- print(f"🆔 ID: {self.parser.parser_id}")
95
- print(f"⏰ Started: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
96
- print("=" * 60)
97
-
98
- async def _initialize_test_environment(self):
99
- """Initialize test environment."""
100
- if self.config.show_browser:
101
- # Override browser config to show browser
102
- if hasattr(self.parser, "_browser") and self.parser._browser:
103
- self.parser._browser.config["headless"] = False
104
- else:
105
- self.parser._config.browser_config["headless"] = False
106
-
107
- # Ensure system directories exist
108
- system_dir = self.parser._config._get_system_dir()
109
- system_dir.mkdir(parents=True, exist_ok=True)
110
-
111
- if self.logger:
112
- self.logger.info(f"Starting test execution for {self.parser.parser_name}")
113
-
114
- async def _process_test_result(
115
- self, result: Any, duration: float, execution_id: str, start_time: datetime
116
- ) -> ExecutionResult:
117
- """Process and enrich test results with type safety."""
118
- end_time = datetime.now()
119
-
120
- # Count items processed
121
- items_count = 0
122
- if isinstance(result, list):
123
- items_count = len(result)
124
- elif isinstance(result, dict) and "data" in result:
125
- data = result["data"]
126
- if isinstance(data, list):
127
- items_count = len(data)
128
- else:
129
- items_count = 1
130
- elif result is not None:
131
- items_count = 1
132
-
133
- # Create performance metrics
134
- performance_metrics = PerformanceMetrics(
135
- execution_time_seconds=duration,
136
- memory_usage_mb=0.0, # TODO: Add real memory tracking
137
- cpu_usage_percent=0.0, # TODO: Add real CPU tracking
138
- operations_count=items_count,
139
- operations_per_second=items_count / duration if duration > 0 else 0.0,
140
- )
141
-
142
- return ExecutionResult(
143
- success=True,
144
- execution_id=execution_id,
145
- start_time=start_time.isoformat(),
146
- end_time=end_time.isoformat(),
147
- duration_seconds=duration,
148
- data=result if isinstance(result, dict) else {"result": result},
149
- items_processed=items_count,
150
- error=None,
151
- parser_id=self.parser.parser_id,
152
- execution_mode="test",
153
- environment=self.config.environment,
154
- performance_metrics=performance_metrics,
155
- )
156
-
157
- async def _handle_test_error(
158
- self,
159
- error: Exception,
160
- execution_id: str,
161
- start_time: datetime,
162
- total_duration: float,
163
- ) -> ExecutionResult:
164
- """Handle test execution errors with type safety."""
165
- end_time = datetime.now()
166
-
167
- # Create error info
168
- error_info = ErrorInfo(
169
- message=str(error),
170
- error_type=type(error).__name__,
171
- error_code=getattr(
172
- error, "error_code", None
173
- ), # OK for exception attributes
174
- traceback=None, # We can add traceback if needed
175
- context={
176
- "parser_id": self.parser.parser_id,
177
- "execution_id": execution_id,
178
- "test_config": self.config.model_dump(),
179
- },
180
- )
181
-
182
- # Log error
183
- if self.logger:
184
- self.logger.error(f"Test execution failed: {error}")
185
-
186
- # Create performance metrics for error case
187
- performance_metrics = PerformanceMetrics(
188
- execution_time_seconds=total_duration,
189
- memory_usage_mb=0.0,
190
- cpu_usage_percent=0.0,
191
- operations_count=0,
192
- operations_per_second=0.0,
193
- )
194
-
195
- return ExecutionResult(
196
- success=False,
197
- execution_id=execution_id,
198
- start_time=start_time.isoformat(),
199
- end_time=end_time.isoformat(),
200
- duration_seconds=total_duration,
201
- data=None,
202
- items_processed=0,
203
- error=error_info,
204
- parser_id=self.parser.parser_id,
205
- execution_mode="test",
206
- environment=self.config.environment,
207
- performance_metrics=performance_metrics,
208
- )
209
-
210
- async def _cleanup_test_environment(self):
211
- """Clean up test environment."""
212
- try:
213
- # Capture final screenshots if enabled
214
- if self.config.save_screenshots:
215
- # Implementation for screenshot capture
216
- pass
217
-
218
- if self.logger:
219
- self.logger.info("Test environment cleanup completed")
220
-
221
- except Exception as e:
222
- # Don't fail on screenshot errors, but log for debugging
223
- if self.logger:
224
- self.logger.debug(f"Screenshot capture failed (non-critical): {e}")
225
-
226
- def _print_test_success(self, result: ExecutionResult, total_duration: float):
227
- """Print successful test results."""
228
- print("\n✅ Test completed successfully!")
229
- print(f"⏱️ Total duration: {total_duration:.2f}s")
230
- print(f"📊 Parse duration: {result.duration_seconds:.2f}s")
231
- print(f"📈 Items processed: {result.items_processed}")
232
- print(f"🆔 Execution ID: {result.execution_id}")
233
-
234
- if result.data and self.config.verbose:
235
- print(f"📄 Result preview: {str(result.data)[:100]}...")
236
-
237
- def _print_test_error(self, result: ExecutionResult):
238
- """Print test error information."""
239
- print("\n❌ Test failed!")
240
- print(f"⏱️ Duration: {result.duration_seconds:.2f}s")
241
- print(f"🆔 Execution ID: {result.execution_id}")
242
-
243
- if result.error:
244
- print(f"🚫 Error: {result.error.message}")
245
- print(f"📝 Type: {result.error.error_type}")
246
- if result.error.error_code:
247
- print(f"🔢 Code: {result.error.error_code}")
248
-
249
- def __repr__(self) -> str:
250
- return f"<TestMode(parser={self.parser.parser_id}, config={self.config.environment})>"
@@ -1,24 +0,0 @@
1
- """
2
- UnrealOn Driver v3.0 Logging Module
3
-
4
- Zero-configuration logging with enterprise features:
5
- - Integration with UnrealOn SDK DevelopmentLogger
6
- - Specialized Driver operations logging
7
- - Real-time WebSocket streaming (optional)
8
- - Structured logging with Pydantic v2
9
- - Performance metrics and operation tracking
10
- """
11
-
12
- from .driver_logger import (
13
- DriverLogger,
14
- initialize_driver_logger,
15
- get_driver_logger,
16
- ensure_driver_logger,
17
- )
18
-
19
- __all__ = [
20
- "DriverLogger",
21
- "initialize_driver_logger",
22
- "get_driver_logger",
23
- "ensure_driver_logger",
24
- ]