Skip to content

Commit 3c1ef70

Browse files
committed
feat(checksum): improve
1 parent 16ca25a commit 3c1ef70

File tree

2 files changed

+9
-12
lines changed

2 files changed

+9
-12
lines changed

scripts/checksum.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from argparse import ArgumentParser, Namespace
44
import hashlib
55
import os
6+
from typing import Iterator
67

78

89
def _create_argument_parser() -> ArgumentParser:
@@ -33,29 +34,25 @@ def _checksum_files(sha, file_path, files) -> None:
3334
sha.update(f"{file}|{filetype}|{filesize}|{mod_time}".encode())
3435

3536

36-
def generate(targets: list[str]) -> dict[str, str]:
37-
result: dict[str, str] = {}
38-
37+
def generate(targets: list[str]) -> Iterator[tuple[str, str]]:
3938
for target in targets:
4039
normpath = os.path.normpath(target)
4140
sha = hashlib.sha1(usedforsecurity=False)
4241
for dirpath, dirnames, filenames in os.walk(normpath):
4342
_checksum_files(sha, dirpath, sorted(dirnames + filenames))
44-
result[normpath] = sha.hexdigest()
45-
46-
return result
43+
yield normpath, sha.hexdigest()
4744

4845

49-
def print_result(result: dict[str, str]) -> None:
50-
for target, checksum in result.items():
46+
def print_result(result: Iterator[tuple[str, str]]) -> None:
47+
for target, checksum in result:
5148
print(f"{target}:{checksum}")
5249

5350

5451
def main() -> None:
5552
parser: ArgumentParser = _create_argument_parser()
5653
args: Namespace = parser.parse_args()
5754

58-
result: dict[str, str] = generate(args.targets)
55+
result: Iterator[tuple[str, str]] = generate(args.targets)
5956
print_result(result)
6057

6158

tests/test_checksum.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,18 @@ def prepare():
2424

2525

2626
def test_checksum():
27-
result = checksum.generate([TARGET_DIR])
27+
result = dict(checksum.generate([TARGET_DIR]))
2828

2929
assert result[NORM_TARGET_DIR]
3030
assert len(result[NORM_TARGET_DIR]) == 40
3131

3232

3333
def test_checksum_changed():
34-
checksum1 = checksum.generate([TARGET_DIR])[NORM_TARGET_DIR]
34+
checksum1 = dict(checksum.generate([TARGET_DIR]))[NORM_TARGET_DIR]
3535

3636
with open(f"{TARGET_DIR}/file1.txt", 'w', encoding='utf-8') as file:
3737
file.write(f"New random string in file {uuid.uuid4()}")
3838

39-
checksum2 = checksum.generate([TARGET_DIR])[NORM_TARGET_DIR]
39+
checksum2 = dict(checksum.generate([TARGET_DIR]))[NORM_TARGET_DIR]
4040

4141
assert checksum1 != checksum2

0 commit comments

Comments
 (0)