
    Sњh                     (   S SK r S SKrS SKrS SKrS SKrS SKJr  S SKJr  S SK	J
r
  S SKJr  S SKJrJr  S SKJr  S SKJr  S	r\R*                  /S
-  \R,                  /\S
-
  -  -   rSS jrS rS rS rSS jrS rS rS rSS jr S r!SS jr"S r#g)    N)OrderedDict)urlsplit)settings)get_user_model)ImproperlyConfiguredValidationError)	force_strapp_settings      c                 .   SSK Jn  U" 5       nS nU=(       d    SnU  H  nU(       d  M  [        R                  " S[	        U5      5      nUR                  SS5      R                  S5      n[        U5      S:X  a  M^  [	        [        R                  " USU5      R                  5       5      nUR                  S	5      S   nUR                  5       n[        R                  " S
SU5      n UR                  USS9n  O   U=(       d    S$ ! [         a     M  f = f)N   get_adapterz[^\w\s@+.-]NFKDasciiignorer    @z\s+_Tshallowuser)account.adapterr   unicodedata	normalizer	   encodedecodelenresublowersplitstripclean_usernamer   )txtsregexr   adapterusernametxts         HD:\Anime\Ugyen\janka_web_project\venv\Lib\site-packages\allauth/utils.py_generate_unique_username_baser-      s    ,mGH#^E((3@??7H5<<WEx=ARVVE2x8>>@A >>#&q)>>#66&#x0	--h-EH' , v  		s   'D
DDc                  ~    SSK Jn   U b1  [        5       nUR                  R	                  U 5      R
                  nU$ SnU$ )Nr   USER_MODEL_USERNAME_FIELDr   )account.app_settingsr0   r   _meta	get_field
max_length)r0   Userr4   s      r,   get_username_max_lengthr6   8   sC    ? ,ZZ))*CDOO
  
    c                     [        5       nSR                  S [        U5       5       5      nU SU[        U5      -
   U-   $ )Nr   c              3   \   #    U  H"  n[         R                  " [        U   5      v   M$     g 7fN)randomchoiceUSERNAME_SUFFIX_CHARS).0is     r,   	<genexpr>.generate_username_candidate.<locals>.<genexpr>E   s&      9MA+A.//9Ms   *,r   )r6   joinranger    )basenamesuffix_lengthr4   suffixs       r,   generate_username_candidaterG   C   sG    (*JWW 9>}9M F A
S[01F::r7   c                     SSK Jn  [        U 5      U:  a  U /nO/ n[        SU[        U 5      -
  5      n[	        [        5       [        5      n[        X45       H  nUR                  [        X5      5        M     U$ )Nr   )USERNAME_MIN_LENGTH)
r1   rI   r    maxminr6   MAX_USERNAME_SUFFIX_LENGTHrC   appendrG   )rD   rI   retmin_suffix_lengthmax_suffix_lengthrE   s         r,   generate_username_candidatesrQ   K   so    9
8}++jA2S]BC357QR0D

.xGH EJr7   c                 z   SSK Jn  SSKJn  SSKJn  U" 5       n[        X5      n[        U5      nU" U6 R                  USS9n[        U V	s/ s H  oR                  5       PM     sn	5      nU H*  n
U
R                  5       U;  d  M   UR                  U
SS9s  $    [        S	5      es  sn	f ! [         a     MK  f = f)
Nr   )filter_users_by_usernamer   r   r/   T)flatr   z Unable to find a unique username)allauth.account.utilsrS   r   r   r1   r0   r-   rQ   values_listsetr#   r&   r   NotImplementedError)r'   r(   rS   r   r0   r)   rD   
candidatesexisting_usernamesn	candidates              r,   generate_unique_usernamer]   Y   s    >,?mG-d:H-h7J1:>JJ! K  1CD1CAggi1CDE	??$66--i-FF   @
AA E
 # s   B'B,,
B:9B:c                     [        U [        5      (       d   eU R                  SS5      u  p[        [        R
                  " U5      U5      nU$ )N.r   )
isinstancestrrsplitgetattr	importlibimport_module)pathpkgattrrN   s       r,   import_attributeri   p   sC    dC    C#IC
)))#.
5CJr7   c                 D    [        U 5      (       d  [        U 5      nU$ U nU$ r:   )callableri   )path_or_callablerN   s     r,   import_callablerm   w   s,    $%%/0 J Jr7   c                     Uc  g[        5       nU H!  n U R                  R                  U5      X#'   M#     UR	                  U R                  5        X l        g! [         a     MT  f = f)a  
This function is a verbatim copy of django.forms.Form.order_fields() to
support field ordering below Django 1.9.

field_order is a list of field names specifying the order. Append fields
not included in the list in the default order for backward compatibility
with subclasses not overriding field_order. If field_order is None, keep
all fields in the order defined in the class. Ignore unknown fields in
field_order to allow disabling fields in form subclasses without
redefining ordering.
N)r   fieldspopKeyErrorupdate)formfield_orderro   keys       r,   set_form_field_orderrv      sb     ]F	++//#.FK 
 MM$++K  		s   A
A&%A&c                    SSK Jn  U c  [        R                  (       d  [        S5      eSSKJn  UR                  R                  5       n[        U5      nUR                  (       a  UR                  (       d&  SR                  UR                  UR                  US9nOUnOU R                  U5      nU(       d  UR                  S:X  a  UR                  nU(       a  US	-   UR                  S	5      S
   -   nU$ )z~request.build_absolute_uri() helper

Like request.build_absolute_uri, but gracefully handling
the case where request is None.
r   r
   z6Passing `request=None` requires `sites` to be enabled.r   )Sitez{proto}://{domain}{url})protodomainurlhttps:   )accountr   SITES_ENABLEDr   django.contrib.sites.modelsrx   objectsget_currentr   schemenetlocformatDEFAULT_HTTP_PROTOCOLrz   build_absolute_uri	partition)requestlocationprotocolaccount_settingsrx   sitebitsuris           r,   r   r      s     :))&H  	5||'')!+22&<<{{ 3 C C((2 (>>'I#99ns}}S1!44Jr7   c                 h    U R                  X5      n[        U[        5      (       a  [        U5      nU$ r:   )getr`   ra   ri   )formsform_iddefault_form
form_classs       r,   get_form_classr      s-    71J*c""%j1
r7   c                     U c  U$ U R                   R                  U5      =(       d    U R                  R                  X5      $ r:   )POSTr   GET)r   paramdefaults      r,   get_request_paramr      s3    <<E"Egkkooe&EEr7   c                 L    [        [        SS 5      n[        U5      nU" X5      $ )NALLAUTH_SETTING_GETTERc                 "    [        [        X5      $ r:   )rc   r   )namedflts     r,   <lambda>get_setting.<locals>.<lambda>   s    78T8r7   )rc   r   rm   )r   r   getters      r,   get_settingr      s,     8F
 V$F$r7   r:   )$rd   r;   r!   stringr   collectionsr   urllib.parser   django.confr   django.contrib.authr   django.core.exceptionsr   r   django.utils.encodingr	   allauthr   rL   digitsascii_lettersr=   r-   r6   rG   rQ   r]   ri   rm   rv   r   r   r   r    r7   r,   <module>r      s      	   # !   . H +  
  !+v/C/C.D"/  
>;B.0'TFr7   