コード例 #1
0
 def test_format_string(self, answer, base, ext, delim, start, end, pad, brackets):
     seq_name = SeqName(
         base=base,
         extension=ext,
         delim=delim,
         start=start,
         end=end,
         pad=pad,
         brackets=brackets,
     )
     assert seq_name.formatted() == answer
     assert str(seq_name) == answer
コード例 #2
0
    def test_alter_seq_name(self, changes_dict):
        this_field: Field

        original = SeqName(base="file", extension="exr", start=100)
        new = original.alter(**changes_dict)

        print(f"org: {original}\nnew: {new}\nchanges:{changes_dict}")

        for this_field in fields(original):
            try:
                value = changes_dict[this_field.name]
            except KeyError:
                value = getattr(original, this_field.name)

            assert getattr(new, this_field.name) == value
コード例 #3
0
 def test_from_path(self, path, start, end, brackets):
     seq_name = SeqName.from_path(path)
     assert seq_name.base == "file_name"
     assert seq_name.delim == "."
     assert seq_name.start == start
     assert seq_name.end == end
     assert seq_name.pad == 2
     assert seq_name.brackets is brackets
     assert seq_name.extension == ".exr"
コード例 #4
0
 def test_init_defaults(self):
     seq_name = SeqName("file_name", ".exr")
     assert seq_name.base == "file_name"
     assert seq_name.extension == ".exr"
     assert seq_name.delim == "."
     assert seq_name.start == "#"
     assert seq_name.end is None
     assert seq_name.pad == 0
     assert seq_name.brackets is None
コード例 #5
0
 def test_is_frozen(self):
     seq_name = SeqName("name", "exr")
     with pytest.raises(AttributeError):
         seq_name.base = "file"
コード例 #6
0
 def test_alter_extension_adds_period(self):
     original = SeqName(base="file", extension="exr", start=100)
     new = original.alter(extension="dpx")
     print(f"new_extension: {new.extension}")
     assert new.extension == ".dpx"
コード例 #7
0
    def from_path_override_padding(self):
        seq_name = SeqName.from_path("file_name.1234567.exr")
        assert seq_name.pad == 7

        seq_name = SeqName.from_path("file_name.1234567.exr", pad=0)
        assert seq_name.pad == 0
コード例 #8
0
 def test_extension_none(self):
     assert SeqName("file_name", None).extension is None
コード例 #9
0
 def test_add_extension_period(self):
     assert SeqName("file_name", "exr").extension == ".exr"
