unrealon 2.0.28__tar.gz → 2.0.29__tar.gz

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 (147) hide show
  1. {unrealon-2.0.28/unrealon.egg-info → unrealon-2.0.29}/PKG-INFO +1 -1
  2. {unrealon-2.0.28 → unrealon-2.0.29}/pyproject.toml +1 -1
  3. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_installer/platform.py +54 -5
  4. {unrealon-2.0.28 → unrealon-2.0.29/unrealon.egg-info}/PKG-INFO +1 -1
  5. {unrealon-2.0.28 → unrealon-2.0.29}/LICENSE +0 -0
  6. {unrealon-2.0.28 → unrealon-2.0.29}/MANIFEST.in +0 -0
  7. {unrealon-2.0.28 → unrealon-2.0.29}/README.md +0 -0
  8. {unrealon-2.0.28 → unrealon-2.0.29}/setup.cfg +0 -0
  9. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/README.md +0 -0
  10. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/__init__.py +0 -0
  11. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/cli/__init__.py +0 -0
  12. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/cli/browser_cli.py +0 -0
  13. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/cli/cookies_cli.py +0 -0
  14. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/cli/interactive_mode.py +0 -0
  15. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/cli/main.py +0 -0
  16. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/core/__init__.py +0 -0
  17. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/core/browser_manager.py +0 -0
  18. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/dto/__init__.py +0 -0
  19. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/dto/bot_detection.py +0 -0
  20. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/dto/models/config.py +0 -0
  21. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/dto/models/core.py +0 -0
  22. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/dto/models/dataclasses.py +0 -0
  23. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/dto/models/detection.py +0 -0
  24. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/dto/models/enums.py +0 -0
  25. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/dto/models/statistics.py +0 -0
  26. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/managers/__init__.py +0 -0
  27. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/managers/captcha.py +0 -0
  28. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/managers/cookies.py +0 -0
  29. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/managers/logger_bridge.py +0 -0
  30. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/managers/page_wait_manager.py +0 -0
  31. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/managers/profile.py +0 -0
  32. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/managers/script_manager.py +0 -0
  33. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/stealth/__init__.py +0 -0
  34. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/stealth/bypass_techniques.py +0 -0
  35. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/stealth/manager.py +0 -0
  36. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/stealth/nodriver_stealth.py +0 -0
  37. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/stealth/playwright_stealth.py +0 -0
  38. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/stealth/scanner_tester.py +0 -0
  39. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-browser/src/unrealon_browser/stealth/undetected_chrome.py +0 -0
  40. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/__init__.py +0 -0
  41. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/config/__init__.py +0 -0
  42. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/config/environment.py +0 -0
  43. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/config/urls.py +0 -0
  44. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/enums/__init__.py +0 -0
  45. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/enums/events.py +0 -0
  46. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/enums/jobs.py +0 -0
  47. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/enums/status.py +0 -0
  48. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/enums/types.py +0 -0
  49. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/error_handling/__init__.py +0 -0
  50. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/error_handling/circuit_breaker.py +0 -0
  51. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/error_handling/error_context.py +0 -0
  52. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/error_handling/recovery.py +0 -0
  53. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/error_handling/retry.py +0 -0
  54. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/exceptions/__init__.py +0 -0
  55. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/exceptions/base.py +0 -0
  56. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/exceptions/communication.py +0 -0
  57. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/exceptions/driver.py +0 -0
  58. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/exceptions/proxy.py +0 -0
  59. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/exceptions/task.py +0 -0
  60. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/exceptions/validation.py +0 -0
  61. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/__init__.py +0 -0
  62. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/arq_context.py +0 -0
  63. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/arq_responses.py +0 -0
  64. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/authentication.py +0 -0
  65. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/base.py +0 -0
  66. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/bridge_stats.py +0 -0
  67. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/communication.py +0 -0
  68. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/connection_stats.py +0 -0
  69. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/driver.py +0 -0
  70. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/driver_details.py +0 -0
  71. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/logging.py +0 -0
  72. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/task.py +0 -0
  73. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/typed_responses.py +0 -0
  74. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/websocket/__init__.py +0 -0
  75. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/websocket/base.py +0 -0
  76. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/websocket/broadcast.py +0 -0
  77. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/websocket/config.py +0 -0
  78. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/websocket/driver.py +0 -0
  79. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/websocket/errors.py +0 -0
  80. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/websocket/heartbeat.py +0 -0
  81. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/websocket/logging.py +0 -0
  82. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/websocket/proxy.py +0 -0
  83. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/websocket/tasks.py +0 -0
  84. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/websocket/utils.py +0 -0
  85. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/models/websocket_session.py +0 -0
  86. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/monitoring/__init__.py +0 -0
  87. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/monitoring/alerts.py +0 -0
  88. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/monitoring/dashboard.py +0 -0
  89. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/monitoring/health_check.py +0 -0
  90. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/monitoring/metrics.py +0 -0
  91. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/utils/__init__.py +0 -0
  92. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/utils/time.py +0 -0
  93. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-core/src/unrealon_core/version.py +0 -0
  94. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/__init__.py +0 -0
  95. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/core_module/__init__.py +0 -0
  96. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/core_module/base.py +0 -0
  97. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/core_module/config.py +0 -0
  98. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/core_module/event_manager.py +0 -0
  99. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/core_module/protocols.py +0 -0
  100. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/core_module/registry.py +0 -0
  101. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/decorators/__init__.py +0 -0
  102. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/decorators/retry.py +0 -0
  103. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/decorators/schedule.py +0 -0
  104. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/decorators/task.py +0 -0
  105. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/decorators/timing.py +0 -0
  106. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/driver/__init__.py +0 -0
  107. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/driver/communication/__init__.py +0 -0
  108. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/driver/communication/session.py +0 -0
  109. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/driver/communication/websocket_client.py +0 -0
  110. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/driver/core/__init__.py +0 -0
  111. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/driver/core/config.py +0 -0
  112. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/driver/core/driver.py +0 -0
  113. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/driver/factory/__init__.py +0 -0
  114. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/driver/factory/manager_factory.py +0 -0
  115. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/driver/lifecycle/__init__.py +0 -0
  116. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/driver/lifecycle/daemon.py +0 -0
  117. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/driver/lifecycle/initialization.py +0 -0
  118. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/driver/lifecycle/shutdown.py +0 -0
  119. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/driver/monitoring/__init__.py +0 -0
  120. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/driver/monitoring/health.py +0 -0
  121. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/driver/utilities/__init__.py +0 -0
  122. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/driver/utilities/logging.py +0 -0
  123. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/driver/utilities/serialization.py +0 -0
  124. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/managers/__init__.py +0 -0
  125. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/managers/base.py +0 -0
  126. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/managers/browser.py +0 -0
  127. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/managers/cache.py +0 -0
  128. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/managers/http.py +0 -0
  129. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/managers/logger.py +0 -0
  130. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/managers/proxy.py +0 -0
  131. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/managers/registry.py +0 -0
  132. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/managers/threading.py +0 -0
  133. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/managers/update.py +0 -0
  134. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/utils/__init__.py +0 -0
  135. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_driver/utils/time.py +0 -0
  136. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_installer/__init__.py +0 -0
  137. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_installer/batch_templates/quick_run.bat.j2 +0 -0
  138. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_installer/batch_templates/start.bat.j2 +0 -0
  139. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_installer/batch_templates/test.bat.j2 +0 -0
  140. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_installer/browser_fixes.py +0 -0
  141. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_installer/core.py +0 -0
  142. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon-driver/src/unrealon_installer/templates.py +0 -0
  143. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon.egg-info/SOURCES.txt +0 -0
  144. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon.egg-info/dependency_links.txt +0 -0
  145. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon.egg-info/entry_points.txt +0 -0
  146. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon.egg-info/requires.txt +0 -0
  147. {unrealon-2.0.28 → unrealon-2.0.29}/unrealon.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unrealon
