import http.client
from typing import Any
from typing import Optional

from .error import *

debuglevel: int
RETRIES: int

class Authentication:
    path: Any = ...
    host: Any = ...
    credentials: Any = ...
    http: Any = ...
    def __init__(
        self,
        credentials: Any,
        host: Any,
        request_uri: Any,
        headers: Any,
        response: Any,
        content: Any,
        http: Any,
    ) -> None: ...
    def depth(self, request_uri: Any): ...
    def inscope(self, host: Any, request_uri: Any): ...
    def request(self, method: Any, request_uri: Any, headers: Any, content: Any) -> None: ...
    def response(self, response: Any, content: Any): ...
    def __eq__(self, auth: Any) -> Any: ...
    def __ne__(self, auth: Any) -> Any: ...
    def __lt__(self, auth: Any) -> Any: ...
    def __gt__(self, auth: Any) -> Any: ...
    def __le__(self, auth: Any) -> Any: ...
    def __ge__(self, auth: Any) -> Any: ...
    def __bool__(self): ...

class BasicAuthentication(Authentication):
    def __init__(
        self,
        credentials: Any,
        host: Any,
        request_uri: Any,
        headers: Any,
        response: Any,
        content: Any,
        http: Any,
    ) -> None: ...
    def request(self, method: Any, request_uri: Any, headers: Any, content: Any) -> None: ...

class DigestAuthentication(Authentication):
    challenge: Any = ...
    A1: Any = ...
    def __init__(
        self,
        credentials: Any,
        host: Any,
        request_uri: Any,
        headers: Any,
        response: Any,
        content: Any,
        http: Any,
    ) -> None: ...
    def request(self, method: Any, request_uri: Any, headers: Any, content: Any, cnonce: Optional[Any] = ...): ...
    def response(self, response: Any, content: Any): ...

class HmacDigestAuthentication(Authentication):
    __author__: str = ...
    challenge: Any = ...
    hashmod: Any = ...
    pwhashmod: Any = ...
    key: Any = ...
    def __init__(
        self,
        credentials: Any,
        host: Any,
        request_uri: Any,
        headers: Any,
        response: Any,
        content: Any,
        http: Any,
    ) -> None: ...
    def request(self, method: Any, request_uri: Any, headers: Any, content: Any) -> None: ...
    def response(self, response: Any, content: Any): ...

class WsseAuthentication(Authentication):
    def __init__(
        self,
        credentials: Any,
        host: Any,
        request_uri: Any,
        headers: Any,
        response: Any,
        content: Any,
        http: Any,
    ) -> None: ...
    def request(self, method: Any, request_uri: Any, headers: Any, content: Any) -> None: ...

class GoogleLoginAuthentication(Authentication):
    Auth: str = ...
    def __init__(
        self,
        credentials: Any,
        host: Any,
        request_uri: Any,
        headers: Any,
        response: Any,
        content: Any,
        http: Any,
    ) -> None: ...
    def request(self, method: Any, request_uri: Any, headers: Any, content: Any) -> None: ...

class FileCache:
    cache: Any = ...
    safe: Any = ...
    def __init__(self, cache: Any, safe: Any = ...) -> None: ...
    def get(self, key: Any): ...
    def set(self, key: Any, value: Any) -> None: ...
    def delete(self, key: Any) -> None: ...

class Credentials:
    credentials: Any = ...
    def __init__(self) -> None: ...
    def add(self, name: Any, password: Any, domain: str = ...) -> None: ...
    def clear(self) -> None: ...
    def iter(self, domain: Any) -> None: ...

class KeyCerts(Credentials):
    def add(self, key: Any, cert: Any, domain: Any, password: Any) -> None: ...  # type: ignore
    def iter(self, domain: Any) -> None: ...

class AllHosts: ...

class ProxyInfo:
    bypass_hosts: Any = ...
    def __init__(
        self,
        proxy_type: Any,
        proxy_host: Any,
        proxy_port: Any,
        proxy_rdns: bool = ...,
        proxy_user: Optional[Any] = ...,
        proxy_pass: Optional[Any] = ...,
        proxy_headers: Optional[Any] = ...,
    ) -> None: ...
    def astuple(self): ...
    def isgood(self): ...
    def applies_to(self, hostname: Any): ...
    def bypass_host(self, hostname: Any): ...
    def __repr__(self): ...

