def test_client_deploy_optionally_avoids_building_flow(monkeypatch, compressed): if compressed: response = { "data": { "project": [{ "id": "proj-id" }], "createFlowFromCompressedString": { "id": "long-id" }, } } else: response = { "data": { "project": [{ "id": "proj-id" }], "createFlow": { "id": "long-id" } } } post = MagicMock(return_value=MagicMock(json=MagicMock( return_value=response))) session = MagicMock() session.return_value.post = post monkeypatch.setattr("requests.Session", session) with set_temporary_config({ "cloud.graphql": "http://my-cloud.foo", "cloud.auth_token": "secret_token" }): client = Client() flow = prefect.Flow(name="test") flow_id = client.deploy(flow, project_name="my-default-project", build=False, compressed=compressed) ## extract POST info if compressed: serialized_flow = decompress( json.loads(post.call_args[1]["json"]["variables"])["input"] ["serializedFlow"]) else: serialized_flow = json.loads( post.call_args[1]["json"]["variables"])["input"]["serializedFlow"] assert serialized_flow["storage"] is None
def test_client_register_default_all_extras_image( patch_post, compressed, monkeypatch, tmpdir ): if compressed: response = { "data": { "project": [{"id": "proj-id"}], "create_flow_from_compressed_string": {"id": "long-id"}, } } else: response = { "data": {"project": [{"id": "proj-id"}], "create_flow": {"id": "long-id"}} } post = patch_post(response) monkeypatch.setattr( "prefect.client.Client.get_default_tenant_slug", MagicMock(return_value="tslug") ) monkeypatch.setattr("prefect.environments.storage.Docker._build_image", MagicMock()) with set_temporary_config( { "cloud.api": "http://my-cloud.foo", "cloud.auth_token": "secret_token", "backend": "cloud", } ): client = Client() flow = prefect.Flow(name="test", storage=prefect.environments.storage.Local(tmpdir)) flow.result = flow.storage.result flow_id = client.register( flow, project_name="my-default-project", compressed=compressed, build=True ) ## extract POST info if compressed: serialized_flow = decompress( json.loads(post.call_args[1]["json"]["variables"])["input"][ "serialized_flow" ] ) else: serialized_flow = json.loads(post.call_args[1]["json"]["variables"])["input"][ "serialized_flow" ] assert serialized_flow["storage"] is not None assert "all_extras" in serialized_flow["environment"]["metadata"]["image"]
def test_client_register_optionally_avoids_building_flow( patch_post, compressed): if compressed: response = { "data": { "project": [{ "id": "proj-id" }], "createFlowFromCompressedString": { "id": "long-id" }, } } else: response = { "data": { "project": [{ "id": "proj-id" }], "createFlow": { "id": "long-id" } } } post = patch_post(response) with set_temporary_config({ "cloud.graphql": "http://my-cloud.foo", "cloud.auth_token": "secret_token" }): client = Client() flow = prefect.Flow(name="test") flow.result_handler = prefect.engine.result_handlers.ResultHandler() flow_id = client.register(flow, project_name="my-default-project", build=False, compressed=compressed) ## extract POST info if compressed: serialized_flow = decompress( json.loads(post.call_args[1]["json"]["variables"])["input"] ["serializedFlow"]) else: serialized_flow = json.loads( post.call_args[1]["json"]["variables"])["input"]["serializedFlow"] assert serialized_flow["storage"] is None
def test_client_register_optionally_avoids_building_flow( patch_post, compressed, monkeypatch ): if compressed: response = { "data": { "project": [{"id": "proj-id"}], "create_flow_from_compressed_string": {"id": "long-id"}, } } else: response = { "data": {"project": [{"id": "proj-id"}], "create_flow": {"id": "long-id"}} } post = patch_post(response) monkeypatch.setattr( "prefect.client.Client.get_default_tenant_slug", MagicMock(return_value="tslug") ) with set_temporary_config( { "cloud.api": "http://my-cloud.foo", "cloud.auth_token": "secret_token", "backend": "cloud", } ): client = Client() flow = prefect.Flow(name="test") flow.result = prefect.engine.result.Result() flow_id = client.register( flow, project_name="my-default-project", build=False, compressed=compressed ) ## extract POST info if compressed: serialized_flow = decompress( json.loads(post.call_args[1]["json"]["variables"])["input"][ "serialized_flow" ] ) else: serialized_flow = json.loads(post.call_args[1]["json"]["variables"])["input"][ "serialized_flow" ] assert serialized_flow["storage"] is None
def test_client_deploy_builds_flow(patch_post, compressed): if compressed: response = { "data": { "project": [{ "id": "proj-id" }], "createFlowFromCompressedString": { "id": "long-id" }, } } else: response = { "data": { "project": [{ "id": "proj-id" }], "createFlow": { "id": "long-id" } } } post = patch_post(response) with set_temporary_config({ "cloud.graphql": "http://my-cloud.foo", "cloud.auth_token": "secret_token" }): client = Client() flow = prefect.Flow(name="test", storage=prefect.environments.storage.Memory()) flow_id = client.deploy(flow, project_name="my-default-project", compressed=compressed) ## extract POST info if compressed: serialized_flow = decompress( json.loads(post.call_args[1]["json"]["variables"])["input"] ["serializedFlow"]) else: serialized_flow = json.loads( post.call_args[1]["json"]["variables"])["input"]["serializedFlow"] assert serialized_flow["storage"] is not None
def test_client_register_builds_flow(patch_post, compressed, monkeypatch): if compressed: response = { "data": { "project": [{"id": "proj-id"}], "createFlowFromCompressedString": {"id": "long-id"}, } } else: response = { "data": {"project": [{"id": "proj-id"}], "createFlow": {"id": "long-id"}} } post = patch_post(response) monkeypatch.setattr( "prefect.client.Client.get_default_tenant_slug", MagicMock(return_value="tslug") ) with set_temporary_config( {"cloud.api": "http://my-cloud.foo", "cloud.auth_token": "secret_token"} ): client = Client() flow = prefect.Flow(name="test", storage=prefect.environments.storage.Memory()) flow.result_handler = flow.storage.result_handler flow_id = client.register( flow, project_name="my-default-project", compressed=compressed ) ## extract POST info if compressed: serialized_flow = decompress( json.loads(post.call_args[1]["json"]["variables"])["input"][ "serializedFlow" ] ) else: serialized_flow = json.loads(post.call_args[1]["json"]["variables"])["input"][ "serializedFlow" ] assert serialized_flow["storage"] is not None
def test_compression_back_translation(obj): assert decompress(compress(obj)) == obj
def test_decompress(): test_str = compress({"test": 42}) result = decompress(test_str) assert isinstance(result, dict)