backend: fix and fix
This commit is contained in:
parent
dcdfcec05f
commit
8b1ffb202e
@ -16,6 +16,7 @@ from materia.models.directory import (
|
|||||||
Directory,
|
Directory,
|
||||||
DirectoryLink,
|
DirectoryLink,
|
||||||
DirectoryInfo,
|
DirectoryInfo,
|
||||||
|
DirectoryContent,
|
||||||
DirectoryPath,
|
DirectoryPath,
|
||||||
DirectoryRename,
|
DirectoryRename,
|
||||||
DirectoryCopyMove,
|
DirectoryCopyMove,
|
||||||
|
@ -59,11 +59,11 @@ class Directory(Base):
|
|||||||
|
|
||||||
if self.directories:
|
if self.directories:
|
||||||
for directory in self.directories:
|
for directory in self.directories:
|
||||||
directory.remove(session, config)
|
await directory.remove(session, config)
|
||||||
|
|
||||||
if self.files:
|
if self.files:
|
||||||
for file in self.files:
|
for file in self.files:
|
||||||
file.remove(session, config)
|
await file.remove(session, config)
|
||||||
|
|
||||||
repository_path = await self.repository.real_path(session, config)
|
repository_path = await self.repository.real_path(session, config)
|
||||||
directory_path = await self.real_path(session, config)
|
directory_path = await self.real_path(session, config)
|
||||||
@ -284,6 +284,12 @@ class DirectoryInfo(BaseModel):
|
|||||||
used: Optional[int] = None
|
used: Optional[int] = None
|
||||||
|
|
||||||
|
|
||||||
|
class DirectoryContent(BaseModel):
|
||||||
|
model_config = ConfigDict(arbitrary_types_allowed=True)
|
||||||
|
files: list["FileInfo"]
|
||||||
|
directories: list["DirectoryInfo"]
|
||||||
|
|
||||||
|
|
||||||
class DirectoryPath(BaseModel):
|
class DirectoryPath(BaseModel):
|
||||||
path: Path
|
path: Path
|
||||||
|
|
||||||
@ -301,4 +307,4 @@ class DirectoryCopyMove(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
from materia.models.repository import Repository
|
from materia.models.repository import Repository
|
||||||
from materia.models.file import File
|
from materia.models.file import File, FileInfo
|
||||||
|
@ -216,10 +216,12 @@ class File(Base):
|
|||||||
await session.flush()
|
await session.flush()
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def info(self) -> Optional["FileInfo"]:
|
async def info(self, session: SessionContext) -> Optional["FileInfo"]:
|
||||||
# if self.is_public:
|
info = FileInfo.model_validate(self)
|
||||||
return FileInfo.model_validate(self)
|
relative_path = await self.relative_path(session)
|
||||||
# return None
|
info.path = Path("/").joinpath(relative_path) if relative_path else None
|
||||||
|
|
||||||
|
return info
|
||||||
|
|
||||||
|
|
||||||
def convert_bytes(size: int):
|
def convert_bytes(size: int):
|
||||||
@ -252,6 +254,8 @@ class FileInfo(BaseModel):
|
|||||||
is_public: bool
|
is_public: bool
|
||||||
size: int
|
size: int
|
||||||
|
|
||||||
|
path: Optional[Path] = None
|
||||||
|
|
||||||
|
|
||||||
class FilePath(BaseModel):
|
class FilePath(BaseModel):
|
||||||
path: Path
|
path: Path
|
||||||
|
@ -139,9 +139,6 @@ class User(Base):
|
|||||||
def info(self) -> "UserInfo":
|
def info(self) -> "UserInfo":
|
||||||
user_info = UserInfo.model_validate(self)
|
user_info = UserInfo.model_validate(self)
|
||||||
|
|
||||||
if user_info.is_email_private:
|
|
||||||
user_info.email = None
|
|
||||||
|
|
||||||
return user_info
|
return user_info
|
||||||
|
|
||||||
async def edit_avatar(
|
async def edit_avatar(
|
||||||
|
@ -4,6 +4,7 @@ from materia.models import (
|
|||||||
User,
|
User,
|
||||||
Directory,
|
Directory,
|
||||||
DirectoryInfo,
|
DirectoryInfo,
|
||||||
|
DirectoryContent,
|
||||||
DirectoryPath,
|
DirectoryPath,
|
||||||
DirectoryRename,
|
DirectoryRename,
|
||||||
DirectoryCopyMove,
|
DirectoryCopyMove,
|
||||||
@ -171,3 +172,27 @@ async def copy(
|
|||||||
|
|
||||||
await directory.copy(target_directory, session, ctx.config, force=data.force)
|
await directory.copy(target_directory, session, ctx.config, force=data.force)
|
||||||
await session.commit()
|
await session.commit()
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/directory/content", response_model=DirectoryContent)
|
||||||
|
async def content(
|
||||||
|
path: Path,
|
||||||
|
repository: Repository = Depends(middleware.repository),
|
||||||
|
ctx: middleware.Context = Depends(),
|
||||||
|
):
|
||||||
|
async with ctx.database.session() as session:
|
||||||
|
directory = await validate_current_directory(
|
||||||
|
path, repository, session, ctx.config
|
||||||
|
)
|
||||||
|
session.add(directory)
|
||||||
|
await session.refresh(directory, attribute_names=["directories"])
|
||||||
|
await session.refresh(directory, attribute_names=["files"])
|
||||||
|
|
||||||
|
content = DirectoryContent(
|
||||||
|
files=[await _file.info(session) for _file in directory.files],
|
||||||
|
directories=[
|
||||||
|
await _directory.info(session) for _directory in directory.directories
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
return content
|
||||||
|
@ -63,21 +63,11 @@ async def content(
|
|||||||
await session.refresh(repository, attribute_names=["directories"])
|
await session.refresh(repository, attribute_names=["directories"])
|
||||||
await session.refresh(repository, attribute_names=["files"])
|
await session.refresh(repository, attribute_names=["files"])
|
||||||
|
|
||||||
content = RepositoryContent(
|
content = RepositoryContent(
|
||||||
files=list(
|
files=[await _file.info(session) for _file in repository.files],
|
||||||
map(
|
directories=[
|
||||||
lambda file: FileInfo.model_validate(file),
|
await _directory.info(session) for _directory in repository.directories
|
||||||
filter(lambda file: file.path is None, repository.files),
|
],
|
||||||
)
|
)
|
||||||
),
|
|
||||||
directories=list(
|
|
||||||
map(
|
|
||||||
lambda directory: DirectoryInfo.model_validate(directory),
|
|
||||||
filter(
|
|
||||||
lambda directory: directory.path is None, repository.directories
|
|
||||||
),
|
|
||||||
)
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
return content
|
return content
|
||||||
|
Loading…
Reference in New Issue
Block a user