Skip to content

Commit 91b99b5

Browse files
author
herve.le-bars
committed
fix: fix load data to use bloom/tasks (loading positions missing)
1 parent 31d2231 commit 91b99b5

File tree

3 files changed

+88
-5
lines changed

3 files changed

+88
-5
lines changed

backend/alembic/init_script/load_positions_data.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
df = pd.read_csv(
1515
Path(settings.data_folder).joinpath("./spire_positions_subset.csv"),
16-
sep=","
16+
sep=";"
1717
)
1818

1919
df.to_sql("spire_vessel_positions", engine, if_exists="append", index=False)
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
from pathlib import Path
2+
from time import perf_counter
3+
4+
import pandas as pd
5+
from bloom.config import settings
6+
from bloom.container import UseCases
7+
from bloom.domain.spire_ais_data import SpireAisData
8+
from bloom.infra.database.errors import DBException
9+
from bloom.logger import logger
10+
from pydantic import ValidationError
11+
from shapely import wkb
12+
import numpy as np
13+
14+
15+
def map_to_domain(row: pd.Series) -> SpireAisData:
16+
isna = row.isna()
17+
18+
return SpireAisData(
19+
spire_update_statement=row['spire_update_statement'],
20+
vessel_ais_class=row['vessel_ais_class'],
21+
vessel_flag=row['vessel_flag'],
22+
vessel_name=row['vessel_name'],
23+
vessel_callsign=row['vessel_callsign'],
24+
vessel_timestamp=row['vessel_timestamp'],
25+
vessel_update_timestamp=row['vessel_update_timestamp'],
26+
vessel_ship_type=row['vessel_ship_type'],
27+
vessel_sub_ship_type=row['vessel_sub_ship_type'],
28+
vessel_mmsi=row['vessel_mmsi'],
29+
vessel_imo=row['vessel_imo'],
30+
vessel_width=row['vessel_width'],
31+
vessel_length=row['vessel_length'],
32+
position_accuracy=row['position_accuracy'],
33+
position_collection_type=row['position_collection_type'],
34+
position_course=row['position_course'],
35+
position_heading=row['position_heading'],
36+
position_latitude=row['position_latitude'],
37+
position_longitude=row['position_longitude'],
38+
position_maneuver=row['position_maneuver'],
39+
position_navigational_status=row['position_navigational_status'],
40+
position_rot=row['position_rot'],
41+
position_speed=row['position_speed'],
42+
position_timestamp=row['position_timestamp'],
43+
position_update_timestamp=row['position_update_timestamp'],
44+
voyage_destination=row['voyage_destination'],
45+
voyage_draught=row['voyage_draught'],
46+
voyage_eta=row['voyage_eta'],
47+
voyage_timestamp=row['voyage_timestamp'],
48+
voyage_update_timestamp=row['voyage_update_timestamp'],
49+
created_at=row['created_at'],
50+
)
51+
52+
53+
def run(csv_file_name: str):
54+
use_cases = UseCases()
55+
db = use_cases.db()
56+
spire_ais_data_repository = use_cases.spire_ais_data_repository()
57+
58+
total = 0
59+
try:
60+
df = pd.read_csv(csv_file_name, sep=";")
61+
df = df.rename(columns={})
62+
df=df.replace(np.NaN,None)
63+
spire_ais_data = df.apply(map_to_domain, axis=1)
64+
with db.session() as session:
65+
spire_ais_data = spire_ais_data_repository.batch_create_ais_data(session=session, ais_list=list(spire_ais_data))
66+
session.commit()
67+
total = len(spire_ais_data)
68+
#print(spire_ais_data)
69+
except ValidationError as e:
70+
logger.error("Erreur de validation des données de bateau")
71+
logger.error(e.errors())
72+
except DBException:
73+
logger.error("Erreur d'insertion en base")
74+
logger.info(f"{total} ais data créés")
75+
76+
77+
if __name__ == "__main__":
78+
time_start = perf_counter()
79+
file_name = Path(settings.data_folder).joinpath("./spire_positions_subset.csv")
80+
logger.info(f"DEBUT - Chargement des données AIS Spire depuis le fichier {file_name}")
81+
run(file_name)
82+
time_end = perf_counter()
83+
duration = time_end - time_start
84+
logger.info(f"FIN - Chargement des données AIS Spire en {duration:.2f}s")

docker-compose-load-data.yaml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,9 @@ services:
1616
command:
1717
- -c
1818
- "/venv/bin/python3 backend/bloom/tasks/load_dim_vessel_from_csv.py &&
19-
/venv/bin/python3 backend/alembic/init_script/load_positions_data.py &&
20-
/venv/bin/python3 backend/alembic/init_script/load_amp_data.py &&
19+
/venv/bin/python3 backend/bloom/tasks/load_dim_zone_amp_from_csv.py &&
2120
/venv/bin/python3 backend/bloom/tasks/load_dim_port_from_csv.py &&
22-
/venv/bin/python3 backend/bloom/tasks/compute_port_geometry_buffer.py"
21+
/venv/bin/python3 backend/bloom/tasks/load_spire_data_from_csv.py"
2322
volumes:
2423
- ./:/project/
2524
- ./data:/project/data
@@ -29,7 +28,7 @@ services:
2928
networks:
3029
- bloom_net
3130
depends_on:
32-
init:
31+
bloom-init:
3332
condition: service_completed_successfully
3433

3534
networks:

0 commit comments

Comments
 (0)