
    Vgc1                         d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ dZ ed      Z G d d      Z G d d      Z  G d d      Z!y)    N)OrderedDict)Random)
AnyCallableDictListOptionalPatternSequenceTupleTypeVarUnion   )DEFAULT_LOCALE)UniquenessException)Factory)	Generatorrandom)SeedType)choices_distributioni  RetTypec                      e Zd ZU dZ ej
                  d      Zeed<    e	e
      D  cg c]  }|j                  d      r|dvs| c}} Z	 	 	 	 	 d*deeeee   eeeeef   f   f      deee      d	ee
   d
eee      dededdfdZfdZdede
fdZdedeffdZdedefdZi fdedd fdZdeddfdZed+d       Zed,d       Z dede!fdZ"d Z#d Z$dede%ee!   eee      f   fdZ&e'd-dee(   ddfd        Z)d-dee(   ddfd!Z*d-dedee(   ddfd"Z+ede,fd#       Z-e-j\                  d$e,ddfd%       Z-edee   fd&       Z/edeeeeef         fd'       Z0edee
   fd(       Z1dee%ee
f      fd)Z2xZ3S c c}} w ).Fakerz2Proxy class capable of supporting multiple localesz^_cached_\w*_mapping$cache_pattern__)seedseed_instancer   Nlocale	providers	generatorincludesuse_weightingconfigreturnc                    t               | _        d | _        t        |       | _        t        |       | _        t        |t              r|j                  dd      g}nt        |t        t        t        f      rZg }|D ]R  }t        |t              st        dt        |       d      |j                  dd      }	|	|vsB|j                  |	       T nt        |t               rt        d |j!                         D              sJ t               }
|j#                         D ]  \  }}|j                  dd      }||
|<    t        |
j%                               }t        |
j!                               | _        nt&        g}|D ]*  }t)        j*                  ||||fd|i|| j                  |<   , || _        t        | j                  j!                               | _        y )N-_zThe locale "z" must be a string.c              3   H   K   | ]  }t        |t        t        f        y wN)
isinstanceintfloat).0vs     L/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/faker/proxy.py	<genexpr>z!Faker.__init__.<locals>.<genexpr>:   s     Lqz!c5\2Ls    "r"   )r   _factory_map_weightsUniqueProxy_unique_proxyOptionalProxy_optional_proxyr*   strreplacelisttupleset	TypeErrorappendallvaluesitemskeysr   r   create_locales
_factories)selfr   r   r    r!   r"   r#   localescodefinal_localeodictkr.   keys                 r/   __init__zFaker.__init__   s    (M(.,T2fc"~~c3/0G uc 23G 1!$,#l3t9+=P$QRR#||C5w.NN<01 ,LFMMOLLLLME 1iiS)c
 5::<(G 0DM &&G 	F(/	)
 ,) )Df%	  t00779:    c                     t        t        t        |                }| j                  D ]0  }|t        |      D ch c]  }|j                  d      r| c}z  }2 t        |      S c c}w )Nr'   )r;   superr   __dir__	factoriesdir
