
    hk                         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 SKJrJrJrJr   " S	 S
\5      rg)    )settings)ImproperlyConfigured)
connection)Http404)set_urlconfclear_url_caches)TenantMainMiddleware)get_subfolder_urlconf)get_public_schema_nameget_tenant_modelget_subfolder_prefixget_tenant_domain_modelc                   <   ^  \ rS rSrSr\rU 4S jrS rS r	Sr
U =r$ )TenantSubfolderMiddleware   z
This middleware should be placed at the very top of the middleware stack.
Selects the proper tenant using the path subfolder prefix. Can fail in
various ways which is better than corrupting or revealing data.
c                 d   > [         TU ]  U5        Xl        [        5       (       d  [	        S5      eg )Nz`"TenantSubfolderMiddleware" requires "TENANT_SUBFOLDER_PREFIX" present and non-empty in settings)super__init__get_responser   r   )selfr   	__class__s     U/var/www/html/env/lib/python3.13/site-packages/django_tenants/middleware/subfolder.pyr   "TenantSubfolderMiddleware.__init__   s6    &(#%%&4  &    c                 H   [        US5      (       a  g [        R                  " 5         S n[        5       n[	        5       nU R                  U5      nSR                  [        5       5      nUR                  R                  U5      (       d3   UR                  R                  [        5       S9nU R                  USS9  OMUR                  [!        U5      S  R#                  S5      nUS   n	 U R%                  XIS	9nXl        [+        U5      nXWl        Xql        [        R0                  " UR.                  5        [3        5         U(       a  X!l        [7        U5        g g ! UR                   a    U R                  S5      ef = f! UR                   a    U R'                  X5      s $ f = f)
Ntenantz/{}/)schema_namezUnable to find public tenantT)force_public/r   )domain_modelhostname)hasattrr   set_schema_to_publicr   r   hostname_from_requestformatr   path
startswithobjectsgetr   DoesNotExistTENANT_NOT_FOUND_EXCEPTIONsetup_url_routinglensplit
get_tenantno_tenant_founddomain_subfolderr
   
domain_urlr   
set_tenantr   urlconfr   )
r   requestr4   tenant_modelr    r!   subfolder_prefix_pathr   path_chunkstenant_subfolders
             r   process_request)TenantSubfolderMiddleware.process_request!   s    7H%%'')').0--g6 &.B.D E ||&&'<==V%--11>T>V1W ""7"> ",,s+@'A'BCII#NK*1~Gl^ '7#+F3G$gnn-%O  /  ,, V556TUUV  ,, G++GFFGs   	!E (E= "E:=!F! F!c                 *    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 zNo tenant for subfolder "%s")r+   )r   r5   r!   s      r   r0   )TenantSubfolderMiddleware.no_tenant_foundO   s     --.Lx.WXXr   )r   )__name__
__module____qualname____firstlineno____doc__r   r+   r   r:   r0   __static_attributes____classcell__)r   s   @r   r   r      s'     "),!\Y Yr   r   N)django.confr   django.core.exceptionsr   	django.dbr   django.httpr   django.urlsr   r   django_tenants.middlewarer	   django_tenants.urlresolversr
   django_tenants.utilsr   r   r   r   r    r   r   <module>rN      s5      7    5 : = CY 4 CYr   