from typing import Dict, List, Literal, Optional, Union
from pydantic import BaseModel, Field
from constants import PrivateDatabaseType
[docs]
class DatasetOfUser(BaseModel):
"""BaseModel for informations of a user on a dataset"""
dataset_name: str
initial_epsilon: float
initial_delta: float
total_spent_epsilon: float
total_spent_delta: float
[docs]
class User(BaseModel):
"""BaseModel for a user in a user collection"""
user_name: str
may_query: bool
datasets_list: List[DatasetOfUser]
[docs]
class UserCollection(BaseModel):
"""BaseModel for users collection"""
users: List[User]
[docs]
class Dataset(BaseModel):
"""BaseModel for a dataset"""
dataset_name: str
metadata: Union[MetadataOfPathDB, MetadataOfS3DB] = Field(
..., discriminator="database_type"
)
[docs]
class DatasetOfPathDB(Dataset):
"""BaseModel for a local dataset"""
database_type: Literal[PrivateDatabaseType.PATH] # type: ignore
dataset_path: str
[docs]
class DatasetOfS3DB(Dataset):
"""BaseModel for a dataset on S3"""
database_type: Literal[PrivateDatabaseType.S3] # type: ignore
endpoint_url: str
bucket: str
key: str
credentials_name: str
[docs]
class DatasetsCollection(BaseModel):
"""BaseModel for datasets collection"""
datasets: List[Union[DatasetOfPathDB, DatasetOfS3DB]] = Field(
..., discriminator="database_type"
)