o
    ǯh(                     @   s   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	 d dl
mZ d dlmZmZmZmZmZ dddZeeeZG d	d
 d
Zdd Zdd Zdd ZdS )    N)
connection)settings)URLResolverreverse)lazy)get_tenant_domain_modelget_subfolder_prefixclean_tenant_urlhas_multi_type_tenantsget_tenant_typesc                 C   s   t | ||||d}t|S )N)current_app)reverse_defaultr	   )viewnameurlconfargskwargsr   url r   X/var/www/Befach/backend/venv/lib/python3.10/site-packages/django_tenants/urlresolvers.pyr      s   r   c                   @   sH   e Zd Zi Zedd Zedd Zdd Zdd Zd	d
 Z	dd Z
dS )TenantPrefixPatternc                 C   s\   t  }t }z|jjtjtjjd}|rd||j	W S d|j	W S  |j
y-   Y dS w )N)tenant__schema_namedomainz{}/{}/z{}//)r   r   objectsgetr   schema_nametenantdomain_subfolderformatr   DoesNotExist)self_DomainModelsubfolder_prefixr   r   r   r   tenant_prefix   s   
z!TenantPrefixPattern.tenant_prefixc                 C   s   t | jS N)recompiler#   r    r   r   r   regex+   s   zTenantPrefixPattern.regexc                 C   s*   | j }||r|t|d  di fS d S )Nr   )r#   
startswithlen)r    pathr#   r   r   r   match1   s   
zTenantPrefixPattern.matchc                 C   s   g S r$   r   r'   r   r   r   check7   s   zTenantPrefixPattern.checkc                 C   s
   d | S )Nz'{}')r   r'   r   r   r   describe:   s   
zTenantPrefixPattern.describec                 C   s   | j S r$   )r#   r'   r   r   r   __str__=   s   zTenantPrefixPattern.__str__N)__name__
__module____qualname__
converterspropertyr#   r(   r,   r-   r.   r/   r   r   r   r   r      s    

r   c                  G   s   t t t| gS )z
    Add the tenant prefix to every URL pattern within this function.
    This may only be used in the root URLconf, not in an included URLconf.
    )r   r   list)urlsr   r   r   tenant_patternsA   s   r7   c                    s6   ddl m} ddlm  G  fddd|}||S )zP
    Generates a new URLConf module with all patterns prefixed with tenant.
    r   )
ModuleType)import_stringc                       s   e Zd Z fddZdS )z>get_dynamic_tenant_prefixed_urlconf.<locals>.LazyURLConfModulec                    s$    d |}|dkrt| S |S )Nz{}.{}urlpatterns)r   r7   )r    attrimportedr9   r   r   r   __getattr__Q   s   zJget_dynamic_tenant_prefixed_urlconf.<locals>.LazyURLConfModule.__getattr__N)r0   r1   r2   r>   r   r=   r   r   LazyURLConfModuleP   s    r?   )typesr8   django.utils.module_loadingr9   )r   dynamic_pathr8   r?   r   r=   r   #get_dynamic_tenant_prefixed_urlconfI   s   rC   c                 C   sH   t  rt |   d }ntj}|d }tj|s"t||tj|< |S )z=
    Creates and returns a subfolder URLConf for tenant.
    URLCONF_dynamically_tenant_prefixed)	r
   r   get_tenant_typer   ROOT_URLCONFsysmodulesr   rC   )r   r   rB   r   r   r   get_subfolder_urlconfZ   s   rJ   )NNNN)r%   rH   	django.dbr   django.confr   django.urlsr   r   r   django.utils.functionalr   django_tenants.utilsr   r   r	   r
   r   strreverse_lazyr   r7   rC   rJ   r   r   r   r   <module>   s    

*