Fix generovani titulni fotky pro og:image
This commit is contained in:
@@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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'],
|
||||||
|
|||||||
Reference in New Issue
Block a user