
    h                         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	  S SK
Jr  S SKJrJrJrJrJrJr   " S S	\5      rg
)    )settings)DisallowedHost)
connection)Http404)set_urlconf)MiddlewareMixin)
remove_wwwget_public_schema_nameget_tenant_typeshas_multi_type_tenantsget_tenant_domain_modelget_public_schema_urlconfc                   P    \ rS rSr\r \S 5       rS rS r	S r
\S	S j5       rSrg)
TenantMainMiddleware   c                 X    [        U R                  5       R                  S5      S   5      $ )zExtracts hostname from request. Used for custom requests filtering.
By default removes the request's port and common prefixes.
:r   )r	   get_hostsplit)requests    P/var/www/html/env/lib/python3.13/site-packages/django_tenants/middleware/main.pyhostname_from_request*TenantMainMiddleware.hostname_from_request   s(    
 '**,2237:;;    c                 j    UR                   R                  S5      R                  US9nUR                  $ )Ntenant)domain)objectsselect_relatedgetr   )selfdomain_modelhostnamer   s       r   
get_tenantTenantMainMiddleware.get_tenant   s0    %%44X>BB(BS}}r   c                    [         R                  " 5          U R                  U5      n[        5       n U R                  XB5      nX%l
        XQl        [         R                  " UR                  5        U R                  U5        g ! [         a    SSKJn  U" 5       s $ f = f! UR                   a    U R                  X5         g f = f)Nr   )HttpResponseNotFound)r   set_schema_to_publicr   r   django.httpr'   r   r$   DoesNotExistno_tenant_found
domain_urlr   
set_tenantsetup_url_routing)r!   r   r#   r'   r"   r   s         r   process_request$TenantMainMiddleware.process_request   s     	'')	*11':H
 /0	__\<F
 %gnn-w'  	*8'))	* (( 	  3	s"   B B BB!CCc                     [        [        S5      (       a&  [        R                  (       a  U R                  USS9  gU R	                  SU-  5      e)zlWhat should happen if no tenant is found.
This makes it easier if you want to override the default behavior SHOW_PUBLIC_IF_NO_TENANT_FOUNDT)r   force_publiczNo tenant for hostname "%s"N)hasattrr   r2   r.   TENANT_NOT_FOUND_EXCEPTION)r!   r   r#   s      r   r+   $TenantMainMiddleware.no_tenant_found6   sE     8=>>8CjCj""7"F112ORZ2Z[[r   c                    [        5       n[        5       (       a  [        5       n[        U S5      (       a1  U(       d"  U R                  R
                  [        5       :X  a  SX2   ;   a  [        5       U l        O&U R                  R                  5       nX4   S   U l        [        U R                  5        g[        [        S5      (       a@  U(       d"  U R                  R
                  [        5       :X  a  [        R                  U l        ggg)zS
Sets the correct url conf based on the tenant
:param request:
:param force_public
r   URLCONFPUBLIC_SCHEMA_URLCONFN)r
   r   r   r4   r   schema_namer   urlconfget_tenant_typer   r   r9   )r   r3   public_schema_nametenant_typestenant_types        r   r.   &TenantMainMiddleware.setup_url_routing>   s     45!##+-LGX.."gnn&@&@DZD\&\,"BB";"=%nn<<>".";I"F( "9::!W^^%?%?CYC[%["*"@"@ &\ ;r    N)F)__name__
__module____qualname____firstlineno__r   r5   staticmethodr   r$   r/   r+   r.   __static_attributes__rA   r   r   r   r      sG    !( < <(.\ A Ar   r   N)django.confr   django.core.exceptionsr   	django.dbr   r)   r   django.urlsr   django.utils.deprecationr   django_tenants.utilsr	   r
   r   r   r   r   r   rA   r   r   <module>rN      s3      1    # 4O OIA? IAr   