diff --git a/app/Controllers/admin.py b/app/Controllers/admin.py index 09331dc..9a623d2 100644 --- a/app/Controllers/admin.py +++ b/app/Controllers/admin.py @@ -1,4 +1,3 @@ -from pathlib import Path from typing import Annotated from uuid import UUID @@ -11,6 +10,7 @@ from app.Services.authentication import force_admin_token_verify from app.Services.vector_db_context import PointNotFoundError from app.config import config +from app.util import directories admin_router = APIRouter(dependencies=[Depends(force_admin_token_verify)], tags=["Admin"]) @@ -28,23 +28,20 @@ async def delete_image( db_context.deleteItems([str(point.id)]) logger.success("Image {} deleted from database.", point.id) - if point.url.startswith('/'): # local image - static_folder = Path(config.static_file.path) - image_files = list(static_folder.glob(f"{point.id}.*")) + if point.url.startswith('/') and config.static_file.enable: # local image + image_files = list(directories.static_dir.glob(f"{point.id}.*")) assert len(image_files) <= 1 if len(image_files) == 0: logger.warning("Image {} is a local image but not found in static folder.", point.id) else: - deleted_folder = static_folder / "_deleted" - deleted_folder.mkdir(parents=True, exist_ok=True) + directories.deleted_dir.mkdir(parents=True, exist_ok=True) - image_files[0].rename(deleted_folder / image_files[0].name) + image_files[0].rename(directories.deleted_dir / image_files[0].name) logger.success("Local image {} removed.", image_files[0].name) if point.thumbnail_url is not None: - thumbnail_dir = static_folder / "thumbnails" - thumbnail_file = thumbnail_dir / f"{point.id}.webp" + thumbnail_file = directories.thumbnails_dir / f"{point.id}.webp" if thumbnail_file.is_file(): thumbnail_file.unlink() logger.success("Thumbnail {} removed.", thumbnail_file.name) diff --git a/app/util/directories.py b/app/util/directories.py new file mode 100644 index 0000000..3422379 --- /dev/null +++ b/app/util/directories.py @@ -0,0 +1,30 @@ +from pathlib import Path + +from loguru import logger + +from app.config import config, environment + +static_dir = None +thumbnails_dir = None +deleted_dir = None + + +def init(): + global static_dir, thumbnails_dir, deleted_dir + static_dir = Path(config.static_file.path) + thumbnails_dir = static_dir / "thumbnails" + deleted_dir = static_dir / "_deleted" + + if not static_dir.is_dir(): + static_dir.mkdir(parents=True) + logger.warning(f"static_dir {static_dir} not found, created.") + if not thumbnails_dir.is_dir(): + thumbnails_dir.mkdir(parents=True) + logger.warning(f"thumbnails_dir {thumbnails_dir} not found, created.") + if not deleted_dir.is_dir(): + deleted_dir.mkdir(parents=True) + logger.warning(f"deleted_dir {deleted_dir} not found, created.") + + +if config.static_file.enable or environment.local_indexing: + init() diff --git a/app/webapp.py b/app/webapp.py index 46eb5f3..63e1cff 100644 --- a/app/webapp.py +++ b/app/webapp.py @@ -12,6 +12,7 @@ from app.config import config from .Models.api_response.base import WelcomeApiResponse, WelcomeApiAuthenticationResponse, \ WelcomeApiAdminPortalAuthenticationResponse +from .util import directories from .util.fastapi_log_handler import init_logging app = FastAPI() @@ -30,7 +31,7 @@ app.include_router(admin_router, prefix="/admin") if config.static_file.enable: - app.mount("/static", StaticFiles(directory=config.static_file.path), name="static") + app.mount("/static", StaticFiles(directory=directories.static_dir), name="static") @app.get("/", description="Default portal. Test for server availability.")