o
    £ý¸i3  ã                   @  s:   d Z ddlmZ ddlmZ ddlmZ G dd„ dƒZdS )z-Resolve tenants from incoming Flask requests.é    )Úannotations)ÚRequest)ÚTenantRegistryc                   @  s4   e Zd ZdZdddd„Zddd„Zeddd„ƒZdS )ÚTenantResolverzFResolve tenant context using domain, headers, or explicit identifiers.NÚregistryúTenantRegistry | NoneÚreturnÚNonec                 C  s   |pt ƒ | _d S ©N)r   r   )Úselfr   © r   ú#platform/tenants/tenant_resolver.pyÚ__init__   s   zTenantResolver.__init__Úrequestr   údict[str, object] | Nonec                 C  sj   |j  d¡p|j d¡pd ¡ }|r| j |¡}|  |¡S |j dd¡d  ¡  	¡ }| j 
|¡}|  |¡S )NzX-Tenant-IdÚ	tenant_idÚ ú:é   r   )ÚheadersÚgetÚargsÚstripr   Ú
get_tenantÚ_serialize_tenantÚhostÚsplitÚlowerÚget_tenant_by_domain)r   r   r   Útenantr   r   r   r   Úresolve_from_request   s    

z#TenantResolver.resolve_from_requestc                 C  s.   | d u rd S | j | j| j| j| j| j| jdœS )N©r   ÚslugÚnameÚstatusÚplan_idÚdata_db_nameÚstorage_keyr!   )r   r   r   r   r      s   ùz TenantResolver._serialize_tenantr
   )r   r   r   r	   )r   r   r   r   )r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r    Ústaticmethodr   r   r   r   r   r   
   s    

r   N)r+   Ú
__future__r   Úflaskr   Ú platform.tenants.tenant_registryr   r   r   r   r   r   Ú<module>   s
    