Skip to content

Commit 5136c41

Browse files
authored
Merge branch 'main' into biometrie_hack
2 parents 1db3b01 + 6cc2587 commit 5136c41

27 files changed

+1819
-160
lines changed

.github/workflows/documentation.yml

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ jobs:
88
steps:
99
- uses: actions/checkout@v3
1010
- uses: actions/setup-python@v3
11+
with:
12+
python-version: '3.10'
1113
- name: Install dependencies
1214
run: |
1315
pip install -r requirements.txt

andes_migrate/biodiversity.py

+194
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
2+
3+
from andes_migrate.andes_helper import AndesHelper
4+
from andes_migrate.projet_mollusque import ProjetMollusque
5+
from andes_migrate.table_peche_sentinelle import TablePecheSentinelle
6+
7+
8+
Catch_ID
9+
Date
10+
secteur
11+
fieldNumber #DarwinCore
12+
trait
13+
station
14+
verbatimIdentification #DarwinCore
15+
scientificName #DarwinCore
16+
lifeStage #DarwinCore
17+
identificationRemarks #DarwinCore
18+
taxonRemarks #DarwinCore
19+
organismRemarks #DarwinCore
20+
associatedTaxa #DarwinCore
21+
cote_abond
22+
Abond
23+
Poids_g
24+
Abond_ech
25+
Poids_ech
26+
multiplier
27+
Abon_tot
28+
Poids_tot_g
29+
notes
30+
31+
32+
33+
https://iml-science-1.ent.dfo-mpo.ca:8181/turbot/
34+
https://dmapps/fr/dfodots/collections/33/view/
35+
http://iml-science-1.ent.dfo-mpo.ca:8180/turbot/
36+
recordedBy
37+
class Biodiversity():
38+
39+
def __init__(self, andes_db: AndesHelper):
40+
41+
self.andes_db = andes_db
42+
43+
# call this form outside
44+
self._init_rows()
45+
46+
def populate_data(self):
47+
"""Populate data: run all getters"""
48+
# secteur trait no taille poids_vif poids_muscle poids_gonade poids_visceres sexe espece comment
49+
if self.collection_name == 'Conserver le spécimen (Biométrie Centre)':
50+
secteur = "Centre"
51+
if self.collection_name == 'Conserver le spécimen (Biométrie Ouest)':
52+
secteur = "Ouest"
53+
sexe_dict={'0':"I",
54+
'1':'M',
55+
'2':'F',
56+
}
57+
self.data["id_specimen"] = self._get_current_row_pk()
58+
self.data["secteur"] = secteur
59+
self.data["trait"] = self.get_ident_no_trait()
60+
self.data["no"] = int(self.get_observation("Code Collection coquille").strip().split("-")[-1])
61+
self.data["taille"] = self.get_observation("Longueur (non officiel)").replace(".",",")
62+
self.data["poids_vif"] = self.get_observation("Poids vif").replace(".",",")
63+
self.data["poids_muscle"] = self.get_observation("Poids du muscle").replace(".",",")
64+
self.data["poids_gonade"] = self.get_observation("Poids des gonades").replace(".",",")
65+
self.data["poids_visceres"] = self.get_observation("Poids des viscères").replace(".",",")
66+
self.data["poids_gonade"] = self.get_observation("Poids des gonades").replace(".",",")
67+
self.data["sexe"] = self.get_observation("Sexe")
68+
self.data["comment"] = self.get_comment()
69+
70+
def __next__(self):
71+
"""
72+
Increment to focus on next row
73+
"""
74+
# print(self.table_name)
75+
# print(f"{self._row_idx} of {len(self._row_list)}")
76+
# print()
77+
if self._row_idx is not None and self._row_list is not None:
78+
if self._row_idx < len(self._row_list):
79+
# increment first, it'l be adjusted in _get_current_row_pk()
80+
self._row_idx += 1
81+
self.populate_data()
82+
83+
# self.write_row()
84+
return self.data
85+
else:
86+
raise StopIteration
87+
else:
88+
self.logger.error("Row data not initialise, did you run _init_rows()?")
89+
raise ValueError
90+
91+
92+
def _init_rows(self):
93+
"""Initialisation method
94+
This queries the Andes DB and creates a list of row entries to be added to the current table
95+
96+
After running this methods initialises the following attribute:
97+
self._row_list
98+
self._row_idx (hopefully to self._row_idx=0)
99+
100+
self._row_list will be populated with the specimen ids belonging in the collection
101+
self._row_idx will start at 0
102+
103+
"""
104+
query = (
105+
"SELECT specimen_id "
106+
"FROM ecosystem_survey_observation "
107+
"LEFT JOIN ecosystem_survey_specimen "
108+
"ON ecosystem_survey_observation.specimen_id = ecosystem_survey_specimen.id "
109+
"LEFT JOIN ecosystem_survey_basket "
110+
"ON ecosystem_survey_specimen.basket_id = ecosystem_survey_basket.id "
111+
"LEFT JOIN ecosystem_survey_catch "
112+
"ON ecosystem_survey_basket.catch_id=ecosystem_survey_catch.id "
113+
"LEFT JOIN shared_models_set "
114+
"ON shared_models_set.id=ecosystem_survey_catch.set_id "
115+
"LEFT JOIN shared_models_observationtype "
116+
"ON shared_models_observationtype.id=observation_type_id "
117+
f"WHERE shared_models_set.cruise_id = {self.proj._get_current_row_pk()} "
118+
f"AND (shared_models_observationtype.nom ='{self.collection_name}' AND observation_value=1) "
119+
)
120+
result = self.andes_db.execute_query(query)
121+
self._assert_not_empty(result)
122+
self._row_list = [specimen[0] for specimen in result]
123+
self._row_idx = 0
124+
125+
# @validate_int()
126+
# @log_results
127+
def get_ident_no_trait(self) -> int:
128+
"""IDENT_NO_TRAIT INTEGER / NUMBER(5,0)
129+
Numéro séquentiel d'identification du trait
130+
131+
Andes
132+
-----
133+
shared_models.set.set_number
134+
"""
135+
specimen_pk = self._get_current_row_pk()
136+
query = (
137+
"SELECT shared_models_set.set_number "
138+
"FROM ecosystem_survey_specimen "
139+
"LEFT JOIN ecosystem_survey_basket "
140+
"ON ecosystem_survey_specimen.basket_id=ecosystem_survey_basket.id "
141+
"LEFT JOIN ecosystem_survey_catch "
142+
"ON ecosystem_survey_basket.catch_id=ecosystem_survey_catch.id "
143+
"LEFT JOIN shared_models_set "
144+
"ON shared_models_set.id=ecosystem_survey_catch.set_id "
145+
f"WHERE ecosystem_survey_specimen.id={specimen_pk} "
146+
)
147+
result = self.andes_db.execute_query(query)
148+
self._assert_one(result)
149+
to_return = result[0][0]
150+
return to_return
151+
152+
153+
def get_observation(self, name_fr):
154+
specimen_pk = self._get_current_row_pk()
155+
query = (
156+
"SELECT observation_value "
157+
"FROM ecosystem_survey_observation "
158+
"LEFT JOIN shared_models_observationtype "
159+
"ON ecosystem_survey_observation.observation_type_id=shared_models_observationtype.id "
160+
f"WHERE ecosystem_survey_observation.specimen_id={specimen_pk} "
161+
f"AND shared_models_observationtype.nom='{name_fr}' "
162+
)
163+
result = self.andes_db.execute_query(query)
164+
try:
165+
self._assert_one(result)
166+
to_return = result[0][0]
167+
except ValueError:
168+
print(specimen_pk, name_fr,result)
169+
to_return = None
170+
if to_return is None:
171+
to_return=""
172+
return to_return
173+
174+
def get_comment(self):
175+
specimen_pk = self._get_current_row_pk()
176+
query = (
177+
"SELECT ecosystem_survey_specimen.comment "
178+
"FROM ecosystem_survey_specimen "
179+
f"WHERE ecosystem_survey_specimen.id={specimen_pk} "
180+
)
181+
result = self.andes_db.execute_query(query)
182+
self._assert_one(result)
183+
to_return = result[0][0]
184+
if to_return is None:
185+
to_return=""
186+
to_return.replace("\n", " ")
187+
to_return.replace("\r", " ")
188+
return to_return
189+
190+
191+
192+
193+
194+

0 commit comments

Comments
 (0)