
    L^i;
                     h    d dl 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ddddddefdZ	d Z
d Zd	 ZdS )
    N)a2b_hex__cld_token__~z"([ "#%&\'\/:;<=>?@\[\\\]^`{\|}~]+)c                 p   t          |          }t          |          }t          |          }|;|*||nt          t          j                              }	|	|z   }nt          d          | |t          d          g }
||
                    d|z              ||
                    d|z             |
                    d|z             |Rt          |          t          u r|n|g}d |D             }|
                    dd                    |          z             t          |
          }| '|%|                    d	t          |           z             t          t                              |          |          }|
                    d
|z             d|t                              |
          dz  S )Nz*Must provide either expiration or durationzMust provide either acl or urlzip=zst=%dzexp=%dc                 ,    g | ]}t          |          S  )_escape_to_lower).0as     8D:\Nbitz\venv\Lib\site-packages\cloudinary/auth_token.py
<listcomp>zgenerate.<locals>.<listcomp>%   s!    :::A$Q'':::    zacl=%s!zurl=%szhmac=%sz%(token_name)s=%(token)s)
token_nametoken)_ensure_intinttime	Exceptionappendtypelistjoinr	   _digestAUTH_TOKEN_SEPARATOR)urlacl
start_timeduration
expirationipkeyr   _starttoken_partsacl_listto_signauths                 r   generater)      s   Z((J8$$HZ((J","8JJc$)++>N>NE)JJHIII
{s{8999K	~52:&&&7Z/000x*,---
s))t++33#:::::8chhx&8&88999;G
3;x"23"7"77888',,W55s;;Dy4'(((%zL`LeLefqLrLr(s(sssr   c                     t          |          }t          j        ||                     d          t          j                                                  S )Nzutf-8)r   hmacnewencodehashlibsha256	hexdigest)messager"   bin_keys      r   r   r   /   s;    cllG8GW^^G44gnEEOOQQQr   c                 d    ddl m}  || t                    }t          j        dd |          }|S )Nr   )smart_escape)unsafez%[0-9A-F]{2}c                 P    |                      d                                          S )Nr   )grouplower)xs    r   <lambda>z"_escape_to_lower.<locals>.<lambda>8   s    AGGAJJ4D4D4F4F r   )cloudinary.utilsr4   AUTH_TOKEN_UNSAFE_REresub)r   r4   escaped_urls      r   r	   r	   4   sF    ------,s+?@@@K&*F*FTTKr   c                     t          | t                    s| s| S 	 t          |           S # t          t          f$ r t          d| z   dz             w xY w)a/  
    Ensures the input value is an integer.
    Attempts to cast it to an integer if it is not already.

    :param value: The value to ensure as an integer.
    :type value: Any
    :return: The integer value.
    :rtype: int
    :raises ValueError: If the value cannot be converted to an integer.
    zValue 'z' must be an integer.)
isinstancer   
ValueError	TypeError)values    r   r   r   ;   sq     % U F5zz	" F F FU*-DDEEEFs	   * 'A)r.   r+   r=   r   binasciir   AUTH_TOKEN_NAMEr   r<   r)   r   r	   r   r   r   r   <module>rG      s      				        " <  4D44Ot t t tDR R R
  F F F F Fr   