
    1~h                         d dl Zd dlZd dlmZmZmZmZmZm	Z	m
Z
mZmZ ddlmZ erddlmZ  ej                   d      Z ej$                         Z e Z e       Z G d d      Zy)	    N)	TYPE_CHECKINGAnyCallableDictHashableListOptionalTypeUnion   )SeedType)BaseProviderz\{\{\s*(\w+)(:\s*\w+?)?\s*\}\}c            	          e Zd ZU di iZeeeeef   f   ed<   dZ	e
ZdeddfdZded	ed	   f   ddfd
Zdeded	   fdZded	   fdZedej,                  fd       Zej0                  dej,                  ddfd       Zd"dee   dd fdZed"dee   ddfd       ZdedededefdZdedefdZdededdfdZ d"dededee   ddfdZ!d"dedee   defdZ"d"dedee   defdZ#dedefd Z$d! Z%y)#	Generator	arguments_Generator__configFconfigreturnNc                     g | _         t        t        | j                  j	                               t        |j	                               z         | _        t
        | _        y N)	providersdictlistr   itemsrandom_Generator__random)selfr   s     X/var/www/peopleoo.sandbox-dev.co.uk/venv/lib/python3.12/site-packages/faker/generator.py__init__zGenerator.__init__   s>    /1T$--"5"5"784;OOP    providerr   c                    t        |t              r ||       }| j                  j                  d|       t	        |      D ]>  }|j                  d      rt        ||      }t        |      s-| j                  ||       @ y )Nr   _)	
isinstancetyper   insertdir
startswithgetattrcallableset_formatter)r   r!   method_namefaker_functions       r   add_providerzGenerator.add_provider    ss    h%~Ha*x= 		@K%%c*$X{;N'"";?		@r    namec                     	 | j                         D cg c]/  }t        |d      s|j                  |j                         k(  s.|1 }}|d   S c c}w # t        $ r Y y w xY w)N__provider__r   )get_providershasattrr1   lower
IndexError)r   r/   plsts       r   r!   zGenerator.provider1   se    	"002tga6PUVUcUcgkgqgqgsUs1tCtq6M u 		s-   A AAAA A 	A A c                     | j                   S )zReturns added providers.)r   r   s    r   r2   zGenerator.get_providers8   s    ~~r    c                     | j                   S r   r   r9   s    r   r   zGenerator.random<   s    }}r    valuec                     || _         y r   r;   )r   r<   s     r   r   zGenerator.random@   s	    r    seedc                     | j                   t        k(  rt        j                         | _         | j                   j	                  |       d| _        | S )zCalls random.seedT)r   r   random_moduleRandomr>   
_is_seeded)r   r>   s     r   seed_instancezGenerator.seed_instanceD   s>    ==F" *002DM4 r    c                 J    t         j                  |       || _        d| _        y )NT)r   r>   _global_seedrB   )clsr>   s     r   r>   zGenerator.seedN   s    Dr    	formatterargskwargsc                 0     | j                  |      |i |S )zL
        This is a secure way to make a fake from another Provider.
        )get_formatter)r   rG   rH   rI   s       r   formatzGenerator.formatT   s!     -t!!),d=f==r    c                     	 t        | |      S # t        $ r= d| j                  v r d|d| j                  d   }t        |      t        d|      w xY w)NlocalezUnknown formatter z with locale )r)   AttributeErrorr   )r   rG   msgs      r   rK   zGenerator.get_formatterZ   sn    	&4++ 	&4==(*9-}T]]S[E\D_` !%% %'9)%GHH		&s
    AAc                     t        | ||       y)z
        This method adds a provider method to generator.
        Override this method to add some decoration or logging stuff.
        N)setattr)r   r/   rG   s      r   r+   zGenerator.set_formatterd   s    
 	dI&r    groupargumentc                     || j                   d   vri | j                   d   |<   t        |t              r|| j                   d   |<   yt        |t              st	        d      || j                   d   |   |<   y)a  
        Creates an argument group, with an individual argument or a dictionary
        of arguments. The argument groups is used to apply arguments to tokens,
        when using the generator.parse() method. To further manage argument
        groups, use get_arguments() and del_arguments() methods.

        generator.set_arguments('small', 'max_value', 10)
        generator.set_arguments('small', {'min_value': 5, 'max_value': 10})
        r   z/Arguments must be either a string or dictionaryN)r   r$   r   str
ValueError)r   rS   rT   r<   s       r   set_argumentszGenerator.set_argumentsk   ss     k2202DMM+&u-h%08DMM+&u-Hc*NOO:?DMM+&u-h7r    c                     || j                   d   v r%|r#| j                   d   |   j                  |      }|S | j                   d   j                  |      }|S )a  
        Get the value of an argument configured within a argument group, or
        the entire group as a dictionary. Used in conjunction with the
        set_arguments() method.

        generator.get_arguments('small', 'max_value')
        generator.get_arguments('small')
        r   )r   getr   rS   rT   results       r   get_argumentszGenerator.get_arguments   s\     DMM+..8]];/6::8DF  ]];/33E:Fr    c                     || j                   d   v rE|r#| j                   d   |   j                  |      }|S | j                   d   j                  |      }|S d}|S )z
        Delete an argument from an argument group or the entire argument group.
        Used in conjunction with the set_arguments() method.

        generator.del_arguments('small')
        generator.del_arguments('small', 'max_value')
        r   N)r   popr[   s       r   del_argumentszGenerator.del_arguments   sk     DMM+..{3E:>>xH 	 {377>  Fr    textc                 B    t         j                  | j                  |      S )a  
        Replaces tokens like '{{ tokenName }}' or '{{tokenName}}' in a string with
        the result from the token method call. Arguments can be parsed by using an
        argument group. For more information on the use of argument groups, please
        refer to the set_arguments() method.

        Example:

        generator.set_arguments('red_rgb', {'hue': 'red', 'color_format': 'rgb'})
        generator.set_arguments('small', 'max_value', 10)

        generator.parse('{{ color:red_rgb }} - {{ pyint:small }}')
        )	_re_tokensub_Generator__format_token)r   ra   s     r   parsezGenerator.parse   s     }}T00$77r    c                 p   t        |j                               \  }}|r|j                  d      j                         nd}|r0	 | j                  d   |   }t         | j                  |fi |      }nt        | j                  |            }dj                  |      S # t
        $ r t        d|      w xY w)N: r   zUnknown argument group )
r   groupslstripstripr   KeyErrorrO   rV   rL   join)r   matchesrG   argument_groupr   	formatteds         r   __format_tokenzGenerator.__format_token   s    $()9$:!	>?M..s399;SUS MM+6~F	 KDKK	?Y?@IDKK	23Iwwy!!  S$'>~>P%QRRSs   B B5r   )&__name__
__module____qualname__r   r   rV   r   r   __annotations__rB   SentinelrE   r   r   r
   r.   r	   r!   r   r2   propertyr@   rA   r   setterr   rC   classmethodr>   rL   r   rK   r+   rX   r]   r`   rf   re    r    r   r   r      s   R0Hd3Xs]++,  JL $ 
@U>4;O+O%P @UY @"S Xn%= tN3  ,,   ]]M00 T  (8"4   * d  
> >C >3 >3 >&s &x &'# '( 't '@3 @# @hsm @W[ @(3 (3- 3  3 (3- 3 $8# 8# 8 "r    r   )r   r@   retypingr   r   r   r   r   r   r	   r
   r   r   r   r   compilerc   rA   
mod_randomobjectrw   r   r{   r    r   <module>r      sX     	 \ \ \ 'BJJ89					
 8l" l"r    