
    ug                          d dl Z d dlmZmZ d dlmZ d dlmZ d dlZd dl	m
Z
 d dlmZmZmZmZmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ  G d de      Z G d de      ZddZy)    N)Dictcast)HTTPException)override)	ServerAPI)AuthzActionAuthzResourceServerAuthenticationProviderServerAuthorizationProviderUserIdentity)SettingsSystem)_fastapi_fixture)run_state_machine_as_testEmbeddingStateMachinec                   4    e Zd ZdZedeeef   defd       Zy)ExampleAuthenticationProviderzIn practice the tenant would likely be resolved from some other opaque value (e.g. key/token). Here, it's just passed directly as a header for simplicity.headersreturnc                 <    t        d|j                  dd             S )Ntestx-tenant)user_idtenant)r   get)selfr   s     c/var/www/openai/venv/lib/python3.12/site-packages/chromadb/test/client/test_database_tenant_auth.pyauthenticate_or_raisez3ExampleAuthenticationProvider.authenticate_or_raise   s     ;;z40
 	
    N)	__name__
__module____qualname____doc__r   r   strr   r    r    r   r   r      s0     e
T#s(^ 
 
 
r    r   c            	       N     e Zd ZdZdeddf fdZededede	ddfd	       Z
 xZS )
ExampleAuthorizationProviderzUA simple authz provider that asserts the user's tenant matches the resource's tenant.systemr   Nc                 F    t         |   |       |j                  | _        y N)super__init__settings	_settings)r   r)   	__class__s     r   r-   z%ExampleAuthorizationProvider.__init__$   s     r    useractionresourcec                     |j                   y |t        j                  k(  ry |j                   |j                   k7  rt        dd      y )Ni  Unauthorized)status_codedetail)r   r   RESETr   )r   r1   r2   r3   s       r   authorize_or_raisez/ExampleAuthorizationProvider.authorize_or_raise(   sD     ;;[&&&;;(//)CGG *r    )r!   r"   r#   r$   r   r-   r   r   r   r	   r9   __classcell__)r0   s   @r   r(   r(   !   sS    _)v )$ ) 
H 
H*5
HAN
H	
H 
Hr    r(   c                     t         j                  j                  d      rt         j                  j                  dd      } t        t         j                  j                  dd            }t	               }||_        | |_        t        j                  |      }|j                  d       |j                  dd       nt        dd	
      }t        |      }|j                          |j                  t              }|j                  d       |j                  dd       t!        t"        |j$                  j                        } t!        t        |j$                  j
                        }t        j&                  | |ddidd      t)        fd       y )NCHROMA_INTEGRATION_TEST_ONLYCHROMA_SERVER_HOST	localhostCHROMA_SERVER_HTTP_PORTr   test_tenanttest_databasezLchromadb.test.client.test_database_tenant_auth.ExampleAuthenticationProviderzKchromadb.test.client.test_database_tenant_auth.ExampleAuthorizationProvider)chroma_server_authn_providerchroma_server_authz_providerr   )hostportr   r   databasec                      t               S r+   r   )clients   r   <lambda>z=test_tenant_and_database_passed_from_client.<locals>.<lambda>X   s    %f-r    )osenvironr   intr   chroma_server_http_portchroma_server_hostchromadbAdminClientcreate_tenantcreate_databaser   nextreset_staterequirer   r   r%   r.   
HttpClientr   )rD   rE   r.   admin_clientapi_fixturesysserverrH   s          @r   +test_tenant_and_database_passed_from_clientr[   6   s7   	zz~~45zz~~2K@2::>>";Q?@:+/(&*#++H5""=1$$_mD&)w)v
 ;'Y']+>C889C==>  ]+ F -r    )r   N)rJ   typingr   r   fastapir   	overridesr   rO   chromadb.apir   chromadb.authr   r	   r
   r   r   chromadb.configr   r   chromadb.test.conftestr   hypothesis.statefulr   &chromadb.test.property.test_embeddingsr   r   r(   r[   r&   r    r   <module>re      sU    	  !   "  - 3 I
$@ 
H#> H*#r    