
    ii<                        d dl mZ d dlmZmZmZmZmZmZ d dl	m
Z
 d dlmZmZ d dlmZ  edeeef                   Zerd dlmZ 	 	 dddZ	 	 	 	 d d!dZ	 	 	 	 	 d"d#dZd	S )$    )annotations)TYPE_CHECKINGCallablePatternTypeVarUnioncastParameterException)create_random_bytescreate_random_string)RegexFactoryT)bound)RandomN
min_length
int | None
max_lengthreturnNonec                    | | dk     rd}t          |          ||dk     rd}t          |          || || k     rd}t          |          dS dS dS )zValidate the length parameters make sense.

    :param min_length: Minimum length.
    :param max_length: Maximum length.

    :raises: ParameterException.

    :returns: None.
    Nr   z(min_length must be greater or equal to 0z(max_length must be greater or equal to 0z*max_length must be greater than min_lengthr
   )r   r   msgs      /var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/polyfactory/value_generators/constrained_strings.py_validate_lengthr      s     *q..8 %%%*q..8 %%%*"8Z*=T=T: %%% "8"8=T=T    Frandomr   patternstr | Pattern
lower_casebool
upper_casestrc                >   t          |           } ||          }|r4t          |          |k     r!| ||          z  }t          |          |k     !|t          |          |k    r
|d|         }|r|                                }|r|                                }|S )af  Generate a regex.

    :param random: An instance of random.
    :param pattern: A regex or string pattern.
    :param lower_case: Whether to lowercase the result.
    :param upper_case: Whether to uppercase the result.
    :param min_length: A minimum length.
    :param max_length: A maximum length.

    :returns: A string matching the given pattern.
    )r   N)r   lenlowerupper)r   r   r   r!   r   r   regex_factoryresults           r   _generate_patternr)   )   s    & !///M]7##F -&kkJ&&mmG,,,F &kkJ&& #f++
":":$    Mr   t_typeCallable[[], T]str | Pattern | Nonec                (   t          ||           |dk    r
 |            S |r#t          dt          | |||||                    S |t          u r"t          dt	          |||||                     S t          dt          |||||                     S )a  Handle constrained string or bytes, for example - pydantic `constr` or `conbytes`.

    :param random: An instance of random.
    :param t_type: A type (str or bytes)
    :param lower_case: Whether to lowercase the result.
    :param upper_case: Whether to uppercase the result.
    :param min_length: A minimum length.
    :param max_length: A maximum length.
    :param pattern: A regex or string pattern.

    :returns: A value of type T.
    )r   r   r   r   )r   r   r   r!   r   r   )r   r   r   r!   r   )r   r	   r)   r"   r   r   )r   r*   r   r!   r   r   r   s          r   "handle_constrained_string_or_bytesr.   N   s    * 
zBBBBQvxx 
%%%%  

 

 
	
 }} %%%%  	
 	
 		
 !!!!	
 	
 	
	 	 	r   )NN)r   r   r   r   r   r   )FFNN)r   r   r   r   r   r    r!   r    r   r   r   r   r   r"   )FFNNN)r   r   r*   r+   r   r    r!   r    r   r   r   r   r   r,   r   r   )
__future__r   typingr   r   r   r   r   r	   polyfactory.exceptionsr   'polyfactory.value_generators.primitivesr   r   "polyfactory.value_generators.regexr   bytesr"   r   r   r   r   r)   r.    r   r   <module>r6      s7   " " " " " " I I I I I I I I I I I I I I I I 5 5 5 5 5 5 ] ] ] ] ] ] ] ] ; ; ; ; ; ;GCuUCZ()))  "!& & & & &: !!" " " " "P !!$(< < < < < < <r   