Skip to content

Commit 2e117ca

Browse files
author
“Carmel
committed
Add study variables class
1 parent ef2c357 commit 2e117ca

2 files changed

Lines changed: 105 additions & 50 deletions

File tree

__pycache__/app.cpython-311.pyc

1.82 KB
Binary file not shown.

app.py

Lines changed: 105 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
from pathlib import Path
2+
from dataclasses import dataclass
3+
from typing import Optional
24

35
from flask import Flask, json, render_template, request, jsonify
46
import requests
@@ -19,12 +21,49 @@
1921
CONFIG_PATH = Path(__file__).resolve().with_name("study_configs.yaml")
2022
STUDIES = yaml.safe_load(CONFIG_PATH.read_text(encoding="utf-8"))
2123

22-
def get_study_settings(study_key: str):
23-
study = STUDIES.get(study_key)
24-
if not study:
25-
return None, None, None
2624

27-
return study, study.get("ldot_variables", {}), study.get("qualtrics_variables", {})
25+
@dataclass
26+
class StudySettings:
27+
study_id: str
28+
name: str
29+
ldot_study_id: Optional[str] = None
30+
id_deelnemer_entity: Optional[str] = None
31+
id_location: Optional[str] = None
32+
custom_var_qualtrics_link: Optional[str] = None
33+
eaid_qualtrics_survey_link_creation_to_do_date: Optional[str] = None
34+
eaid_qualtrics_survey_link_creation_completed: Optional[str] = None
35+
eaid_survey_invitation_completed: Optional[str] = None
36+
eaid_survey_progress_completed: Optional[str] = None
37+
survey_id: Optional[str] = None
38+
mailing_list_id: Optional[str] = None
39+
embedded_data_field: Optional[str] = None
40+
directory_id: Optional[str] = None
41+
distribution_id: Optional[str] = None
42+
43+
def get_study_settings(study_key: str):
44+
study_variables = STUDIES.get(study_key)
45+
if not study_variables:
46+
return None
47+
48+
ldot_vars = study_variables.get("ldot_variables", {})
49+
qualtrics_vars = study_variables.get("qualtrics_variables", {})
50+
return StudySettings(
51+
study_id=study_key,
52+
name=study_variables.get("name", study_key),
53+
ldot_study_id=ldot_vars.get("ldot_study_id"),
54+
id_deelnemer_entity=ldot_vars.get("id_deelnemer_entity"),
55+
id_location=ldot_vars.get("id_location"),
56+
custom_var_qualtrics_link=ldot_vars.get("custom_var_qualtrics_link"),
57+
eaid_qualtrics_survey_link_creation_to_do_date=ldot_vars.get("eaid_qualtrics_survey_link_creation_to_do_date"),
58+
eaid_qualtrics_survey_link_creation_completed=ldot_vars.get("eaid_qualtrics_survey_link_creation_completed"),
59+
eaid_survey_invitation_completed=ldot_vars.get("eaid_survey_invitation_completed"),
60+
eaid_survey_progress_completed=ldot_vars.get("eaid_survey_progress_completed"),
61+
survey_id=qualtrics_vars.get("survey_id"),
62+
mailing_list_id=qualtrics_vars.get("mailing_list_id"),
63+
embedded_data_field=qualtrics_vars.get("embedded_data_field"),
64+
directory_id=qualtrics_vars.get("directory_id"),
65+
distribution_id=qualtrics_vars.get("distribution_id"),
66+
)
2867

2968

3069
with open("new_ldot_workflows/ldot_config.json") as f:
@@ -53,16 +92,17 @@ def button1():
5392
data = request.json
5493
study_id = data.get("study_id")
5594

56-
study, ldot_vars, qualtrics_vars = get_study_settings(study_id)
57-
if not study:
95+
study_variables = get_study_settings(study_id)
96+
if not study_variables:
5897
return jsonify({"success": False, "message": f"Unknown study_id: {study_id}"}), 400
5998

