Bugfixing

This commit is contained in:
Michal Kváček
2024-10-03 22:41:24 +02:00
parent ca3f6ef07c
commit d31f1c0c61
2 changed files with 28 additions and 15 deletions
+2 -2
View File
@@ -59,7 +59,7 @@ class PhotoMutation:
@error_logging
@authenticated_user_only()
async def edit_photo(self, info, id: int, input: EditPhotoInput) -> Photo:
return await PhotoMutationResolver().update(id, input, info.context.user_id)
return await PhotoMutationResolver().update(info.context, id, input, info.context.user_id)
@strawberry.mutation()
@error_logging
@@ -87,4 +87,4 @@ class PhotoMutation:
if info.context.user_id is None and not copilot_upload_token:
raise_unauthorized()
return await PhotoMutationResolver().delete(user_id=info.context.user_id, id=id)
return await PhotoMutationResolver().delete(info.context, id=id)
+26 -13
View File
@@ -2,8 +2,13 @@ import os
import shutil
from time import time
from typing import Optional
import pymysql.err
import sqlalchemy
from PIL import Image
from graphql import GraphQLError
from pydantic import BaseModel
from pymysql.err import IntegrityError
from sqlalchemy import delete, insert, select
from background_jobs.elevation import add_terrain_elevation_to_photo
from background_jobs.photo import generate_thumbnail, resize_photo
@@ -61,7 +66,7 @@ class PhotoQueryResolver(BaseQueryResolver):
class PhotoDetailInfo(BaseModel):
filename: str
original_filename: str
original_filename: str | None
path: str
flight_id: int
@@ -78,7 +83,7 @@ class PhotoMutationResolver(BaseMutationResolver):
return original_filename
async def _get_photo_details(self, id: int, user_id: int, copilot_token: Optional[str]):
async def _get_photo_details(self, id: int, user_id: int, copilot_token: str | None, copy_original: bool = True):
async with get_session() as db:
if not copilot_token:
photo = await self._get_one(db, id, created_by_id=user_id)
@@ -89,11 +94,16 @@ class PhotoMutationResolver(BaseMutationResolver):
filename = photo.filename + "." + photo.filename_extension
path = get_photo_basepath(flight_id)
original_filename = None
if copy_original:
original_filename = self._copy_original(path, filename)
return PhotoDetailInfo(
flight_id=flight_id,
path=path,
filename=filename,
original_filename=self._copy_original(path, filename) # TODO: tohle nedelat v getteru!
original_filename=original_filename
)
@staticmethod
@@ -165,23 +175,23 @@ class PhotoMutationResolver(BaseMutationResolver):
return photo
async def update(self, id: int, input: EditPhotoInput, user_id: int) -> Photo:
data = input.to_dict()
async def update(self, context, id: int, data: EditPhotoInput, user_id: int) -> Photo:
data = data.to_dict()
async with get_session() as db:
photo = await self._get_one(db, id, created_by_id=user_id)
if input.point_of_interest:
if data.point_of_interest:
data['point_of_interest_id'] = await handle_combobox_save(
db,
models.PointOfInterest,
input.point_of_interest,
data.point_of_interest,
user_id,
extra_data={"description": ""}
)
if input.copilots is not None:
if data.copilots is not None:
await db.execute(delete(models.copilot_has_photo).filter_by(photo_id=id))
for copilot in input.copilots:
for copilot in data.copilots:
await db.execute(insert(models.copilot_has_photo).values(photo_id=id, copilot_id=copilot.id))
return await self._do_update(db, obj=photo, data=data)
@@ -261,12 +271,15 @@ class PhotoMutationResolver(BaseMutationResolver):
"cache_key": int(time())
})
async def delete(self, user_id: int, id: int, **kwargs) -> Photo:
async def delete(self, context, id: int, **kwargs) -> Photo:
copilot_upload_token = kwargs.get("copilot_upload_token")
await self._get_photo_details(id, user_id, copilot_upload_token)
# ^^ pokud neexistuje, vyhodi vyjimku
await self._get_photo_details(id, context.user_id, copilot_upload_token, copy_original=False)
try:
photo = await super().delete(context, id)
except (IntegrityError, sqlalchemy.exc.IntegrityError):
raise GraphQLError("Nelze smazat titulni fotku")
photo = await super().delete(user_id, id)
base_path = get_photo_basepath(photo.flight_id)
files_to_delete = [