Пример #1
0
def test_memoryfs_text():
    """
    write and read text file
    :return:
    """
    mem = MemoryFS()
    data_path = 'a.txt'
    for i in range(10):
        mem.appendtext(data_path, str(i))

    for line in mem.readtext(data_path):
        print('read:{}'.format(line.strip()))
Пример #2
0
    def test_update_from_single_version(self) -> None:
        fs = MemoryFS()
        mv = Multiversioned(fs)

        d = {
            "file1.txt": "file1",
            "file2.txt": "file2",
            "dir1": {
                "file1.txt": "file1",
                "file2.txt": "file2"
            },
            "dir2": {
                "file1.txt": "file1",
                "file2.txt": "file2"
            },
        }

        bundle_lidvid = LIDVID("urn:nasa:pds:b::1.0")
        bundle_lid = bundle_lidvid.lid()

        no_lidvids: Set[LIDVID] = set()

        def create_bundle() -> None:
            lidvids = [create_collection(bundle_lid, c) for c in ["c1", "c2"]]
            contents = dictionary_to_contents(set(lidvids), d)
            mv.add_contents_if(is_new, bundle_lid, contents)

        def create_collection(bundle_lid: LID, c: str) -> LIDVID:
            lid = bundle_lid.extend_lid(c)
            lidvids = [create_product(lid, p) for p in ["p1", "p2"]]
            contents = dictionary_to_contents(set(lidvids), d)
            return mv.add_contents_if(is_new, lid, contents)

        def create_product(coll_lid: LID, p: str) -> LIDVID:
            lid = coll_lid.extend_lid(p)

            contents = dictionary_to_contents(no_lidvids, d)
            return mv.add_contents_if(is_new, lid, contents)

        create_bundle()

        vv = VersionView(mv, bundle_lidvid)
        c = COWFS(vv, MemoryFS(), MemoryFS())

        path = "/b$/c2$/p1$/dir1/file2.txt"
        c.writetext(path, "xxxx")

        latest_lidvid = mv.latest_lidvid(LID("urn:nasa:pds:b"))
        # Update from the COWFS.
        mv.update_from_single_version(is_new, c)
        self.assertNotEqual(latest_lidvid,
                            mv.latest_lidvid(LID("urn:nasa:pds:b")))
        latest_lidvid = mv.latest_lidvid(LID("urn:nasa:pds:b"))

        # changed files are changed
        self.assertEqual("file2", fs.readtext("b/c2/p1/v$1.0/dir1/file2.txt"))
        self.assertEqual("xxxx", fs.readtext("b/c2/p1/v$2.0/dir1/file2.txt"))

        # unchanged files are unchanged
        self.assertEqual("file1", fs.readtext("b/c2/p1/v$1.0/dir1/file1.txt"))
        self.assertEqual("file1", fs.readtext("b/c2/p1/v$2.0/dir1/file1.txt"))

        # Change started in b/c2/p1.  Check which versions are affected.

        self.assertEqual(
            VID("2.0"),
            cast(LIDVID, mv.latest_lidvid(LID("urn:nasa:pds:b"))).vid())

        self.assertEqual(
            VID("1.0"),
            cast(LIDVID, mv.latest_lidvid(LID("urn:nasa:pds:b:c1"))).vid())
        self.assertEqual(
            VID("2.0"),
            cast(LIDVID, mv.latest_lidvid(LID("urn:nasa:pds:b:c2"))).vid())

        self.assertEqual(
            VID("2.0"),
            cast(LIDVID, mv.latest_lidvid(LID("urn:nasa:pds:b:c2:p1"))).vid(),
        )
        self.assertEqual(
            VID("1.0"),
            cast(LIDVID, mv.latest_lidvid(LID("urn:nasa:pds:b:c2:p2"))).vid(),
        )

        # Now try updating again.  Nothing should change.
        mv.update_from_single_version(is_new, c)
        self.assertEqual(latest_lidvid,
                         mv.latest_lidvid(LID("urn:nasa:pds:b")))
Пример #3
0
 def test_write_subdir_versions(self) -> None:
     fs = MemoryFS()
     write_subdir_versions_to_directory(fs, "/", self.d)
     self.assertEqual(self.txt, fs.readtext(SUBDIR_VERSIONS_FILENAME))
     fs.close()