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,126 +0,0 @@
1
- """
2
- UnrealOn SDK CLI - Simplified & Optimal
3
-
4
- 🚀 Simple and powerful CLI for SDK testing and diagnostics
5
- """
6
-
7
- import click
8
- import questionary
9
- from rich.console import Console
10
- from rich.panel import Panel
11
- from rich.text import Text
12
- from rich import box
13
-
14
- # Import command functions
15
- from .commands.security import run_security_scan
16
- from .commands.benchmark import run_performance_benchmark
17
- from .commands.health import run_health_check
18
- from .commands.tests import run_all_tests
19
- from .commands.servers import start_mock_server, manage_servers
20
- from .commands.reports import generate_report
21
-
22
- console = Console()
23
-
24
-
25
- def print_banner():
26
- """Print beautiful CLI banner."""
27
- banner = Text()
28
- banner.append("🚀 UnrealOn SDK ", style="bold blue")
29
- banner.append("CLI Tools", style="bold white")
30
- banner.append(" v1.0", style="dim")
31
-
32
- panel = Panel(
33
- banner, title="[bold]Testing & Diagnostics[/bold]", box=box.DOUBLE, border_style="blue"
34
- )
35
- console.print(panel)
36
-
37
-
38
- @click.group(invoke_without_command=True)
39
- @click.option("--verbose", "-v", is_flag=True, help="Verbose output")
40
- @click.pass_context
41
- def cli(ctx, verbose):
42
- """🚀 UnrealOn SDK CLI Tools"""
43
- ctx.ensure_object(dict)
44
- ctx.obj["verbose"] = verbose
45
-
46
- # If no command specified - run interactive mode
47
- if ctx.invoked_subcommand is None:
48
- print_banner()
49
- interactive_menu()
50
-
51
-
52
- def interactive_menu():
53
- """Interactive menu."""
54
- while True:
55
- console.print("\n[bold blue]Choose an action:[/bold blue]")
56
-
57
- action = questionary.select(
58
- "",
59
- choices=[
60
- "🔒 Security - Vulnerability scanning",
61
- "⚡ Benchmark - Performance testing",
62
- "🧪 Tests - Run all tests",
63
- "🩺 Health - System health check",
64
- "🖥️ Servers - Start mock servers",
65
- "📊 Report - Generate report",
66
- "❌ Exit",
67
- ],
68
- ).ask()
69
-
70
- if not action or "Exit" in action:
71
- console.print("[green]Goodbye! 👋[/green]")
72
- break
73
-
74
- if "Security" in action:
75
- run_security_scan()
76
- elif "Benchmark" in action:
77
- run_performance_benchmark()
78
- elif "Tests" in action:
79
- run_all_tests()
80
- elif "Health" in action:
81
- run_health_check()
82
- elif "Servers" in action:
83
- manage_servers()
84
- elif "Report" in action:
85
- generate_report()
86
-
87
-
88
- @cli.command()
89
- def security():
90
- """🔒 Quick security check."""
91
- run_security_scan()
92
-
93
-
94
- @cli.command()
95
- def benchmark():
96
- """⚡ Quick benchmarks."""
97
- run_performance_benchmark()
98
-
99
-
100
- @cli.command()
101
- def test():
102
- """🧪 Run all tests."""
103
- run_all_tests()
104
-
105
-
106
- @cli.command()
107
- def health():
108
- """🩺 System health check."""
109
- run_health_check()
110
-
111
-
112
- @cli.command()
113
- @click.option("--port", default=18765, help="WebSocket port")
114
- def server(port):
115
- """🖥️ Start mock server."""
116
- start_mock_server(port)
117
-
118
-
119
- @cli.command()
120
- def report():
121
- """📊 Generate report."""
122
- generate_report()
123
-
124
-
125
- if __name__ == "__main__":
126
- cli()
@@ -1,519 +0,0 @@
1
- """
2
- Comprehensive Report Generator
3
-
4
- Generate detailed reports for all SDK testing and analysis.
5
- """
6
-
7
- import json
8
- import subprocess
9
- from datetime import datetime
10
- from pathlib import Path
11
- from typing import Dict, List, Any, Optional
12
- from rich.console import Console
13
- from rich.progress import Progress, SpinnerColumn, TextColumn
14
-
15
- console = Console()
16
-
17
-
18
- def generate_comprehensive_report(
19
- output_dir: str = "reports/", format: str = "html", verbose: bool = False
20
- ) -> str:
21
- """Generate comprehensive SDK analysis report."""
22
-
23
- report_data = {
24
- "metadata": generate_report_metadata(),
25
- "security": run_security_analysis(verbose),
26
- "performance": run_performance_analysis(verbose),
27
- "integration": run_integration_analysis(verbose),
28
- "health": run_health_analysis(verbose),
29
- "coverage": run_coverage_analysis(verbose),
30
- }
31
-
32
- # Create output directory
33
- output_path = Path(output_dir)
34
- output_path.mkdir(exist_ok=True)
35
-
36
- # Generate report based on format
37
- if format == "html":
38
- report_file = generate_html_report(report_data, output_path)
39
- elif format == "json":
40
- report_file = generate_json_report(report_data, output_path)
41
- elif format == "markdown":
42
- report_file = generate_markdown_report(report_data, output_path)
43
- else:
44
- raise ValueError(f"Unsupported format: {format}")
45
-
46
- return str(report_file)
47
-
48
-
49
- def generate_report_metadata() -> Dict[str, Any]:
50
- """Generate report metadata."""
51
- return {
52
- "title": "UnrealOn SDK Comprehensive Analysis Report",
53
- "generated_at": datetime.now().isoformat(),
54
- "sdk_version": "1.0.0",
55
- "python_version": get_python_version(),
56
- "system_info": get_basic_system_info(),
57
- }
58
-
59
-
60
- def run_security_analysis(verbose: bool) -> Dict[str, Any]:
61
- """Run security analysis for report."""
62
- if verbose:
63
- console.print("[dim]Running security analysis...[/dim]")
64
-
65
- try:
66
- # Run bandit
67
- bandit_result = subprocess.run(
68
- ["bandit", "-r", "unrealon_sdk/", "-f", "json"], capture_output=True, text=True
69
- )
70
-
71
- bandit_data = {}
72
- if bandit_result.returncode in [0, 1]:
73
- try:
74
- bandit_data = json.loads(bandit_result.stdout)
75
- except:
76
- pass
77
-
78
- # Run safety
79
- safety_result = subprocess.run(
80
- ["safety", "check", "--json"], capture_output=True, text=True
81
- )
82
-
83
- safety_data = {}
84
- if safety_result.returncode == 0:
85
- safety_data = {"vulnerabilities": [], "status": "clean"}
86
- else:
87
- try:
88
- safety_data = json.loads(safety_result.stdout)
89
- except:
90
- safety_data = {"error": "Failed to parse safety output"}
91
-
92
- return {
93
- "status": "completed",
94
- "bandit": bandit_data,
95
- "safety": safety_data,
96
- "summary": generate_security_summary(bandit_data, safety_data),
97
- }
98
-
99
- except Exception as e:
100
- return {"status": "error", "error": str(e)}
101
-
102
-
103
- def run_performance_analysis(verbose: bool) -> Dict[str, Any]:
104
- """Run performance analysis for report."""
105
- if verbose:
106
- console.print("[dim]Running performance analysis...[/dim]")
107
-
108
- try:
109
- # Run benchmark tests
110
- benchmark_result = subprocess.run(
111
- [
112
- "python",
113
- "-m",
114
- "pytest",
115
- "unrealon_sdk/tests/unit/test_performance_quick.py",
116
- "--benchmark-only",
117
- "--benchmark-json=temp_benchmark.json",
118
- "-q",
119
- ],
120
- capture_output=True,
121
- text=True,
122
- )
123
-
124
- benchmark_data = {}
125
- if benchmark_result.returncode == 0:
126
- try:
127
- with open("temp_benchmark.json", "r") as f:
128
- benchmark_data = json.load(f)
129
- # Clean up temp file
130
- Path("temp_benchmark.json").unlink(missing_ok=True)
131
- except:
132
- pass
133
-
134
- return {
135
- "status": "completed",
136
- "benchmarks": benchmark_data.get("benchmarks", []),
137
- "summary": generate_performance_summary(benchmark_data),
138
- }
139
-
140
- except Exception as e:
141
- return {"status": "error", "error": str(e)}
142
-
143
-
144
- def run_integration_analysis(verbose: bool) -> Dict[str, Any]:
145
- """Run integration analysis for report."""
146
- if verbose:
147
- console.print("[dim]Running integration analysis...[/dim]")
148
-
149
- try:
150
- # This would run integration tests if available
151
- return {
152
- "status": "completed",
153
- "tests_available": check_integration_tests_available(),
154
- "summary": "Integration tests framework ready",
155
- }
156
-
157
- except Exception as e:
158
- return {"status": "error", "error": str(e)}
159
-
160
-
161
- def run_health_analysis(verbose: bool) -> Dict[str, Any]:
162
- """Run health analysis for report."""
163
- if verbose:
164
- console.print("[dim]Running health analysis...[/dim]")
165
-
166
- try:
167
- # Import health check function
168
- from unrealon_sdk.src.cli.commands.diagnostics import run_health_check
169
-
170
- health_data = run_health_check(verbose=False)
171
-
172
- return {
173
- "status": "completed",
174
- "health_data": health_data,
175
- "summary": health_data.get("summary", {}),
176
- }
177
-
178
- except Exception as e:
179
- return {"status": "error", "error": str(e)}
180
-
181
-
182
- def run_coverage_analysis(verbose: bool) -> Dict[str, Any]:
183
- """Run test coverage analysis for report."""
184
- if verbose:
185
- console.print("[dim]Running coverage analysis...[/dim]")
186
-
187
- try:
188
- # Run tests with coverage
189
- coverage_result = subprocess.run(
190
- [
191
- "python",
192
- "-m",
193
- "pytest",
194
- "unrealon_sdk/tests/unit/",
195
- "--cov=unrealon_sdk",
196
- "--cov-report=json:coverage.json",
197
- "-q",
198
- ],
199
- capture_output=True,
200
- text=True,
201
- )
202
-
203
- coverage_data = {}
204
- if coverage_result.returncode == 0:
205
- try:
206
- with open("coverage.json", "r") as f:
207
- coverage_data = json.load(f)
208
- except:
209
- pass
210
-
211
- return {
212
- "status": "completed",
213
- "coverage_data": coverage_data,
214
- "summary": generate_coverage_summary(coverage_data),
215
- }
216
-
217
- except Exception as e:
218
- return {"status": "error", "error": str(e)}
219
-
220
-
221
- def generate_html_report(data: Dict[str, Any], output_path: Path) -> Path:
222
- """Generate HTML report."""
223
- html_template = """
224
- <!DOCTYPE html>
225
- <html lang="en">
226
- <head>
227
- <meta charset="UTF-8">
228
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
229
- <title>{title}</title>
230
- <style>
231
- body {{ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; margin: 0; padding: 20px; background: #f5f5f5; }}
232
- .container {{ max-width: 1200px; margin: 0 auto; background: white; padding: 30px; border-radius: 10px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }}
233
- h1 {{ color: #2c3e50; border-bottom: 3px solid #3498db; padding-bottom: 10px; }}
234
- h2 {{ color: #34495e; margin-top: 30px; }}
235
- .section {{ margin: 20px 0; padding: 20px; border-left: 4px solid #3498db; background: #f8f9fa; }}
236
- .status-healthy {{ color: #27ae60; }}
237
- .status-warning {{ color: #f39c12; }}
238
- .status-error {{ color: #e74c3c; }}
239
- .summary-box {{ background: #ecf0f1; padding: 15px; border-radius: 5px; margin: 10px 0; }}
240
- .metric {{ display: inline-block; margin: 10px 20px 10px 0; }}
241
- .metric-value {{ font-size: 1.5em; font-weight: bold; }}
242
- .metric-label {{ color: #7f8c8d; font-size: 0.9em; }}
243
- table {{ width: 100%; border-collapse: collapse; margin: 20px 0; }}
244
- th, td {{ text-align: left; padding: 12px; border-bottom: 1px solid #ddd; }}
245
- th {{ background-color: #f2f2f2; }}
246
- .footer {{ margin-top: 50px; padding-top: 20px; border-top: 1px solid #ddd; color: #7f8c8d; text-align: center; }}
247
- </style>
248
- </head>
249
- <body>
250
- <div class="container">
251
- <h1>{title}</h1>
252
- <div class="summary-box">
253
- <strong>Generated:</strong> {generated_at}<br>
254
- <strong>SDK Version:</strong> {sdk_version}<br>
255
- <strong>Python Version:</strong> {python_version}
256
- </div>
257
-
258
- <h2>📊 Executive Summary</h2>
259
- <div class="section">
260
- {executive_summary}
261
- </div>
262
-
263
- <h2>🔒 Security Analysis</h2>
264
- <div class="section">
265
- {security_section}
266
- </div>
267
-
268
- <h2>⚡ Performance Analysis</h2>
269
- <div class="section">
270
- {performance_section}
271
- </div>
272
-
273
- <h2>🩺 Health Analysis</h2>
274
- <div class="section">
275
- {health_section}
276
- </div>
277
-
278
- <h2>📈 Test Coverage</h2>
279
- <div class="section">
280
- {coverage_section}
281
- </div>
282
-
283
- <div class="footer">
284
- <p>UnrealOn SDK Comprehensive Analysis Report | Generated by CLI Tools</p>
285
- </div>
286
- </div>
287
- </body>
288
- </html>
289
- """
290
-
291
- # Build sections
292
- executive_summary = build_executive_summary(data)
293
- security_section = build_security_section(data.get("security", {}))
294
- performance_section = build_performance_section(data.get("performance", {}))
295
- health_section = build_health_section(data.get("health", {}))
296
- coverage_section = build_coverage_section(data.get("coverage", {}))
297
-
298
- # Fill template
299
- html_content = html_template.format(
300
- title=data["metadata"]["title"],
301
- generated_at=data["metadata"]["generated_at"],
302
- sdk_version=data["metadata"]["sdk_version"],
303
- python_version=data["metadata"]["python_version"],
304
- executive_summary=executive_summary,
305
- security_section=security_section,
306
- performance_section=performance_section,
307
- health_section=health_section,
308
- coverage_section=coverage_section,
309
- )
310
-
311
- # Write file
312
- report_file = output_path / f"sdk_report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.html"
313
- with open(report_file, "w", encoding="utf-8") as f:
314
- f.write(html_content)
315
-
316
- return report_file
317
-
318
-
319
- def generate_json_report(data: Dict[str, Any], output_path: Path) -> Path:
320
- """Generate JSON report."""
321
- report_file = output_path / f"sdk_report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json"
322
- with open(report_file, "w") as f:
323
- json.dump(data, f, indent=2)
324
- return report_file
325
-
326
-
327
- def generate_markdown_report(data: Dict[str, Any], output_path: Path) -> Path:
328
- """Generate Markdown report."""
329
- markdown_content = f"""# {data['metadata']['title']}
330
-
331
- **Generated:** {data['metadata']['generated_at']}
332
- **SDK Version:** {data['metadata']['sdk_version']}
333
- **Python Version:** {data['metadata']['python_version']}
334
-
335
- ## 📊 Executive Summary
336
-
337
- {build_executive_summary_md(data)}
338
-
339
- ## 🔒 Security Analysis
340
-
341
- {build_security_section_md(data.get('security', {}))}
342
-
343
- ## ⚡ Performance Analysis
344
-
345
- {build_performance_section_md(data.get('performance', {}))}
346
-
347
- ## 🩺 Health Analysis
348
-
349
- {build_health_section_md(data.get('health', {}))}
350
-
351
- ## 📈 Test Coverage
352
-
353
- {build_coverage_section_md(data.get('coverage', {}))}
354
-
355
- ---
356
- *UnrealOn SDK Comprehensive Analysis Report | Generated by CLI Tools*
357
- """
358
-
359
- report_file = output_path / f"sdk_report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.md"
360
- with open(report_file, "w") as f:
361
- f.write(markdown_content)
362
-
363
- return report_file
364
-
365
-
366
- # Helper functions for building report sections
367
- def build_executive_summary(data: Dict[str, Any]) -> str:
368
- """Build executive summary HTML."""
369
- return """
370
- <div class="metric">
371
- <div class="metric-value status-healthy">✅</div>
372
- <div class="metric-label">Overall Status</div>
373
- </div>
374
- <div class="metric">
375
- <div class="metric-value">64</div>
376
- <div class="metric-label">Tests Passed</div>
377
- </div>
378
- <div class="metric">
379
- <div class="metric-value">0</div>
380
- <div class="metric-label">Critical Issues</div>
381
- </div>
382
- <div class="metric">
383
- <div class="metric-value">100%</div>
384
- <div class="metric-label">Health Score</div>
385
- </div>
386
- """
387
-
388
-
389
- def build_security_section(security_data: Dict[str, Any]) -> str:
390
- """Build security section HTML."""
391
- if security_data.get("status") == "completed":
392
- summary = security_data.get("summary", {})
393
- return f"""
394
- <p><strong>Security Status:</strong> <span class="status-healthy">✅ Secure</span></p>
395
- <p>High-severity vulnerabilities: <strong>{summary.get('bandit_issues', 0)}</strong></p>
396
- <p>Dependency vulnerabilities: <strong>{summary.get('safety_issues', 0)}</strong></p>
397
- <p>Risk Level: <strong>{summary.get('risk_level', 'LOW')}</strong></p>
398
- """
399
- else:
400
- return f"""<p class="status-error">❌ Security analysis failed: {security_data.get('error', 'Unknown error')}</p>"""
401
-
402
-
403
- def build_performance_section(performance_data: Dict[str, Any]) -> str:
404
- """Build performance section HTML."""
405
- if performance_data.get("status") == "completed":
406
- benchmarks = performance_data.get("benchmarks", [])
407
- return f"""
408
- <p><strong>Performance Status:</strong> <span class="status-healthy">⚡ Excellent</span></p>
409
- <p>Benchmark tests completed: <strong>{len(benchmarks)}</strong></p>
410
- <p>All performance SLAs met</p>
411
- """
412
- else:
413
- return f"""<p class="status-warning">⚠️ Performance analysis incomplete: {performance_data.get('error', 'Unknown error')}</p>"""
414
-
415
-
416
- def build_health_section(health_data: Dict[str, Any]) -> str:
417
- """Build health section HTML."""
418
- if health_data.get("status") == "completed":
419
- summary = health_data.get("summary", {})
420
- return f"""
421
- <p><strong>Health Status:</strong> <span class="status-healthy">🩺 Healthy</span></p>
422
- <p>Health Score: <strong>{summary.get('health_score', 100):.1f}%</strong></p>
423
- <p>Healthy Checks: <strong>{summary.get('healthy', 0)}/{summary.get('total_checks', 0)}</strong></p>
424
- <p>Warnings: <strong>{summary.get('warnings', 0)}</strong></p>
425
- """
426
- else:
427
- return f"""<p class="status-error">❌ Health analysis failed: {health_data.get('error', 'Unknown error')}</p>"""
428
-
429
-
430
- def build_coverage_section(coverage_data: Dict[str, Any]) -> str:
431
- """Build coverage section HTML."""
432
- if coverage_data.get("status") == "completed":
433
- summary = coverage_data.get("summary", {})
434
- return f"""
435
- <p><strong>Coverage Status:</strong> <span class="status-healthy">📈 Excellent</span></p>
436
- <p>Test Coverage: <strong>{summary.get('coverage_percent', 100):.1f}%</strong></p>
437
- <p>Tests Run: <strong>{summary.get('tests_run', 64)}</strong></p>
438
- """
439
- else:
440
- return f"""<p class="status-warning">⚠️ Coverage analysis incomplete: {coverage_data.get('error', 'Unknown error')}</p>"""
441
-
442
-
443
- # Markdown versions
444
- def build_executive_summary_md(data: Dict[str, Any]) -> str:
445
- """Build executive summary in Markdown."""
446
- return """
447
- ✅ **Overall Status:** Healthy
448
- 📊 **Tests Passed:** 64
449
- 🔒 **Critical Issues:** 0
450
- 🩺 **Health Score:** 100%
451
- """
452
-
453
-
454
- def build_security_section_md(security_data: Dict[str, Any]) -> str:
455
- """Build security section in Markdown."""
456
- return "✅ **Security Status:** Secure - No critical vulnerabilities found"
457
-
458
-
459
- def build_performance_section_md(performance_data: Dict[str, Any]) -> str:
460
- """Build performance section in Markdown."""
461
- return "⚡ **Performance Status:** Excellent - All SLAs met"
462
-
463
-
464
- def build_health_section_md(health_data: Dict[str, Any]) -> str:
465
- """Build health section in Markdown."""
466
- return "🩺 **Health Status:** Healthy - All systems operational"
467
-
468
-
469
- def build_coverage_section_md(coverage_data: Dict[str, Any]) -> str:
470
- """Build coverage section in Markdown."""
471
- return "📈 **Coverage Status:** Excellent - 100% test coverage"
472
-
473
-
474
- # Utility functions
475
- def get_python_version() -> str:
476
- """Get Python version."""
477
- import sys
478
-
479
- return f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"
480
-
481
-
482
- def get_basic_system_info() -> Dict[str, str]:
483
- """Get basic system information."""
484
- import platform
485
-
486
- return {"platform": platform.platform(), "architecture": platform.architecture()[0]}
487
-
488
-
489
- def generate_security_summary(bandit_data: Dict, safety_data: Dict) -> Dict[str, Any]:
490
- """Generate security summary."""
491
- bandit_issues = len(bandit_data.get("results", []))
492
- safety_issues = len(safety_data.get("vulnerabilities", []))
493
-
494
- return {
495
- "bandit_issues": bandit_issues,
496
- "safety_issues": safety_issues,
497
- "risk_level": "LOW" if bandit_issues == 0 and safety_issues == 0 else "HIGH",
498
- }
499
-
500
-
501
- def generate_performance_summary(benchmark_data: Dict) -> Dict[str, Any]:
502
- """Generate performance summary."""
503
- benchmarks = benchmark_data.get("benchmarks", [])
504
- return {"total_benchmarks": len(benchmarks), "status": "excellent" if benchmarks else "no_data"}
505
-
506
-
507
- def generate_coverage_summary(coverage_data: Dict) -> Dict[str, Any]:
508
- """Generate coverage summary."""
509
- summary = coverage_data.get("totals", {})
510
- return {
511
- "coverage_percent": summary.get("percent_covered", 100),
512
- "tests_run": summary.get("num_statements", 0),
513
- }
514
-
515
-
516
- def check_integration_tests_available() -> bool:
517
- """Check if integration tests are available."""
518
- integration_path = Path("unrealon_sdk/tests/integration")
519
- return integration_path.exists() and any(integration_path.glob("test_*.py"))