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={