
    ѫfi                     t    d dl mZ d dlmZ d dlmZ d dlmZmZmZm	Z	  G d de      Z
e G d d             Zy	)
    )	dataclass)datetime)Enum)DictListOptionalUnionc                   2    e Zd ZdZdZ	 dZ	 dZ	 dZ	 dZ	 dZ	y)	ProxyFormatzSupported proxy output formats.requestscurlhttpxaiohttp
playwrighturlN)
__name__
__module____qualname____doc__REQUESTSCURLHTTPXAIOHTTP
PLAYWRIGHTURL     [/home/homepc/tiktok-worker/venv/lib/python3.12/site-packages/proxyproviders/models/proxy.pyr   r      s5    )HAD/E;G?JE
C,r   r   c            	          e Zd ZU dZeed<   	 eed<   	 eed<   	 eed<   	 eed<   	 dZee   ed<   	 dZ	ee   ed	<   	 dZ
ee   ed
<   	 dZeee      ed<   	 ddedefdZej                   fdeeef   deeeeef   ee   f   fdZd Zd Zd Zy)Proxyz>Our shared data model for a proxy object across all providers.idusernamepasswordproxy_addressportNcountry_code	city_name
created_at	protocolsprotocolreturnc           	      r    | d| j                    d| j                   d| j                   d| j                   	S )a  Convert proxy to URL format for use with HTTP clients.

        :param protocol: The protocol to use in the URL (default: 'http')
        :return: Proxy URL in format 'protocol://username:password@host:port'

        Example:
            >>> proxy.to_url()
            'http://user:pass@192.168.1.1:8080'
            >>> proxy.to_url('https')
            'https://user:pass@192.168.1.1:8080'
        ://:@)r"   r#   r$   r%   )selfr*   s     r   to_urlzProxy.to_url<   s?     3t}}oQt}}oQt?Q?Q>RRSTXT]T]S^__r   format_typec                 *    t        |t              r	 t        |      }n2t        |t              s"t        dt        |      j                   d      t        j                   fdt        j                   fdt        j                   fdt        j                   fdt        j                   fd	t        j                   fd
i}||   } |       S # t        $ r4 t        d| dt        D cg c]  }|j                   nc c}w c}       w xY w)a  Format proxy for different HTTP clients and tools.

        :param format_type: Output format (default: URL string)
        :param kwargs: Format-specific options
        :return: Formatted proxy data

        Examples:
            >>> proxy.format()  # Default URL string
            'http://user:pass@192.168.1.1:8080'

            >>> proxy.format(ProxyFormat.REQUESTS)
            {'http': 'http://user:pass@192.168.1.1:8080', 'https': 'http://user:pass@192.168.1.1:8080'}

            >>> proxy.format('curl')  # String also works
            ['-x', 'http://user:pass@192.168.1.1:8080']

            >>> proxy.format(ProxyFormat.HTTPX)
            {'http://': 'http://user:pass@192.168.1.1:8080', 'https://': 'http://user:pass@192.168.1.1:8080'}
        zInvalid format type: 'z'. Valid options are: zInvalid format type: z&. Expected ProxyFormat enum or string.c                  F    j                   j                  dd            S )Nr*   http)r1   getkwargsr0   s   r   <lambda>zProxy.format.<locals>.<lambda>n   s    T[[J1O%P r   c                  &    j                         S N)_format_requestsr7   s   r   r9   zProxy.format.<locals>.<lambda>o   s    $*?*?*G r   c                  *    d j                  d      gS )Nz-xr5   r1   r0   s   r   r9   zProxy.format.<locals>.<lambda>p   s    tT[[-@&A r   c                  $     j                         S r;   )_format_httpxr?   s   r   r9   zProxy.format.<locals>.<lambda>q   s    t'9'9'; r   c                  &     j                  d      S )Nr5   r>   r?   s   r   r9   zProxy.format.<locals>.<lambda>r   s    V)< r   c                  (     j                   di  S )Nr   )_format_playwrightr7   s   r   r9   zProxy.format.<locals>.<lambda>s   s    ,CD,C,C,Mf,M r   )
isinstancestrr   
ValueErrorvaluetyper   r   r   r   r   r   r   )r0   r2   r8   fformat_handlershandlers   ` `   r   formatzProxy.formatJ   s    . k3')+6
 K5'[(9(B(B'CCij 
 OOP  "GA;!<""$M
 "+.y'   ,[M9ObmPn]^QRQXQXPnPnOop s   C D/DDc                     |j                  d| j                  xs ddg      }| j                  d      }|D ci c]  }|| c}S c c}w )z"Format proxy for requests library.r)   r5   https)r6   r)   r1   )r0   r8   r)   	proxy_urlr*   s        r   r<   zProxy._format_requestsy   sG    JJ{DNN,Ovw>OP	KK'	4=>)#>>>s   
Ac                 .    | j                  d      }||dS )zFormat proxy for httpx library.r5   )zhttp://zhttps://r>   )r0   rP   s     r   rA   zProxy._format_httpx   s    KK'	$)<<r   c                 (   |j                  dd      }| j                  r|| j                  vr| j                  d   }d| d| j                   d| j                   i}| j                  r*| j
                  r| j                  |d<   | j
                  |d<   |S )	zFormat proxy for Playwright.r*   r5   r   serverr-   r.   r"   r#   )r6   r)   r$   r%   r"   r#   )r0   r8   r*   playwright_proxys       r   rD   zProxy._format_playwright   s     ::j&1 >>hdnn<~~a(H$
#d6H6H5I499+&VW==T]]+/==Z(+/==Z(r   )r5   )r   r   r   r   rF   __annotations__intr&   r   r'   r(   r   r)   r   r1   r   r   r	   r   rM   r<   rA   rD   r   r   r   r    r       s    HG+MAMA4
IK"&L(3-&Q#Ix}#W%)J")<%)IxS	")X`s ` ` 6A__- c!12-	sDcNDI-	.-^?=
 r   r    N)dataclassesr   r   enumr   typingr   r   r   r	   r   r    r   r   r   <module>rZ      s<    !   . .-$ -, w  w  w r   