unrealon 1.0.9__py3-none-any.whl → 1.1.1__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.1.dist-info/METADATA +722 -0
  3. unrealon-1.1.1.dist-info/RECORD +82 -0
  4. {unrealon-1.0.9.dist-info → unrealon-1.1.1.dist-info}/WHEEL +1 -1
  5. unrealon-1.1.1.dist-info/entry_points.txt +9 -0
  6. {unrealon-1.0.9.dist-info → unrealon-1.1.1.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,498 +0,0 @@
1
- """
2
- Integration Testing CLI Commands
3
-
4
- End-to-end testing with mock servers and real scenarios.
5
- """
6
-
7
- import click
8
- import questionary
9
- import asyncio
10
- import subprocess
11
- from pathlib import Path
12
- from rich.console import Console
13
- from rich.table import Table
14
- from rich.panel import Panel
15
- from rich.progress import Progress, SpinnerColumn, TextColumn
16
- from typing import Dict, List, Any, Optional
17
-
18
- console = Console()
19
-
20
-
21
- @click.group()
22
- def integration_cli():
23
- """🔧 Integration testing with mock servers."""
24
- pass
25
-
26
-
27
- @integration_cli.command()
28
- @click.option('--scenario', default='all',
29
- type=click.Choice(['all', 'websocket', 'http', 'enterprise', 'custom']),
30
- help='Integration scenario to run')
31
- @click.option('--mock-servers', is_flag=True, default=True,
32
- help='Use mock servers for testing')
33
- @click.option('--timeout', default=300, help='Test timeout in seconds')
34
- @click.option('--verbose', '-v', is_flag=True, help='Verbose output')
35
- def test(scenario, mock_servers, timeout, verbose):
36
- """🚀 Run integration tests with mock servers."""
37
- console.print(f"[bold blue]🔧 Running Integration Tests - {scenario.upper()}[/bold blue]")
38
-
39
- with Progress(
40
- SpinnerColumn(),
41
- TextColumn("[progress.description]{task.description}"),
42
- console=console
43
- ) as progress:
44
-
45
- if mock_servers:
46
- # Start mock servers
47
- task1 = progress.add_task("🖥️ Starting mock servers...", total=None)
48
- server_info = start_mock_servers()
49
- progress.update(task1, completed=100)
50
-
51
- # Run integration tests
52
- task2 = progress.add_task(f"🧪 Running {scenario} integration tests...", total=None)
53
- test_results = run_integration_tests(scenario, timeout, verbose)
54
- progress.update(task2, completed=100)
55
-
56
- if mock_servers:
57
- # Stop mock servers
58
- task3 = progress.add_task("🛑 Stopping mock servers...", total=None)
59
- stop_mock_servers(server_info)
60
- progress.update(task3, completed=100)
61
-
62
- # Display results
63
- display_integration_results(test_results, scenario)
64
-
65
- # Exit with appropriate code
66
- if test_results.get('failed', 0) > 0:
67
- console.print(f"[red]❌ {test_results['failed']} integration tests failed[/red]")
68
- exit(1)
69
- else:
70
- console.print(f"[green]✅ All {test_results['passed']} integration tests passed[/green]")
71
-
72
-
73
- @integration_cli.command()
74
- @click.option('--websocket-port', default=18765, help='WebSocket mock server port')
75
- @click.option('--http-port', default=18080, help='HTTP mock server port')
76
- @click.option('--with-errors', is_flag=True, help='Enable error simulation')
77
- @click.option('--latency', default=50, help='Simulated latency in ms')
78
- def start_servers(websocket_port, http_port, with_errors, latency):
79
- """🖥️ Start mock servers for development/testing."""
80
- console.print("[bold blue]🖥️ Starting Mock Servers[/bold blue]")
81
-
82
- # Start servers
83
- servers = start_development_servers(websocket_port, http_port, with_errors, latency)
84
-
85
- if servers['success']:
86
- console.print(f"[green]✅ Mock servers started successfully[/green]")
87
- console.print(f"[cyan]WebSocket: ws://localhost:{websocket_port}[/cyan]")
88
- console.print(f"[cyan]HTTP: http://localhost:{http_port}[/cyan]")
89
- console.print("[dim]Press Ctrl+C to stop servers[/dim]")
90
-
91
- try:
92
- # Keep servers running
93
- while True:
94
- import time
95
- time.sleep(1)
96
- except KeyboardInterrupt:
97
- console.print("\n[yellow]Stopping servers...[/yellow]")
98
- stop_development_servers(servers)
99
- console.print("[green]Servers stopped[/green]")
100
- else:
101
- console.print(f"[red]❌ Failed to start servers: {servers.get('error')}[/red]")
102
- exit(1)
103
-
104
-
105
- @integration_cli.command()
106
- @click.argument('endpoint')
107
- @click.option('--method', default='GET', help='HTTP method')
108
- @click.option('--data', help='Request data (JSON)')
109
- @click.option('--headers', help='Request headers (JSON)')
110
- def test_endpoint(endpoint, method, data, headers):
111
- """🔍 Test specific API endpoint."""
112
- console.print(f"[bold blue]🔍 Testing Endpoint: {method} {endpoint}[/bold blue]")
113
-
114
- result = test_api_endpoint(endpoint, method, data, headers)
115
- display_endpoint_test_result(result)
116
-
117
-
118
- @integration_cli.command()
119
- @click.option('--config-file', help='Custom scenario configuration file')
120
- def scenarios(config_file):
121
- """📋 Run predefined integration scenarios."""
122
- console.print("[bold blue]📋 Running Integration Scenarios[/bold blue]")
123
-
124
- if config_file and Path(config_file).exists():
125
- scenarios_config = load_scenarios_config(config_file)
126
- else:
127
- scenarios_config = get_default_scenarios()
128
-
129
- run_integration_scenarios(scenarios_config)
130
-
131
-
132
- @integration_cli.command()
133
- def interactive():
134
- """🎯 Interactive integration testing workflow."""
135
- console.print("[bold blue]🔧 Interactive Integration Testing[/bold blue]")
136
-
137
- test_type = questionary.select(
138
- "What type of integration test would you like to run?",
139
- choices=[
140
- "🚀 Quick integration test (core functionality)",
141
- "🖥️ Start mock servers for development",
142
- "🔍 Test specific API endpoint",
143
- "📋 Run predefined scenarios",
144
- "🔧 Custom test configuration",
145
- "📊 Generate integration report"
146
- ]
147
- ).ask()
148
-
149
- if "Quick integration" in test_type:
150
- run_quick_integration_test()
151
- elif "Start mock servers" in test_type:
152
- start_interactive_servers()
153
- elif "Test specific endpoint" in test_type:
154
- test_interactive_endpoint()
155
- elif "Run predefined scenarios" in test_type:
156
- run_interactive_scenarios()
157
- elif "Custom test configuration" in test_type:
158
- create_custom_test_config()
159
- elif "Generate integration report" in test_type:
160
- generate_integration_report()
161
-
162
-
163
- def start_mock_servers() -> Dict[str, Any]:
164
- """Start mock servers for integration testing."""
165
- try:
166
- # This would start the actual mock servers
167
- # For now, simulate the process
168
- console.print("[dim]Starting WebSocket mock server on port 18765...[/dim]")
169
- console.print("[dim]Starting HTTP mock server on port 18080...[/dim]")
170
-
171
- return {
172
- 'websocket_server': {'host': 'localhost', 'port': 18765, 'pid': 12345},
173
- 'http_server': {'host': 'localhost', 'port': 18080, 'pid': 12346},
174
- 'success': True
175
- }
176
- except Exception as e:
177
- return {'success': False, 'error': str(e)}
178
-
179
-
180
- def stop_mock_servers(server_info: Dict[str, Any]):
181
- """Stop mock servers."""
182
- if server_info.get('success'):
183
- console.print("[dim]Stopping mock servers...[/dim]")
184
- # Implementation would stop actual servers
185
-
186
-
187
- def run_integration_tests(scenario: str, timeout: int, verbose: bool) -> Dict[str, Any]:
188
- """Run integration tests."""
189
- try:
190
- cmd = [
191
- 'python', '-m', 'pytest',
192
- 'unrealon_sdk/tests/integration/',
193
- '-v' if verbose else '-q',
194
- f'--timeout={timeout}',
195
- '--tb=short'
196
- ]
197
-
198
- if scenario != 'all':
199
- # Add scenario-specific test selection
200
- if scenario == 'websocket':
201
- cmd.append('-k websocket')
202
- elif scenario == 'http':
203
- cmd.append('-k http')
204
- elif scenario == 'enterprise':
205
- cmd.append('-k enterprise')
206
-
207
- result = subprocess.run(cmd, capture_output=True, text=True, timeout=timeout)
208
-
209
- # Parse pytest output
210
- output_lines = result.stdout.split('\n')
211
- passed = 0
212
- failed = 0
213
- errors = []
214
-
215
- for line in output_lines:
216
- if 'passed' in line and 'failed' in line:
217
- # Extract test counts from pytest summary
218
- if 'failed' in line:
219
- parts = line.split()
220
- for i, part in enumerate(parts):
221
- if part == 'failed,':
222
- failed = int(parts[i-1])
223
- elif part == 'passed':
224
- passed = int(parts[i-1])
225
- elif 'FAILED' in line:
226
- errors.append(line.strip())
227
-
228
- return {
229
- 'passed': passed,
230
- 'failed': failed,
231
- 'errors': errors,
232
- 'output': result.stdout,
233
- 'return_code': result.returncode
234
- }
235
-
236
- except subprocess.TimeoutExpired:
237
- return {
238
- 'passed': 0,
239
- 'failed': 1,
240
- 'errors': ['Test execution timed out'],
241
- 'timeout': True
242
- }
243
- except Exception as e:
244
- return {
245
- 'passed': 0,
246
- 'failed': 1,
247
- 'errors': [str(e)],
248
- 'exception': True
249
- }
250
-
251
-
252
- def display_integration_results(results: Dict[str, Any], scenario: str):
253
- """Display integration test results."""
254
- total_tests = results['passed'] + results['failed']
255
- success_rate = (results['passed'] / total_tests * 100) if total_tests > 0 else 0
256
-
257
- # Summary panel
258
- summary_text = f"""
259
- [bold]Integration Test Results - {scenario.upper()}[/bold]
260
-
261
- 📊 Total Tests: {total_tests}
262
- ✅ Passed: {results['passed']}
263
- ❌ Failed: {results['failed']}
264
- 📈 Success Rate: {success_rate:.1f}%
265
- """
266
-
267
- color = "green" if results['failed'] == 0 else "red"
268
- console.print(Panel(summary_text, title="Integration Test Summary", border_style=color))
269
-
270
- # Error details
271
- if results.get('errors'):
272
- error_table = Table(title="Failed Tests")
273
- error_table.add_column("Error", style="red")
274
-
275
- for error in results['errors'][:10]: # Show first 10 errors
276
- error_table.add_row(error)
277
-
278
- console.print(error_table)
279
-
280
-
281
- def start_development_servers(ws_port: int, http_port: int, with_errors: bool, latency: int) -> Dict[str, Any]:
282
- """Start development mock servers."""
283
- # This would start actual servers using the mock server classes
284
- return {
285
- 'success': True,
286
- 'websocket_port': ws_port,
287
- 'http_port': http_port,
288
- 'error_simulation': with_errors,
289
- 'latency_ms': latency
290
- }
291
-
292
-
293
- def stop_development_servers(server_info: Dict[str, Any]):
294
- """Stop development servers."""
295
- # Implementation to stop servers
296
- pass
297
-
298
-
299
- def test_api_endpoint(endpoint: str, method: str, data: Optional[str], headers: Optional[str]) -> Dict[str, Any]:
300
- """Test a specific API endpoint."""
301
- import requests
302
- import json
303
-
304
- try:
305
- # Parse data and headers
306
- request_data = json.loads(data) if data else None
307
- request_headers = json.loads(headers) if headers else {}
308
-
309
- # Make request
310
- response = requests.request(
311
- method=method,
312
- url=endpoint,
313
- json=request_data,
314
- headers=request_headers,
315
- timeout=30
316
- )
317
-
318
- return {
319
- 'status_code': response.status_code,
320
- 'headers': dict(response.headers),
321
- 'body': response.text,
322
- 'success': response.status_code < 400
323
- }
324
-
325
- except Exception as e:
326
- return {
327
- 'error': str(e),
328
- 'success': False
329
- }
330
-
331
-
332
- def display_endpoint_test_result(result: Dict[str, Any]):
333
- """Display endpoint test result."""
334
- if result.get('success'):
335
- console.print(f"[green]✅ Status: {result['status_code']}[/green]")
336
- console.print(f"[dim]Response: {result['body'][:200]}...[/dim]")
337
- else:
338
- console.print(f"[red]❌ Error: {result.get('error', 'Unknown error')}[/red]")
339
-
340
-
341
- def load_scenarios_config(config_file: str) -> Dict[str, Any]:
342
- """Load scenarios from configuration file."""
343
- import json
344
- with open(config_file, 'r') as f:
345
- return json.load(f)
346
-
347
-
348
- def get_default_scenarios() -> Dict[str, Any]:
349
- """Get default integration scenarios."""
350
- return {
351
- 'scenarios': [
352
- {
353
- 'name': 'WebSocket Connection Test',
354
- 'type': 'websocket',
355
- 'steps': ['connect', 'authenticate', 'send_message', 'disconnect']
356
- },
357
- {
358
- 'name': 'HTTP API Test',
359
- 'type': 'http',
360
- 'steps': ['health_check', 'register_parser', 'get_stats']
361
- },
362
- {
363
- 'name': 'End-to-End Flow',
364
- 'type': 'e2e',
365
- 'steps': ['setup', 'connect_all', 'run_workflow', 'cleanup']
366
- }
367
- ]
368
- }
369
-
370
-
371
- def run_integration_scenarios(config: Dict[str, Any]):
372
- """Run integration scenarios from configuration."""
373
- scenarios = config.get('scenarios', [])
374
-
375
- console.print(f"[bold blue]📋 Running {len(scenarios)} Integration Scenarios[/bold blue]")
376
-
377
- results = []
378
- for scenario in scenarios:
379
- console.print(f"[yellow]Running: {scenario['name']}[/yellow]")
380
- result = execute_scenario(scenario)
381
- results.append(result)
382
-
383
- status = "✅" if result['success'] else "❌"
384
- console.print(f"{status} {scenario['name']}: {result['status']}")
385
-
386
- # Summary
387
- passed = sum(1 for r in results if r['success'])
388
- failed = len(results) - passed
389
-
390
- console.print(f"\n[bold]Scenario Results: {passed} passed, {failed} failed[/bold]")
391
-
392
-
393
- def execute_scenario(scenario: Dict[str, Any]) -> Dict[str, Any]:
394
- """Execute a single integration scenario."""
395
- try:
396
- # Simulate scenario execution
397
- import time
398
- time.sleep(0.5) # Simulate work
399
-
400
- return {
401
- 'name': scenario['name'],
402
- 'success': True,
403
- 'status': 'completed',
404
- 'duration': 0.5
405
- }
406
- except Exception as e:
407
- return {
408
- 'name': scenario['name'],
409
- 'success': False,
410
- 'status': f'failed: {str(e)}',
411
- 'duration': 0
412
- }
413
-
414
-
415
- def run_quick_integration_test():
416
- """Run quick integration test."""
417
- console.print("[yellow]🚀 Running quick integration test...[/yellow]")
418
-
419
- # Quick test selection
420
- tests = questionary.checkbox(
421
- "Select quick tests to run:",
422
- choices=[
423
- "WebSocket connection test",
424
- "HTTP client test",
425
- "Enterprise services test",
426
- "Configuration validation test"
427
- ]
428
- ).ask()
429
-
430
- for test in tests:
431
- console.print(f"[dim]Running {test}...[/dim]")
432
- # Simulate test execution
433
- import time
434
- time.sleep(0.2)
435
- console.print(f"[green]✅ {test} passed[/green]")
436
-
437
-
438
- def start_interactive_servers():
439
- """Start servers interactively."""
440
- ws_port = questionary.text("WebSocket port:", default="18765").ask()
441
- http_port = questionary.text("HTTP port:", default="18080").ask()
442
- with_errors = questionary.confirm("Enable error simulation?").ask()
443
- latency = questionary.text("Latency (ms):", default="50").ask()
444
-
445
- console.print(f"[yellow]Starting servers on ports {ws_port} and {http_port}...[/yellow]")
446
-
447
-
448
- def test_interactive_endpoint():
449
- """Test endpoint interactively."""
450
- endpoint = questionary.text("Endpoint URL:").ask()
451
- method = questionary.select(
452
- "HTTP method:",
453
- choices=["GET", "POST", "PUT", "DELETE", "PATCH"]
454
- ).ask()
455
-
456
- console.print(f"[yellow]Testing {method} {endpoint}...[/yellow]")
457
-
458
-
459
- def run_interactive_scenarios():
460
- """Run scenarios interactively."""
461
- scenarios = questionary.checkbox(
462
- "Select scenarios to run:",
463
- choices=[
464
- "WebSocket connection flow",
465
- "HTTP API full workflow",
466
- "Enterprise services integration",
467
- "Error handling scenarios",
468
- "Performance under load"
469
- ]
470
- ).ask()
471
-
472
- for scenario in scenarios:
473
- console.print(f"[yellow]Running {scenario}...[/yellow]")
474
-
475
-
476
- def create_custom_test_config():
477
- """Create custom test configuration."""
478
- console.print("[yellow]🔧 Creating custom test configuration...[/yellow]")
479
-
480
- # Guide user through creating custom config
481
- name = questionary.text("Test configuration name:").ask()
482
- console.print(f"[green]Custom configuration '{name}' would be created[/green]")
483
-
484
-
485
- def generate_integration_report():
486
- """Generate integration testing report."""
487
- console.print("[yellow]📊 Generating integration report...[/yellow]")
488
-
489
- format_choice = questionary.select(
490
- "Report format:",
491
- choices=["HTML", "JSON", "Markdown", "PDF"]
492
- ).ask()
493
-
494
- console.print(f"[green]Integration report would be generated in {format_choice} format[/green]")
495
-
496
-
497
- if __name__ == '__main__':
498
- integration_cli()
@@ -1,43 +0,0 @@
1
- """
2
- Report Generation Commands
3
-
4
- Simple report generation for UnrealOn SDK.
5
- """
6
-
7
- import json
8
- import questionary
9
- from rich.console import Console
10
- from typing import Dict, Any
11
-
12
- console = Console()
13
-
14
-
15
- def generate_report() -> Dict[str, Any]:
16
- """Generate report."""
17
- console.print("[bold blue]📊 Generating report...[/bold blue]")
18
-
19
- format_choice = questionary.select(
20
- "Report format:",
21
- choices=["HTML", "JSON", "Markdown"]
22
- ).ask()
23
-
24
- with console.status("[bold green]Creating report..."):
25
- # Collect data
26
- report_data = {
27
- 'timestamp': '2025-08-11T01:00:00',
28
- 'sdk_version': '1.0.0',
29
- 'tests_passed': 64,
30
- 'security_issues': 0,
31
- 'performance_score': 'Excellent'
32
- }
33
-
34
- # Save report
35
- filename = f"sdk_report.{format_choice.lower()}"
36
- with open(filename, 'w') as f:
37
- if format_choice == 'JSON':
38
- json.dump(report_data, f, indent=2)
39
- else:
40
- f.write(f"# UnrealOn SDK Report\n\n{report_data}")
41
-
42
- console.print(f"[green]✅ Report saved: {filename}[/green]")
43
- return {'status': 'created', 'filename': filename, 'format': format_choice}
@@ -1,36 +0,0 @@
1
- """
2
- Security Analysis Commands
3
-
4
- Simple security scanning for UnrealOn SDK.
5
- """
6
-
7
- import subprocess
8
- from rich.console import Console
9
- from typing import Dict, Any
10
-
11
- console = Console()
12
-
13
-
14
- def run_security_scan() -> Dict[str, Any]:
15
- """Run quick security vulnerability scan."""
16
- console.print("[bold blue]🔒 Security vulnerability scan...[/bold blue]")
17
-
18
- with console.status("[bold green]Scanning..."):
19
- try:
20
- # Bandit scan for high severity issues
21
- result = subprocess.run(
22
- ['bandit', '-r', 'unrealon_sdk/', '--severity-level', 'high'],
23
- capture_output=True, text=True
24
- )
25
-
26
- if result.returncode == 0:
27
- console.print("[green]✅ No critical vulnerabilities found[/green]")
28
- return {'status': 'clean', 'issues': 0}
29
- else:
30
- console.print("[red]❌ Security issues detected[/red]")
31
- console.print(result.stdout)
32
- return {'status': 'issues', 'issues': 1, 'output': result.stdout}
33
-
34
- except FileNotFoundError:
35
- console.print("[yellow]⚠️ Bandit not installed: pip install bandit[/yellow]")
36
- return {'status': 'error', 'message': 'Bandit not installed'}