/ PornAPI / base / __pycache__ / http.cpython-312.pyc
http.cpython-312.pyc
  1  2  b�h�$���ddlZddlZddlZddlmZddlmZmZmZm	Z	m
  3  Z
  4  ddlmZddl
Z
dedefd�Zdedefd	�Zdd
  5  e	ge
  6  fdedefd
�ZGd�d�Zy)�N)�Path)�Optional�Dict�Tuple�Callable�	Awaitable)�urlparse�url�returnc�^�t|�}|jxsd}|j}|�d|��S)z<
  7      Return "<scheme>://<host>" origin for a given URL.
  8      �httpsz://)r	�scheme�netloc)r
  9  �urrs    �5/root/projects/PAPI/Python_Tests/PornAPI/base/http.py�_originr
 10  s5��	��
�A�
�X�X�
 ��F�
�X�X�F��X�S���!�!��sizec�4�|dkry|dkry|dkry|dkryy	)
 11  zI
 12      Choose an optimal parallel part count from total size in bytes.
 13      i@�i@�i@�l���)rs r�_auto_partsrs3���n����o����o����m���
r�factory�retries�
 14  base_delayc���K�d}t|�D]}	|��d{���cS|�7�	#t$r?}|}|dz|k(rYd}~|�tj|d|zz��d{���7Yd}~�]d}~wwxYw�w)zP
 15      Execute an async factory with bounded retries and exponential backoff.
 16      N�r)�range�	Exception�asyncio�sleep)rrr�exc�i�es      r�_with_retryr)#s������C�
�7�^�7��	7� ��?�"�7��I�
#���	7��C��1�u����
 17  
�I��-�-�
 18  �a�1�f� 5�6�6�6��		7�sM�A5�
 19  *�(�*�A5�*�	A2�
 20  A-�A5�A-�"A%�#A-�(A5�-A2�2A5c
�v�eZdZdZ					d deeeefdedededef
 21  d�Zd	�Z	d
 22  �Z
 23  d�Zd!dd
�dedeeeefdedeeeffd�Z
dedeeeeeefffd�Zdedej"fd�Zdedej"fd�Zdedefd�Zd"dededefd�Zd#dedededefd�Z			d$dededeedededefd�Zd�Zy)%�AsyncHttpClientzK
 24      High-performance HTTP client with optimized parallel downloading.
 25      N�headers�connect_timeout�read_timeout�limit_per_host�limit_totalc���ddddd�}|r|j|�||_tjd||��|_tj
 26  ||dd	�
 27  �|_d|_y)zZ
 28          Initialize the client with base headers, timeouts, and connector limits.
 29          zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36z*/*zen-US,en;q=0.8z
 30  keep-alive)z
 31  User-Agent�AcceptzAccept-Language�
 32  ConnectionN)�total�sock_connect�	sock_readi,T)�limitr/�
ttl_dns_cache�enable_cleanup_closed)�update�_headers�aiohttp�
ClientTimeout�_timeout�TCPConnector�
 33  _connector�session)�selfr,r-r.r/r0�base_headerss       r�__init__zAsyncHttpClient.__init__8sq��1��/�&�	
 34  �������(�$��
��-�-�D��bn�o��
�!�.�.��)��"&�	
 35  ���9=��rc��BK�|j��d{���|S7��w)zJ
 36          Create an internal aiohttp session for async with usage.
 37          N)�_ensure_session�rBs r�
 38  __aenter__zAsyncHttpClient.__aenter__Ys$�����"�"�$�$�$���	%�s���c��@K�|j��d{���y7��w)zH
 39          Close the internal aiohttp session on async with exit.
 40          N)�close)rB�exc_typer&�tbs    r�	__aexit__zAsyncHttpClient.__aexit__`s�����j�j�l���s���c���K�|j�|jjr=tj|j|j
 41  |jd��|_yy�w)zD
 42          Lazily create the aiohttp ClientSession if needed.
 43          NF)r,�timeout�	connector�	trust_env)rA�closedr<�
ClientSessionr;r>r@rGs rrFzAsyncHttpClient._ensure_sessionfsM�����<�<��4�<�<�#6�#6�"�0�0��
�
��
�
��/�/��	�D�L�$7�s�A!A#F��xmlr
 44  �extrarUrc��t|j�}t|�|d<|rd|d<|r|j|�|S)zY
 45          Merge base headers with per-request headers and inject dynamic Referer.
 46          �Refererz*application/xml, text/xml;q=0.9, */*;q=0.8r2)�dictr;rr:)rBr
 47  rVrU�hs     r�_merge_headerszAsyncHttpClient._merge_headersrs>��
