unrealon 2.0.28__tar.gz → 2.0.30__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.
- {unrealon-2.0.28/unrealon.egg-info → unrealon-2.0.30}/PKG-INFO +1 -1
- {unrealon-2.0.28 → unrealon-2.0.30}/pyproject.toml +1 -1
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_installer/__init__.py +2 -1
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_installer/platform.py +54 -5
- {unrealon-2.0.28 → unrealon-2.0.30/unrealon.egg-info}/PKG-INFO +1 -1
- {unrealon-2.0.28 → unrealon-2.0.30}/LICENSE +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/MANIFEST.in +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/README.md +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/setup.cfg +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/README.md +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/cli/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/cli/browser_cli.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/cli/cookies_cli.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/cli/interactive_mode.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/cli/main.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/core/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/core/browser_manager.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/dto/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/dto/bot_detection.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/dto/models/config.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/dto/models/core.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/dto/models/dataclasses.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/dto/models/detection.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/dto/models/enums.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/dto/models/statistics.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/managers/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/managers/captcha.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/managers/cookies.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/managers/logger_bridge.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/managers/page_wait_manager.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/managers/profile.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/managers/script_manager.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/stealth/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/stealth/bypass_techniques.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/stealth/manager.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/stealth/nodriver_stealth.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/stealth/playwright_stealth.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/stealth/scanner_tester.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/stealth/undetected_chrome.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/config/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/config/environment.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/config/urls.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/enums/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/enums/events.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/enums/jobs.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/enums/status.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/enums/types.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/error_handling/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/error_handling/circuit_breaker.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/error_handling/error_context.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/error_handling/recovery.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/error_handling/retry.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/exceptions/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/exceptions/base.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/exceptions/communication.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/exceptions/driver.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/exceptions/proxy.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/exceptions/task.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/exceptions/validation.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/arq_context.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/arq_responses.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/authentication.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/base.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/bridge_stats.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/communication.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/connection_stats.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/driver.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/driver_details.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/logging.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/task.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/typed_responses.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/base.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/broadcast.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/config.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/driver.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/errors.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/heartbeat.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/logging.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/proxy.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/tasks.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/utils.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket_session.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/monitoring/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/monitoring/alerts.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/monitoring/dashboard.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/monitoring/health_check.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/monitoring/metrics.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/utils/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/utils/time.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/version.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/core_module/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/core_module/base.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/core_module/config.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/core_module/event_manager.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/core_module/protocols.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/core_module/registry.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/decorators/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/decorators/retry.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/decorators/schedule.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/decorators/task.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/decorators/timing.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/communication/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/communication/session.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/communication/websocket_client.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/core/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/core/config.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/core/driver.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/factory/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/factory/manager_factory.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/lifecycle/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/lifecycle/daemon.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/lifecycle/initialization.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/lifecycle/shutdown.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/monitoring/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/monitoring/health.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/utilities/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/utilities/logging.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/utilities/serialization.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/managers/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/managers/base.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/managers/browser.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/managers/cache.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/managers/http.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/managers/logger.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/managers/proxy.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/managers/registry.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/managers/threading.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/managers/update.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/utils/__init__.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/utils/time.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_installer/batch_templates/quick_run.bat.j2 +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_installer/batch_templates/start.bat.j2 +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_installer/batch_templates/test.bat.j2 +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_installer/browser_fixes.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_installer/core.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_installer/templates.py +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon.egg-info/SOURCES.txt +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon.egg-info/dependency_links.txt +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon.egg-info/entry_points.txt +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon.egg-info/requires.txt +0 -0
- {unrealon-2.0.28 → unrealon-2.0.30}/unrealon.egg-info/top_level.txt +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "unrealon"
|
|
7
|
-
version = "2.0.
|
|
7
|
+
version = "2.0.30"
|
|
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"}
|
|
@@ -6,6 +6,7 @@ One function installs everything. Simple and reliable.
|
|
|
6
6
|
|
|
7
7
|
from .core import install_parser
|
|
8
8
|
from .browser_fixes import fix_browsers, diagnose_browsers, get_browser_status
|
|
9
|
+
from .platform import apply_platform_fixes, cleanup_asyncio_resources
|
|
9
10
|
|
|
10
11
|
__version__ = "2.0.0"
|
|
11
|
-
__all__ = ["install_parser", "fix_browsers", "diagnose_browsers", "get_browser_status"]
|
|
12
|
+
__all__ = ["install_parser", "fix_browsers", "diagnose_browsers", "get_browser_status", "apply_platform_fixes", "cleanup_asyncio_resources"]
|
|
@@ -33,18 +33,26 @@ def _apply_windows_fixes():
|
|
|
33
33
|
"""Windows-specific fixes."""
|
|
34
34
|
fixes = []
|
|
35
35
|
|
|
36
|
-
#
|
|
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
|
-
#
|
|
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 +
|
|
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
|
-
#
|
|
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
|
-
|
|
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()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/cli/browser_cli.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/cli/cookies_cli.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/cli/interactive_mode.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/core/browser_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/dto/bot_detection.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/dto/models/config.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/dto/models/core.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/dto/models/dataclasses.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/dto/models/detection.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/dto/models/enums.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/dto/models/statistics.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/managers/__init__.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/managers/captcha.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/managers/cookies.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/managers/logger_bridge.py
RENAMED
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/managers/profile.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/managers/script_manager.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/stealth/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/stealth/manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-browser/src/unrealon_browser/stealth/scanner_tester.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/error_handling/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/error_handling/error_context.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/error_handling/recovery.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/exceptions/communication.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/exceptions/validation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/authentication.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/connection_stats.py
RENAMED
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/driver_details.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/typed_responses.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/__init__.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/base.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/broadcast.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/config.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/driver.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/errors.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/heartbeat.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/logging.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/proxy.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/tasks.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket/utils.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/models/websocket_session.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-core/src/unrealon_core/monitoring/health_check.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/core_module/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/core_module/config.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/core_module/event_manager.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/core_module/protocols.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/core_module/registry.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/decorators/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/decorators/schedule.py
RENAMED
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/decorators/timing.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/core/__init__.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/core/config.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/core/driver.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/factory/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/lifecycle/__init__.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/lifecycle/daemon.py
RENAMED
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/lifecycle/shutdown.py
RENAMED
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/monitoring/health.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/utilities/__init__.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/driver/utilities/logging.py
RENAMED
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/managers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/managers/registry.py
RENAMED
|
File without changes
|
{unrealon-2.0.28 → unrealon-2.0.30}/unrealon-driver/src/unrealon_driver/managers/threading.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|