Skip to content

Commit aace76a

Browse files
author
Andrei Neagu
committed
refactor
1 parent 5f72a43 commit aace76a

File tree

3 files changed

+43
-34
lines changed

3 files changed

+43
-34
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from pathlib import Path
2+
from typing import TypeAlias
3+
4+
import aiofiles
5+
from servicelib.file_utils import create_sha256_checksum
6+
7+
_FilesInFolder: TypeAlias = dict[str, Path]
8+
9+
10+
def get_relative_to(folder: Path, file: Path) -> str:
11+
return f"{file.relative_to(folder)}"
12+
13+
14+
async def assert_same_file_content(file_1: Path, file_2: Path):
15+
async with aiofiles.open(file_1, "rb") as f1, aiofiles.open(file_2, "rb") as f2:
16+
checksum_1 = await create_sha256_checksum(f1)
17+
checksum_2 = await create_sha256_checksum(f2)
18+
assert checksum_1 == checksum_2
19+
20+
21+
def get_files_in_folder(folder: Path) -> _FilesInFolder:
22+
return {get_relative_to(folder, f): f for f in folder.rglob("*") if f.is_file()}
23+
24+
25+
async def assert_same_folder_contents(
26+
fif1: _FilesInFolder, fif2: _FilesInFolder
27+
) -> None:
28+
assert set(fif1.keys()) == set(fif2.keys())
29+
30+
for file_name in fif1:
31+
await assert_same_file_content(fif1[file_name], fif2[file_name])

packages/service-library/src/servicelib/zip_stream/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from ._constants import DEFAULT_CHUNK_SIZE
12
from ._input import DiskStreamReader
23
from ._output import DiskStreamWriter
34
from ._types import ArchiveEntries, ArchiveFileEntry, FileStream
@@ -6,6 +7,7 @@
67
__all__: tuple[str, ...] = (
78
"ArchiveEntries",
89
"ArchiveFileEntry",
10+
"DEFAULT_CHUNK_SIZE",
911
"DiskStreamReader",
1012
"DiskStreamWriter",
1113
"FileStream",

packages/service-library/tests/test_stream_zip_to_s3.py renamed to packages/service-library/tests/test_zip_stream.py

Lines changed: 10 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,18 @@
44
import secrets
55
from collections.abc import AsyncIterable
66
from pathlib import Path
7-
from typing import TypeAlias
87
from unittest.mock import Mock
98

10-
import aiofiles
119
import pytest
1210
from faker import Faker
1311
from pytest_mock import MockerFixture
12+
from pytest_simcore.helpers.comparing import (
13+
assert_same_folder_contents,
14+
get_files_in_folder,
15+
get_relative_to,
16+
)
1417
from servicelib.archiving_utils import unarchive_dir
15-
from servicelib.file_utils import create_sha256_checksum, remove_directory
18+
from servicelib.file_utils import remove_directory
1619
from servicelib.progress_bar import ProgressBarData
1720
from servicelib.zip_stream import (
1821
ArchiveEntries,
@@ -74,33 +77,6 @@ def _generate_files_in_path(faker: Faker, base_dir: Path, *, prefix: str = "") -
7477
(base_dir / "fancy-names" / fancy_name).write_text(faker.text())
7578

7679

77-
_FilesInFolder: TypeAlias = dict[str, Path]
78-
79-
80-
def _get_relative(folder: Path, file: Path) -> str:
81-
return f"{file.relative_to(folder)}"
82-
83-
84-
def _get_files_in_folder(folder: Path) -> _FilesInFolder:
85-
return {_get_relative(folder, f): f for f in folder.rglob("*") if f.is_file()}
86-
87-
88-
async def _same_file_content(file_1: Path, file_2: Path):
89-
async with aiofiles.open(file_1, "rb") as f1, aiofiles.open(file_2, "rb") as f2:
90-
checksum_1 = await create_sha256_checksum(f1)
91-
checksum_2 = await create_sha256_checksum(f2)
92-
assert checksum_1 == checksum_2
93-
94-
95-
async def _assert_same_folder_contents(
96-
fif1: _FilesInFolder, fif2: _FilesInFolder
97-
) -> None:
98-
assert set(fif1.keys()) == set(fif2.keys())
99-
100-
for file_name in fif1:
101-
await _same_file_content(fif1[file_name], fif2[file_name])
102-
103-
10480
@pytest.fixture
10581
async def prepare_content(local_files_dir: Path, faker: Faker) -> AsyncIterable[None]:
10682
_generate_files_in_path(faker, local_files_dir, prefix="local_")
@@ -126,7 +102,7 @@ async def test_get_zip_archive_stream(
126102
# 1. generate archive form soruces
127103
archive_files: ArchiveEntries = []
128104
for file in (x for x in local_files_dir.rglob("*") if x.is_file()):
129-
archive_name = _get_relative(local_files_dir, file)
105+
archive_name = get_relative_to(local_files_dir, file)
130106

131107
archive_files.append((archive_name, DiskStreamReader(file).get_stream))
132108

@@ -145,7 +121,7 @@ async def test_get_zip_archive_stream(
145121
await unarchive_dir(local_archive_path, local_unpacked_archive)
146122

147123
# 3. compare files in directories (same paths & sizes)
148-
await _assert_same_folder_contents(
149-
_get_files_in_folder(local_files_dir),
150-
_get_files_in_folder(local_unpacked_archive),
124+
await assert_same_folder_contents(
125+
get_files_in_folder(local_files_dir),
126+
get_files_in_folder(local_unpacked_archive),
151127
)

0 commit comments

Comments
 (0)