
    g                         d Z ddlZddlZddlZddlmZ dZdZdZdZ	dZ
 ej                  e      Zd	 Zefd
ZefdZd Zd Z G d de      Zy)z4Shared utilities used by both downloads and uploads.    N)commonrangezcontent-rangezCurrently using crcmod in pure python form. This is a slow implementation. Python 3 has a faster implementation, `google-crc32c`, which will be used if it is installed.zx-goog-hashzNo {checksum_type} checksum was returned from the service while downloading {}
(which happens for composite objects), so client-side content integrity
checking is not being performed.c                       y)zSimple default callback.N r       /var/www/html/FastMealFinder_FlaskServer-InitialRelease/venv/lib/python3.12/site-packages/google/_async_resumable_media/_helpers.py
do_nothingr	   )       r   c                 `     ||       }||vr |        t        j                  | d|      ||   S )a  Checks that a specific header is in a headers dictionary.

    Args:
        response (object): An HTTP response object, expected to have a
            ``headers`` attribute that is a ``Mapping[str, str]``.
        name (str): The name of a required header.
        get_headers (Callable[Any, Mapping[str, str]]): Helper to get headers
            from an HTTP response.
        callback (Optional[Callable]): A callback that takes no arguments,
            to be executed when an exception is being raised.

    Returns:
        str: The desired header.

    Raises:
        ~google.resumable_media.common.InvalidResponse: If the header
            is missing.
    z$Response headers must contain headerr   InvalidResponse)responsenameget_headerscallbackheaderss        r   header_requiredr   -   sB    & (#G7
$$<d
 	
 4=r   c                 ^     ||       }||vr  |        t        j                  | d|dg| |S )a`  Require a response has a status code among a list.

    Args:
        response (object): The HTTP response object.
        status_codes (tuple): The acceptable status codes.
        get_status_code (Callable[Any, int]): Helper to get a status code
            from a response.
        callback (Optional[Callable]): A callback that takes no arguments,
            to be executed when an exception is being raised.

    Returns:
        int: The status code.

    Raises:
        ~google.resumable_media.common.InvalidResponse: If the status code
            is not one of the values in ``status_codes``.
    zRequest failed with status codezExpected one ofr   )r   status_codesget_status_coder   status_codes        r   require_status_coder   J   sL    $ "(+K,&
$$-	

 
 	
 r   c                 Z    d| z  }||kD  r|}t        j                  dd      }||d|z  z   fS )a  Calculate the amount of time to wait before a retry attempt.

    Wait time grows exponentially with the number of attempts, until
    ``max_sleep``.

    A random amount of jitter (between 0 and 1 seconds) is added to spread out
    retry attempts from different clients.

    Args:
        base_wait (float): The "base" wait time (i.e. without any jitter)
            that will be doubled until it reaches the maximum sleep.
        max_sleep (float): Maximum value that a sleep time is allowed to be.

    Returns:
        Tuple[float, float]: The new base wait time as well as the wait time
        to be applied (with a random amount of jitter between 0 and 1 seconds
        added).
    g       @r   i  gMbP?)randomrandint)	base_wait	max_sleepnew_base_wait	jitter_mss       r   calculate_retry_waitr    i   s?    & )OMy !q$'I-%)*;;;;r   c                 F  K   d}d}d}	 d}	  |         d{   } ||      t         j                  vr|S |j                  ||      s|r|S t	        ||j
                        \  }}	|dz  }||	z  }t        j                  |	       }7 o# t        $ r}|}Y d}~cd}~ww xY ww)a[  Attempts to retry a call to ``func`` until success.

    Expects ``func`` to return an HTTP response and uses ``get_status_code``
    to check if the response is retry-able.

    Will retry until :meth:`~.RetryStrategy.retry_allowed` (on the current
    ``retry_strategy``) returns :data:`False`. Uses
    :func:`calculate_retry_wait` to double the wait time (with jitter) after
    each attempt.

    Args:
        func (Callable): A callable that takes no arguments and produces
            an HTTP response which will be checked as retry-able.
        get_status_code (Callable[Any, int]): Helper to get a status code
            from a response.
        retry_strategy (~google.resumable_media.common.RetryStrategy): The
            strategy to use if the request fails and must be retried.

    Returns:
        object: The return value of ``func``.
    g        r   g      ?N   )r   	RETRYABLEConnectionErrorretry_allowedr    r   timesleep)
funcr   retry_strategytotal_sleepnum_retriesr   errorr   e	wait_times
             r   wait_and_retryr/      s     . KKI
	 !V|H x(0@0@@++KE O3I~?W?WX	9qy 

9-  $ 	E	s>   
B!
B	 BB	 A+B!B	 		BBB!BB!c                       e Zd ZdZd Zy)_DoNothingHashzDo-nothing hash object.

    Intended as a stand-in for ``hashlib.md5`` or a crc32c checksum
    implementation in cases where it isn't necessary to compute the hash.
    c                      y)zDo-nothing ``update`` method.

        Intended to match the interface of ``hashlib.md5`` and other checksums.
        Args:
            unused_chunk (bytes): A chunk of data.
        Nr   )selfunused_chunks     r   updatez_DoNothingHash.update   r
   r   N)__name__
__module____qualname____doc__r5   r   r   r   r1   r1      s    r   r1   )r9   loggingr   r&   google.resumable_mediar   RANGE_HEADERCONTENT_RANGE_HEADER_SLOW_CRC32C_WARNING_HASH_HEADER_MISSING_CHECKSUM	getLoggerr6   _LOGGERr	   r   r   r    r/   objectr1   r   r   r   <module>rD      s    ;    * & - 
 $  '

H
%# ;E : KU ><61hV r   