Spaces:
Sleeping
Sleeping
from functools import partial | |
from typing import Any, Callable, Dict, Optional, Sequence, cast | |
from chromadb.server.fastapi.utils import string_to_uuid | |
from chromadb.api import ServerAPI | |
from chromadb.auth import AuthzResourceTypes | |
def find_key_with_value_of_type( | |
type: AuthzResourceTypes, **kwargs: Any | |
) -> Dict[str, Any]: | |
from chromadb.server.fastapi.types import ( | |
CreateCollection, | |
CreateDatabase, | |
CreateTenant, | |
) | |
for key, value in kwargs.items(): | |
if type == AuthzResourceTypes.DB and isinstance(value, CreateDatabase): | |
return dict(value) | |
elif type == AuthzResourceTypes.COLLECTION and isinstance( | |
value, CreateCollection | |
): | |
return dict(value) | |
elif type == AuthzResourceTypes.TENANT and isinstance(value, CreateTenant): | |
return dict(value) | |
return {} | |
def attr_from_resource_object( | |
type: AuthzResourceTypes, | |
additional_attrs: Optional[Sequence[str]] = None, | |
**kwargs: Any, | |
) -> Callable[..., Dict[str, Any]]: | |
def _wrap(**wkwargs: Any) -> Dict[str, Any]: | |
obj = find_key_with_value_of_type(type, **wkwargs) | |
if additional_attrs: | |
obj.update({k: wkwargs["function_kwargs"][k] | |
for k in additional_attrs}) | |
return obj | |
return partial(_wrap, **kwargs) | |
def attr_from_collection_lookup( | |
collection_id_arg: str, **kwargs: Any | |
) -> Callable[..., Dict[str, Any]]: | |
def _wrap(**kwargs: Any) -> Dict[str, Any]: | |
_api = cast(ServerAPI, kwargs["api"]) | |
col = _api.get_collection( | |
id=string_to_uuid(kwargs["function_kwargs"][collection_id_arg])) | |
return {"tenant": col.tenant, "database": col.database} | |
return partial(_wrap, **kwargs) | |