80 lines
3.1 KiB
Python
80 lines
3.1 KiB
Python
from typing import Dict, List, Optional
|
|
|
|
from fastapi import HTTPException
|
|
|
|
from bisheng.api.v1.schema.dataset_param import CreateDatasetParam
|
|
from bisheng.common.errcode.dataset import DatasetNameExistsError
|
|
from bisheng.common.services.base import BaseService
|
|
from bisheng.core.storage.minio.minio_manager import get_minio_storage_sync
|
|
from bisheng.database.models.dataset import Dataset, DatasetCreate, DatasetDao, DatasetRead
|
|
from bisheng.user.domain.models.user import UserDao
|
|
|
|
|
|
class DatasetService(BaseService):
|
|
|
|
@classmethod
|
|
def build_dataset_list(cls,
|
|
page: int,
|
|
limit: int,
|
|
keyword: Optional[str] = None) -> (List[Dict], int):
|
|
"""completelist DATA"""
|
|
|
|
dataset_list = DatasetDao.filter_dataset_by_ids(dataset_ids=[],
|
|
keyword=keyword,
|
|
page=page,
|
|
limit=limit)
|
|
count_filter = []
|
|
if keyword:
|
|
count_filter.append(Dataset.name.like('%{}%'.format(keyword)))
|
|
total_count = DatasetDao.get_count_by_filter(count_filter)
|
|
|
|
user_ids = [one.user_id for one in dataset_list]
|
|
user_list = UserDao.get_user_by_ids(user_ids)
|
|
user_dict = {one.user_id: one for one in user_list}
|
|
res = [DatasetRead.model_validate(one) for one in dataset_list]
|
|
for one in res:
|
|
one.user_name = user_dict[one.user_id].user_name
|
|
if one.object_name:
|
|
one.url = one.object_name
|
|
|
|
return res, total_count
|
|
|
|
@classmethod
|
|
def create_dataset(cls, user_id: int, data: CreateDatasetParam):
|
|
"""Create Dataset"""
|
|
dataset_insert = DatasetCreate.validate(data)
|
|
dataset_insert.user_id = user_id
|
|
isExist = DatasetDao.get_dataset_by_name(data.name)
|
|
if isExist:
|
|
raise DatasetNameExistsError()
|
|
dataset = DatasetDao.insert(dataset_insert)
|
|
# Conditioning Documentation
|
|
object_name = f'/dataset/{dataset.id}/{dataset.name}'
|
|
if data.file_url:
|
|
# MinioClient().upload_minio()
|
|
dataset.object_name = object_name
|
|
if data.qa_list:
|
|
for qa in data.qa_list:
|
|
qa.dataset_id = dataset.id
|
|
# QADao.insert(qa)
|
|
|
|
dataset = DatasetDao.update(dataset)
|
|
return dataset
|
|
|
|
@classmethod
|
|
def delete_dataset(cls, dataset_id: int):
|
|
dataset = DatasetDao.get_dataset_by_id(dataset_id)
|
|
if not dataset:
|
|
raise HTTPException(status_code=404, detail='Dataset not found')
|
|
# <g id="Bold">Medical Treatment:</g>minio
|
|
object_name = dataset.object_name
|
|
if object_name:
|
|
minio_client = get_minio_storage_sync()
|
|
minio_client.remove_object_sync(object_name=object_name)
|
|
DatasetDao.delete(dataset)
|
|
return True
|
|
|
|
@classmethod
|
|
async def get_one_by_object_name(cls, object_name: str) -> Optional[Dataset]:
|
|
dataset = await DatasetDao.aget_dataset_by_object_name(object_name)
|