def test_write(self): tc = TransformationCatalog() ( tc.add_transformations(Transformation("t1")).add_transformations( Transformation("t2") ) ) expected = { "pegasus": "5.0", "transformations": [ {"name": "t1", "sites": []}, {"name": "t2", "sites": []}, ], } expected["transformations"] = sorted( expected["transformations"], key=lambda t: t["name"] ) with NamedTemporaryFile("r+") as f: tc.write(f, _format="json") f.seek(0) result = json.load(f) result["transformations"] = sorted( expected["transformations"], key=lambda t: t["name"] ) assert "createdOn" in result["x-pegasus"] assert result["x-pegasus"]["createdBy"] == getpass.getuser() assert result["x-pegasus"]["apiLang"] == "python" del result["x-pegasus"] assert result == expected
def test_write(self): tc = TransformationCatalog() (tc.add_transformations(Transformation("t1")).add_transformations( Transformation("t2"))) expected = { "pegasus": "5.0", "transformations": [ { "name": "t1", "sites": [] }, { "name": "t2", "sites": [] }, ], } expected["transformations"] = sorted(expected["transformations"], key=lambda t: t["name"]) with NamedTemporaryFile("r+") as f: tc.write(f, _format="json") f.seek(0) result = json.load(f) result["transformations"] = sorted(expected["transformations"], key=lambda t: t["name"]) assert result == expected
def test_example_transformation_catalog( self, convert_yaml_schemas_to_json, load_schema, _format, loader ): # validates the sample tc in pegasus/etc/sample-5.0-data/tc.yml tc = TransformationCatalog() foo = ( Transformation("foo") .add_globus_profile(max_time=2) .add_dagman_profile(retry=2) .add_metadata(size=2048) .add_sites( TransformationSite( "local", "/nfs/u2/ryan/bin/foo", True, arch=Arch.X86_64, os_type=OS.LINUX, ) .add_env(JAVA_HOME="/usr/bin/java") .add_metadata(size=2048) ) .add_requirement("bar") .add_shell_hook(EventType.START, "/bin/echo 'starting'") ) bar = Transformation("bar").add_sites( TransformationSite( "local", "/nfs/u2/ryan/bin/bar", True, arch=Arch.X86_64, os_type=OS.LINUX, ) ) centos_pegasus_container = Container( "centos-pegasus", Container.DOCKER, "docker:///ryan/centos-pegasus:latest", arguments="--shm-size 123", mounts=["/Volumes/Work/lfs1:/shared-data/:ro"], ).add_env(JAVA_HOME="/usr/bin/java") (tc.add_transformations(foo, bar).add_containers(centos_pegasus_container)) with NamedTemporaryFile(mode="r+") as f: tc.write(f, _format=_format) f.seek(0) tc_json = loader(f) tc_schema = load_schema("tc-5.0.json") validate(instance=tc_json, schema=tc_schema)
def dumps(obj: TransformationCatalog, _format="yml", *args, **kwargs) -> str: """ Serialize ``obj`` to a :py:class:`~Pegasus.api.transformation_catalog.TransformationCatalog` formatted ``str``. :param obj: TransformationCatalog to serialize :type obj: TransformationCatalog :param _format: format to write to if fp does not have an extension; can be one of ["yml" | "yaml" | "json"], defaults to "yml" :type _format: str :return: TransformationCatalog serialized as a string :rtype: str """ with StringIO() as s: obj.write(s, _format=_format) s.seek(0) return s.read()
def dump(obj: TransformationCatalog, fp: TextIO, _format="yml", *args, **kwargs) -> None: """ Serialize ``obj`` as a :py:class:`~Pegasus.api.transformation_catalog.TransformationCatalog` formatted stream to ``fp`` (a ``.write()``-supporting file-like object). :param obj: TransformationCatalog to serialize :type obj: TransformationCatalog :param fp: file like object to serialize to :type fp: TextIO :param _format: format to write to if fp does not have an extension; can be one of ["yml" | "yaml" | "json"], defaults to "yml" :type _format: str :rtype: NoReturn """ obj.write(fp, _format=_format)
def test_transformation_catalog_ordering_on_yml_write(self): tc = TransformationCatalog() tc.add_transformations(Transformation("t1")) tc.add_containers(Container("c1", Container.DOCKER, "img")) tc.write() EXPECTED_FILE = Path("transformations.yml") with EXPECTED_FILE.open() as f: result = f.read() EXPECTED_FILE.unlink() """ Check that tc keys have been ordered as follows: - pegasus - transformations - containers """ p = re.compile( r"pegasus: '5.0'[\w\W]+transformations:[\w\W]+containers[\w\W]+") assert p.match(result) is not None