6from gams 
import GamsWorkspace
 
    8from gams.engine.api 
import jobs_api
 
   11if __name__ == 
"__main__":
 
   12    sys_dir = sys.argv[1] 
if len(sys.argv) > 1 
else None 
   13    work_dir = sys.argv[2] 
if len(sys.argv) > 2 
else None 
   14    ws = GamsWorkspace(system_directory=sys_dir, working_directory=work_dir)
 
   19    model_data_path = os.path.join(ws.working_directory, model + 
".zip")
 
   21    with zipfile.ZipFile(model_data_path, 
"w", zipfile.ZIP_DEFLATED) 
as model_data:
 
   23            os.path.join(ws.working_directory, model + 
".gms"), arcname=model + 
".gms" 
   26    stdout_filename = 
"log_stdout.txt"   
   37    configuration = gams.engine.Configuration(
 
   38        host=os.environ[
"ENGINE_URL"],
 
   39        username=os.environ[
"ENGINE_USER"],
 
   40        password=os.environ[
"ENGINE_PASSWORD"],
 
   41        discard_unknown_keys=
True,
 
   42        ssl_ca_cert=certifi.where(),
 
   44    configuration.temp_folder_path = ws.working_directory
 
   45    namespace = os.environ[
 
   50    with gams.engine.ApiClient(configuration) 
as api_client:
 
   52        job_api_instance = jobs_api.JobsApi(api_client)
 
   54            print(f
"Posting {model}")
 
   55            with open(model_data_path, 
"rb") 
as model_data:
 
   56                create_job_response = job_api_instance.create_job(
 
   59                    stdout_filename=stdout_filename,
 
   60                    model_data=model_data,
 
   64            token = create_job_response.token
 
   65            print(f
"Job token: {token}")
 
   67        except gams.engine.ApiException 
as e:
 
   68            print(f
"Exception when calling JobsApi.create_job(): {e}\n")
 
   74                resp = job_api_instance.pop_job_logs(token)
 
   75                print(resp.message, end=
"")
 
   76                if resp.queue_finished:
 
   79            except gams.engine.ApiException 
as e:
 
   81                    print(
"Job still in queue. Wait 0.5 seconds.")
 
   86                            "The Engine instance seems to be busy. Please try again later." 
   92        if job_api_instance.get_job(token).process_status != 0:
 
   93            print(
"Job did not terminate successfully.")
 
   96            print(f
"Fetching results of model: {model}")
 
   97            with zipfile.ZipFile(job_api_instance.get_job_zip(token)) 
as zf:
 
   98                gdx_file = zf.extract(model + 
".gdx", path=ws.working_directory)
 
   99        except gams.engine.ApiException 
as e:
 
  100            print(f
"Exception when calling JobsApi.get_job_zip(): {e}\n")
 
  105            job_api_instance.delete_job_zip(token)
 
  106        except gams.engine.ApiException 
as e:
 
  107            print(f
"Exception when calling JobsApi.delete_job_zip(): {e}\n")
 
  110        result_db = ws.add_database_from_gdx(
 
  111            os.path.join(ws.working_directory, gdx_file)
 
  114        for rec 
in result_db[
"x"]:
 
  116                f
"x({rec.key(0)},{rec.key(1)}): level={rec.level} marginal={rec.marginal}"