chroma / chromadb /auth /fastapi_utils.py
badalsahani's picture
feat: chroma initial deploy
287a0bc
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)