refac
This commit is contained in:
@@ -103,6 +103,11 @@ class FileMetadataResponse(BaseModel):
|
|||||||
updated_at: int # timestamp in epoch
|
updated_at: int # timestamp in epoch
|
||||||
|
|
||||||
|
|
||||||
|
class FileListResponse(BaseModel):
|
||||||
|
items: list[FileModelResponse]
|
||||||
|
total: int
|
||||||
|
|
||||||
|
|
||||||
class FileForm(BaseModel):
|
class FileForm(BaseModel):
|
||||||
id: str
|
id: str
|
||||||
hash: Optional[str] = None
|
hash: Optional[str] = None
|
||||||
@@ -118,10 +123,6 @@ class FileUpdateForm(BaseModel):
|
|||||||
meta: Optional[dict] = None
|
meta: Optional[dict] = None
|
||||||
|
|
||||||
|
|
||||||
class FileListResponse(BaseModel):
|
|
||||||
items: list[FileModel]
|
|
||||||
total: int
|
|
||||||
|
|
||||||
|
|
||||||
class FilesTable:
|
class FilesTable:
|
||||||
def insert_new_file(
|
def insert_new_file(
|
||||||
@@ -255,6 +256,30 @@ class FilesTable:
|
|||||||
for file in db.query(File).filter_by(user_id=user_id).all()
|
for file in db.query(File).filter_by(user_id=user_id).all()
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def get_file_list(
|
||||||
|
self,
|
||||||
|
user_id: Optional[str] = None,
|
||||||
|
skip: int = 0,
|
||||||
|
limit: int = 50,
|
||||||
|
db: Optional[Session] = None,
|
||||||
|
) -> "FileListResponse":
|
||||||
|
with get_db_context(db) as db:
|
||||||
|
query = db.query(File)
|
||||||
|
if user_id:
|
||||||
|
query = query.filter_by(user_id=user_id)
|
||||||
|
|
||||||
|
total = query.count()
|
||||||
|
|
||||||
|
items = [
|
||||||
|
FileModel.model_validate(file)
|
||||||
|
for file in query.order_by(File.updated_at.desc(), File.id.desc())
|
||||||
|
.offset(skip)
|
||||||
|
.limit(limit)
|
||||||
|
.all()
|
||||||
|
]
|
||||||
|
|
||||||
|
return FileListResponse(items=items, total=total)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _glob_to_like_pattern(glob: str) -> str:
|
def _glob_to_like_pattern(glob: str) -> str:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ from open_webui.models.channels import Channels
|
|||||||
from open_webui.models.users import Users
|
from open_webui.models.users import Users
|
||||||
from open_webui.models.files import (
|
from open_webui.models.files import (
|
||||||
FileForm,
|
FileForm,
|
||||||
|
FileListResponse,
|
||||||
FileModel,
|
FileModel,
|
||||||
FileModelResponse,
|
FileModelResponse,
|
||||||
Files,
|
Files,
|
||||||
@@ -326,23 +327,31 @@ def upload_file_handler(
|
|||||||
############################
|
############################
|
||||||
|
|
||||||
|
|
||||||
@router.get("/", response_model=list[FileModelResponse])
|
PAGE_SIZE = 50
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/", response_model=FileListResponse)
|
||||||
async def list_files(
|
async def list_files(
|
||||||
user=Depends(get_verified_user),
|
user=Depends(get_verified_user),
|
||||||
|
page: int = Query(1, ge=1, description="Page number (1-indexed)"),
|
||||||
content: bool = Query(True),
|
content: bool = Query(True),
|
||||||
db: Session = Depends(get_session),
|
db: Session = Depends(get_session),
|
||||||
):
|
):
|
||||||
if user.role == "admin" and BYPASS_ADMIN_ACCESS_CONTROL:
|
skip = (page - 1) * PAGE_SIZE
|
||||||
files = Files.get_files(db=db)
|
user_id = (
|
||||||
else:
|
None if (user.role == "admin" and BYPASS_ADMIN_ACCESS_CONTROL) else user.id
|
||||||
files = Files.get_files_by_user_id(user.id, db=db)
|
)
|
||||||
|
|
||||||
|
result = Files.get_file_list(
|
||||||
|
user_id=user_id, skip=skip, limit=PAGE_SIZE, db=db
|
||||||
|
)
|
||||||
|
|
||||||
if not content:
|
if not content:
|
||||||
for file in files:
|
for file in result.items:
|
||||||
if "content" in file.data:
|
if file.data and "content" in file.data:
|
||||||
del file.data["content"]
|
del file.data["content"]
|
||||||
|
|
||||||
return files
|
return result
|
||||||
|
|
||||||
|
|
||||||
############################
|
############################
|
||||||
|
|||||||
Reference in New Issue
Block a user