class HTTPConnectionWithTimeout(http.client.HTTPConnection):
    proxy_info: Any = ...
    def __init__(
        self,
        host: Any,
        port: Optional[Any] = ...,
        timeout: Optional[Any] = ...,
        proxy_info: Optional[Any] = ...,
    ) -> None: ...
    sock: Any = ...
    def connect(self) -> None: ...

class HTTPSConnectionWithTimeout(http.client.HTTPSConnection):
    disable_ssl_certificate_validation: Any = ...
    ca_certs: Any = ...
    proxy_info: Any = ...
    key_file: Any = ...
    cert_file: Any = ...
    key_password: Any = ...
    def __init__(
        self,
        host: Any,
        port: Optional[Any] = ...,
        key_file: Optional[Any] = ...,
        cert_file: Optional[Any] = ...,
        timeout: Optional[Any] = ...,
        proxy_info: Optional[Any] = ...,
        ca_certs: Optional[Any] = ...,
        disable_ssl_certificate_validation: bool = ...,
        tls_maximum_version: Optional[Any] = ...,
        tls_minimum_version: Optional[Any] = ...,
        key_password: Optional[Any] = ...,
    ) -> None: ...
    sock: Any = ...
    def connect(self) -> None: ...

class Http:
    proxy_info: Any = ...
    ca_certs: Any = ...
    disable_ssl_certificate_validation: Any = ...
    tls_maximum_version: Any = ...
    tls_minimum_version: Any = ...
    connections: Any = ...
    cache: Any = ...
    credentials: Any = ...
    certificates: Any = ...
    authorizations: Any = ...
    follow_redirects: bool = ...
    redirect_codes: Any = ...
    optimistic_concurrency_methods: Any = ...
    safe_methods: Any = ...
    follow_all_redirects: bool = ...
    ignore_etag: bool = ...
    force_exception_to_status_code: bool = ...
    timeout: Any = ...
    forward_authorization_headers: bool = ...
    def __init__(
        self,
        cache: Optional[Any] = ...,
        timeout: Optional[Any] = ...,
        proxy_info: Any = ...,
        ca_certs: Optional[Any] = ...,
        disable_ssl_certificate_validation: bool = ...,
        tls_maximum_version: Optional[Any] = ...,
        tls_minimum_version: Optional[Any] = ...,
    ) -> None: ...
    def close(self) -> None: ...
    def __getstate__(self): ...
    def __setstate__(self, state: Any) -> None: ...
    def _auth_from_challenge(self, host: Any, request_uri: Any, headers: Any, response: Any, content: Any) -> None: ...
    def add_credentials(self, name: Any, password: Any, domain: str = ...) -> None: ...
    def add_certificate(self, key: Any, cert: Any, domain: Any, password: Optional[Any] = ...) -> None: ...
    def clear_credentials(self) -> None: ...
    def _conn_request(self, conn: Any, request_uri: Any, method: Any, body: Any, headers: Any): ...
    def _request(
        self,
        conn: Any,
        host: Any,
        absolute_uri: Any,
        request_uri: Any,
        method: Any,
        body: Any,
        headers: Any,
        redirections: Any,
        cachekey: Any,
    ): ...
    def _normalize_headers(self, headers: Any): ...
    def request(
        self,
        uri: Any,
        method: str = ...,
        body: Optional[Any] = ...,
        headers: Optional[Any] = ...,
        redirections: Any = ...,
        connection_type: Optional[Any] = ...,
    ): ...

class Response(dict):
    fromcache: bool = ...
    version: int = ...
    status: int = ...
    reason: str = ...
    previous: Any = ...
    def __init__(self, info: Any) -> None: ...
    def __getattr__(self, name: Any): ...

# Names in __all__ with no definition:
#   FailedToDecompressContent
#   HttpLib2Error
#   RedirectLimit
#   RedirectMissingLocation
#   UnimplementedDigestAuthOptionError
#   UnimplementedHmacDigestAuthOptionError
