"""JSONSchema spec handlers urllib module."""
from contextlib import closing
from typing import ContextManager
from typing import Optional
from urllib.request import urlopen

from jsonschema_path.handlers.file import BaseFilePathHandler
from jsonschema_path.handlers.file import FileHandler
from jsonschema_path.handlers.protocols import SupportsRead


class UrllibHandler(BaseFilePathHandler):
    """URL (urllib) scheme handler."""

    def __init__(
        self,
        *allowed_schemes: str,
        file_handler: Optional[FileHandler] = None,
        timeout: int = 10
    ):
        super().__init__(*allowed_schemes, file_handler=file_handler)
        self.timeout = timeout

    def _open(self, uri: str) -> ContextManager[SupportsRead]:
        return closing(urlopen(uri, timeout=self.timeout))
