Source code for askpablos_scrapy_api.operations

"""
Operations handler for AskPablos Scrapy API.

This module defines and validates configuration that can be used
with the AskPablos API service.
"""
from typing import Dict, Any
import logging

from .utils import (
    validate_browser,
    validate_screenshot,
    validate_operations,
    validate_geo_location,
    validate_proxy_type,
)

logger = logging.getLogger('askpablos_scrapy_api')


[docs] class AskPablosAPIMapValidator: """Validates the askpablos_api_map configuration."""
[docs] @classmethod def validate_config(cls, config: Dict[str, Any]) -> Dict[str, Any]: """ Validate and normalize askpablos_api_map configuration. Args: config: Configuration dictionary Returns: Validated and normalized configuration Raises: ValueError: If configuration is invalid """ if not isinstance(config, dict): raise ValueError("askpablos_api_map must be a dictionary") validated_config = {} # Validate browser option first (required by other options) browser_enabled = validate_browser(config, validated_config) # Validate all other options validate_screenshot(config, validated_config, browser_enabled) validate_operations(config, validated_config, browser_enabled) validate_geo_location(config, validated_config) validate_proxy_type(config, validated_config) return validated_config
[docs] def create_api_payload(request_url: str, request_method: str, config: Dict[str, Any]) -> Dict[str, Any]: """ Create API payload from validated configuration. Args: request_url: The URL to request request_method: HTTP method config: Validated configuration Returns: API payload dictionary """ payload = { "url": request_url, "method": request_method, "browser": config.get("browser", False), } # Add optional fields if present optional_fields = [ 'screenshot', 'operations', 'geoLocation', 'proxyType' ] for field in optional_fields: if field in config: payload[field] = config[field] return payload