def run_example(): config = dict(email=email, pwd=pwd, name=name) # client = CornFlow(url="http://127.0.0.1:5000") client = CornFlow(url="http://34.78.205.34:5000/") client.sign_up(**config) client.login(email, pwd) prob = build_pulp_problem() # The problem data is written to an .lp file data = prob.to_dict() instance_id = client.create_instance(data) config = dict( solver="PULP_CBC_CMD", mip=True, msg=True, warmStart=True, timeLimit=10, options=["donotexist", "thisdoesnotexist"], keepFiles=0, gapRel=0.1, gapAbs=1, threads=1, logPath="test_export_solver_json.log", ) execution_id = client.create_execution(instance_id, config) status = client.get_status(execution_id) results = client.get_solution(execution_id) _vars, prob = pulp.LpProblem.from_dict(results["data"]) actual_vars = group_variables_by_name(_vars, ["Route", "BuildaPlant"], replace_underscores_with_spaces=True) actual_vars.keys() actual_vars["BuildaPlant"] actual_vars["Route"][("San Francisco", "Barstow")] # The status of the solution is printed to the screen print("Status:", pulp.LpStatus[prob.status]) # Each of the variables is printed with it's resolved optimum value for v in prob.variables(): print(v.name, "=", v.varValue) # The optimised objective function value is printed to the screen print("Total Cost of Transportation = ", pulp.value(prob.objective)) # get the values for the variables: {k: v.value() for k, v in _vars.items()} # get the log in text format results["log_text"] # get the log in json format results["log_json"]
def run_example(): server = "http://127.0.0.1:5000" client = CornFlow(url=server) config = dict(email=email, pwd=pwd, name=name) a = client.sign_up(**config) a = client.login(email, pwd) import pulp prob = pulp.LpProblem("test_export_dict_MIP", pulp.LpMinimize) x = pulp.LpVariable("x", 0, 4) y = pulp.LpVariable("y", -1, 1) z = pulp.LpVariable("z", 0, None, pulp.LpInteger) prob += x + 4 * y + 9 * z, "obj" prob += x + y <= 5, "c1" prob += x + z >= 10, "c2" prob += -y + z == 7.5, "c3" data = prob.toDict() filename = "test_mps.mps" insName = "test_export_dict_MIP" description = "very small example" instance = client.create_instance(data, name=insName, description=description) # alternatively: send file prob.writeMPS(filename=filename) instance = client.create_instance_file(filename=filename, name=insName, description=description) # edit the instance to give it a new name client.put_api_for_id("instance/", instance["id"], dict(name="newName")) # get info from an instance info = client.get_one_instance(instance["id"]) # get all instances info_all = client.get_all_instances() # send an execution config = dict(solver="PULP_CBC_CMD", timeLimit=10) execution = client.create_execution( instance["id"], config, name="execution1", description="execution of a very small instance", ) # check the status of the execution status = client.get_status(execution["id"]) print(status["state"]) # get the execution solution results = client.get_solution(execution["id"]) _vars, prob = pulp.LpProblem.from_dict(results["data"]) # get the values for the variables: print({k: v.value() for k, v in _vars.items()}) # get the log in json format log = client.get_log(execution["id"]) print(log["log"])
class TestCornflowClientUser(TestCase): def setUp(self): self.client = CornFlow(url="http://127.0.0.1:5050/") login_result = self.client.login("user", "UserPassword1!") self.assertIn("id", login_result.keys()) self.assertIn("token", login_result.keys()) self.user_id = login_result["id"] def tearDown(self): pass def test_health_endpoint(self): response = self.client.is_alive() self.assertEqual(response["cornflow_status"], "healthy") self.assertEqual(response["airflow_status"], "healthy") def test_sign_up(self): response = self.client.sign_up("test_username", "*****@*****.**", "TestPassword2!") self.assertIn("id", response.json().keys()) self.assertIn("token", response.json().keys()) self.assertEqual(201, response.status_code) def test_create_instance(self): data = _load_file(PULP_EXAMPLE) response = self.client.create_instance(data, "test_example", "test_description") items = [ "id", "name", "description", "created_at", "user_id", "data_hash", "schema", "executions", ] for item in items: self.assertIn(item, response.keys()) self.assertEqual("test_example", response["name"]) self.assertEqual("solve_model_dag", response["schema"]) self.assertEqual("test_description", response["description"]) return response def test_create_case(self): data = _load_file(PULP_EXAMPLE) response = self.client.create_case( name="test_case", schema="solve_model_dag", data=data, description="test_description", ) items = [ "id", "name", "description", "created_at", "user_id", "data_hash", "schema", "solution_hash", "path", "updated_at", "is_dir", ] for item in items: self.assertIn(item, response.keys()) self.assertEqual("test_case", response["name"]) self.assertEqual("solve_model_dag", response["schema"]) self.assertEqual("test_description", response["description"]) return response def test_create_instance_file(self): response = self.client.create_instance_file( _get_file("../data/test_mps.mps"), name="test_filename", description="filename_description", ) items = [ "id", "name", "description", "created_at", "user_id", "data_hash", "schema", "executions", ] for item in items: self.assertIn(item, response.keys()) self.assertEqual("test_filename", response["name"]) self.assertEqual("solve_model_dag", response["schema"]) self.assertEqual("filename_description", response["description"]) def test_create_execution(self): instance = self.test_create_instance() response = self.client.create_execution( instance_id=instance["id"], config={ "solver": "PULP_CBC_CMD", "timeLimit": 60 }, name="test_execution", description="execution_description", schema="solve_model_dag", ) items = [ "id", "name", "description", "created_at", "user_id", "data_hash", "schema", "config", "instance_id", "state", "message", ] for item in items: self.assertIn(item, response.keys()) self.assertEqual(instance["id"], response["instance_id"]) self.assertEqual("test_execution", response["name"]) self.assertEqual("execution_description", response["description"]) self.assertEqual({ "solver": "PULP_CBC_CMD", "timeLimit": 60 }, response["config"]) self.assertEqual(STATUS_NOT_SOLVED, response["state"]) return response def test_execution_results(self): execution = self.test_create_execution() time.sleep(10) response = self.client.get_results(execution["id"]) items = [ "id", "name", "description", "created_at", "user_id", "data_hash", "schema", "config", "instance_id", "state", "message", ] for item in items: self.assertIn(item, response.keys()) self.assertEqual(execution["id"], response["id"]) self.assertEqual(STATUS_OPTIMAL, response["state"]) def test_execution_status(self): execution = self.test_create_execution() response = self.client.get_status(execution["id"]) items = ["id", "state", "message", "data_hash"] for item in items: self.assertIn(item, response.keys()) self.assertEqual(STATUS_NOT_SOLVED, response["state"]) time.sleep(10) response = self.client.get_status(execution["id"]) for item in items: self.assertIn(item, response.keys()) self.assertEqual(STATUS_OPTIMAL, response["state"]) def test_stop_execution(self): execution = self.test_create_execution() response = self.client.stop_execution(execution["id"]) self.assertEqual(response["message"], "The execution has been stopped") def test_get_execution_log(self): execution = self.test_create_execution() response = self.client.get_log(execution["id"]) items = [ "id", "name", "description", "created_at", "user_id", "data_hash", "schema", "config", "instance_id", "state", "message", "log", ] for item in items: self.assertIn(item, response.keys()) self.assertEqual(execution["id"], response["id"]) def test_get_execution_solution(self): execution = self.test_create_execution() time.sleep(10) response = self.client.get_solution(execution["id"]) items = [ "id", "name", "description", "created_at", "user_id", "data_hash", "schema", "config", "instance_id", "state", "message", "data", "checks", ] for item in items: self.assertIn(item, response.keys()) self.assertEqual(execution["id"], response["id"]) self.assertEqual(STATUS_OPTIMAL, response["state"]) return response def test_create_case_execution(self): execution = self.test_get_execution_solution() response = self.client.create_case( name="case_from_solution", schema="solve_model_dag", description="case_from_solution_description", solution=execution["data"], ) items = [ "id", "name", "description", "created_at", "user_id", "data_hash", "schema", "solution_hash", "path", "updated_at", "is_dir", ] for item in items: self.assertIn(item, response.keys()) self.assertEqual("case_from_solution", response["name"]) self.assertEqual("solve_model_dag", response["schema"]) self.assertEqual("case_from_solution_description", response["description"]) return response def test_get_all_instances(self): self.test_create_instance() self.test_create_instance() instances = self.client.get_all_instances() self.assertGreaterEqual(len(instances), 2) def test_get_all_executions(self): self.test_stop_execution() self.test_stop_execution() executions = self.client.get_all_executions() self.assertGreaterEqual(len(executions), 2) def test_get_all_cases(self): self.test_create_case() self.test_create_case() cases = self.client.get_all_cases() self.assertGreaterEqual(len(cases), 2) def test_get_one_user(self): response = self.client.get_one_user(self.user_id) self.assertEqual(response.status_code, 200) items = ["id", "first_name", "last_name", "username", "email"] for item in items: self.assertIn(item, response.json().keys()) self.assertEqual(self.user_id, response.json()["id"]) self.assertEqual("user", response.json()["username"]) self.assertEqual("*****@*****.**", response.json()["email"]) def test_get_one_instance(self): instance = self.test_create_instance() response = self.client.get_one_instance(instance["id"]) items = [ "id", "name", "description", "created_at", "user_id", "data_hash", "schema", "executions", ] for item in items: self.assertIn(item, response.keys()) self.assertEqual(instance[item], response[item]) def test_get_one_case(self): case = self.test_create_case() response = self.client.get_one_case(case["id"]) items = [ "id", "name", "description", "created_at", "user_id", "data_hash", "schema", "solution_hash", "path", "updated_at", "is_dir", ] for item in items: self.assertIn(item, response.keys()) self.assertEqual(case[item], response[item])