Skip to content
Snippets Groups Projects
Commit 72700440 authored by Sabine Schröder's avatar Sabine Schröder
Browse files

EURAD-IM scenario jobs can be submitted from the GUI

parent 7bca8af2
Branches
No related tags found
No related merge requests found
......@@ -27,6 +27,7 @@ from mlair.time_series import plot as plot_ml_time_series
import pages.dashboard_translations as guitr
import pages.dashboard_constants as guiconst
# the following should be done with static files!
APP_HOME = Path.cwd()
IMAGE_PATH = APP_HOME.joinpath("static", "images")
......@@ -475,19 +476,28 @@ def generate_eurad_scen_body(language_id):
return [
dbc.Row([
dbc.Col(dbc.Label(f"{guitr.date_label[language_id]}"), width=3),
dbc.Col(dcc.DatePickerSingle(date=dt.date.today(),
dbc.Col(dcc.DatePickerSingle(id="eurad_scen_start_date",
date=dt.date(2018, 7, 22),
display_format=guitr.date_format[language_id],
first_day_of_week=guitr.first_day_of_week[language_id])),
first_day_of_week=guitr.first_day_of_week[language_id],
min_date_allowed=dt.date(2018, 7, 22),
max_date_allowed=dt.date(2018, 7, 31),
initial_visible_month=dt.date(2018, 7, 1))),
dbc.Col(dbc.Label(f"{guitr.forecast_length_label[language_id]}:")),
dbc.Col(dcc.Dropdown(value=guitr.forecast_length_options[language_id][0], options=guitr.forecast_length_options[language_id]))
dbc.Col(dcc.Dropdown(value=guitr.forecast_length_options[language_id][0], options=guitr.forecast_length_options[language_id],
id="eurad_scen_forecast_length"))
], class_name="row mt-3"),
dbc.Row([
dbc.Col(dbc.Label(f"{guitr.region_label[language_id]}"), width=3),
dbc.Col(dcc.RadioItems(['NRW', 'Berlin-Brandenburg'], 'NRW')),
dbc.Col(dcc.RadioItems(options={
0: 'Nordrhein-Westfalen',
1: 'Berlin-Brandenburg'},
value=0, id="eurad_scen_region_choice")),
], class_name="row mt-3"),
dbc.Row([
dbc.Col(dbc.Label(f"{guitr.emis_scen_label[language_id]}"), width=3),
dbc.Col(dcc.Dropdown(value=emis_info[language_id][" Name"][0], options=emis_info[language_id][" Name"])),
dbc.Col(dcc.Dropdown(options=[{'label': emis_info[language_id][" Name"][i], 'value': i} for i in range(len(emis_info[language_id][" Name"]))],
value=0, id="eurad_scen_emi")),
dbc.Col(dbc.Button(f"{guitr.help_emissions_label[language_id]}", id="help_emis_open", class_name="fzj_style_btn"), width=3),
dbc.Modal([
dbc.ModalHeader(f"{guitr.help_emissions_label[language_id]}"),
......@@ -1038,6 +1048,61 @@ def ml_fcast_job_run(run_button, region, startdate, forecast_length, species, me
generate_eurad_scen_output_modal(container_id="eurad_scen_output_modal_container", language_id=language_id)]
@callback(
[Output("eurad_scen_modal", "is_open", allow_duplicate=True),
Output("my_jobs_tab", "children", allow_duplicate=True)],
Input("eurad_scen_run", "n_clicks"),
[State("eurad_scen_region_choice", "value"),
State('eurad_scen_start_date', 'date'),
State('eurad_scen_forecast_length', 'value'),
State('eurad_scen_emi', 'value'),
State("user-info", "data")],
prevent_initial_call=True
)
def eurad_scen_job_run(run_button, region, startdate, forecast_length, emi_scen, user_dict):
# add job to user's job list
user_id = json.loads(user_dict)["user_id"]
language_id = json.loads(user_dict)["language_id"]
new_job_dict = {}
jobnr = get_random_string(12)
new_job_dict['id'] = jobnr
# application is EURAD-IM -- should be taken from the controlled vocabulary!
new_job_dict['application'] = 0
new_job_dict['region'] = region
new_job_dict['start_date'] = startdate + ' 00:00'
new_job_dict['forecast_length'] = int(forecast_length.split()[0])
new_job_dict['emis_scen'] = emi_scen
# take the coding for the status from the controlled vocabulary!
# set it to "waiting" since it will just be submitted
new_job_dict['status'] = 2
# EURAD-IM does not have any species to be chosen
new_job_dict['species'] = None
# EURAD-IM does not have any metrics to be chosen
new_job_dict['metric'] = None
# submit job
base_url = f"{UNICORE_BASE}JURECA/rest/core"
credentials = uc_credentials.UsernamePassword(UNICORE_USER, UNICORE_PASSWORD)
client = uc_client.Client(credentials, base_url)
job_description = {'Executable': "/p/project/cjicg21/schroeder5/Destine_AQ/start_destine_demonstrator.sh", "Job type": "ON_LOGIN_NODE", 'Arguments':[jobnr, emi_scen], }
job = client.new_job(job_description)
# let's wait while the job is still running
# otherwise, the job status will not be able to be determined
job.poll()
# now create job in db (otherwise the status cannot be determined!)
create_db_job_entry(user_id, new_job_dict)
# return updated values
retval = ctx.triggered_id == "eurad_scen_open"
return retval,\
[generate_jobs_table(user_id=user_id, language_id=language_id),
generate_eurad_im_output_modal(language_id=language_id),
generate_ml_fcast_output_modal(language_id=language_id),
generate_eurad_scen_output_modal(container_id="eurad_scen_output_modal_container", language_id=language_id)]
@callback(
Output("eurad_im_download_result", "data"),
Input("eurad_im_output_download", "n_clicks"),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment