def test_write(self, _format, loader): rc = ReplicaCatalog() rc.add_replica("site1", "lfn1", "pfn1", True).add_replica("site2", "lfn2", "pfn2", True) expected = { "pegasus": PEGASUS_VERSION, "replicas": [ { "lfn": "lfn1", "pfn": "pfn1", "site": "site1", "regex": True }, { "lfn": "lfn2", "pfn": "pfn2", "site": "site2", "regex": True }, ], } expected["replicas"] = sorted(expected["replicas"], key=lambda d: d["lfn"]) with NamedTemporaryFile(mode="r+") as f: rc.write(f, _format=_format) f.seek(0) result = loader(f) result["replicas"] = sorted(result["replicas"], key=lambda d: d["lfn"]) assert result == expected
def dumps(obj: ReplicaCatalog, _format="yml", *args, **kwargs) -> str: """ Serialize ``obj`` to a :py:class:`~Pegasus.api.replica_catalog.ReplicaCatalog` formatted ``str``. :param obj: ReplicaCatalog to serialize :type obj: ReplicaCatalog :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: ReplicaCatalog serialized as a string :rtype: str """ with StringIO() as s: obj.write(s, _format=_format) s.seek(0) return s.read()
def dump(obj: ReplicaCatalog, fp: TextIO, _format="yml", *args, **kwargs) -> None: """ Serialize ``obj`` as a :py:class:`~Pegasus.api.replica_catalog.ReplicaCatalog` formatted stream to ``fp`` (a ``.write()``-supporting file-like object). :param obj: ReplicaCatalog to serialize :type obj: ReplicaCatalog :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_write(self, _format, loader): rc = ReplicaCatalog() f_a = File("f.a", size=1024).add_metadata(creator="ryan") rc.add_replica( "local", f_a, "/f.a", checksum={"sha256": "123"}, metadata={"extra": "metadata"}, ) rc.add_replica("condorpool", f_a, "/f.a") rc.add_replica("local", "f.b", "/f.b") rc.add_regex_replica("local", "*.txt", "/path", metadata={"creator": "ryan"}) expected = { "pegasus": "5.0", "replicas": [ { "lfn": "f.a", "pfns": [ { "site": "local", "pfn": "/f.a" }, { "site": "condorpool", "pfn": "/f.a" }, ], "checksum": { "sha256": "123" }, "metadata": { "extra": "metadata", "size": 1024, "creator": "ryan" }, }, { "lfn": "f.b", "pfns": [{ "site": "local", "pfn": "/f.b" }], "metadata": { "size": 1024, "creator": "ryan" }, }, { "lfn": "*.txt", "pfns": [{ "site": "local", "pfn": "/path" }], "metadata": { "creator": "ryan" }, "regex": True, }, ], } expected["replicas"][0]["pfns"] = sorted( expected["replicas"][0]["pfns"], key=lambda pfn: pfn["site"]) with NamedTemporaryFile(mode="r+") as f: rc.write(f, _format=_format) f.seek(0) result = loader(f) result["replicas"][0]["pfns"] = sorted(result["replicas"][0]["pfns"], key=lambda pfn: pfn["site"]) 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