Handling geo errors and threading for compression
This commit is contained in:
parent
e14b3e7db3
commit
ddca4a4a3d
@ -2,6 +2,7 @@ import re
|
||||
import pickle
|
||||
from secrets import token_urlsafe
|
||||
from shutil import move
|
||||
from threading import Thread
|
||||
from typing import List, Union
|
||||
from magic import Magic
|
||||
from datetime import datetime, timedelta, timezone
|
||||
@ -16,6 +17,7 @@ from modules.database import col_photos, col_albums, col_tokens
|
||||
from pymongo import DESCENDING
|
||||
from bson.objectid import ObjectId
|
||||
from bson.errors import InvalidId
|
||||
from plum.exceptions import UnpackError
|
||||
|
||||
from fastapi import HTTPException, UploadFile, Security
|
||||
from fastapi.responses import UJSONResponse, Response
|
||||
@ -36,9 +38,15 @@ async def compress_image(image_path: str):
|
||||
# system(f"exiftool -overwrite_original -all:all= -tagsFromFile @ -exif:Orientation {image_path}")
|
||||
|
||||
if image_type == "image/jpeg":
|
||||
system(f"jpegoptim {image_path} -o --max=55 -p --strip-none")
|
||||
task = Thread(target=system, kwargs={"command": f'jpegoptim "{image_path}" -o --max=55 -p --strip-none'})
|
||||
elif image_type == "image/png":
|
||||
system(f"optipng -o3 {image_path}")
|
||||
task = Thread(target=system, kwargs={"command": f'optipng -o3 "{image_path}"'})
|
||||
else:
|
||||
return
|
||||
|
||||
task.start()
|
||||
logWrite(f"Compressing '{path.split(image_path)[-1]}'...")
|
||||
task.join()
|
||||
|
||||
size_after = path.getsize(image_path) / 1024
|
||||
logWrite(f"Compressed '{path.split(image_path)[-1]}' from {size_before} Kb to {size_after} Kb")
|
||||
@ -76,7 +84,15 @@ async def photo_upload(file: UploadFile, album: str, ignore_duplicates: bool = F
|
||||
status_code=HTTP_409_CONFLICT
|
||||
)
|
||||
|
||||
try:
|
||||
coords = extract_location(path.join("data", "users", current_user.user, "albums", album, filename))
|
||||
except (UnpackError, ValueError):
|
||||
coords = {
|
||||
"lng": 0.0,
|
||||
"lat": 0.0,
|
||||
"alt": 0.0
|
||||
}
|
||||
|
||||
uploaded = col_photos.insert_one(
|
||||
{
|
||||
"user": current_user.user,
|
||||
@ -109,7 +125,7 @@ async def photo_upload(file: UploadFile, album: str, ignore_duplicates: bool = F
|
||||
)
|
||||
|
||||
@app.get("/photos/{id}", description="Get a photo by id")
|
||||
async def photo_get(id: str, current_user: User = Security(get_current_active_user, scopes=["photos.view"])):
|
||||
async def photo_get(id: str, current_user: User = Security(get_current_active_user, scopes=["photos.read"])):
|
||||
|
||||
try:
|
||||
image = col_photos.find_one( {"_id": ObjectId(id)} )
|
||||
|
Loading…
Reference in New Issue
Block a user