コード例 #10
0
class TestSeqDisk:
    @pytest.mark.parametrize(
        "file_method,src_remains",
        [(FileSequence.move_iter, False), (FileSequence.copy_iter, True)],
    )
    @pytest.mark.parametrize("str_dst", [False, True])
    def test_copy_move_iter(self, file_seq_for_operation, file_method,
                            src_remains, str_dst):
        src: FileSequence
        dst: Path

        src, dst = file_seq_for_operation
        dst_arg = str(dst) if str_dst else dst

        paths = list()

        for item in file_method(src, dst_arg):
            print(f"copied/moved: {item}")
            paths.append(item)

        assert len(paths) == 102

        new_file = paths.pop(-1)

        assert isinstance(new_file, FileSequence)
        assert all(isinstance(x, Path) for x in paths)

        assert new_file.path == dst / src.path.name

        for i_old, this_path in enumerate(src, 1):
            print(this_path.exists(), this_path)
            assert this_path.exists(
            ) if src_remains else not this_path.exists()

        for i_new, this_path in enumerate(new_file, 1):
            assert this_path.exists()
            assert this_path.read_text() == str(i_new + 99)

        assert i_new == i_old == 101

        print("Source Dir ls:")
        for i, x in enumerate(src.path.parent.iterdir(), 1):
            print(f"{i}: {x}")

        print("-----------")

        print("Destination Dir ls:")
        for i, x in enumerate(dst.iterdir(), 1):
            print(f"{i}: {x}")

    @pytest.mark.parametrize(
        "file_method,src_remains",
        [(FileSequence.move, False), (FileSequence.copy, True)],
    )
    @pytest.mark.parametrize("str_dst", [False, True])
    def test_copy_move(self, file_method, file_seq_for_operation, src_remains,
                       str_dst):
        src: FileSequence
        dst: Path

        src, dst = file_seq_for_operation
        dst_arg = str(dst) if str_dst else dst

        new_file = file_method(src, dst_arg)

        assert isinstance(new_file, FileSequence)
        assert new_file.path == dst / src.path.name

        for i_old, this_path in enumerate(src, 1):
            print(this_path.exists(), this_path)
            assert this_path.exists(
            ) if src_remains else not this_path.exists()

        for i_new, this_path in enumerate(new_file, 1):
            assert this_path.exists()
            assert this_path.read_text() == str(i_new + 99)

        assert len(src) == len(new_file)

        print("Source Dir ls:")
        for i, x in enumerate(src.path.parent.iterdir(), 1):
            print(f"{i}: {x}")

        print("-----------")

        print("Destination Dir ls:")
        for i, x in enumerate(dst.iterdir(), 1):
            print(f"{i}: {x}")

    @pytest.mark.parametrize(
        "new_name, base_name, start_frame, padding, ext, use_iter",
        [
            ("new_name.0100.dpx", "new_name", 100, 4, "dpx", True),
            ("new_name.0100.dpx", "new_name", 100, 4, "dpx", False),
            ("new_name.####.dpx", "new_name", 100, 4, "dpx", False),
            ("new_name.0200.dpx", "new_name", 200, 4, "dpx", True),
            ("new_name.0200.dpx", "new_name", 200, 4, "dpx", False),
            (
                SeqName("new_name", "dpx", start=200, pad=4),
                "new_name",
                200,
                4,
                "dpx",
                False,
            ),
            (FileName("new_name", "dpx"), "new_name", 100, 3, "dpx", False),
            ("file.090.txt", "file", 90, 3, "txt", False),
            ("file.110.txt", "file", 110, 3, "txt", False),
            ("file.110.txt", "file", 110, 3, "txt", False),
        ],
    )
    def test_rename(
        self,
        file_seq_for_operation,
        new_name,
        base_name,
        start_frame,
        padding,
        ext,
        use_iter,
    ):
        src: FileSequence
        dst: Path

        src, dst = file_seq_for_operation

        print("Original Dir List")
        for x in sorted(list(src.path.parent.iterdir())):
            print(x)

        print("------------------")

        assert all(x.exists() for x in src)

        if use_iter:
            for item in src.rename_iter(new_name):
                try:
                    path_old, path_new = item
                    print(f"{path_old} -> {path_new}")
                except ValueError:
                    file_new = item
                else:
                    assert isinstance(path_old, Path)
                    assert isinstance(path_new, Path)
                    assert path_new.name != path_old.name
                    assert path_new.parent == path_old.parent

                    assert not path_old.exists()
                    assert path_new.exists()
        else:
            file_new = src.rename(new_name)

        print("------------------")

        print("Post-rename Dir List")
        for x in sorted(list(src.path.parent.iterdir())):
            print(x)

        for num, contents, path in zip(count(start_frame), count(100),
                                       file_new):
            assert path.name == f"{base_name}.{str(num).zfill(padding)}.{ext}"
            assert path.read_text() == str(contents)

        assert file_new.path.parent == src.path.parent
        assert file_new.path.name == (
            f"{base_name}.{str(start_frame).zfill(padding)}.{ext}")

        print("------------------")
        print("Missing:")
        for x in (x for x in file_new if not x.exists()):
            print(x)

        assert not all(x.exists() for x in src)
        assert all(x.exists() for x in file_new)

    @pytest.mark.parametrize("use_iter", [True, False])
    def test_delete(self, file_seq_for_operation, use_iter):
        src: FileSequence
        dst: Path

        src, dst = file_seq_for_operation
        assert src.path.exists()

        if use_iter:
            for item in src.delete_iter():
                print(f"deleted: {item}")
                assert isinstance(item, Path)
                assert not item.exists()
        else:
            src.delete()

        assert len([x for x in src.path.parent.iterdir()]) == 0

        print("--------")

        print("Source Dir ls:")
        for i, x in enumerate(src.path.parent.iterdir(), 1):
            print(f"{i}: {x}")

    @pytest.mark.parametrize("use_iter", [True, False])
    def test_chmod(self, file_seq_for_operation, use_iter):
        src: FileSequence
        dst: Path

        src, dst = file_seq_for_operation
        original_mode = src.path.stat().st_mode

        print("Original mode list:")
        for x in src:
            print(x.stat().st_mode, str(x))

        print("--------")

        if use_iter:
            for item in src.chmod_iter(0o777):
                print(f"changed: {item}")
                assert isinstance(item, Path)
        else:
            src.chmod(0o777)

        print("--------")

        print("Changed mode list:")
        for x in src:
            print(stat.S_IMODE(x.stat().st_mode), str(x))

        if not os.name == "nt":
            for path in src:
                assert path.stat().st_mode != original_mode
                assert stat.S_IMODE(path.stat().st_mode) == 0o777