refac
This commit is contained in:
@@ -103,6 +103,11 @@ class FileMetadataResponse(BaseModel):
|
||||
updated_at: int # timestamp in epoch
|
||||
|
||||
|
||||
class FileListResponse(BaseModel):
|
||||
items: list[FileModelResponse]
|
||||
total: int
|
||||
|
||||
|
||||
class FileForm(BaseModel):
|
||||
id: str
|
||||
hash: Optional[str] = None
|
||||
@@ -118,10 +123,6 @@ class FileUpdateForm(BaseModel):
|
||||
meta: Optional[dict] = None
|
||||
|
||||
|
||||
class FileListResponse(BaseModel):
|
||||
items: list[FileModel]
|
||||
total: int
|
||||
|
||||
|
||||
class FilesTable:
|
||||
def insert_new_file(
|
||||
@@ -255,6 +256,30 @@ class FilesTable:
|
||||
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
|
||||
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.files import (
|
||||
FileForm,
|
||||
FileListResponse,
|
||||
FileModel,
|
||||
FileModelResponse,
|
||||
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(
|
||||
user=Depends(get_verified_user),
|
||||
page: int = Query(1, ge=1, description="Page number (1-indexed)"),
|
||||
content: bool = Query(True),
|
||||
db: Session = Depends(get_session),
|
||||
):
|
||||
if user.role == "admin" and BYPASS_ADMIN_ACCESS_CONTROL:
|
||||
files = Files.get_files(db=db)
|
||||
else:
|
||||
files = Files.get_files_by_user_id(user.id, db=db)
|
||||
skip = (page - 1) * PAGE_SIZE
|
||||
user_id = (
|
||||
None if (user.role == "admin" and BYPASS_ADMIN_ACCESS_CONTROL) else user.id
|
||||
)
|
||||
|
||||
result = Files.get_file_list(
|
||||
user_id=user_id, skip=skip, limit=PAGE_SIZE, db=db
|
||||
)
|
||||
|
||||
if not content:
|
||||
for file in files:
|
||||
if "content" in file.data:
|
||||
for file in result.items:
|
||||
if file.data and "content" in file.data:
|
||||
del file.data["content"]
|
||||
|
||||
return files
|
||||
return result
|
||||
|
||||
|
||||
############################
|
||||
|
||||
Reference in New Issue
Block a user