o
    h%                     @   s,  d dl Z d dlZ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
 d dlmZ d dlmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ dZejgd ejged   Zd'ddZdd Zdd Zdd Zd'ddZ dd Z!dd Z"dd Z#dd Z$d'dd Z%d!d" Z&d'd#d$Z'd%d& Z(dS )(    N)OrderedDict)urlsplit)settings)get_user_model)ImproperlyConfiguredValidationError)validate_email)
EmailField)	force_strapp_settings      c              	   C   s   ddl m} | }d }|pd}| D ]M}|sqtdt|}|ddd}t|dkr.qtt	|d|
 }|d	d }| }t	d
d|}z
|j|dd}W  n	 ty^   Y qw |pbdS )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txt r,   H/var/www/html/env_mimamsha/lib/python3.10/site-packages/allauth/utils.py_generate_unique_username_base   s,   r.   c                  C   s4   ddl m}  | d urt }|j| j}|S d}|S )Nr   USER_MODEL_USERNAME_FIELDr   )account.app_settingsr0   r   _meta	get_field
max_length)r0   Userr4   r,   r,   r-   get_username_max_length:   s   r6   c                 C   s6   t  }ddd t|D }| d|t|  | S )Nr   c                 s   s    | ]
}t t| V  qd S N)randomchoiceUSERNAME_SUFFIX_CHARS).0ir,   r,   r-   	<genexpr>G   s    
z.generate_username_candidate.<locals>.<genexpr>r   )r6   joinranger    )basenamesuffix_lengthr4   suffixr,   r,   r-   generate_username_candidateE   s
   
rC   c                 C   sf   ddl m} t| |kr| g}ng }td|t|  }tt t}t||D ]
}|t	| | q&|S )Nr   )USERNAME_MIN_LENGTH)
r1   rD   r    maxminr6   MAX_USERNAME_SUFFIX_LENGTHr?   appendrC   )r@   rD   retmin_suffix_lengthmax_suffix_lengthrA   r,   r,   r-   generate_username_candidatesM   s   rL   c           
   	   C   s   ddl m} ddlm} ddlm} | }t| |}t|}|| j|dd}t	dd	 |D }|D ]}	|	
 |vrNz
|j|	dd
W   S  tyM   Y q2w q2td)Nr   )filter_users_by_usernamer   r   r/   T)flatc                 S   s   g | ]}|  qS r,   )r#   )r;   nr,   r,   r-   
<listcomp>g   s    z,generate_unique_username.<locals>.<listcomp>r   z Unable to find a unique username)allauth.account.utilsrM   r   r   r1   r0   r.   rL   values_listsetr#   r&   r   NotImplementedError)
r'   r(   rM   r   r0   r)   r@   
candidatesexisting_usernames	candidater,   r,   r-   generate_unique_username[   s&   
rX   c                 C   sP   d }z| rt |  t| t jkr|  }W |S W |S W |S  ty'   Y |S w r7   )r   r    r	   r4   r#   r   )emailrI   r,   r,   r-   valid_email_or_noner   s   
rZ   c                 C   s2   t | tsJ | dd\}}tt||}|S )N.r   )
isinstancestrrsplitgetattr	importlibimport_module)pathpkgattrrI   r,   r,   r-   import_attribute~   s   re   c                 C   s   t | s
t| }|S | }|S r7   )callablere   )path_or_callablerI   r,   r,   r-   import_callable   s
   rh   c              	   C   sX   |du rdS t  }|D ]}z
| j|||< W q ty    Y qw || j || _dS )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_orderri   keyr,   r,   r-   set_form_field_order   s   
rp   c                 C   s   ddl m} | du r4tjstdddlm} |j }t|}|j	r&|j
s1dj|j|j|d}n|}n| |}|sC|jd	krC|j}|rP|d
 |d
d  }|S )zrequest.build_absolute_uri() helper

    Like request.build_absolute_uri, but gracefully handling
    the case where request is None.
    r   r   Nz6Passing `request=None` requires `sites` to be enabled.r   )Sitez{proto}://{domain}{url})protodomainurlhttps:   )accountr   SITES_ENABLEDr   django.contrib.sites.modelsrq   objectsget_currentr   schemenetlocformatDEFAULT_HTTP_PROTOCOLrs   build_absolute_uri	partition)requestlocationprotocolaccount_settingsrq   sitebitsurir,   r,   r-   r      s,   

r   c                 C   s"   |  ||}t|trt|}|S r7   )getr\   r]   re   )formsform_iddefault_form
form_classr,   r,   r-   get_form_class   s   
r   c                 C   s&   | d u r|S | j |p| j||S r7   )POSTr   GET)r   paramdefaultr,   r,   r-   get_request_param   s   r   c                 C   s"   t tddd }t|}|| |S )NALLAUTH_SETTING_GETTERc                 S   s   t t| |S r7   )r_   r   )namedfltr,   r,   r-   <lambda>   s    zget_setting.<locals>.<lambda>)r_   r   rh   )r   r   getterr,   r,   r-   get_setting   s   
r   r7   ))r`   r8   r!   stringr   collectionsr   urllib.parser   django.confr   django.contrib.authr   django.core.exceptionsr   r   django.core.validatorsr   django.db.models.fieldsr	   django.utils.encodingr
   allauthr   rG   digitsascii_lettersr:   r.   r6   rC   rL   rX   rZ   re   rh   rp   r   r   r   r   r,   r,   r,   r-   <module>   s>    


*