60-
ldot_study_id = ldot_vars.get("ldot_study_id")
61-
link_creation_eaid = ldot_vars.get("eaid_qualtrics_survey_link_creation_to_do_date")
62-
link_completed_eaid = ldot_vars.get("eaid_qualtrics_survey_link_creation_completed")
63-
6499
try:
65-
new_subjects_ids = get_new_subjects(ldot_client, ldot_study_id, link_creation_eaid, link_completed_eaid)
100+
new_subjects_ids = get_new_subjects(
101+
ldot_client,
102+
study_variables.get("ldot_study_id"),
103+
study_variables.get("eaid_qualtrics_survey_link_creation_to_do_date"),
104+
study_variables.get("eaid_qualtrics_survey_link_creation_completed"),
105+
)
66106
except QualtricsAPIError as e:
67107
return jsonify({"success": False, "message": str(e)}), 502
68108
except requests.RequestException as e:
@@ -94,36 +134,45 @@ def button2():
94134
})
95135

96136
# Lookup study variables from STUDIES config
97-
study, ldot_vars, qualtrics_vars = get_study_settings(study_id)
137+
study_variables = get_study_settings(study_id)
98138

99-
ldot_study_id = ldot_vars.get("ldot_study_id")
100-
id_deelnemer_entity = ldot_vars.get("id_deelnemer_entity")
101-
id_location = ldot_vars.get("id_location")
102-
custom_var_qualtrics_link = ldot_vars.get("custom_var_qualtrics_link")
103-
link_completed_eaid = ldot_vars.get("eaid_qualtrics_survey_link_creation_completed")
104-
105-
qualtrics_survey_id = qualtrics_vars.get("survey_id")
106-
mailing_list_id = qualtrics_vars.get("mailing_list_id")
107-
embedded_data_field = qualtrics_vars.get("embedded_data_field")
108-
directory_id = qualtrics_vars.get("directory_id")
109-
distribution_id = qualtrics_vars.get("distribution_id")
139+
if not study_variables:
140+
return jsonify({"success": False, "message": f"Unknown study_id: {study_id}"}), 400
110141

111142
debug_inputs = {
112143
"study_id": study_id,
113-
"ldot_study_id": ldot_study_id,
114-
"id_deelnemer_entity": id_deelnemer_entity,
115-
"id_location": id_location,
144+
"ldot_study_id": study_variables.get("ldot_study_id"),
145+
"id_deelnemer_entity": study_variables.get("id_deelnemer_entity"),
146+
"id_location": study_variables.get("id_location"),
116147
"new_subject_ids": new_subject_ids,
117-
"qualtrics_survey_id": qualtrics_survey_id,
118-
"mailing_list_id": mailing_list_id,
119-
"embedded_data_field": embedded_data_field,
120-
"directory_id": directory_id,
121-
"distribution_id": distribution_id
148+
"qualtrics_survey_id": study_variables.get("qualtrics_survey_id"),
149+
"mailing_list_id": study_variables.get("mailing_list_id"),
150+
"embedded_data_field": study_variables.get("embedded_data_field"),
151+
"directory_id": study_variables.get("directory_id"),
152+
"distribution_id": study_variables.get("distribution_id"),
122153
}
123154

124155
try:
125-
subject_id_to_link_dict = add_individuals_to_survey(ldot_client, new_subject_ids, ldot_study_id, id_deelnemer_entity, embedded_data_field, distribution_id, qualtrics_survey_id, mailing_list_id, directory_id)
126-
send_links_to_ldot(ldot_client, ldot_study_id, id_deelnemer_entity, id_location, custom_var_qualtrics_link, link_completed_eaid, subject_id_to_link_dict)
156+
subject_id_to_link_dict = add_individuals_to_survey(
157+
ldot_client,
158+
new_subject_ids,
159+
study_variables.get("ldot_study_id"),
160+
study_variables.get("id_deelnemer_entity"),
161+
study_variables.get("embedded_data_field"),
162+
study_variables.get("distribution_id"),
163+
study_variables.get("qualtrics_survey_id"),
164+
study_variables.get("mailing_list_id"),
165+
study_variables.get("directory_id"),
166+
)
167+
send_links_to_ldot(
168+
ldot_client,
169+
study_variables.get("ldot_study_id"),
170+
study_variables.get("id_deelnemer_entity"),
171+
study_variables.get("id_location"),
172+
study_variables.get("custom_var_qualtrics_link"),
173+
study_variables.get("eaid_qualtrics_survey_link_creation_completed"),
174+
subject_id_to_link_dict,
175+
)
127176
except QualtricsAPIError as e:
128177
return jsonify({"success": False, "message": str(e), "debug_inputs": debug_inputs}), 502
129178
except Exception as e:
@@ -142,17 +191,18 @@ def button3():
142191
"""Third API call - returns list of subjectIDs"""
143192
data = request.json
144193
study_id = data.get("study_id")
145-
study, ldot_vars, qualtrics_vars = get_study_settings(study_id)
194+
study_variables = get_study_settings(study_id)
146195