3
- Version: 2.0.28
3
+ Version: 2.0.29
4
4
  Summary: Enterprise-grade web scraping platform with AI-powered automation and real-time orchestration capabilities
5
5
  Author-email: UnrealOn Team <team@unrealon.com>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "unrealon"
7
- version = "2.0.28"
7
+ version = "2.0.29"
8
8
  description = "Enterprise-grade web scraping platform with AI-powered automation and real-time orchestration capabilities"
9
9
  authors = [
10
10
  {name = "UnrealOn Team", email = "team@unrealon.com"}
@@ -33,18 +33,26 @@ def _apply_windows_fixes():
33
33
  """Windows-specific fixes."""
34
34
  fixes = []
35
35
 
36
- # Asyncio event loop policy - CRITICAL for Windows
36
+ # AGGRESSIVE Windows asyncio fixes
37
37
  if sys.version_info >= (3, 8):
38
38
  try:
39
+ # Close any existing event loop first
40
+ try:
41
+ current_loop = asyncio.get_event_loop()
42
+ if current_loop and not current_loop.is_closed():
43
+ current_loop.close()
44
+ except Exception:
45
+ pass
46
+
39
47
  # Force ProactorEventLoopPolicy to avoid pipe issues
40
48
  policy = asyncio.WindowsProactorEventLoopPolicy()
41
49
  asyncio.set_event_loop_policy(policy)
42
50
 
43
- # Also set a new event loop to ensure clean state
51
+ # Create and set a completely new event loop
44
52
  loop = asyncio.new_event_loop()
45
53
  asyncio.set_event_loop(loop)
46
54
 
47
- fixes.append("ProactorEventLoop + new loop")
55
+ fixes.append("ProactorEventLoop + clean loop")
48
56
  except Exception as e:
49
57
  logger.warning(f"Failed to set Windows event loop policy: {e}")
50
58
  # Fallback: try to at least set the policy
@@ -63,11 +71,22 @@ def _apply_windows_fixes():
63
71
  except Exception:
64
72
  pass
65
73
 
66
- # Suppress asyncio warnings that are common on Windows
74
+ # AGGRESSIVE warning suppression for Windows
67
75
  warnings.filterwarnings("ignore", category=ResourceWarning)
76
+ warnings.filterwarnings("ignore", category=DeprecationWarning, module="asyncio")
68
77
  warnings.filterwarnings("ignore", message=".*unclosed transport.*")
69
78
  warnings.filterwarnings("ignore", message=".*I/O operation on closed pipe.*")
70
- fixes.append("Windows warnings suppression")
79
+ warnings.filterwarnings("ignore", message=".*unclosed.*")
80
+ warnings.filterwarnings("ignore", message=".*BaseSubprocessTransport.*")
81
+ warnings.filterwarnings("ignore", message=".*ProactorBasePipeTransport.*")
82
+
83
+ # Set asyncio debug mode to False to reduce noise
84
+ try:
85
+ asyncio.get_event_loop().set_debug(False)
86
+ except Exception:
87
+ pass
88
+
89
+ fixes.append("Aggressive Windows warnings suppression")
71
90
 
72
91
  return fixes
73
92
 
@@ -135,3 +154,33 @@ def check_system_requirements():
135
154
  'python_version': sys.version_info >= (3, 9),
136
155
  'platform_supported': platform.system() in ['Windows', 'Darwin', 'Linux']
137
156
  }
