|
3 | 3 | from argparse import ArgumentParser, Namespace |
4 | 4 | import hashlib |
5 | 5 | import os |
| 6 | +from typing import Iterator |
6 | 7 |
|
7 | 8 |
|
8 | 9 | def _create_argument_parser() -> ArgumentParser: |
@@ -33,29 +34,25 @@ def _checksum_files(sha, file_path, files) -> None: |
33 | 34 | sha.update(f"{file}|{filetype}|{filesize}|{mod_time}".encode()) |
34 | 35 |
|
35 | 36 |
|
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]]: |
39 | 38 | for target in targets: |
40 | 39 | normpath = os.path.normpath(target) |
41 | 40 | sha = hashlib.sha1(usedforsecurity=False) |
42 | 41 | for dirpath, dirnames, filenames in os.walk(normpath): |
43 | 42 | _checksum_files(sha, dirpath, sorted(dirnames + filenames)) |
44 | | - result[normpath] = sha.hexdigest() |
45 | | - |
46 | | - return result |
| 43 | + yield normpath, sha.hexdigest() |
47 | 44 |
|
48 | 45 |
|
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: |
51 | 48 | print(f"{target}:{checksum}") |
52 | 49 |
|
53 | 50 |
|
54 | 51 | def main() -> None: |
55 | 52 | parser: ArgumentParser = _create_argument_parser() |
56 | 53 | args: Namespace = parser.parse_args() |
57 | 54 |
|
58 | | - result: dict[str, str] = generate(args.targets) |
| 55 | + result: Iterator[tuple[str, str]] = generate(args.targets) |
59 | 56 | print_result(result) |
60 | 57 |
|
61 | 58 |
|
|
0 commit comments