This commit is contained in:
Timothy Jaeryang Baek
2026-03-15 17:35:06 -05:00
parent b73010bb36
commit f9756de693
2 changed files with 46 additions and 12 deletions
+29 -4
View File
@@ -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:
"""
+17 -8
View File
@@ -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
############################