8 from gams_engine.api
import jobs_api
11 if __name__ ==
"__main__":
13 ws = GamsWorkspace(system_directory = sys.argv[1])
20 model_data_path = os.path.join(ws.working_directory, model +
'.zip')
22 with zipfile.ZipFile(model_data_path,
'w', zipfile.ZIP_DEFLATED)
as model_data:
23 model_data.write(os.path.join(ws.working_directory, model+
'.gms'), arcname=model+
'.gms')
25 stdout_filename =
'log_stdout.txt'
26 arguments = [
'gdx=default']
34 configuration = gams_engine.Configuration(
35 host = os.environ[
'ENGINE_URL'],
36 username = os.environ[
'ENGINE_USER'],
37 password = os.environ[
'ENGINE_PASSWORD'],
38 discard_unknown_keys =
True
40 configuration.temp_folder_path = ws.working_directory
41 namespace = os.environ[
'ENGINE_NAMESPACE']
44 with gams_engine.ApiClient(configuration)
as api_client:
46 job_api_instance = jobs_api.JobsApi(api_client)
48 print(
'Posting ' + model)
49 with open(model_data_path,
'rb')
as model_data:
50 create_job_response = job_api_instance.create_job(model, namespace,
51 stdout_filename=stdout_filename, model_data=model_data, arguments=arguments)
53 token = create_job_response.token
54 print(
'Job token: %s' % token)
56 except gams_engine.ApiException
as e:
57 print(
"Exception when calling JobsApi.create_job(): %s\n" % e)
64 resp = job_api_instance.pop_job_logs(token)
65 print(resp.message, end=
'')
66 if resp.queue_finished:
69 except gams_engine.ApiException
as e:
71 print(
'Job still in queue. Wait 0.5 seconds.')
75 print(
"The Engine instance seems to be busy. Please try again later.")
78 if job_api_instance.get_job(token).process_status != 0:
79 print(
"Job did not terminate successfully.")
82 print(
'Fetching results of model: ' + model)
83 with zipfile.ZipFile(job_api_instance.get_job_zip(token))
as zf:
84 gdxfile = zf.extract(model+
".gdx", path=ws.working_directory)
85 except gams_engine.ApiException
as e:
86 print(
"Exception when calling JobsApi.get_job_zip(): %s\n" % e)
91 job_api_instance.delete_job_zip(token)
92 except gams_engine.ApiException
as e:
93 print(
"Exception when calling JobsApi.delete_job_zip(): %s\n" % e)
96 result_db = ws.add_database_from_gdx(os.path.join(ws.working_directory, gdxfile))
98 for rec
in result_db[
"x"]:
99 print(
"x(" + rec.key(0) +
"," + rec.key(1) +
"): level=" + str(rec.level) +
" marginal=" + str(rec.marginal))