Fix generovani titulni fotky pro og:image

This commit is contained in:
Michal Kváček
2024-09-03 16:24:22 +02:00
parent 365a1fc1b0
commit 186dbd0720
3 changed files with 38 additions and 7 deletions
+7 -7
View File
@@ -8,13 +8,13 @@ from external.elevation import elevation_api, update_track_points_elevation
@retryable @retryable
async def add_terrain_elevation_to_flight(flight_id: int): async def add_terrain_elevation_to_flight(flight_id: int):
async with get_session() as db: async with get_session() as db:
track_points = ( track_points = (await db.scalars(
await db.scalars( select(models.TrackPoint)
select(models.TrackPoint) .join(models.TrackPoint.track)
.join(models.TrackPoint.track) .join(models.Track.flight)
.join(models.Track.flight) .filter(models.Flight.id == flight_id)
.filter(models.Flight.id == flight_id)) .filter(models.TrackPoint.terrain_elevation.is_(None))
).all() )).all()
await update_track_points_elevation(db, track_points) await update_track_points_elevation(db, track_points)
+24
View File
@@ -1,4 +1,8 @@
from PIL import Image, ImageDraw, ImageOps 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): 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 # Save the result
base_image.save(output_image_path) 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',
)
@@ -4,6 +4,7 @@ from typing import Optional
from sqlalchemy import delete, insert from sqlalchemy import delete, insert
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from background_jobs.elevation import add_terrain_elevation_to_flight 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 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 background_jobs.weather import download_weather_for_flight
from database import models from database import models
@@ -179,6 +180,12 @@ class FlightMutationResolver(BaseMutationResolver):
def schedule_background_tasks(flight_id: int, flight_data: dict, context) -> None: 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) 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"): if flight_data.get("takeoff_airport_id"):
context.background_tasks.add_task( context.background_tasks.add_task(
download_weather_for_flight, flight_id=id, airport_id=flight_data['takeoff_airport_id'], download_weather_for_flight, flight_id=id, airport_id=flight_data['takeoff_airport_id'],