@@ -312,15 +312,27 @@ async def get_by_name(self, tenant: Union[str, Tenant]) -> Optional[TenantOutput
312312 _validate_input (
313313 _ValidateArgument (expected = [Union [str , Tenant ]], name = "tenant" , value = tenant )
314314 )
315- response = await self ._grpc .get (
316- names = [tenant .name if isinstance (tenant , Tenant ) else tenant ]
315+ tenant_name = tenant .name if isinstance (tenant , Tenant ) else tenant
316+ if self ._connection ._weaviate_version .is_lower_than (1 , 28 , 0 ):
317+ # For Weaviate versions < 1.28.0, we need to use the gRPC API
318+ # such versions don't have RBAC so the filtering issue doesn't exist therein
319+ tenants = await self .__get_with_grpc ([tenant_name ])
320+ if len (tenants ) == 0 :
321+ return None
322+ return tenants [tenant_name ]
323+ # For Weaviate versions >= 1.28.0, we need to use the REST API
324+ # as the gRPC API filters out tenants that are not accessible to the user
325+ # due to RBAC requirements
326+ response = await self ._connection .get (
327+ path = f"/schema/{ self ._name } /tenants/{ tenant_name } " ,
328+ error_msg = f"Could not get tenant { tenant_name } for collection { self ._name } " ,
329+ status_codes = _ExpectedStatusCodes (
330+ ok_in = [200 , 404 ], error = f"Get tenant { tenant_name } for collection { self ._name } "
331+ ),
317332 )
318- if len ( response .tenants ) == 0 :
333+ if response .status_code == 404 :
319334 return None
320- return Tenant (
321- name = response .tenants [0 ].name ,
322- activity_status = self ._grpc .map_activity_status (response .tenants [0 ].activity_status ),
323- )
335+ return Tenant (** response .json ())
324336
325337 async def update (
326338 self , tenants : Union [TenantUpdateInputType , Sequence [TenantUpdateInputType ]]
0 commit comments