Let's write some test-cases to test the behavior of create_tar_file
function.
test_tarfile.py
import pytest
from tarfile import create_tar_file
def test_creates_tarfile_from_source_dir(tmpdir):
source_dir = tmpdir.mkdir("source")
file_path = source_dir.join("a.py")
file_path.write("x=2")
assert file_path.read() == "x=2"
create_tar_file("tarfile.tar.gz", source_dir, ["a.py"])
def test_raises_exception_if_source_is_not_a_dir(tmpdir):
with pytest.raises(ValueError, match="Not a directory"):
create_tar_file("tarfile.tar.gz", "not_found_dir", ["a.py"])
def test_raises_exception_if_file_not_found_in_source_dir(tmpdir):
source_dir = tmpdir.mkdir("source")
file_path = source_dir.join("a.py")
file_path.write("x=2")
with pytest.raises(ValueError, match=f"b.py is not a file inside {source_dir}"):
create_tar_file("tarfile.tar.gz", source_dir, ["b.py"])
Now, let's write the implementation of create_tar_file
.
tarfile.py
import os
import tarfile
from typing import List
def create_tar_file(tarfile_path: str, source_dir: str, files: List[str]) -> None:
if not os.path.isdir(source_dir):
raise ValueError('Not a directory')
os.chdir(source_dir)
with tarfile.open(tarfile_path, "w:gz") as tar:
for f in files:
if not os.path.isfile(os.path.join(source_dir, f)):
raise ValueError(f'{f} is not a file inside {source_dir}')
tar.add(f)
Top comments (0)