def test_copytree_subdirs(self): # subdirs are copies as well os.mkdir(os.path.join(self.workdir, 'srcdir')) os.mkdir(os.path.join(self.workdir, 'srcdir', 'sub1')) copytree( os.path.join(self.workdir, 'srcdir'), os.path.join(self.workdir, 'dstdir')) assert os.path.isdir( os.path.join(self.workdir, 'dstdir', 'sub1'))
def test_copytree_ignore(self, tmpdir): # we can pass a function to ignore files def ignore(src, names): return ['sample1.txt', ] src_dir = tmpdir.mkdir("work") dest_dir = tmpdir.mkdir("dest") src_dir.join("sample1.txt").write("Hi!") src_dir.join("sample2.txt").write("Ho!") copytree(str(src_dir), str(dest_dir), ignore=ignore) assert dest_dir.join("sample1.txt").exists() is False assert dest_dir.join("sample2.txt").exists() is True
def test_copytree_links(self): # we copy links src_dir = os.path.join(self.workdir, 'srcdir') os.mkdir(src_dir) open(os.path.join(src_dir, 'sample.txt'), 'w').write('Hi!') os.symlink( os.path.join(src_dir, 'sample.txt'), os.path.join(src_dir, 'sample.link')) copytree(src_dir, os.path.join(self.workdir, 'dstdir'), symlinks=True) dst_link = os.path.join(self.workdir, 'dstdir', 'sample.link') assert os.path.islink(dst_link) assert os.readlink(dst_link) == os.path.join(src_dir, 'sample.txt')
def test_copytree_ignore(self): # we can pass a function to ignore files def ignore(src, names): return ['sample1.txt', ] self.resultpath = tempfile.mkdtemp() open(os.path.join(self.workdir, 'sample1.txt'), 'w').write('Hi!') open(os.path.join(self.workdir, 'sample2.txt'), 'w').write('Hi!') copytree(self.workdir, self.resultpath, ignore=ignore) assert not os.path.isfile( os.path.join(self.resultpath, 'sample1.txt')) assert os.path.isfile( os.path.join(self.resultpath, 'sample2.txt'))
def test_copytree_links(self, tmpdir): # we copy links tmpdir.mkdir("src_dir").join("sample.txt").write("Hi") os.symlink( str(tmpdir / "src_dir" / "sample.txt"), str(tmpdir / "src_dir" / "sample.link")) copytree( str(tmpdir / "src_dir"), str(tmpdir / "dest_dir"), symlinks=True) dest_link = tmpdir / "dest_dir" / "sample.link" assert os.path.islink(str(dest_link)) assert os.readlink(str(dest_link)) == str( tmpdir / "src_dir" / "sample.txt")
def test_copytree_ioerror(self, tmpdir): # we catch IOErrors, collect them and raise at end (as shutil.Error) src_dir = tmpdir.mkdir("src_dir") dst_dir = tmpdir.mkdir("dst_dir") src_dir.join("sample1.txt").write("Hi!") dst_dir.join("sample1.txt").write("Ho!") # make dst_file unwriteable dst_file_path = str(dst_dir / "sample1.txt") old_mode = os.stat(dst_file_path).st_mode os.chmod(dst_file_path, stat.S_IREAD) with pytest.raises(shutil.Error) as exc_info: copytree( str(src_dir), str(dst_dir), symlinks=False) os.chmod(dst_file_path, old_mode) # reenable writing assert exc_info.type == shutil.Error err_src, err_dst, err_msg = exc_info.value.args[0][0] assert err_src == str(src_dir / "sample1.txt") assert err_dst == dst_file_path assert "Permission denied:" in err_msg assert dst_file_path in err_msg
def test_copytree_detects_nested_dirs(self, tmpdir): # we detect dst dirs being part/subdirs of src dir. tmpdir.mkdir("root_dir").mkdir("sub_dir") with pytest.raises(ValueError): copytree(str(tmpdir / "root_dir"), str(tmpdir / "root_dir" / "sub_dir"))
def test_copytree_subdirs(self, tmpdir): # subdirs are copied as well tmpdir.mkdir("src_dir").mkdir("sub1") copytree( str(tmpdir.join("src_dir")), str(tmpdir.join("dest_dir"))) assert tmpdir.join("dest_dir").join("sub1").isdir() is True