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.
- unrealon/__init__.py +23 -21
- unrealon-1.1.0.dist-info/METADATA +164 -0
- unrealon-1.1.0.dist-info/RECORD +82 -0
- {unrealon-1.0.9.dist-info → unrealon-1.1.0.dist-info}/WHEEL +1 -1
- unrealon-1.1.0.dist-info/entry_points.txt +9 -0
- {unrealon-1.0.9.dist-info → unrealon-1.1.0.dist-info/licenses}/LICENSE +1 -1
- unrealon_bridge/__init__.py +114 -0
- unrealon_bridge/cli.py +316 -0
- unrealon_bridge/client/__init__.py +93 -0
- unrealon_bridge/client/base.py +78 -0
- unrealon_bridge/client/commands.py +89 -0
- unrealon_bridge/client/connection.py +90 -0
- unrealon_bridge/client/events.py +65 -0
- unrealon_bridge/client/health.py +38 -0
- unrealon_bridge/client/html_parser.py +146 -0
- unrealon_bridge/client/logging.py +139 -0
- unrealon_bridge/client/proxy.py +70 -0
- unrealon_bridge/client/scheduler.py +450 -0
- unrealon_bridge/client/session.py +70 -0
- unrealon_bridge/configs/__init__.py +14 -0
- unrealon_bridge/configs/bridge_config.py +212 -0
- unrealon_bridge/configs/bridge_config.yaml +39 -0
- unrealon_bridge/models/__init__.py +138 -0
- unrealon_bridge/models/base.py +28 -0
- unrealon_bridge/models/command.py +41 -0
- unrealon_bridge/models/events.py +40 -0
- unrealon_bridge/models/html_parser.py +79 -0
- unrealon_bridge/models/logging.py +55 -0
- unrealon_bridge/models/parser.py +63 -0
- unrealon_bridge/models/proxy.py +41 -0
- unrealon_bridge/models/requests.py +95 -0
- unrealon_bridge/models/responses.py +88 -0
- unrealon_bridge/models/scheduler.py +592 -0
- unrealon_bridge/models/session.py +28 -0
- unrealon_bridge/server/__init__.py +91 -0
- unrealon_bridge/server/base.py +171 -0
- unrealon_bridge/server/handlers/__init__.py +23 -0
- unrealon_bridge/server/handlers/command.py +110 -0
- unrealon_bridge/server/handlers/html_parser.py +139 -0
- unrealon_bridge/server/handlers/logging.py +95 -0
- unrealon_bridge/server/handlers/parser.py +95 -0
- unrealon_bridge/server/handlers/proxy.py +75 -0
- unrealon_bridge/server/handlers/scheduler.py +545 -0
- unrealon_bridge/server/handlers/session.py +66 -0
- unrealon_browser/__init__.py +61 -18
- unrealon_browser/{src/cli → cli}/browser_cli.py +6 -13
- unrealon_browser/{src/cli → cli}/cookies_cli.py +5 -1
- unrealon_browser/{src/core → core}/browser_manager.py +2 -2
- unrealon_browser/{src/managers → managers}/captcha.py +1 -1
- unrealon_browser/{src/managers → managers}/cookies.py +1 -1
- unrealon_browser/managers/logger_bridge.py +231 -0
- unrealon_browser/{src/managers → managers}/profile.py +1 -1
- unrealon_driver/__init__.py +73 -19
- unrealon_driver/browser/__init__.py +8 -0
- unrealon_driver/browser/config.py +74 -0
- unrealon_driver/browser/manager.py +416 -0
- unrealon_driver/exceptions.py +28 -0
- unrealon_driver/parser/__init__.py +55 -0
- unrealon_driver/parser/cli_manager.py +141 -0
- unrealon_driver/parser/daemon_manager.py +227 -0
- unrealon_driver/parser/managers/__init__.py +46 -0
- unrealon_driver/parser/managers/browser.py +51 -0
- unrealon_driver/parser/managers/config.py +281 -0
- unrealon_driver/parser/managers/error.py +412 -0
- unrealon_driver/parser/managers/html.py +732 -0
- unrealon_driver/parser/managers/logging.py +609 -0
- unrealon_driver/parser/managers/result.py +321 -0
- unrealon_driver/parser/parser_manager.py +628 -0
- unrealon/sdk_config.py +0 -88
- unrealon-1.0.9.dist-info/METADATA +0 -810
- unrealon-1.0.9.dist-info/RECORD +0 -246
- unrealon_browser/pyproject.toml +0 -182
- unrealon_browser/src/__init__.py +0 -62
- unrealon_browser/src/managers/logger_bridge.py +0 -395
- unrealon_driver/README.md +0 -204
- unrealon_driver/pyproject.toml +0 -187
- unrealon_driver/src/__init__.py +0 -90
- unrealon_driver/src/cli/__init__.py +0 -10
- unrealon_driver/src/cli/main.py +0 -66
- unrealon_driver/src/cli/simple.py +0 -510
- unrealon_driver/src/config/__init__.py +0 -11
- unrealon_driver/src/config/auto_config.py +0 -478
- unrealon_driver/src/core/__init__.py +0 -18
- unrealon_driver/src/core/exceptions.py +0 -289
- unrealon_driver/src/core/parser.py +0 -638
- unrealon_driver/src/dto/__init__.py +0 -66
- unrealon_driver/src/dto/cli.py +0 -119
- unrealon_driver/src/dto/config.py +0 -18
- unrealon_driver/src/dto/events.py +0 -237
- unrealon_driver/src/dto/execution.py +0 -313
- unrealon_driver/src/dto/services.py +0 -311
- unrealon_driver/src/execution/__init__.py +0 -23
- unrealon_driver/src/execution/daemon_mode.py +0 -317
- unrealon_driver/src/execution/interactive_mode.py +0 -88
- unrealon_driver/src/execution/modes.py +0 -45
- unrealon_driver/src/execution/scheduled_mode.py +0 -209
- unrealon_driver/src/execution/test_mode.py +0 -250
- unrealon_driver/src/logging/__init__.py +0 -24
- unrealon_driver/src/logging/driver_logger.py +0 -512
- unrealon_driver/src/services/__init__.py +0 -24
- unrealon_driver/src/services/browser_service.py +0 -726
- unrealon_driver/src/services/llm/__init__.py +0 -15
- unrealon_driver/src/services/llm/browser_llm_service.py +0 -363
- unrealon_driver/src/services/llm/llm.py +0 -195
- unrealon_driver/src/services/logger_service.py +0 -232
- unrealon_driver/src/services/metrics_service.py +0 -185
- unrealon_driver/src/services/scheduler_service.py +0 -489
- unrealon_driver/src/services/websocket_service.py +0 -362
- unrealon_driver/src/utils/__init__.py +0 -16
- unrealon_driver/src/utils/service_factory.py +0 -317
- unrealon_driver/src/utils/time_formatter.py +0 -338
- unrealon_llm/README.md +0 -44
- unrealon_llm/__init__.py +0 -26
- unrealon_llm/pyproject.toml +0 -154
- unrealon_llm/src/__init__.py +0 -228
- unrealon_llm/src/cli/__init__.py +0 -0
- unrealon_llm/src/core/__init__.py +0 -11
- unrealon_llm/src/core/smart_client.py +0 -438
- unrealon_llm/src/dto/__init__.py +0 -155
- unrealon_llm/src/dto/models/__init__.py +0 -0
- unrealon_llm/src/dto/models/config.py +0 -343
- unrealon_llm/src/dto/models/core.py +0 -328
- unrealon_llm/src/dto/models/enums.py +0 -123
- unrealon_llm/src/dto/models/html_analysis.py +0 -345
- unrealon_llm/src/dto/models/statistics.py +0 -473
- unrealon_llm/src/dto/models/translation.py +0 -383
- unrealon_llm/src/dto/models/type_conversion.py +0 -462
- unrealon_llm/src/dto/schemas/__init__.py +0 -0
- unrealon_llm/src/exceptions.py +0 -392
- unrealon_llm/src/llm_config/__init__.py +0 -20
- unrealon_llm/src/llm_config/logging_config.py +0 -178
- unrealon_llm/src/llm_logging/__init__.py +0 -42
- unrealon_llm/src/llm_logging/llm_events.py +0 -107
- unrealon_llm/src/llm_logging/llm_logger.py +0 -466
- unrealon_llm/src/managers/__init__.py +0 -15
- unrealon_llm/src/managers/cache_manager.py +0 -67
- unrealon_llm/src/managers/cost_manager.py +0 -107
- unrealon_llm/src/managers/request_manager.py +0 -298
- unrealon_llm/src/modules/__init__.py +0 -0
- unrealon_llm/src/modules/html_processor/__init__.py +0 -25
- unrealon_llm/src/modules/html_processor/base_processor.py +0 -415
- unrealon_llm/src/modules/html_processor/details_processor.py +0 -85
- unrealon_llm/src/modules/html_processor/listing_processor.py +0 -91
- unrealon_llm/src/modules/html_processor/models/__init__.py +0 -20
- unrealon_llm/src/modules/html_processor/models/processing_models.py +0 -40
- unrealon_llm/src/modules/html_processor/models/universal_model.py +0 -56
- unrealon_llm/src/modules/html_processor/processor.py +0 -102
- unrealon_llm/src/modules/llm/__init__.py +0 -0
- unrealon_llm/src/modules/translator/__init__.py +0 -0
- unrealon_llm/src/provider.py +0 -116
- unrealon_llm/src/utils/__init__.py +0 -95
- unrealon_llm/src/utils/common.py +0 -64
- unrealon_llm/src/utils/data_extractor.py +0 -188
- unrealon_llm/src/utils/html_cleaner.py +0 -767
- unrealon_llm/src/utils/language_detector.py +0 -308
- unrealon_llm/src/utils/models_cache.py +0 -592
- unrealon_llm/src/utils/smart_counter.py +0 -229
- unrealon_llm/src/utils/token_counter.py +0 -189
- unrealon_sdk/README.md +0 -25
- unrealon_sdk/__init__.py +0 -30
- unrealon_sdk/pyproject.toml +0 -231
- unrealon_sdk/src/__init__.py +0 -150
- unrealon_sdk/src/cli/__init__.py +0 -12
- unrealon_sdk/src/cli/commands/__init__.py +0 -22
- unrealon_sdk/src/cli/commands/benchmark.py +0 -42
- unrealon_sdk/src/cli/commands/diagnostics.py +0 -573
- unrealon_sdk/src/cli/commands/health.py +0 -46
- unrealon_sdk/src/cli/commands/integration.py +0 -498
- unrealon_sdk/src/cli/commands/reports.py +0 -43
- unrealon_sdk/src/cli/commands/security.py +0 -36
- unrealon_sdk/src/cli/commands/server.py +0 -483
- unrealon_sdk/src/cli/commands/servers.py +0 -56
- unrealon_sdk/src/cli/commands/tests.py +0 -55
- unrealon_sdk/src/cli/main.py +0 -126
- unrealon_sdk/src/cli/utils/reporter.py +0 -519
- unrealon_sdk/src/clients/openapi.yaml +0 -3347
- unrealon_sdk/src/clients/python_http/__init__.py +0 -3
- unrealon_sdk/src/clients/python_http/api_config.py +0 -228
- unrealon_sdk/src/clients/python_http/models/BaseModel.py +0 -12
- unrealon_sdk/src/clients/python_http/models/BroadcastDeliveryStats.py +0 -33
- unrealon_sdk/src/clients/python_http/models/BroadcastMessage.py +0 -17
- unrealon_sdk/src/clients/python_http/models/BroadcastMessageRequest.py +0 -35
- unrealon_sdk/src/clients/python_http/models/BroadcastPriority.py +0 -10
- unrealon_sdk/src/clients/python_http/models/BroadcastResponse.py +0 -21
- unrealon_sdk/src/clients/python_http/models/BroadcastResultResponse.py +0 -33
- unrealon_sdk/src/clients/python_http/models/BroadcastTarget.py +0 -11
- unrealon_sdk/src/clients/python_http/models/ConnectionStats.py +0 -27
- unrealon_sdk/src/clients/python_http/models/ConnectionsResponse.py +0 -21
- unrealon_sdk/src/clients/python_http/models/DeveloperMessageResponse.py +0 -23
- unrealon_sdk/src/clients/python_http/models/ErrorResponse.py +0 -25
- unrealon_sdk/src/clients/python_http/models/HTTPValidationError.py +0 -16
- unrealon_sdk/src/clients/python_http/models/HealthResponse.py +0 -23
- unrealon_sdk/src/clients/python_http/models/HealthStatus.py +0 -33
- unrealon_sdk/src/clients/python_http/models/LogLevel.py +0 -10
- unrealon_sdk/src/clients/python_http/models/LoggingRequest.py +0 -27
- unrealon_sdk/src/clients/python_http/models/LoggingResponse.py +0 -23
- unrealon_sdk/src/clients/python_http/models/MaintenanceMode.py +0 -9
- unrealon_sdk/src/clients/python_http/models/MaintenanceModeRequest.py +0 -33
- unrealon_sdk/src/clients/python_http/models/MaintenanceStatusResponse.py +0 -39
- unrealon_sdk/src/clients/python_http/models/ParserCommandRequest.py +0 -25
- unrealon_sdk/src/clients/python_http/models/ParserMessageResponse.py +0 -21
- unrealon_sdk/src/clients/python_http/models/ParserRegistrationRequest.py +0 -28
- unrealon_sdk/src/clients/python_http/models/ParserRegistrationResponse.py +0 -25
- unrealon_sdk/src/clients/python_http/models/ParserType.py +0 -10
- unrealon_sdk/src/clients/python_http/models/ProxyBlockRequest.py +0 -19
- unrealon_sdk/src/clients/python_http/models/ProxyEndpointResponse.py +0 -20
- unrealon_sdk/src/clients/python_http/models/ProxyListResponse.py +0 -19
- unrealon_sdk/src/clients/python_http/models/ProxyProvider.py +0 -10
- unrealon_sdk/src/clients/python_http/models/ProxyPurchaseRequest.py +0 -25
- unrealon_sdk/src/clients/python_http/models/ProxyResponse.py +0 -47
- unrealon_sdk/src/clients/python_http/models/ProxyRotationRequest.py +0 -23
- unrealon_sdk/src/clients/python_http/models/ProxyStatus.py +0 -10
- unrealon_sdk/src/clients/python_http/models/ProxyUsageRequest.py +0 -19
- unrealon_sdk/src/clients/python_http/models/ProxyUsageStatsResponse.py +0 -26
- unrealon_sdk/src/clients/python_http/models/ServiceRegistrationDto.py +0 -23
- unrealon_sdk/src/clients/python_http/models/ServiceStatsResponse.py +0 -31
- unrealon_sdk/src/clients/python_http/models/SessionStartRequest.py +0 -23
- unrealon_sdk/src/clients/python_http/models/SuccessResponse.py +0 -25
- unrealon_sdk/src/clients/python_http/models/SystemNotificationResponse.py +0 -23
- unrealon_sdk/src/clients/python_http/models/ValidationError.py +0 -18
- unrealon_sdk/src/clients/python_http/models/ValidationErrorResponse.py +0 -21
- unrealon_sdk/src/clients/python_http/models/WebSocketMetrics.py +0 -21
- unrealon_sdk/src/clients/python_http/models/__init__.py +0 -44
- unrealon_sdk/src/clients/python_http/services/None_service.py +0 -35
- unrealon_sdk/src/clients/python_http/services/ParserManagement_service.py +0 -190
- unrealon_sdk/src/clients/python_http/services/ProxyManagement_service.py +0 -289
- unrealon_sdk/src/clients/python_http/services/SocketLogging_service.py +0 -187
- unrealon_sdk/src/clients/python_http/services/SystemHealth_service.py +0 -119
- unrealon_sdk/src/clients/python_http/services/WebSocketAPI_service.py +0 -198
- unrealon_sdk/src/clients/python_http/services/__init__.py +0 -0
- unrealon_sdk/src/clients/python_http/services/admin_service.py +0 -125
- unrealon_sdk/src/clients/python_http/services/async_None_service.py +0 -35
- unrealon_sdk/src/clients/python_http/services/async_ParserManagement_service.py +0 -190
- unrealon_sdk/src/clients/python_http/services/async_ProxyManagement_service.py +0 -289
- unrealon_sdk/src/clients/python_http/services/async_SocketLogging_service.py +0 -189
- unrealon_sdk/src/clients/python_http/services/async_SystemHealth_service.py +0 -123
- unrealon_sdk/src/clients/python_http/services/async_WebSocketAPI_service.py +0 -200
- unrealon_sdk/src/clients/python_http/services/async_admin_service.py +0 -125
- unrealon_sdk/src/clients/python_websocket/__init__.py +0 -28
- unrealon_sdk/src/clients/python_websocket/client.py +0 -490
- unrealon_sdk/src/clients/python_websocket/events.py +0 -732
- unrealon_sdk/src/clients/python_websocket/example.py +0 -136
- unrealon_sdk/src/clients/python_websocket/types.py +0 -871
- unrealon_sdk/src/core/__init__.py +0 -64
- unrealon_sdk/src/core/client.py +0 -556
- unrealon_sdk/src/core/config.py +0 -465
- unrealon_sdk/src/core/exceptions.py +0 -239
- unrealon_sdk/src/core/metadata.py +0 -191
- unrealon_sdk/src/core/models.py +0 -142
- unrealon_sdk/src/core/types.py +0 -68
- unrealon_sdk/src/dto/__init__.py +0 -268
- unrealon_sdk/src/dto/authentication.py +0 -108
- unrealon_sdk/src/dto/cache.py +0 -208
- unrealon_sdk/src/dto/common.py +0 -19
- unrealon_sdk/src/dto/concurrency.py +0 -393
- unrealon_sdk/src/dto/events.py +0 -108
- unrealon_sdk/src/dto/health.py +0 -339
- unrealon_sdk/src/dto/load_balancing.py +0 -336
- unrealon_sdk/src/dto/logging.py +0 -230
- unrealon_sdk/src/dto/performance.py +0 -165
- unrealon_sdk/src/dto/rate_limiting.py +0 -295
- unrealon_sdk/src/dto/resource_pooling.py +0 -128
- unrealon_sdk/src/dto/structured_logging.py +0 -112
- unrealon_sdk/src/dto/task_scheduling.py +0 -121
- unrealon_sdk/src/dto/websocket.py +0 -55
- unrealon_sdk/src/enterprise/__init__.py +0 -59
- unrealon_sdk/src/enterprise/authentication.py +0 -401
- unrealon_sdk/src/enterprise/cache_manager.py +0 -578
- unrealon_sdk/src/enterprise/error_recovery.py +0 -494
- unrealon_sdk/src/enterprise/event_system.py +0 -549
- unrealon_sdk/src/enterprise/health_monitor.py +0 -747
- unrealon_sdk/src/enterprise/load_balancer.py +0 -964
- unrealon_sdk/src/enterprise/logging/__init__.py +0 -68
- unrealon_sdk/src/enterprise/logging/cleanup.py +0 -156
- unrealon_sdk/src/enterprise/logging/development.py +0 -744
- unrealon_sdk/src/enterprise/logging/service.py +0 -410
- unrealon_sdk/src/enterprise/multithreading_manager.py +0 -853
- unrealon_sdk/src/enterprise/performance_monitor.py +0 -539
- unrealon_sdk/src/enterprise/proxy_manager.py +0 -696
- unrealon_sdk/src/enterprise/rate_limiter.py +0 -652
- unrealon_sdk/src/enterprise/resource_pool.py +0 -763
- unrealon_sdk/src/enterprise/task_scheduler.py +0 -709
- unrealon_sdk/src/internal/__init__.py +0 -10
- unrealon_sdk/src/internal/command_router.py +0 -497
- unrealon_sdk/src/internal/connection_manager.py +0 -397
- unrealon_sdk/src/internal/http_client.py +0 -446
- unrealon_sdk/src/internal/websocket_client.py +0 -420
- unrealon_sdk/src/provider.py +0 -471
- unrealon_sdk/src/utils.py +0 -234
- /unrealon_browser/{src/cli → cli}/__init__.py +0 -0
- /unrealon_browser/{src/cli → cli}/interactive_mode.py +0 -0
- /unrealon_browser/{src/cli → cli}/main.py +0 -0
- /unrealon_browser/{src/core → core}/__init__.py +0 -0
- /unrealon_browser/{src/dto → dto}/__init__.py +0 -0
- /unrealon_browser/{src/dto → dto}/models/config.py +0 -0
- /unrealon_browser/{src/dto → dto}/models/core.py +0 -0
- /unrealon_browser/{src/dto → dto}/models/dataclasses.py +0 -0
- /unrealon_browser/{src/dto → dto}/models/detection.py +0 -0
- /unrealon_browser/{src/dto → dto}/models/enums.py +0 -0
- /unrealon_browser/{src/dto → dto}/models/statistics.py +0 -0
- /unrealon_browser/{src/managers → managers}/__init__.py +0 -0
- /unrealon_browser/{src/managers → managers}/stealth.py +0 -0
unrealon_driver/src/dto/cli.py
DELETED
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
CLI Configuration Models for UnrealOn Driver v3.0
|
|
3
|
-
|
|
4
|
-
Type-safe configuration for CLI interface.
|
|
5
|
-
COMPLIANCE: 100% Pydantic v2 compliant.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
from pydantic import BaseModel, Field, ConfigDict, field_validator
|
|
9
|
-
from typing import Optional, Dict, Any
|
|
10
|
-
|
|
11
|
-
from .config import LogLevel
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class ParserInstanceConfig(BaseModel):
|
|
15
|
-
"""
|
|
16
|
-
Pydantic configuration model for Parser initialization.
|
|
17
|
-
COMPLIANCE: CRITICAL_REQUIREMENTS.md - Pydantic v2 validation.
|
|
18
|
-
"""
|
|
19
|
-
|
|
20
|
-
model_config = ConfigDict(
|
|
21
|
-
validate_assignment=True,
|
|
22
|
-
extra="forbid",
|
|
23
|
-
str_strip_whitespace=True,
|
|
24
|
-
)
|
|
25
|
-
|
|
26
|
-
# Core identity
|
|
27
|
-
parser_id: str = Field(
|
|
28
|
-
...,
|
|
29
|
-
min_length=2,
|
|
30
|
-
max_length=50,
|
|
31
|
-
pattern=r"^[a-z][a-z0-9_]*$",
|
|
32
|
-
description="Unique parser identifier (snake_case)",
|
|
33
|
-
)
|
|
34
|
-
parser_name: Optional[str] = Field(
|
|
35
|
-
default=None,
|
|
36
|
-
min_length=1,
|
|
37
|
-
max_length=100,
|
|
38
|
-
description="Human-readable parser name (auto-generated if None)",
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
# System configuration
|
|
42
|
-
system_dir: str = Field(
|
|
43
|
-
default="system",
|
|
44
|
-
min_length=1,
|
|
45
|
-
description="System directory for logs and files",
|
|
46
|
-
)
|
|
47
|
-
log_level: LogLevel = Field(default=LogLevel.INFO, description="Logging level")
|
|
48
|
-
|
|
49
|
-
# Optional metadata
|
|
50
|
-
description: Optional[str] = Field(
|
|
51
|
-
default=None, max_length=200, description="Parser description"
|
|
52
|
-
)
|
|
53
|
-
version: str = Field(
|
|
54
|
-
default="1.0.0",
|
|
55
|
-
pattern=r"^\d+\.\d+\.\d+$",
|
|
56
|
-
description="Parser version (semantic versioning)",
|
|
57
|
-
)
|
|
58
|
-
|
|
59
|
-
@field_validator("parser_name")
|
|
60
|
-
@classmethod
|
|
61
|
-
def generate_parser_name(cls, v: Optional[str], info) -> str:
|
|
62
|
-
"""Auto-generate parser_name from parser_id if not provided."""
|
|
63
|
-
if v is None and "parser_id" in info.data:
|
|
64
|
-
parser_id = info.data["parser_id"]
|
|
65
|
-
return parser_id.replace("_", " ").title()
|
|
66
|
-
return v or "Unknown Parser"
|
|
67
|
-
|
|
68
|
-
def to_parser_config(self) -> dict:
|
|
69
|
-
"""Convert to dict for Parser initialization."""
|
|
70
|
-
return {
|
|
71
|
-
"parser_id": self.parser_id,
|
|
72
|
-
"parser_name": self.parser_name,
|
|
73
|
-
"debug_mode": self.log_level in {LogLevel.DEBUG, LogLevel.TRACE},
|
|
74
|
-
"system_dir": self.system_dir,
|
|
75
|
-
"environment": (
|
|
76
|
-
"development"
|
|
77
|
-
if self.log_level in {LogLevel.DEBUG, LogLevel.TRACE}
|
|
78
|
-
else "production"
|
|
79
|
-
),
|
|
80
|
-
"logger": {"log_level": self.log_level.value},
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
def create_parser_config(
|
|
85
|
-
parser_id: str,
|
|
86
|
-
parser_name: Optional[str] = None,
|
|
87
|
-
system_dir: str = "system",
|
|
88
|
-
log_level: str = "INFO",
|
|
89
|
-
**kwargs,
|
|
90
|
-
) -> ParserInstanceConfig:
|
|
91
|
-
"""
|
|
92
|
-
Factory function for creating ParserInstanceConfig.
|
|
93
|
-
COMPLIANCE: CRITICAL_REQUIREMENTS.md - Factory for clean instantiation.
|
|
94
|
-
|
|
95
|
-
Args:
|
|
96
|
-
parser_id: Unique parser identifier
|
|
97
|
-
parser_name: Human-readable name (auto-generated if None)
|
|
98
|
-
system_dir: System directory
|
|
99
|
-
log_level: Logging level
|
|
100
|
-
**kwargs: Additional parameters
|
|
101
|
-
|
|
102
|
-
Returns:
|
|
103
|
-
Validated ParserInstanceConfig
|
|
104
|
-
|
|
105
|
-
Example:
|
|
106
|
-
config = create_parser_config(
|
|
107
|
-
parser_id="simple_extractor",
|
|
108
|
-
system_dir="system",
|
|
109
|
-
log_level="DEBUG"
|
|
110
|
-
)
|
|
111
|
-
parser = SimpleParser(config)
|
|
112
|
-
"""
|
|
113
|
-
return ParserInstanceConfig(
|
|
114
|
-
parser_id=parser_id,
|
|
115
|
-
parser_name=parser_name,
|
|
116
|
-
system_dir=system_dir,
|
|
117
|
-
log_level=LogLevel(log_level.upper()),
|
|
118
|
-
**kwargs,
|
|
119
|
-
)
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Configuration models for UnrealOn Driver v3.0
|
|
3
|
-
|
|
4
|
-
Pydantic v2 models for type-safe configuration.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
from enum import Enum
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class LogLevel(str, Enum):
|
|
11
|
-
"""Logging levels enumeration."""
|
|
12
|
-
|
|
13
|
-
TRACE = "TRACE"
|
|
14
|
-
DEBUG = "DEBUG"
|
|
15
|
-
INFO = "INFO"
|
|
16
|
-
WARNING = "WARNING"
|
|
17
|
-
ERROR = "ERROR"
|
|
18
|
-
CRITICAL = "CRITICAL"
|
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Driver Event Types - UnrealOn Driver v3.0
|
|
3
|
-
|
|
4
|
-
Specialized event types for driver operations with full SDK integration.
|
|
5
|
-
Provides structured logging for browser automation, parsing, and system monitoring.
|
|
6
|
-
|
|
7
|
-
COMPLIANCE: 100% Pydantic v2 compliant, no Dict[str, Any] usage.
|
|
8
|
-
"""
|
|
9
|
-
|
|
10
|
-
from enum import Enum
|
|
11
|
-
from typing import Optional, List
|
|
12
|
-
from datetime import datetime
|
|
13
|
-
from pydantic import BaseModel, Field, ConfigDict
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class DriverEventType(str, Enum):
|
|
17
|
-
"""
|
|
18
|
-
🎯 Driver-specific event types for comprehensive operation tracking.
|
|
19
|
-
|
|
20
|
-
Each event has a unique string value for proper enum behavior and naming.
|
|
21
|
-
Provides driver-specific semantics for better monitoring and debugging.
|
|
22
|
-
"""
|
|
23
|
-
|
|
24
|
-
# ==========================================
|
|
25
|
-
# SERVICE LIFECYCLE EVENTS
|
|
26
|
-
# ==========================================
|
|
27
|
-
SERVICE_INITIALIZED = "service_initialized"
|
|
28
|
-
SERVICE_CONFIGURED = "service_configured"
|
|
29
|
-
SERVICE_STARTED = "service_started"
|
|
30
|
-
SERVICE_STOPPED = "service_stopped"
|
|
31
|
-
SERVICE_ERROR = "service_error"
|
|
32
|
-
SERVICE_HEALTH_CHECK = "service_health_check"
|
|
33
|
-
|
|
34
|
-
# ==========================================
|
|
35
|
-
# DRIVER-SPECIFIC BROWSER EVENTS (not covered by unrealon_browser)
|
|
36
|
-
# ==========================================
|
|
37
|
-
BROWSER_CONTENT_EXTRACTED = (
|
|
38
|
-
"browser_content_extracted" # Driver's structured extraction
|
|
39
|
-
)
|
|
40
|
-
BROWSER_SCREENSHOT_TAKEN = "browser_screenshot_taken" # Driver's screenshot feature
|
|
41
|
-
|
|
42
|
-
# ==========================================
|
|
43
|
-
# PARSER OPERATION EVENTS
|
|
44
|
-
# ==========================================
|
|
45
|
-
PARSER_STARTED = "parser_started"
|
|
46
|
-
PARSER_COMPLETED = "parser_completed"
|
|
47
|
-
PARSER_FAILED = "parser_failed"
|
|
48
|
-
PARSER_DATA_EXTRACTED = "parser_data_extracted"
|
|
49
|
-
PARSER_VALIDATION_PASSED = "parser_validation_passed"
|
|
50
|
-
PARSER_VALIDATION_FAILED = "parser_validation_failed"
|
|
51
|
-
PARSER_SCHEMA_APPLIED = "parser_schema_applied"
|
|
52
|
-
PARSER_RETRY_ATTEMPTED = "parser_retry_attempted"
|
|
53
|
-
PARSER_TIMEOUT = "parser_timeout"
|
|
54
|
-
|
|
55
|
-
# ==========================================
|
|
56
|
-
# DRIVER-SPECIFIC LLM EVENTS (not covered by unrealon_llm)
|
|
57
|
-
# ==========================================
|
|
58
|
-
LLM_EXTRACTION_WITH_BROWSER = (
|
|
59
|
-
"llm_extraction_with_browser" # Driver's browser+LLM integration
|
|
60
|
-
)
|
|
61
|
-
LLM_BATCH_PROCESSING = "llm_batch_processing" # Driver's batch processing
|
|
62
|
-
|
|
63
|
-
# ==========================================
|
|
64
|
-
# SCHEDULER EVENTS
|
|
65
|
-
# ==========================================
|
|
66
|
-
SCHEDULER_TASK_QUEUED = "scheduler_task_queued"
|
|
67
|
-
SCHEDULER_TASK_STARTED = "scheduler_task_started"
|
|
68
|
-
SCHEDULER_TASK_COMPLETED = "scheduler_task_completed"
|
|
69
|
-
SCHEDULER_TASK_FAILED = "scheduler_task_failed"
|
|
70
|
-
SCHEDULER_TASK_RETRY = "scheduler_task_retry"
|
|
71
|
-
SCHEDULER_CRON_TRIGGERED = "scheduler_cron_triggered"
|
|
72
|
-
SCHEDULER_QUEUE_FULL = "scheduler_queue_full"
|
|
73
|
-
|
|
74
|
-
# ==========================================
|
|
75
|
-
# WEBSOCKET SERVICE EVENTS (driver-specific only, SDK handles connection events)
|
|
76
|
-
# ==========================================
|
|
77
|
-
WEBSOCKET_COMMAND_HANDLER_REGISTERED = "websocket_command_handler_registered"
|
|
78
|
-
|
|
79
|
-
# ==========================================
|
|
80
|
-
# METRICS SERVICE EVENTS (driver-specific metrics collection)
|
|
81
|
-
# ==========================================
|
|
82
|
-
METRICS_COLLECTION_STARTED = "metrics_collection_started"
|
|
83
|
-
METRICS_COLLECTION_COMPLETED = "metrics_collection_completed"
|
|
84
|
-
METRICS_DATA_AGGREGATED = "metrics_data_aggregated"
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
# Convenience mappings for common event scenarios
|
|
88
|
-
BROWSER_EVENTS = [
|
|
89
|
-
DriverEventType.BROWSER_CONTENT_EXTRACTED, # Driver-specific structured extraction
|
|
90
|
-
DriverEventType.BROWSER_SCREENSHOT_TAKEN, # Driver-specific screenshot feature
|
|
91
|
-
]
|
|
92
|
-
|
|
93
|
-
PARSER_EVENTS = [
|
|
94
|
-
DriverEventType.PARSER_STARTED,
|
|
95
|
-
DriverEventType.PARSER_DATA_EXTRACTED,
|
|
96
|
-
DriverEventType.PARSER_VALIDATION_PASSED,
|
|
97
|
-
DriverEventType.PARSER_COMPLETED,
|
|
98
|
-
]
|
|
99
|
-
|
|
100
|
-
LLM_EVENTS = [
|
|
101
|
-
DriverEventType.LLM_EXTRACTION_WITH_BROWSER, # Driver-specific browser+LLM integration
|
|
102
|
-
DriverEventType.LLM_BATCH_PROCESSING, # Driver-specific batch processing
|
|
103
|
-
]
|
|
104
|
-
|
|
105
|
-
SCHEDULER_EVENTS = [
|
|
106
|
-
DriverEventType.SCHEDULER_TASK_QUEUED,
|
|
107
|
-
DriverEventType.SCHEDULER_TASK_STARTED,
|
|
108
|
-
DriverEventType.SCHEDULER_TASK_COMPLETED,
|
|
109
|
-
DriverEventType.SCHEDULER_CRON_TRIGGERED,
|
|
110
|
-
]
|
|
111
|
-
|
|
112
|
-
WEBSOCKET_EVENTS = [
|
|
113
|
-
DriverEventType.WEBSOCKET_COMMAND_HANDLER_REGISTERED, # Driver-specific handler registration
|
|
114
|
-
]
|
|
115
|
-
|
|
116
|
-
METRICS_EVENTS = [
|
|
117
|
-
DriverEventType.METRICS_COLLECTION_STARTED,
|
|
118
|
-
DriverEventType.METRICS_COLLECTION_COMPLETED,
|
|
119
|
-
DriverEventType.METRICS_DATA_AGGREGATED,
|
|
120
|
-
]
|
|
121
|
-
|
|
122
|
-
ERROR_EVENTS = [
|
|
123
|
-
DriverEventType.SERVICE_ERROR,
|
|
124
|
-
DriverEventType.PARSER_FAILED,
|
|
125
|
-
DriverEventType.PARSER_VALIDATION_FAILED,
|
|
126
|
-
DriverEventType.PARSER_TIMEOUT,
|
|
127
|
-
DriverEventType.SCHEDULER_TASK_FAILED,
|
|
128
|
-
DriverEventType.SCHEDULER_QUEUE_FULL,
|
|
129
|
-
]
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
class DriverEventContext(BaseModel):
|
|
133
|
-
"""
|
|
134
|
-
🎯 Structured context for driver events with full type safety.
|
|
135
|
-
|
|
136
|
-
Provides rich context information for driver operations
|
|
137
|
-
with automatic validation and serialization.
|
|
138
|
-
"""
|
|
139
|
-
|
|
140
|
-
model_config = ConfigDict(
|
|
141
|
-
validate_assignment=True,
|
|
142
|
-
extra="forbid",
|
|
143
|
-
str_strip_whitespace=True,
|
|
144
|
-
)
|
|
145
|
-
|
|
146
|
-
# Core identification
|
|
147
|
-
parser_id: str = Field(..., description="Parser identifier")
|
|
148
|
-
parser_name: str = Field(..., description="Human-readable parser name")
|
|
149
|
-
|
|
150
|
-
# Event details
|
|
151
|
-
event_type: DriverEventType = Field(..., description="Type of driver event")
|
|
152
|
-
timestamp: datetime = Field(
|
|
153
|
-
default_factory=datetime.utcnow, description="Event timestamp"
|
|
154
|
-
)
|
|
155
|
-
|
|
156
|
-
# Operation context
|
|
157
|
-
operation_id: Optional[str] = Field(
|
|
158
|
-
default=None, description="Unique operation identifier"
|
|
159
|
-
)
|
|
160
|
-
session_id: Optional[str] = Field(default=None, description="Session identifier")
|
|
161
|
-
|
|
162
|
-
# Performance metrics
|
|
163
|
-
duration_ms: Optional[float] = Field(
|
|
164
|
-
default=None, ge=0, description="Operation duration in milliseconds"
|
|
165
|
-
)
|
|
166
|
-
memory_usage_mb: Optional[float] = Field(
|
|
167
|
-
default=None, ge=0, description="Memory usage in MB"
|
|
168
|
-
)
|
|
169
|
-
|
|
170
|
-
# Browser context
|
|
171
|
-
page_url: Optional[str] = Field(default=None, description="Current page URL")
|
|
172
|
-
page_title: Optional[str] = Field(default=None, description="Page title")
|
|
173
|
-
browser_version: Optional[str] = Field(default=None, description="Browser version")
|
|
174
|
-
|
|
175
|
-
# LLM context
|
|
176
|
-
llm_model: Optional[str] = Field(default=None, description="LLM model used")
|
|
177
|
-
tokens_used: Optional[int] = Field(
|
|
178
|
-
default=None, ge=0, description="Tokens consumed"
|
|
179
|
-
)
|
|
180
|
-
cost_usd: Optional[float] = Field(
|
|
181
|
-
default=None, ge=0, description="Operation cost in USD"
|
|
182
|
-
)
|
|
183
|
-
|
|
184
|
-
# Data context
|
|
185
|
-
items_processed: Optional[int] = Field(
|
|
186
|
-
default=None, ge=0, description="Number of items processed"
|
|
187
|
-
)
|
|
188
|
-
data_size_bytes: Optional[int] = Field(
|
|
189
|
-
default=None, ge=0, description="Data size in bytes"
|
|
190
|
-
)
|
|
191
|
-
|
|
192
|
-
# Error context
|
|
193
|
-
error_type: Optional[str] = Field(default=None, description="Error type if failed")
|
|
194
|
-
error_message: Optional[str] = Field(default=None, description="Error message")
|
|
195
|
-
stack_trace: Optional[str] = Field(
|
|
196
|
-
default=None, description="Stack trace for debugging"
|
|
197
|
-
)
|
|
198
|
-
|
|
199
|
-
# Additional metadata
|
|
200
|
-
environment: str = Field(default="development", description="Runtime environment")
|
|
201
|
-
service_name: Optional[str] = Field(
|
|
202
|
-
default=None, description="Service that generated the event"
|
|
203
|
-
)
|
|
204
|
-
tags: List[str] = Field(
|
|
205
|
-
default_factory=list, description="Event tags for filtering"
|
|
206
|
-
)
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
class DriverEventMetrics(BaseModel):
|
|
210
|
-
"""Performance metrics for driver events."""
|
|
211
|
-
|
|
212
|
-
model_config = ConfigDict(validate_assignment=True, extra="forbid")
|
|
213
|
-
|
|
214
|
-
# Timing metrics
|
|
215
|
-
start_time: datetime = Field(..., description="Event start time")
|
|
216
|
-
end_time: Optional[datetime] = Field(default=None, description="Event end time")
|
|
217
|
-
duration_seconds: Optional[float] = Field(
|
|
218
|
-
default=None, ge=0, description="Duration in seconds"
|
|
219
|
-
)
|
|
220
|
-
|
|
221
|
-
# Resource metrics
|
|
222
|
-
cpu_percent: Optional[float] = Field(
|
|
223
|
-
default=None, ge=0, le=100, description="CPU usage percentage"
|
|
224
|
-
)
|
|
225
|
-
memory_mb: Optional[float] = Field(
|
|
226
|
-
default=None, ge=0, description="Memory usage in MB"
|
|
227
|
-
)
|
|
228
|
-
network_bytes: Optional[int] = Field(
|
|
229
|
-
default=None, ge=0, description="Network bytes transferred"
|
|
230
|
-
)
|
|
231
|
-
|
|
232
|
-
# Success metrics
|
|
233
|
-
success_rate: Optional[float] = Field(
|
|
234
|
-
default=None, ge=0, le=1, description="Success rate (0-1)"
|
|
235
|
-
)
|
|
236
|
-
retry_count: int = Field(default=0, ge=0, description="Number of retries")
|
|
237
|
-
error_count: int = Field(default=0, ge=0, description="Number of errors")
|
|
@@ -1,313 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Execution mode configuration models for UnrealOn Driver v3.0
|
|
3
|
-
|
|
4
|
-
Type-safe configuration for all execution modes.
|
|
5
|
-
COMPLIANCE: 100% Pydantic v2 compliant, no Dict[str, Any] usage.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
from pydantic import BaseModel, Field, ConfigDict
|
|
9
|
-
from typing import Optional, List
|
|
10
|
-
from enum import Enum
|
|
11
|
-
|
|
12
|
-
from .config import LogLevel
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class ExecutionEnvironment(str, Enum):
|
|
16
|
-
"""Execution environment enumeration."""
|
|
17
|
-
|
|
18
|
-
DEVELOPMENT = "development"
|
|
19
|
-
TESTING = "testing"
|
|
20
|
-
STAGING = "staging"
|
|
21
|
-
PRODUCTION = "production"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
class ParserTestConfig(BaseModel):
|
|
25
|
-
"""Type-safe configuration for test mode execution."""
|
|
26
|
-
|
|
27
|
-
model_config = ConfigDict(
|
|
28
|
-
validate_assignment=True,
|
|
29
|
-
extra="forbid",
|
|
30
|
-
str_strip_whitespace=True,
|
|
31
|
-
)
|
|
32
|
-
|
|
33
|
-
# Core settings
|
|
34
|
-
environment: ExecutionEnvironment = Field(default=ExecutionEnvironment.TESTING)
|
|
35
|
-
verbose: bool = Field(default=False, description="Enable verbose output")
|
|
36
|
-
show_browser: bool = Field(default=False, description="Show browser window")
|
|
37
|
-
save_screenshots: bool = Field(default=False, description="Save debug screenshots")
|
|
38
|
-
|
|
39
|
-
# Performance settings
|
|
40
|
-
timeout_seconds: int = Field(default=60, ge=1, le=3600, description="Test timeout")
|
|
41
|
-
max_retries: int = Field(
|
|
42
|
-
default=3, ge=0, le=10, description="Maximum retry attempts"
|
|
43
|
-
)
|
|
44
|
-
|
|
45
|
-
# Output settings
|
|
46
|
-
output_format: str = Field(default="json", pattern=r"^(json|yaml|csv)$")
|
|
47
|
-
save_results: bool = Field(default=False, description="Save results to file")
|
|
48
|
-
results_file: Optional[str] = Field(default=None, description="Results file path")
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
class DaemonModeConfig(BaseModel):
|
|
52
|
-
"""Type-safe configuration for daemon mode execution."""
|
|
53
|
-
|
|
54
|
-
model_config = ConfigDict(
|
|
55
|
-
validate_assignment=True,
|
|
56
|
-
extra="forbid",
|
|
57
|
-
str_strip_whitespace=True,
|
|
58
|
-
)
|
|
59
|
-
|
|
60
|
-
# WebSocket settings
|
|
61
|
-
server_url: Optional[str] = Field(default=None, description="WebSocket server URL")
|
|
62
|
-
api_key: Optional[str] = Field(default=None, description="Authentication API key")
|
|
63
|
-
auto_reconnect: bool = Field(
|
|
64
|
-
default=True, description="Auto-reconnect on disconnect"
|
|
65
|
-
)
|
|
66
|
-
|
|
67
|
-
# Connection settings
|
|
68
|
-
connection_timeout: int = Field(
|
|
69
|
-
default=30, ge=1, le=300, description="Connection timeout"
|
|
70
|
-
)
|
|
71
|
-
heartbeat_interval: int = Field(
|
|
72
|
-
default=30, ge=5, le=300, description="Heartbeat interval"
|
|
73
|
-
)
|
|
74
|
-
max_reconnect_attempts: int = Field(
|
|
75
|
-
default=10, ge=1, le=100, description="Max reconnection attempts"
|
|
76
|
-
)
|
|
77
|
-
|
|
78
|
-
# Health monitoring
|
|
79
|
-
health_check_interval: int = Field(
|
|
80
|
-
default=60, ge=10, le=3600, description="Health check interval"
|
|
81
|
-
)
|
|
82
|
-
enable_metrics: bool = Field(default=True, description="Enable metrics collection")
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
class ScheduledModeConfig(BaseModel):
|
|
86
|
-
"""Type-safe configuration for scheduled mode execution."""
|
|
87
|
-
|
|
88
|
-
model_config = ConfigDict(
|
|
89
|
-
validate_assignment=True,
|
|
90
|
-
extra="forbid",
|
|
91
|
-
str_strip_whitespace=True,
|
|
92
|
-
)
|
|
93
|
-
|
|
94
|
-
# Scheduling settings
|
|
95
|
-
every: str = Field(..., description="Schedule interval (30m, 1h, daily)")
|
|
96
|
-
at: Optional[str] = Field(
|
|
97
|
-
default=None, description="Specific time for daily schedules"
|
|
98
|
-
)
|
|
99
|
-
max_runs: Optional[int] = Field(
|
|
100
|
-
default=None, ge=1, description="Maximum number of runs"
|
|
101
|
-
)
|
|
102
|
-
|
|
103
|
-
# Execution settings
|
|
104
|
-
timeout: int = Field(default=300, ge=30, le=3600, description="Task timeout")
|
|
105
|
-
retry_attempts: int = Field(
|
|
106
|
-
default=3, ge=0, le=10, description="Retry attempts on failure"
|
|
107
|
-
)
|
|
108
|
-
max_concurrent: int = Field(
|
|
109
|
-
default=1, ge=1, le=10, description="Max concurrent tasks"
|
|
110
|
-
)
|
|
111
|
-
|
|
112
|
-
# Advanced settings
|
|
113
|
-
jitter: bool = Field(default=True, description="Enable jitter for load balancing")
|
|
114
|
-
jitter_range: float = Field(
|
|
115
|
-
default=0.1, ge=0.0, le=0.5, description="Jitter range (0.1 = ±10%)"
|
|
116
|
-
)
|
|
117
|
-
error_handling: str = Field(default="retry", pattern=r"^(retry|skip|stop)$")
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
class InteractiveModeConfig(BaseModel):
|
|
121
|
-
"""Type-safe configuration for interactive mode execution."""
|
|
122
|
-
|
|
123
|
-
model_config = ConfigDict(
|
|
124
|
-
validate_assignment=True,
|
|
125
|
-
extra="forbid",
|
|
126
|
-
str_strip_whitespace=True,
|
|
127
|
-
)
|
|
128
|
-
|
|
129
|
-
# Interface settings
|
|
130
|
-
enable_debugger: bool = Field(
|
|
131
|
-
default=True, description="Enable interactive debugger"
|
|
132
|
-
)
|
|
133
|
-
show_browser: bool = Field(default=True, description="Show browser window")
|
|
134
|
-
auto_reload: bool = Field(default=True, description="Auto-reload on code changes")
|
|
135
|
-
|
|
136
|
-
# Development settings
|
|
137
|
-
log_level: LogLevel = Field(default=LogLevel.DEBUG, description="Logging level")
|
|
138
|
-
enable_profiling: bool = Field(
|
|
139
|
-
default=False, description="Enable performance profiling"
|
|
140
|
-
)
|
|
141
|
-
save_session: bool = Field(default=True, description="Save interactive session")
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
class ExecutionResult(BaseModel):
|
|
145
|
-
"""Type-safe execution result model."""
|
|
146
|
-
|
|
147
|
-
model_config = ConfigDict(
|
|
148
|
-
validate_assignment=True,
|
|
149
|
-
extra="forbid",
|
|
150
|
-
)
|
|
151
|
-
|
|
152
|
-
# Status
|
|
153
|
-
success: bool = Field(..., description="Execution success status")
|
|
154
|
-
execution_id: str = Field(..., description="Unique execution identifier")
|
|
155
|
-
|
|
156
|
-
# Timing
|
|
157
|
-
start_time: str = Field(default="", description="Execution start time (ISO format)")
|
|
158
|
-
end_time: str = Field(default="", description="Execution end time (ISO format)")
|
|
159
|
-
duration_seconds: float = Field(default=0.0, ge=0.0, description="Execution duration")
|
|
160
|
-
|
|
161
|
-
# Data
|
|
162
|
-
data: Optional[dict] = Field(default=None, description="Parsed data result")
|
|
163
|
-
items_processed: int = Field(
|
|
164
|
-
default=0, ge=0, description="Number of items processed"
|
|
165
|
-
)
|
|
166
|
-
|
|
167
|
-
# Error information
|
|
168
|
-
error: Optional["ErrorInfo"] = Field(
|
|
169
|
-
default=None, description="Error details if failed"
|
|
170
|
-
)
|
|
171
|
-
|
|
172
|
-
# Performance metrics
|
|
173
|
-
performance_metrics: Optional["PerformanceMetrics"] = Field(
|
|
174
|
-
default=None, description="Performance metrics if available"
|
|
175
|
-
)
|
|
176
|
-
|
|
177
|
-
# Metadata
|
|
178
|
-
parser_id: str = Field(default="", description="Parser identifier")
|
|
179
|
-
execution_mode: str = Field(default="test", description="Execution mode used")
|
|
180
|
-
environment: ExecutionEnvironment = Field(default=ExecutionEnvironment.TESTING, description="Execution environment")
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
class ErrorInfo(BaseModel):
|
|
184
|
-
"""Type-safe error information model."""
|
|
185
|
-
|
|
186
|
-
model_config = ConfigDict(
|
|
187
|
-
validate_assignment=True,
|
|
188
|
-
extra="allow",
|
|
189
|
-
)
|
|
190
|
-
|
|
191
|
-
message: str = Field(..., description="Error message")
|
|
192
|
-
error_type: str = Field(..., description="Error type/class")
|
|
193
|
-
error_code: Optional[str] = Field(
|
|
194
|
-
default=None, description="Application error code"
|
|
195
|
-
)
|
|
196
|
-
traceback: Optional[str] = Field(default=None, description="Error traceback")
|
|
197
|
-
context: Optional[dict] = Field(
|
|
198
|
-
default=None, description="Error context information"
|
|
199
|
-
)
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
class PerformanceMetrics(BaseModel):
|
|
203
|
-
"""Type-safe performance metrics model."""
|
|
204
|
-
|
|
205
|
-
model_config = ConfigDict(
|
|
206
|
-
validate_assignment=True,
|
|
207
|
-
extra="forbid",
|
|
208
|
-
)
|
|
209
|
-
|
|
210
|
-
# Basic metrics
|
|
211
|
-
execution_time_seconds: float = Field(
|
|
212
|
-
default=0.0, ge=0.0, description="Total execution time"
|
|
213
|
-
)
|
|
214
|
-
memory_usage_mb: float = Field(default=0.0, ge=0.0, description="Peak memory usage")
|
|
215
|
-
cpu_usage_percent: float = Field(
|
|
216
|
-
default=0.0, ge=0.0, le=100.0, description="CPU usage percentage"
|
|
217
|
-
)
|
|
218
|
-
|
|
219
|
-
# Operation metrics
|
|
220
|
-
operations_count: int = Field(
|
|
221
|
-
default=0, ge=0, description="Number of operations performed"
|
|
222
|
-
)
|
|
223
|
-
operations_per_second: float = Field(
|
|
224
|
-
default=0.0, ge=0.0, description="Operations per second"
|
|
225
|
-
)
|
|
226
|
-
|
|
227
|
-
# Service metrics
|
|
228
|
-
browser_operations: int = Field(
|
|
229
|
-
default=0, ge=0, description="Browser operations count"
|
|
230
|
-
)
|
|
231
|
-
llm_operations: int = Field(default=0, ge=0, description="LLM operations count")
|
|
232
|
-
websocket_messages: int = Field(
|
|
233
|
-
default=0, ge=0, description="WebSocket messages count"
|
|
234
|
-
)
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
class ScheduledModeStatus(BaseModel):
|
|
238
|
-
"""Type-safe scheduled mode status model."""
|
|
239
|
-
|
|
240
|
-
model_config = ConfigDict(
|
|
241
|
-
validate_assignment=True,
|
|
242
|
-
extra="forbid",
|
|
243
|
-
)
|
|
244
|
-
|
|
245
|
-
status: str = Field(..., pattern=r"^(not_started|running|stopped|error)$")
|
|
246
|
-
is_running: bool = Field(..., description="Whether scheduler is running")
|
|
247
|
-
parser_id: str = Field(..., description="Parser identifier")
|
|
248
|
-
parser_name: str = Field(..., description="Parser name")
|
|
249
|
-
scheduler_health: Optional[dict] = Field(
|
|
250
|
-
default=None, description="Scheduler health data"
|
|
251
|
-
)
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
class DaemonCommandResult(BaseModel):
|
|
255
|
-
"""Type-safe daemon command result model."""
|
|
256
|
-
|
|
257
|
-
model_config = ConfigDict(
|
|
258
|
-
validate_assignment=True,
|
|
259
|
-
extra="forbid",
|
|
260
|
-
)
|
|
261
|
-
|
|
262
|
-
status: str = Field(..., pattern=r"^(success|error)$")
|
|
263
|
-
data: Optional[dict] = Field(default=None, description="Command result data")
|
|
264
|
-
items_processed: int = Field(default=0, ge=0, description="Items processed")
|
|
265
|
-
duration_seconds: float = Field(..., ge=0.0, description="Command duration")
|
|
266
|
-
parser_id: str = Field(..., description="Parser identifier")
|
|
267
|
-
timestamp: str = Field(..., description="Command timestamp")
|
|
268
|
-
error: Optional[ErrorInfo] = Field(
|
|
269
|
-
default=None, description="Error details if failed"
|
|
270
|
-
)
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
class DaemonStatusResult(BaseModel):
|
|
274
|
-
"""Type-safe daemon status result model."""
|
|
275
|
-
|
|
276
|
-
model_config = ConfigDict(
|
|
277
|
-
validate_assignment=True,
|
|
278
|
-
extra="forbid",
|
|
279
|
-
)
|
|
280
|
-
|
|
281
|
-
status: str = Field(..., pattern=r"^(success|error)$")
|
|
282
|
-
parser_id: str = Field(..., description="Parser identifier")
|
|
283
|
-
parser_name: str = Field(..., description="Parser name")
|
|
284
|
-
daemon_running: bool = Field(..., description="Whether daemon is running")
|
|
285
|
-
health: Optional[dict] = Field(default=None, description="Parser health data")
|
|
286
|
-
timestamp: str = Field(..., description="Status timestamp")
|
|
287
|
-
error: Optional[ErrorInfo] = Field(
|
|
288
|
-
default=None, description="Error details if failed"
|
|
289
|
-
)
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
class DaemonHealthResult(BaseModel):
|
|
293
|
-
"""Type-safe daemon health result model."""
|
|
294
|
-
|
|
295
|
-
model_config = ConfigDict(
|
|
296
|
-
validate_assignment=True,
|
|
297
|
-
extra="forbid",
|
|
298
|
-
)
|
|
299
|
-
|
|
300
|
-
status: str = Field(..., pattern=r"^(healthy|unhealthy)$")
|
|
301
|
-
data: Optional[dict] = Field(default=None, description="Health check data")
|
|
302
|
-
parser_id: str = Field(..., description="Parser identifier")
|
|
303
|
-
timestamp: str = Field(..., description="Health check timestamp")
|
|
304
|
-
error: Optional[ErrorInfo] = Field(
|
|
305
|
-
default=None, description="Error details if failed"
|
|
306
|
-
)
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
# Update forward references
|
|
310
|
-
ExecutionResult.model_rebuild()
|
|
311
|
-
DaemonCommandResult.model_rebuild()
|
|
312
|
-
DaemonStatusResult.model_rebuild()
|
|
313
|
-
DaemonHealthResult.model_rebuild()
|