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])