From 62e46f37ce2a70e82d813a258cce491932c98b42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Tue, 7 May 2024 08:24:29 +0200 Subject: [PATCH] Bugfixing --- ...d_flight_plan_meta_information_790ba00fc021.py | 2 -- docker-compose.prod.yml | 2 +- src/background_jobs/elevation.py | 2 +- src/external/gpx_parser.py | 15 +++++++++++---- src/scripts/elevation.py | 12 ++++++++---- 5 files changed, 21 insertions(+), 12 deletions(-) diff --git a/alembic/versions/20240429-164009_add_flight_plan_meta_information_790ba00fc021.py b/alembic/versions/20240429-164009_add_flight_plan_meta_information_790ba00fc021.py index cbf3017..fad0eff 100644 --- a/alembic/versions/20240429-164009_add_flight_plan_meta_information_790ba00fc021.py +++ b/alembic/versions/20240429-164009_add_flight_plan_meta_information_790ba00fc021.py @@ -37,13 +37,11 @@ def upgrade() -> None: type_=sa.String(length=256), existing_nullable=False) op.create_foreign_key(None, 'flight_plan', 'aircraft', ['aircraft_id'], ['id']) - op.drop_column('point_of_interest_type', 'openaip_id') # ### end Alembic commands ### def downgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### - op.add_column('point_of_interest_type', sa.Column('openaip_id', mysql.VARCHAR(length=32), nullable=False)) op.drop_constraint(None, 'flight_plan', type_='foreignkey') op.alter_column('flight_plan', 'name', existing_type=sa.String(length=256), diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index a50f184..0202de4 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -7,7 +7,7 @@ services: network_mode: "host" restart: "always" env_file: - - .env + - ../.env environment: SENTRY_DSN: "https://184d1d6bd39f4fbb94804ae84e9afdd5@o472821.ingest.sentry.io/5506983" volumes: diff --git a/src/background_jobs/elevation.py b/src/background_jobs/elevation.py index 0867cc4..b0af2a9 100644 --- a/src/background_jobs/elevation.py +++ b/src/background_jobs/elevation.py @@ -8,7 +8,7 @@ from paths import FLIGHT_GPX_TRACK_PATH async def add_terrain_elevation_to_flight(flight_id: int, gpx_filename: str): gpx_parser = GPXParser(f"{FLIGHT_GPX_TRACK_PATH}/{gpx_filename}") - coordinates = await gpx_parser.get_coordinates() + coordinates = await gpx_parser.get_coordinates_all() try: elevation = await elevation_api.get_elevation_for_points(coordinates) diff --git a/src/external/gpx_parser.py b/src/external/gpx_parser.py index 3d8305b..9c344b6 100644 --- a/src/external/gpx_parser.py +++ b/src/external/gpx_parser.py @@ -80,10 +80,12 @@ class GPXParser: @cached() async def get_coordinates(self) -> List[Dict[str, float]]: + return await self.average_coordinates(await self.get_coordinates_all()) + + @cached() + async def get_coordinates_all(self) -> List[Dict[str, float]]: nodes = self.run_xpath("//gpx:trkpt") - return await self.average_coordinates( - [{"lat": float(node.attrib["lat"]), "lng": float(node.attrib['lon'])} for node in nodes] - ) + return [{"lat": float(node.attrib["lat"]), "lng": float(node.attrib['lon'])} for node in nodes] @cached() async def get_speed(self) -> List[float]: @@ -141,7 +143,12 @@ class GPXParser: continue extensions = target_node.find("./extensions", self.gpx.getroot().nsmap) - extensions.append(etree.XML(f"{elevation}")) + if extensions is not None: + extensions.append(etree.XML(f"{elevation}")) + else: + target_node.append( + etree.XML(f"{elevation}") + ) return self.gpx diff --git a/src/scripts/elevation.py b/src/scripts/elevation.py index 075ecdf..f2c7992 100644 --- a/src/scripts/elevation.py +++ b/src/scripts/elevation.py @@ -1,7 +1,6 @@ import asyncio import sys from sqlalchemy import select - sys.path.insert(0, "/app/src") from paths import FLIGHT_GPX_TRACK_PATH # noqa from database import async_session, models # noqa @@ -46,13 +45,18 @@ async def add_elevation_to_tracks(): for flight in flights: gpx_file = f"{FLIGHT_GPX_TRACK_PATH}/{flight.gpx_track_filename}" - gpx = GPXParser(gpx_file) + try: + gpx = GPXParser(gpx_file) + except OSError: + print(f"ERROR, cannot open {gpx_file=}, skipping") + continue - coordinates = await gpx.get_coordinates() + coordinates = await gpx.get_coordinates_all() elevation = await elevation_api.get_elevation_for_points(coordinates) + gpx_with_elevation = gpx.add_terrain_elevation(elevation) - output_name = f"terrain_{flight.gpx_track_filename[30:]}" + output_name = f"terrain_{flight.gpx_track_filename[-30:]}" gpx.write(gpx_with_elevation, output=f"{FLIGHT_GPX_TRACK_PATH}/{output_name}") await models.Flight.update( db_session=session, obj=flight, data={