11import { ConnectionGRPC } from '../../connection/index.js' ;
2- import { WeaviateUnsupportedFeatureError } from '../../errors.js' ;
2+ import { WeaviateUnexpectedStatusCodeError , WeaviateUnsupportedFeatureError } from '../../errors.js' ;
33import { Tenant as TenantREST } from '../../openapi/types.js' ;
44import { TenantsCreator , TenantsDeleter , TenantsGetter , TenantsUpdater } from '../../schema/index.js' ;
55import { DbVersionSupport } from '../../utils/dbVersion.js' ;
@@ -17,12 +17,10 @@ const parseValueOrValueArray = <V>(value: V | V[]) => (Array.isArray(value) ? va
1717const parseStringOrTenant = < T extends TenantBase > ( tenant : string | T ) =>
1818 typeof tenant === 'string' ? tenant : tenant . name ;
1919
20- const parseTenantREST = ( tenant : TenantREST ) : Tenant => {
21- return {
22- name : tenant . name ! ,
23- activityStatus : Deserialize . activityStatusREST ( tenant . activityStatus ) ,
24- } ;
25- } ;
20+ const parseTenantREST = ( tenant : TenantREST ) : Tenant => ( {
21+ name : tenant . name ! ,
22+ activityStatus : Deserialize . activityStatusREST ( tenant . activityStatus ) ,
23+ } ) ;
2624
2725const tenants = (
2826 connection : ConnectionGRPC ,
@@ -53,9 +51,20 @@ const tenants = (
5351 return check . supports ? getGRPC ( ) : getREST ( ) ;
5452 } ,
5553 getByNames : < T extends TenantBase > ( tenants : ( string | T ) [ ] ) => getGRPC ( tenants . map ( parseStringOrTenant ) ) ,
56- getByName : < T extends TenantBase > ( tenant : string | T ) => {
54+ getByName : async < T extends TenantBase > ( tenant : string | T ) => {
5755 const tenantName = parseStringOrTenant ( tenant ) ;
58- return getGRPC ( [ tenantName ] ) . then ( ( tenants ) => tenants [ tenantName ] || null ) ;
56+ if ( await dbVersionSupport . supportsTenantGetRESTMethod ( ) . then ( ( check ) => ! check . supports ) ) {
57+ return getGRPC ( [ tenantName ] ) . then ( ( tenants ) => tenants [ tenantName ] ?? null ) ;
58+ }
59+ return connection
60+ . get < TenantREST > ( `/schema/${ collection } /tenants/${ tenantName } ` )
61+ . then ( parseTenantREST )
62+ . catch ( ( err ) => {
63+ if ( err instanceof WeaviateUnexpectedStatusCodeError && err . code === 404 ) {
64+ return null ;
65+ }
66+ throw err ;
67+ } ) ;
5968 } ,
6069 remove : < T extends TenantBase > ( tenants : string | T | ( string | T ) [ ] ) =>
6170 new TenantsDeleter (
0 commit comments