157
+
158
+
159
+ def cleanup_asyncio_resources():
160
+ """Force cleanup of all asyncio resources. Call this at program exit on Windows."""
161
+ if platform.system() != "Windows":
162
+ return
163
+
164
+ try:
165
+ # Get current loop and close all pending tasks
166
+ loop = asyncio.get_event_loop()
167
+ if loop and not loop.is_closed():
168
+ # Cancel all pending tasks
169
+ pending = asyncio.all_tasks(loop)
170
+ for task in pending:
171
+ task.cancel()
172
+
173
+ # Wait for tasks to finish cancellation
174
+ if pending:
175
+ loop.run_until_complete(asyncio.gather(*pending, return_exceptions=True))
176
+
177
+ # Close the loop
178
+ loop.close()
179
+
180
+ except Exception:
181
+ # Ignore all cleanup errors
182
+ pass
183
+
184
+ # Force garbage collection to clean up any remaining references
185
+ import gc
186
+ gc.collect()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unrealon
3
- Version: 2.0.28
3
+ Version: 2.0.29
4
4
  Summary: Enterprise-grade web scraping platform with AI-powered automation and real-time orchestration capabilities
5
5
  Author-email: UnrealOn Team <team@unrealon.com>
6
6
  License: MIT
File without changes
File without changes
File without changes
File without changes