startswithsorted)rE   
attributesfactoryattr	__class__s       r/   rP   zFaker.__dir__R   sb    ud356
~~ 	VGCLUDPS@T4UUJ	Vj!! Vs   A'A'c                 @    | j                   |j                  dd         S )Nr&   r'   )r1   r8   )rE   r   s     r/   __getitem__zFaker.__getitem__X   s      S!9::rM   rW   c                 F    |dk(  rd}t        |      t        | 	  |      S )z
        Handles the "attribute resolution" behavior for declared members of this proxy class

        The class method `seed` cannot be called from an instance.

        :param attr: attribute name
        :return: the appropriate attribute
        r   zZCalling `.seed()` on instances is deprecated. Use the class method `Faker.seed()` instead.)r<   rO   __getattribute__)rE   rW   msgrX   s      r/   r\   zFaker.__getattribute__[   s+     6>qCC. 7+D11rM   c                 0   t        | j                        dk(  rt        | j                  d   |      S || j                  v rd|z  }t	        |      | j
                  j                  |      rd|z  }t        |      | j                  |      }t        ||      S )z
        Handles cache access and proxying behavior

        :param attr: attribute name
        :return: the appropriate attribute
        r   r   zBProxying calls to `%s` is not implemented in multiple locale mode.z$Cached attribute `%s` does not exist)	lenrD   getattrgenerator_attrsNotImplementedErrorr   matchAttributeError_select_factory)rE   rW   r]   rV   s       r/   __getattr__zFaker.__getattr__j   s     t1$4??1-t44T)))VY]]C%c**%%d+84?C %%**40G7D))rM   memodictc                 8   | j                   }|j                  |      }t        j                  | j                        |_        t        j                  | j
                        |_        t        j                  | j                        |_        t        j                  | j                        |_        t        |       |_	        | j                  j                  j                         D ci c]  }||j                  j                  h c}|j                  _
        |S c c}w r)   )rX   __new__copydeepcopyrC   rD   r1   r2   r3   r4   _seenrA   	_sentinel)rE   rg   clsresultrJ   s        r/   __deepcopy__zFaker.__deepcopy__}   s    nnS!--6 MM$//:"mmD,=,=>--6*40SWSeSeSkSkSpSpSr%saa&*>*>*H*H)I&I%s" &ts   $Dstatec                 :    | j                   j                  |       y r)   __dict__updaterE   rq   s     r/   __setstate__zFaker.__setstate__       U#rM   c                     | j                   S r)   )r4   rE   s    r/   uniquezFaker.unique   s    !!!rM   c                     | j                   S r)   )r6   rz   s    r/   optionalzFaker.optional   s    ###rM   method_namec                     | j                  |      \  }}t        |      dk(  rd|}t        |      t        |      dk(  r|d   S |r| j                  ||      }|S | j	                  |      }|S )z
        Returns a random factory that supports the provider method

        :param method_name: Name of provider method
        :return: A factory that supports the provider method
        r   z"No generator object has attribute r   )_map_provider_methodr_   rd   _select_factory_distribution_select_factory_choice)rE   r~   rQ   weightsr]   rV   s         r/   re   zFaker._select_factory   s     "66{C	7y>Q6{oFC %%^q Q<77	7KG  11)<GrM   c                 .    t        ||t        d      d   S )Nr   )lengthr   )r   r   )rE   rQ   r   s      r/   r   z"Faker._select_factory_distribution   s    #IwqI!LLrM   c                 ,    t        j                  |      S r)   )r   choice)rE   rQ   s     r/   r   zFaker._select_factory_choice   s    }}Y''rM   c                    d| d}t        | |      rt        | |      S | j                  rbt        | j                  | j                        D cg c]  \  }}t        ||      r||f }}}t        | \  }}t        |      t        |      f}n*| j                  D cg c]  }t        ||      s| }}|df}t        | ||       |S c c}}w c c}w )ad  
        Creates a 2-tuple of factories and weights for the given provider method name

        The first element of the tuple contains a list of compatible factories.
        The second element of the tuple contains a list of distribution weights.

        :param method_name: Name of provider method
        :return: 2-tuple (factories, weights)
        _cached__mappingN)hasattrr`   r2   ziprQ   r9   setattr)	rE   r~   rW   rV   weightvaluerQ   r   mappings	            r/   r   zFaker._map_provider_method   s     +h/44&& == (+4>>4=='I#GV7K0 &!E 
 "%eIw9otG}4G,0NN\gg{>[W\E\TkG 	dG$ ]s   CC-Cr   c                 .    t        j                  |       y)zs
        Hashables the shared `random.Random` object across all factories

        :param seed: seed value
        N)r   r   )rn   r   s     r/   r   z
Faker.seed   s     	trM   c                 H    | j                   D ]  }|j                  |        y)zr
        Creates and seeds a new `random.Random` object for each factory

        :param seed: seed value
        N)rD   r   )rE   r   rV   s      r/   r   zFaker.seed_instance   s%      	(G!!$'	(rM   c                 `    | j                   |j                  dd         j                  |       y)z
        Creates and seeds a new `random.Random` object for the factory of the specified locale

        :param locale: locale string
        :param seed: seed value
        r&   r'   N)r1   r8   r   )rE   r   r   s      r/   seed_localezFaker.seed_locale   s(     	&..c23AA$GrM   c                 ~    t        | j                        dk(  r| j                  d   j                  S d}t        |      )a   
        Proxies `random` getter calls

        In single locale mode, this will be proxied to the `random` getter
        of the only internal `Generator` object. Subclasses will have to
        implement desired behavior in multiple locale mode.
        r   r   zJProxying `random` getter calls is not implemented in multiple locale mode.r_   rD   r   rb   )rE   r]   s     r/   r   zFaker.random   s:     t1$??1%,,,^C%c**rM   r   c                 v    t        | j                        dk(  r|| j                  d   _        yd}t        |      )a   
        Proxies `random` setter calls

        In single locale mode, this will be proxied to the `random` setter
        of the only internal `Generator` object. Subclasses will have to
        implement desired behavior in multiple locale mode.
        r   r   zJProxying `random` setter calls is not implemented in multiple locale mode.Nr   )rE   r   r]   s      r/   r   zFaker.random   s6     t1$(-DOOA%^C%c**rM   c                 ,    t        | j                        S r)   )r9   rC   rz   s    r/   rF   zFaker.locales  s    DMM""rM   c                     | j                   S r)   )r2   rz   s    r/   r   zFaker.weights  s    }}rM   c                     | j                   S r)   )rD   rz   s    r/   rQ   zFaker.factories  s    rM   c                 H    t        | j                  j                               S r)   )r9   r1   r@   rz   s    r/   r@   zFaker.items  s    D%%++-..rM   )NNNNT)r$   r3   )r$   r5   r)   )4__name__
