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
@@ -0,0 +1,722 @@
1
+ Metadata-Version: 2.4
2
+ Name: unrealon
3
+ Version: 1.1.1
4
+ Summary: Advanced browser automation framework with WebSocket bridge for distributed web scraping
5
+ Project-URL: Homepage, https://github.com/unrealos/unrealon-rpc
6
+ Project-URL: Documentation, https://unrealon-rpc.readthedocs.io
7
+ Project-URL: Repository, https://github.com/unrealos/unrealon-rpc.git
8
+ Project-URL: Issues, https://github.com/unrealos/unrealon-rpc/issues
9
+ Project-URL: Changelog, https://github.com/unrealos/unrealon-rpc/blob/main/CHANGELOG.md
10
+ Author-email: UnrealOS Team <dev@unrealos.com>
11
+ Maintainer-email: UnrealOS Team <dev@unrealos.com>
12
+ License: MIT
13
+ License-File: LICENSE
14
+ Keywords: async,bridge,browser-automation,html-processing,parsing,playwright,pydantic,stealth,web-scraping,websocket
15
+ Classifier: Development Status :: 4 - Beta
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: License :: OSI Approved :: MIT License
18
+ Classifier: Operating System :: OS Independent
19
+ Classifier: Programming Language :: Python
20
+ Classifier: Programming Language :: Python :: 3
21
+ Classifier: Programming Language :: Python :: 3.10
22
+ Classifier: Programming Language :: Python :: 3.11
23
+ Classifier: Programming Language :: Python :: 3.12
24
+ Classifier: Topic :: Communications
25
+ Classifier: Topic :: Internet :: WWW/HTTP
26
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
27
+ Classifier: Topic :: System :: Distributed Computing
28
+ Classifier: Typing :: Typed
29
+ Requires-Python: <4.0,>=3.10
30
+ Requires-Dist: aiohttp>=3.9.0
31
+ Requires-Dist: asyncio-mqtt>=0.16.0
32
+ Requires-Dist: beautifulsoup4>=4.12.0
33
+ Requires-Dist: click>=8.2.0
34
+ Requires-Dist: httpx>=0.26.0
35
+ Requires-Dist: ipfshttpclient>=0.8.0a2
36
+ Requires-Dist: lxml>=5.0.0
37
+ Requires-Dist: playwright-stealth<2.0.0,>=1.0.5
38
+ Requires-Dist: playwright>=1.40.0
39
+ Requires-Dist: pydantic<3.0,>=2.11
40
+ Requires-Dist: python-dateutil>=2.8
41
+ Requires-Dist: python-dotenv>=1.0.0
42
+ Requires-Dist: pyyaml>=6.0
43
+ Requires-Dist: redis>=5.0.0
44
+ Requires-Dist: rich>=13.0.0
45
+ Requires-Dist: tomlkit>=0.13.0
46
+ Requires-Dist: websockets>=12.0
47
+ Provides-Extra: dev
48
+ Requires-Dist: bandit>=1.7.0; extra == 'dev'
49
+ Requires-Dist: black>=23.0.0; extra == 'dev'
50
+ Requires-Dist: build>=1.0.0; extra == 'dev'
51
+ Requires-Dist: flake8>=6.0.0; extra == 'dev'
52
+ Requires-Dist: isort>=5.12.0; extra == 'dev'
53
+ Requires-Dist: mkdocs-material>=9.0.0; extra == 'dev'
54
+ Requires-Dist: mkdocs>=1.5.0; extra == 'dev'
55
+ Requires-Dist: mkdocstrings[python]>=0.22.0; extra == 'dev'
56
+ Requires-Dist: mypy>=1.5.0; extra == 'dev'
57
+ Requires-Dist: pre-commit>=3.0.0; extra == 'dev'
58
+ Requires-Dist: pydocstyle>=6.3.0; extra == 'dev'
59
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
60
+ Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
61
+ Requires-Dist: pytest-mock>=3.10.0; extra == 'dev'
62
+ Requires-Dist: pytest-xdist>=3.0.0; extra == 'dev'
63
+ Requires-Dist: pytest>=7.0; extra == 'dev'
64
+ Requires-Dist: questionary>=2.1.0; extra == 'dev'
65
+ Requires-Dist: twine>=4.0.0; extra == 'dev'
66
+ Provides-Extra: docs
67
+ Requires-Dist: mkdocs-material>=9.0.0; extra == 'docs'
68
+ Requires-Dist: mkdocs>=1.5.0; extra == 'docs'
69
+ Requires-Dist: mkdocstrings[python]>=0.22.0; extra == 'docs'
70
+ Requires-Dist: pymdown-extensions>=10.0.0; extra == 'docs'
71
+ Provides-Extra: test
72
+ Requires-Dist: factory-boy>=3.2.0; extra == 'test'
73
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'test'
74
+ Requires-Dist: pytest-cov>=4.0.0; extra == 'test'
75
+ Requires-Dist: pytest-mock>=3.10.0; extra == 'test'
76
+ Requires-Dist: pytest-xdist>=3.0.0; extra == 'test'
77
+ Requires-Dist: pytest>=7.0; extra == 'test'
78
+ Description-Content-Type: text/markdown
79
+
80
+ # UnrealOn
81
+
82
+ **Enterprise browser automation framework with WebSocket bridge for distributed web scraping.**
83
+
84
+ [![PyPI version](https://badge.fury.io/py/unrealon.svg)](https://badge.fury.io/py/unrealon)
85
+ [![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)
86
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
87
+
88
+ ## 🌐 About UnrealOn
89
+
90
+ **UnrealOn** is a comprehensive web scraping platform that provides enterprise-grade infrastructure for data extraction at scale. Built on top of this framework, the **UnrealOn Server** offers managed hosting, real-time orchestration, and advanced anti-bot protection.
91
+
92
+ **Platform**: [unrealon.com](https://unrealon.com) - Enterprise web scraping infrastructure
93
+ **Framework**: This repository - Open-source parser development framework
94
+
95
+ **No Vendor Lock-in**: Use the framework locally for development, then deploy to any infrastructure - self-hosted, cloud, or managed UnrealOn Server.
96
+
97
+ ## 🚀 Quick Start
98
+
99
+ **Get started in minutes with our simple parser framework:**
100
+
101
+ ```bash
102
+ # Install the framework
103
+ pip install unrealon
104
+
105
+ # Create your first parser
106
+ from unrealon import ParserManager, BrowserManager
107
+
108
+ # That's it! You're ready to build parsers
109
+ ```
110
+
111
+ ## 📦 Ready-to-Use Amazon Parser
112
+
113
+ **Get started immediately with our pre-configured Amazon parser:**
114
+ - **[GitHub Repository](https://github.com/markolofsen/unrealon-parser-amazon)** - Complete Amazon parser with all configurations
115
+ - **Zero Setup**: Clone and run with minimal configuration
116
+ - **Production Ready**: Includes all enterprise features and optimizations
117
+ - **Real Examples**: See how to build production parsers with UnrealOn
118
+
119
+ ## Overview
120
+
121
+ UnrealOn is a modern Python framework for building web scrapers with enterprise-grade features. It combines browser automation, AI-powered extraction, and real-time orchestration in a simple, developer-friendly package.
122
+
123
+ **Key Features:**
124
+ - **Zero Configuration**: Everything works out of the box
125
+ - **Browser Automation**: Built-in Playwright with stealth capabilities
126
+ - **AI-Powered Extraction**: Automatic content analysis and selector generation
127
+ - **Real-Time Communication**: WebSocket bridge for distributed parsing
128
+ - **Enterprise Ready**: Logging, monitoring, and error handling included
129
+
130
+ ## Why Choose UnrealOn?
131
+
132
+ ### 🆚 **Simple Comparison**
133
+
134
+ | Feature | UnrealOn | Scrapy | Selenium | Custom Solution |
135
+ |---------|----------|--------|----------|-----------------|
136
+ | **Setup Time** | ✅ 5 minutes | ❌ 30+ minutes | ❌ 20+ minutes | ❌ Hours |
137
+ | **Browser Automation** | ✅ Built-in | ❌ Requires setup | ✅ Built-in | ❌ Manual |
138
+ | **AI Extraction** | ✅ Automatic | ❌ Manual | ❌ Manual | ❌ Custom dev |
139
+ | **Real-time Communication** | ✅ WebSocket | ❌ HTTP only | ❌ HTTP only | ❌ Manual |
140
+ | **Proxy Support** | ✅ Auto-rotation | ❌ Manual | ❌ Manual | ❌ Manual |
141
+ | **Error Handling** | ✅ Built-in | ❌ Manual | ❌ Manual | ❌ Manual |
142
+ | **Logging** | ✅ Structured | ❌ Basic | ❌ Basic | ❌ Manual |
143
+
144
+ ### 💎 **Key Advantages**
145
+
146
+ #### **1. Zero Configuration**
147
+ **Problem**: Complex setup with multiple dependencies
148
+ **Solution**: Install and start coding immediately
149
+ ```python
150
+ # No config files needed - everything works out of the box
151
+ from unrealon import ParserManager
152
+ parser = ParserManager()
153
+ ```
154
+
155
+ #### **2. Built-in Browser Automation**
156
+ **Problem**: Manual browser setup and management
157
+ **Solution**: Automatic browser handling with stealth
158
+ ```python
159
+ # Browser automation with one line
160
+ browser = BrowserManager()
161
+ await browser.navigate("https://example.com")
162
+ ```
163
+
164
+ #### **3. AI-Powered Extraction**
165
+ **Problem**: Manual selector writing and maintenance
166
+ **Solution**: Automatic content analysis and extraction
167
+ ```python
168
+ # AI automatically finds and extracts data
169
+ result = await parser.extract_with_ai("https://example.com")
170
+ ```
171
+
172
+ #### **4. Real-Time Communication**
173
+ **Problem**: Batch processing with delayed results
174
+ **Solution**: Instant command execution and monitoring
175
+ ```python
176
+ # Real-time parser management
177
+ await parser.start_daemon() # Listens for commands
178
+ ```
179
+
180
+ ## Installation
181
+
182
+ ### Prerequisites
183
+
184
+ - Python 3.9 or higher
185
+ - pip or poetry for package management
186
+
187
+ ### Quick Installation
188
+
189
+ ```bash
190
+ # Install with pip
191
+ pip install unrealon
192
+
193
+ # Or with poetry
194
+ poetry add unrealon
195
+ ```
196
+
197
+ ### Development Installation
198
+
199
+ ```bash
200
+ # Clone the repository
201
+ git clone https://github.com/unrealos/unrealon-rpc.git
202
+ cd unrealon-rpc
203
+
204
+ # Install in development mode
205
+ pip install -e .
206
+ ```
207
+
208
+ ## Simple Examples
209
+
210
+ ### 1. Basic Parser (5 minutes)
211
+
212
+ ```python
213
+ from unrealon import ParserManager
214
+ import asyncio
215
+
216
+ class SimpleParser(ParserManager):
217
+ """Simple product parser - just write your logic!"""
218
+
219
+ async def parse_products(self, url: str):
220
+ """Parse products from a listing page."""
221
+ # Navigate to the page
222
+ await self.browser.navigate(url)
223
+
224
+ # Extract data using AI (automatic selectors)
225
+ result = await self.extract_with_ai(
226
+ url,
227
+ instruction="Extract all product information including title, price, and image"
228
+ )
229
+
230
+ return result.data
231
+
232
+ # Usage
233
+ async def main():
234
+ parser = SimpleParser()
235
+ await parser.setup()
236
+
237
+ products = await parser.parse_products("https://example.com/products")
238
+ print(f"Found {len(products)} products")
239
+
240
+ await parser.cleanup()
241
+
242
+ if __name__ == "__main__":
243
+ asyncio.run(main())
244
+ ```
245
+
246
+ ### 2. Traditional Parser with BeautifulSoup
247
+
248
+ ```python
249
+ from unrealon import ParserManager
250
+ from bs4 import BeautifulSoup
251
+
252
+ class TraditionalParser(ParserManager):
253
+ """Traditional parser using CSS selectors."""
254
+
255
+ async def parse_products(self, url: str):
256
+ """Parse products using CSS selectors."""
257
+ # Get HTML content
258
+ html = await self.browser.get_html(url)
259
+ soup = BeautifulSoup(html, "html.parser")
260
+
261
+ products = []
262
+ for item in soup.select(".product-item"):
263
+ product = {
264
+ "title": item.select_one(".title").text.strip(),
265
+ "price": item.select_one(".price").text.strip(),
266
+ "image": item.select_one("img")["src"]
267
+ }
268
+ products.append(product)
269
+
270
+ return products
271
+
272
+ # Usage
273
+ async def main():
274
+ parser = TraditionalParser()
275
+ await parser.setup()
276
+
277
+ products = await parser.parse_products("https://example.com/products")
278
+ print(f"Found {len(products)} products")
279
+
280
+ await parser.cleanup()
281
+ ```
282
+
283
+ ### 3. Daemon Mode for Real-Time Processing
284
+
285
+ ```python
286
+ from unrealon import ParserManager
287
+
288
+ class DaemonParser(ParserManager):
289
+ """Parser that runs as a daemon for real-time commands."""
290
+
291
+ async def handle_parse_command(self, command):
292
+ """Handle remote parse commands."""
293
+ url = command.data.get("url")
294
+ return await self.parse_products(url)
295
+
296
+ async def parse_products(self, url: str):
297
+ """Parse products from URL."""
298
+ await self.browser.navigate(url)
299
+ result = await self.extract_with_ai(url, "Extract products")
300
+ return result.data
301
+
302
+ # Run as daemon
303
+ async def main():
304
+ parser = DaemonParser()
305
+ await parser.start_daemon() # Listens for commands
306
+
307
+ if __name__ == "__main__":
308
+ asyncio.run(main())
309
+ ```
310
+
311
+ ### 4. Scheduled Parser
312
+
313
+ ```python
314
+ from unrealon import ParserManager
315
+ import asyncio
316
+
317
+ class ScheduledParser(ParserManager):
318
+ """Parser that runs on a schedule."""
319
+
320
+ async def run_scheduled(self):
321
+ """Main method called by scheduler."""
322
+ urls = [
323
+ "https://example.com/products",
324
+ "https://example.com/deals",
325
+ "https://example.com/new"
326
+ ]
327
+
328
+ all_products = []
329
+ for url in urls:
330
+ products = await self.parse_products(url)
331
+ all_products.extend(products)
332
+
333
+ return {"products": all_products, "count": len(all_products)}
334
+
335
+ # Run with scheduling
336
+ async def main():
337
+ parser = ScheduledParser()
338
+ await parser.setup()
339
+
340
+ # Run once
341
+ result = await parser.run_scheduled()
342
+ print(f"Collected {result['count']} products")
343
+
344
+ await parser.cleanup()
345
+ ```
346
+
347
+ ## CLI Tools
348
+
349
+ ### Browser Automation CLI
350
+
351
+ ```bash
352
+ # Launch browser session
353
+ unrealon-browser browser launch --url https://example.com
354
+
355
+ # Test stealth capabilities
356
+ unrealon-browser browser stealth-test --url https://example.com
357
+
358
+ # Interactive browser mode
359
+ unrealon-browser browser interactive
360
+ ```
361
+
362
+ ### Cookie Management CLI
363
+
364
+ ```bash
365
+ # List stored cookies
366
+ browser-cookies list --parser my_parser
367
+
368
+ # Clear cookies
369
+ browser-cookies clear --parser my_parser
370
+
371
+ # Show cookie statistics
372
+ browser-cookies stats --parser my_parser
373
+ ```
374
+
375
+ ## Configuration
376
+
377
+ ### Environment Variables (Optional)
378
+
379
+ Create a `.env` file for custom settings:
380
+
381
+ ```bash
382
+ # Browser settings
383
+ BROWSER_HEADLESS=true
384
+ BROWSER_TIMEOUT=30
385
+
386
+ # Logging
387
+ LOG_LEVEL=INFO
388
+ LOG_TO_FILE=true
389
+
390
+ # Proxy settings (optional)
391
+ PROXY_HOST=proxy.example.com
392
+ PROXY_PORT=8080
393
+ ```
394
+
395
+ ### Custom Configuration
396
+
397
+ ```python
398
+ from unrealon import ParserManager, BrowserConfig
399
+
400
+ # Custom browser configuration
401
+ browser_config = BrowserConfig(
402
+ headless=True,
403
+ timeout=30,
404
+ user_agent="Custom User Agent"
405
+ )
406
+
407
+ # Use custom config
408
+ parser = ParserManager(browser_config=browser_config)
409
+ ```
410
+
411
+ ## Advanced Features
412
+
413
+ ### AI-Powered Extraction
414
+
415
+ ```python
416
+ # Automatic content analysis
417
+ result = await parser.extract_with_ai(
418
+ url="https://example.com/products",
419
+ instruction="Extract product title, price, rating, and review count",
420
+ confidence_threshold=0.8
421
+ )
422
+
423
+ print(f"Extracted {len(result.data)} items")
424
+ print(f"Confidence: {result.confidence}")
425
+ print(f"Cost: ${result.cost_usd}")
426
+ ```
427
+
428
+ ### Proxy Management
429
+
430
+ ```python
431
+ from unrealon import ProxyConfig
432
+
433
+ # Configure proxy rotation
434
+ proxy_config = ProxyConfig(
435
+ proxies=[
436
+ "http://proxy1:8080",
437
+ "http://proxy2:8080",
438
+ "http://proxy3:8080"
439
+ ],
440
+ rotation_strategy="round_robin"
441
+ )
442
+
443
+ parser = ParserManager(proxy_config=proxy_config)
444
+ ```
445
+
446
+ ### Real-Time Communication
447
+
448
+ ```python
449
+ # Start daemon with WebSocket connection
450
+ await parser.start_daemon(
451
+ server_url="wss://api.unrealon.com",
452
+ api_key="your_api_key"
453
+ )
454
+
455
+ # Parser now listens for remote commands
456
+ # Commands can be sent from any client
457
+ ```
458
+
459
+ ## Architecture
460
+
461
+ ### Core Components
462
+
463
+ ```
464
+ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
465
+ │ Parser SDK │◄──►│ WebSocket │◄──►│ Target │
466
+ │ (Client) │ │ Bridge │ │ Websites │
467
+ └─────────────────┘ └─────────────────┘ └─────────────────┘
468
+ │ │ │
469
+ ▼ ▼ ▼
470
+ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
471
+ │ Browser │ │ AI Services │ │ Proxy & │
472
+ │ Automation │ │ (LLM) │ │ Stealth │
473
+ └─────────────────┘ └─────────────────┘ └─────────────────┘
474
+ ```
475
+
476
+ ### Module Structure
477
+
478
+ - **`unrealon_driver`**: Core parser framework and management
479
+ - **`unrealon_bridge`**: WebSocket communication and orchestration
480
+ - **`unrealon_browser`**: Browser automation with stealth capabilities
481
+
482
+ ## Best Practices
483
+
484
+ ### 1. Error Handling
485
+
486
+ ```python
487
+ class RobustParser(ParserManager):
488
+ async def parse_products(self, url: str):
489
+ try:
490
+ await self.browser.navigate(url)
491
+ result = await self.extract_with_ai(url, "Extract products")
492
+ return result.data
493
+ except Exception as e:
494
+ self.logger.error(f"Parsing failed: {e}")
495
+ return {"error": str(e), "success": False}
496
+ ```
497
+
498
+ ### 2. Rate Limiting
499
+
500
+ ```python
501
+ import asyncio
502
+
503
+ class RateLimitedParser(ParserManager):
504
+ async def parse_multiple_pages(self, urls: list):
505
+ results = []
506
+ for url in urls:
507
+ result = await self.parse_products(url)
508
+ results.append(result)
509
+
510
+ # Rate limiting
511
+ await asyncio.sleep(2) # 2 second delay
512
+
513
+ return results
514
+ ```
515
+
516
+ ### 3. Data Validation
517
+
518
+ ```python
519
+ from pydantic import BaseModel
520
+
521
+ class Product(BaseModel):
522
+ title: str
523
+ price: float
524
+ image_url: str
525
+
526
+ class ValidatedParser(ParserManager):
527
+ async def parse_products(self, url: str):
528
+ raw_data = await self.extract_with_ai(url, "Extract products")
529
+
530
+ # Validate data
531
+ products = []
532
+ for item in raw_data.data:
533
+ try:
534
+ product = Product(**item)
535
+ products.append(product)
536
+ except Exception as e:
537
+ self.logger.warning(f"Invalid product data: {e}")
538
+
539
+ return products
540
+ ```
541
+
542
+ ## Testing
543
+
544
+ ### Unit Tests
545
+
546
+ ```python
547
+ import pytest
548
+ from unrealon import ParserManager
549
+
550
+ class TestParser(ParserManager):
551
+ async def parse_products(self, url: str):
552
+ return [{"title": "Test Product", "price": 99.99}]
553
+
554
+ @pytest.mark.asyncio
555
+ async def test_parser():
556
+ parser = TestParser()
557
+ await parser.setup()
558
+
559
+ result = await parser.parse_products("https://example.com")
560
+ assert len(result) == 1
561
+ assert result[0]["title"] == "Test Product"
562
+
563
+ await parser.cleanup()
564
+ ```
565
+
566
+ ### Integration Tests
567
+
568
+ ```python
569
+ @pytest.mark.asyncio
570
+ async def test_browser_integration():
571
+ parser = ParserManager()
572
+ await parser.setup()
573
+
574
+ # Test actual browser navigation
575
+ await parser.browser.navigate("https://httpbin.org/html")
576
+ html = await parser.browser.get_html()
577
+
578
+ assert "Herman Melville" in html # httpbin test content
579
+
580
+ await parser.cleanup()
581
+ ```
582
+
583
+ ## Deployment
584
+
585
+ ### Docker Deployment
586
+
587
+ ```dockerfile
588
+ FROM python:3.11-slim
589
+
590
+ WORKDIR /app
591
+ COPY requirements.txt .
592
+ RUN pip install -r requirements.txt
593
+
594
+ COPY . .
595
+ CMD ["python", "parser.py"]
596
+ ```
597
+
598
+ ### Docker Compose
599
+
600
+ ```yaml
601
+ version: '3.8'
602
+ services:
603
+ parser:
604
+ build: .
605
+ environment:
606
+ - LOG_LEVEL=INFO
607
+ volumes:
608
+ - ./logs:/app/logs
609
+ restart: unless-stopped
610
+ ```
611
+
612
+ ## Troubleshooting
613
+
614
+ ### Common Issues
615
+
616
+ #### 1. Browser Launch Fails
617
+ ```bash
618
+ # Install browser dependencies
619
+ playwright install
620
+ ```
621
+
622
+ #### 2. Import Errors
623
+ ```bash
624
+ # Ensure correct installation
625
+ pip install unrealon --upgrade
626
+ ```
627
+
628
+ #### 3. Proxy Issues
629
+ ```python
630
+ # Test proxy connection
631
+ await parser.browser.test_proxy("http://proxy:8080")
632
+ ```
633
+
634
+ ### Debug Mode
635
+
636
+ ```python
637
+ # Enable debug logging
638
+ import logging
639
+ logging.basicConfig(level=logging.DEBUG)
640
+
641
+ # Or use environment variable
642
+ # LOG_LEVEL=DEBUG
643
+ ```
644
+
645
+ ## Contributing
646
+
647
+ ### Development Setup
648
+
649
+ ```bash
650
+ # Clone repository
651
+ git clone https://github.com/unrealos/unrealon-rpc.git
652
+ cd unrealon-rpc
653
+
654
+ # Install development dependencies
655
+ pip install -e ".[dev]"
656
+
657
+ # Run tests
658
+ pytest
659
+
660
+ # Run linting
661
+ black src/
662
+ isort src/
663
+ ```
664
+
665
+ ### Code Style
666
+
667
+ - Follow PEP 8
668
+ - Use type hints
669
+ - Write docstrings
670
+ - Add tests for new features
671
+
672
+ ## License
673
+
674
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
675
+
676
+ ## Support
677
+
678
+ - **Documentation**: [docs.unrealon.com](https://docs.unrealon.com)
679
+ - **Issues**: [GitHub Issues](https://github.com/unrealos/unrealon-rpc/issues)
680
+ - **Discussions**: [GitHub Discussions](https://github.com/unrealos/unrealon-rpc/discussions)
681
+
682
+ ---
683
+
684
+ ## Real Projects Built on UnrealOn
685
+
686
+ ### 🚗 **CarAPIs** - Automotive Data Platform
687
+ **Platform**: [carapis.com](https://carapis.com)
688
+ **Use Case**: Vehicle information extraction from dealerships and marketplaces
689
+ **Features**: Real-time car listings, pricing analysis, market trends
690
+ **Technology**: AI-powered vehicle data extraction with 95% accuracy
691
+
692
+ ### 🛒 **ShopAPIs** - E-commerce Intelligence
693
+ **Platform**: [shopapis.com](https://shopapis.com)
694
+ **Use Case**: Product monitoring and competitive analysis
695
+ **Features**: Price tracking, inventory monitoring, competitor analysis
696
+ **Technology**: Multi-platform e-commerce data collection
697
+
698
+ ### 📊 **StockAPIs** - Financial Data Platform
699
+ **Platform**: [stockapis.com](https://stockapis.com)
700
+ **Use Case**: Market data and financial information extraction
701
+ **Features**: Real-time stock data, financial news analysis
702
+ **Technology**: High-frequency financial data collection
703
+
704
+ ### 🏠 **PropAPIs** - Real Estate Data Platform
705
+ **Platform**: [propapis.com](https://propapis.com)
706
+ **Use Case**: Property listings and market analysis
707
+ **Features**: Real estate listings, price monitoring, market trends
708
+ **Technology**: Multi-source property data extraction
709
+
710
+ **All platforms built with UnrealOn for reliable, scalable data extraction.**
711
+
712
+ ## License
713
+
714
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
715
+
716
+ ## Commercial Platform
717
+
718
+ For enterprise features, managed hosting, and professional support, visit [unrealon.com](https://unrealon.com/).
719
+
720
+ ---
721
+
722
+ **UnrealOn** - Simple, powerful web scraping for developers.