From 186dbd0720cd54fc370d6299e70beb320d2116d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Tue, 3 Sep 2024 16:24:22 +0200 Subject: [PATCH] Fix generovani titulni fotky pro og:image --- src/background_jobs/elevation.py | 14 +++++------ src/background_jobs/flight_title_photo.py | 24 +++++++++++++++++++ .../entities/resolvers/flight.py | 7 ++++++ 3 files changed, 38 insertions(+), 7 deletions(-) diff --git a/src/background_jobs/elevation.py b/src/background_jobs/elevation.py index 463170b..303a237 100644 --- a/src/background_jobs/elevation.py +++ b/src/background_jobs/elevation.py @@ -8,13 +8,13 @@ from external.elevation import elevation_api, update_track_points_elevation @retryable async def add_terrain_elevation_to_flight(flight_id: int): async with get_session() as db: - track_points = ( - await db.scalars( - select(models.TrackPoint) - .join(models.TrackPoint.track) - .join(models.Track.flight) - .filter(models.Flight.id == flight_id)) - ).all() + track_points = (await db.scalars( + select(models.TrackPoint) + .join(models.TrackPoint.track) + .join(models.Track.flight) + .filter(models.Flight.id == flight_id) + .filter(models.TrackPoint.terrain_elevation.is_(None)) + )).all() await update_track_points_elevation(db, track_points) diff --git a/src/background_jobs/flight_title_photo.py b/src/background_jobs/flight_title_photo.py index 556a447..baa23c0 100644 --- a/src/background_jobs/flight_title_photo.py +++ b/src/background_jobs/flight_title_photo.py @@ -1,4 +1,8 @@ from PIL import Image, ImageDraw, ImageOps +from sqlalchemy import select + +from database import models +from database.transaction import get_session async def add_circular_avatar(base_image_path, avatar_image_path, output_image_path): @@ -56,3 +60,23 @@ async def add_circular_avatar(base_image_path, avatar_image_path, output_image_p # Save the result base_image.save(output_image_path) + + +async def generate_flight_title_photo(flight_id: int, photo_id: int): + async with get_session() as db: + photo = await models.Photo.get_one(db, id=photo_id) + pilot = (await db.scalars( + select(models.User) + .select_from(models.Flight) + .join(models.Flight.created_by) + .filter(models.Flight.id == flight_id) + )).one() + + photo_filename, photo_ext = photo.filename, photo.filename_extension + pilot_id, avatar_filename = pilot.id, pilot.avatar_image_filename + + await add_circular_avatar( + base_image_path=f'/app/uploads/photos/{flight_id}/{photo_filename}.{photo_ext}', + avatar_image_path=f'/app/uploads/profile/{pilot_id}/{avatar_filename}', + output_image_path=f'/app/uploads/photos/{flight_id}/title_photo.jpg', + ) diff --git a/src/graphql_schema/entities/resolvers/flight.py b/src/graphql_schema/entities/resolvers/flight.py index 9a4a4e1..d64a2a5 100644 --- a/src/graphql_schema/entities/resolvers/flight.py +++ b/src/graphql_schema/entities/resolvers/flight.py @@ -4,6 +4,7 @@ from typing import Optional from sqlalchemy import delete, insert from sqlalchemy.ext.asyncio import AsyncSession from background_jobs.elevation import add_terrain_elevation_to_flight +from background_jobs.flight_title_photo import add_circular_avatar, generate_flight_title_photo from utils.flight_track_helpers import handle_upload_gpx, save_track_from_gpx_to_db, extract_basic_flight_info_from_gpx from background_jobs.weather import download_weather_for_flight from database import models @@ -179,6 +180,12 @@ class FlightMutationResolver(BaseMutationResolver): def schedule_background_tasks(flight_id: int, flight_data: dict, context) -> None: context.background_tasks.add_task(add_terrain_elevation_to_flight, flight_id=flight_id) + + if flight_data.get("title_photo_id"): + context.background_tasks.add_task( + generate_flight_title_photo, flight_id=flight_id, photo_id=flight_data['title_photo_id'] + ) + if flight_data.get("takeoff_airport_id"): context.background_tasks.add_task( download_weather_for_flight, flight_id=id, airport_id=flight_data['takeoff_airport_id'],