__module____qualname____doc__recompiler   r
   __annotations__rR   r   rS   ra   r	   r   r7   r   r   r+   r,   r   boolr   rL   rP   rZ   r\   rf   rp   rw   propertyr{   r}   r   re   r   r   r   r   classmethodr   r   r   r   r   r   setterrF   r   rQ   r@   __classcell__)r-   rW   rX   s   00@r/   r   r      s   <'RZZ(@AM7AYtt/DUxIxO UY)-)-(,"3;sHSM4U3:=N8N3OOPQ3; DI&3; I&	3;
 49%3; 3; 3; 
3;j";# ;) ;2S 2S 2* * *& -/ 	T 	7 	$# $$ $ " " $ $3 7 ,M( d7mXVZ[`VaMb>b8c B * d  ((8"4 ( (H# HXh-? H4 H + + + ]]+F +t + + #c # # $uS%Z'8"9:   4	?  /tE#y.12 /}s   FFFr   c                   P    e Zd ZdefdZddZdedefdZd Z	d	 Z
ded
edefdZy)r3   proxyc                 >    || _         i | _        t               | _        y r)   )_proxyrl   objectrm   rE   r   s     r/   rL   zUniqueProxy.__init__  s    
rM   r$   Nc                     i | _         y r)   )rl   rz   s    r/   clearzUniqueProxy.clear!  s	    
rM   namec                 ~    t        | j                  |      }t        |      r| j                  ||      S t	        d      )Nz9Accessing non-functions through .unique is not supported.r`   r   callable_wrapr<   rE   r   objs      r/   rf   zUniqueProxy.__getattr__$  s6    dkk4(C=::dC((WXXrM   c                 :    | j                   j                         }|S r)   rt   rj   rv   s     r/   __getstate__zUniqueProxy.__getstate__+       ""$rM   c                 :    | j                   j                  |       y r)   rs   rv   s     r/   rw   zUniqueProxy.__setstate__2  rx   rM   functionc                 J     t        j                         fd       }|S )Nc                  F   | t        t        |j                                     f}j                  j	                  |j
                  h      }j
                  }t        t              D ]  }||vr n | i |} t        dt        dd      |j                  |       |S )NzGot duplicated values after ,z iterations.)
r:   rT   r@   rl   
setdefaultrm   range_UNIQUE_ATTEMPTSr   add)	argskwargsrK   	generatedretvalir   r   rE   s	         r/   wrapperz"UniqueProxy._wrap.<locals>.wrapper6  s    uVFLLN%;<=C

--cDNN3CDI ^^F+, k*!4262k
 *,HIYZ[H\\h*ijjMM&!MrM   )	functoolswrapsrE   r   r   r   s   ``` r/   r   zUniqueProxy._wrap5  s%    		"	 
#	( rM   )r$   N)r   r   r   r   rL   r   r7   r   rf   r   rw   r   r    rM   r/   r3   r3     sM    "e "
Y Y Y$#  h rM   r3   c            	       f    e Zd ZdZdefdZdedefdZd Z	d Z
ded	ed
ef   ded
ee   f   fdZy)r5   zN
    Return either a fake value or None, with a customizable probability.
    r   c                     || _         y r)   )r   r   s     r/   rL   zOptionalProxy.__init__S  s	    rM   r   r$   c                 ~    t        | j                  |      }t        |      r| j                  ||      S t	        d      )Nz;Accessing non-functions through .optional is not supported.r   r   s      r/   rf   zOptionalProxy.__getattr__V  s6    dkk4(C=::dC((YZZrM   c                 :    | j                   j                         }|S r)   r   rv   s     r/   r   zOptionalProxy.__getstate__]  r   rM   c                 :    | j                   j                  |       y r)   rs   rv   s     r/   rw   zOptionalProxy.__setstate__d  rx   rM   r   .c                      t        j                        dddt        dt        dt        dt        t
           f fd       }|S )Ng      ?)probr   r   r   r$   c                     d| cxk  rdk  st        d       t        d      j                  j                  t        | dz              r |i |S d S )Nr   g      ?zprob must be between 0 and 1d   )chance_of_getting_true)
ValueErrorr   booleanr+   )r   r   r   r   rE   s      r/   r   z$OptionalProxy._wrap.<locals>.wrapperh  sb    t?s? !?@@ # !?@@040C0C[^_cfi_i[j0C0k8T,V,uquurM   )r   r   r   r,   r	   r   r   s   ` ` r/   r   zOptionalProxy._wrapg  sO    		".1 	v3 	ve 	vS 	vXgEV 	v 
#	v
 rM   N)r   r   r   r   r   rL   r7   r   rf   r   rw   r   r   r	   r   r   rM   r/   r5   r5   N  sg    e [ [ [$# #w,)? HSRZ[bRcMcDd rM   r5   )"rj   r   r   collectionsr   r   r   typingr   r   r   r   r	   r
   r   r   r   r   r#   r   
exceptionsr   rV   r   r    r   r   utils.distributionr   r   r   r   r3   r5   r   rM   r/   <module>r      sa      	 #  ` ` ` " +  (  4 
)
C/ C/L0 0f   rM   