147-
if not study:
196+
if not study_variables:
148197
return jsonify({"success": False, "message": f"Unknown study_id: {study_id}"}), 400
149-
150-
ldot_study_id = ldot_vars.get("ldot_study_id")
151-
eaid_survey_invitation_completed = ldot_vars.get("eaid_survey_invitation_completed")
152-
eaid_survey_progress_completed = ldot_vars.get("eaid_survey_progress_completed")
153198

154199
try:
155-
subjects_not_completed_survey = get_incomplete_subjects(ldot_client, ldot_study_id, eaid_survey_invitation_completed, eaid_survey_progress_completed)
200+
subjects_not_completed_survey = get_incomplete_subjects(
201+
ldot_client,
202+
study_variables.get("ldot_study_id"),
203+
study_variables.get("eaid_survey_invitation_completed"),
204+
study_variables.get("eaid_survey_progress_completed"),
205+
)
156206
message = f"Found {len(subjects_not_completed_survey)} subjects who have not completed the survey"
157207
return jsonify({"success": True, "message": message, "subject_ids": subjects_not_completed_survey})
158208
except QualtricsAPIError as e:
@@ -171,16 +221,21 @@ def button4():
171221
if not study_id:
172222
return jsonify({"success": False, "message": "Missing study_id in request"}), 400
173223

174-
study, ldot_vars, qualtrics_vars = get_study_settings(study_id)
224+
study_variables = get_study_settings(study_id)
175225

176-
ldot_study_id = ldot_vars.get("ldot_study_id")
177-
id_deelnemer_entity = ldot_vars.get("id_deelnemer_entity")
178-
id_location = ldot_vars.get("id_location")
179-
qualtrics_survey_id = qualtrics_vars.get("qualtrics_survey_id")
180-
embedded_data_field = qualtrics_vars.get("embedded_data_field")
226+
if not study_variables:
227+
return jsonify({"success": False, "message": f"Unknown study_id: {study_id}"}), 400
181228

182229
try:
183-
participant_to_progress_dict = get_individual_progress(ldot_client, ldot_study_id, id_deelnemer_entity, id_location, subject_ids, embedded_data_field, qualtrics_survey_id)
230+
participant_to_progress_dict = get_individual_progress(
231+
ldot_client,
232+
study_variables.get("ldot_study_id"),
233+
study_variables.get("id_deelnemer_entity"),
234+
study_variables.get("id_location"),
235+
subject_ids,
236+
study_variables.get("embedded_data_field"),
237+
study_variables.get("qualtrics_survey_id"),
238+
)
184239
except QualtricsAPIError as e:
185240
return jsonify({"success": False, "message": str(e)}), 502
186241
except Exception as e:
@@ -190,8 +245,8 @@ def button4():
190245
"success": True,
191246
"message": f"Retrieved progress for {len(participant_to_progress_dict)} subjects",
192247
"study_id": study_id,
193-
"qualtrics_survey_id": qualtrics_survey_id,
194-
"embedded_data_field": embedded_data_field,
248+
"qualtrics_survey_id": study_variables.get("qualtrics_survey_id"),
249+
"embedded_data_field": study_variables.get("embedded_data_field"),
195250
"progress_results": participant_to_progress_dict,
196251
})
197252

0 commit comments

Comments
 (0)