�������s�|��)���F�A�h�K��
�H�H�U�O��rc���K�|j��d{���|jj|d|j|���4�d{���}|j	�t|jjdd�xsd�}|jjdd�j�d	k(}||t|j�fcddd��d{���S7��7��7�	#1�d{���7swYyxYw�w)
 48  zQ
 49          Issue a HEAD request and return (size, accept_ranges, headers).
 50          NT)�allow_redirectsr,zContent-Length�0rz
Accept-Ranges��bytes)
 51  rFrA�headr[�raise_for_status�intr,�get�lowerrY)rBr
 52  �rr�
accept_rangess     rrazAsyncHttpClient.head~s������"�"�$�$�$��<�<�$�$�S�$��H[�H[�\_�H`�$�a�	8�	8�ef�
��� ��q�y�y�}�}�%5�s�;�@�q�A�D��I�I�M�M�/�2�>�D�D�F�'�Q�M����Q�Y�Y��7�		8�	8�	8�	%��	8��	8��	8�	8�	8�sX�C;�C �5C;�C"�
C;�A>C&�C;�C$�C;�"C;�$C;�&C8�,C/�-C8�4C;c���K�|j��d{���|j||jd��|d<|jj|fi|���d{���S7�M7��w)zF
 53          Issue a GET request and return the aiohttp response.
 54          Nr,)rFr[rdrA�rBr
 55  �kwargss   rrdzAsyncHttpClient.get�sb�����"�"�$�$�$� �/�/��V�Z�Z�	�5J�K��y��%�T�\�\�%�%�c�4�V�4�4�4�	%��4��"�A(�A$�AA(�A&� A(�&A(c���K�|j��d{���|j||jd��|d<|jj|fi|���d{���S7�M7��w)zG
 56          Issue a POST request and return the aiohttp response.
 57          Nr,)rFr[rdrA�postris   rrmzAsyncHttpClient.post�sb�����"�"�$�$�$� �/�/��V�Z�Z�	�5J�K��y��&�T�\�\�&�&�s�5�f�5�5�5�	%��5�rkc��zK�|j��d{���|j||jd��|d<|jj|fi|��4�d{���}|j	�|j��d{���cddd��d{���S7��7�?7�7�#1�d{���7swYyxYw�w)zK
 58          Read the full response body into memory and return bytes.
 59          Nr,)rFr[rdrArb�read)rBr
 60  rj�responses    rrozAsyncHttpClient.read�s������"�"�$�$�$� �/�/��V�Z�Z�	�5J�K��y��#�4�<�<�#�#�C�2�6�2�	)�	)�h��%�%�'�!����(�	)�	)�	)�	%��	)��(��	)��	)�	)�	)�sj�B;�B�A	B;� B �!B;�$$B&�B"�	B&�B;�B$�B;� B;�"B&�$B;�&B8�,B/�-B8�4B;�encodingc��K�|j��d{���|j||jd�d��|d<|jj|fi|��4�d{���}|j	�|j|���d{���cddd��d{���S7��7�A7�7�#1�d{���7swYyxYw�w)zT
 61          Read the response as text with encoding and return string content.
 62          Nr,TrT)rq)rFr[rdrArb�text)rBr
 63  rqrjrps     r�	read_textzAsyncHttpClient.read_text�s������"�"�$�$�$� �/�/��V�Z�Z�	�5J�PT�/�U��y��#�4�<�<�#�#�C�2�6�2�	:�	:�h��%�%�'�!�����9�9�	:�	:�	:�	%��	:��9��	:��	:�	:�	:�sj�B?�B"�AB?�"B$�#B?�&&B*�B&�
B*�B?�B(�B?�$B?�&B*�(B?�*B<�0B3�1B<�8B?�dest�
 64  chunk_sizec��K�|j��d{���|jjdd��|j|jdz�}|j||j
d��|d<|jj|fi|��4�d{���}|j�t|d�5}|jj|�23d{���}|s�|j|��7��7�\7�6	ddd�n#1swYnxYwddd��d{���7n#1�d{���7swYnxYwtj||�|S�w)zG
 65          Stream a single-connection download into a file path.
 66          NT��parents�exist_ok�.partr,�wb)rF�parent�mkdir�with_suffix�suffixr[rdrArb�open�content�iter_chunked�write�os�replace)	rBr
 67  rurvrj�tmprp�f�chunks	         r�read_into_filezAsyncHttpClient.read_into_file�s-�����"�"�$�$�$������$���6����t�{�{�W�4�5�� �/�/��V�Z�Z�	�5J�K��y��#�4�<�<�#�#�C�2�6�2�	'�	'�h��%�%�'��c�4��
'�A�#+�#3�#3�#@�#@��#L�'�'�%�������	%��	'��'��#L�
'�
'�
'��	'�	'�	'�	'�	'��	�
 68 69  �3�����s��E�C6�BE�C8�E�D%�<D�C<�C:
 70  �C<� D�$D�6E�8E�:C<�<D�>	D%�D	�D%�E�D!�E�%D7�+D.�,D7�3E�parts�max_retriesc�����������K��j��d{����j���d{���\}}}�jjdd��|r|st	����fd�����d{���S|xst|�}	t
j||	z�}
 71  g}t|	�D]8}||
 72  z}
t|dz
 73  |dz|
 74  zdz
 75  �}|
|ks�&|j|
|f��:�j�jdz�}tj|tjtj ztj"zd��		t%td	�rtj&�d
 76  |�ntj(�|�t-j.t|	d���dt0d
t0f������fd��	t-j2�fd�|D���d{���	�r	tj4��tj6|���S7���7���7���#t*$rtj(�|�Y��wxYw7�c#t*$r^tj4��t	����fd�����d{���7�cY�r&	tj4��S#t*$rYSwxYwSwxYw#t*$rY��wxYw#�r&	tj4��w#t*$rYwwxYwwxYw�w)z�
 77          Download a URL to a destination path using parallel ranged GETs.
 78          If the server does not return 206 for ranged requests, falls back to a single-connection stream.
 79          NTrxc�,���j�����S�N)rv�r��rvrurBr
 80  s����r�<lambda>z*AsyncHttpClient.download.<locals>.<lambda>�s���T�-@�-@��d�Wa�-@�-b�r�rr!r{i��posix_fallocaterr�start�endc�����K��4�d{���������fd�}t|����d{���cddd��d{���S7�47�7�	#1�d{���7swYyxYw�w)Nc����K��j�	dd��d���i�}�jj�	|��4�d{���}|jdk7rt	d���}|j
 81  j
��23d{���}|s�tjtj�||��d{���|t|�z
}�I7��7�F7�6ddd��d{���7y#1�d{���7swYyxYw�w)N�Rangezbytes=�-)r,��zRanged download not honored)r[rArd�status�RuntimeErrorr�r�r$�	to_threadr��pwrite�len)
 82  r,�resp�offsetr�rvr��fdrBr�r
 83  s
 84      ������r�onez:AsyncHttpClient.download.<locals>.fetch_range.<locals>.one�s������"&�"5�"5�c�G�v�e�W�TU�VY�UZ�E[�;\�"]��#'�<�<�#3�#3�C��#3�#I�9�9�T�#�{�{�c�1�&2�3P�&Q� Q�%*�F�/3�|�|�/H�/H��/T�9�9�e�#(�*1�*;�*;�B�I�I�r�5�RX�*Y�$Y�$Y�$*�c�%�j�$8�F�9��9��$Y��0U�	9�9�9�9�9�s��<C2�C�C2�8C�;C
 85  �?C�C
 86  �C�)C�0C�1C�C2�C
 87  �C�
 88  C�C2�C�C2�C/�#C&�$C/�+C2r�)r))	r�r�r�rvr�r�rB�semr
 89  s	`` ������r�fetch_rangez-AsyncHttpClient.download.<locals>.fetch_range�sb������G�G�	9�	9�"-�S�+�!F�F�G�G�G��G��G��G�G�G�sQ�A�A�A�A�A�A�A�A�A�A�A�A�
A�A�Ac3�6�K�|]\}}�||����y�w�Nr)�.0�sr(r�s   �r�	<genexpr>z+AsyncHttpClient.download.<locals>.<genexpr>�s�����&L�T�Q��{�1�a�'8�&L�s�c�,���j�����Sr�r�r�s����rr�z*AsyncHttpClient.download.<locals>.<lambda>�s���$�*=�*=�c�4�T^�*=�*_�r)rFrar}r~r)r�math�ceilr"�min�appendrr�r�r��O_CREAT�O_TRUNC�O_WRONLY�hasattrr��	ftruncater#r$�	Semaphorerc�gatherrJr�)rBr
 90  rur�rvr�r�ok�_�n�step�rangesr'r�r�r�r�r�r�s``` ``          @@@r�downloadzAsyncHttpClient.download�s�������"�"�$�$�$� �I�I�c�N�*���b�!������$���6��2�$�%b�lw�x�x�x��&�[��&���y�y����"�����q��	,�A���H�E��d�Q�h��Q��$��� 2�3�C���|��
�
�u�c�l�+�		,�
 91  ���t�{�{�W�4�5��
�W�W�S�"�*�*�r�z�z�1�B�K�K�?��
G��!	�
'��2�0�1��&�&�r�1�d�3��L�L��T�*��#�#�C��2�J�/�C�
G��
G�3�
G�
G�
��n�n�&L�V�&L�M�M�M����H�H�R�L�	�
 92 93  �3�����e	%��*��y��"�
'����R��&�
'��"N���
������!�"_�it�u�u�u������H�H�R�L�� ������
��!��������H�H�R�L�� ������s�K1�H�K1�H�?K1�7H!�8AK1�A:K1�>H$�6K�I�%I	�&I�+K1�.J5�K1�K1�!K1�$I�K�I�K�	I�4J2�?J�J2�K�K1�J!� K1�!	J-�*K1�,J-�-K1�1J2�2K�5	K�>K1�K�K1�K.�K�K.�	K*�'K.�)K*�*K.�.K1c��K�|jr:|jjs#|jj��d{���yyy7��w)z?
 94          Close the underlying aiohttp session if open.
 95          N)rArRrJrGs rrJzAsyncHttpClient.close�s;�����<�<���� 3� 3��,�,�$�$�&�&�&�!4�<�&�s�AA�A
 96  �A)N�iXr��r�)zutf-8)�)Nr��)�__name__�
 97  __module__�__qualname__�__doc__rr�strrcrDrHrMrF�boolr[rrar<�ClientResponserdrmr`rortrr�r�rJrrrr+r+3s����-1�!�� ��
=��$�s�C�x�.�)�=��=��	=�
 98  �=��
=�B��
 99  �
100  �^c�
101  �#�
102  �h�t�C��H�~�.F�
103  �W[�
104  �hl�mp�ru�mu�hv�
105  �	8�c�	8�e�C��t�C��H�~�,E�&F�	8�5�S�5�w�/E�/E�5�6�c�6��0F�0F�6�)�c�)��)�:�3�:�#�:�c�:����4��S��ae��* $�!��
>�
�>��>���}�	>�
106  �>��
>�
107  �>�@'rr+)r�g�������?)r�r�r$�pathlibr�typingrrrrr�urllib.parser	r<r�rrcr�floatr)r+rrr�<module>r�ss���	���=�=�!��"��"��"��c��c��
�x��I�
�6�
��
�V[�
� P'�P'r