Разработана утилита для многопоточного сжатия файлов WebAssembly

This commit is contained in:
2025-02-01 13:51:06 +03:00
commit f4cddc3e3e
13 changed files with 1146 additions and 0 deletions

54
app/utils.py Normal file
View File

@ -0,0 +1,54 @@
from logging import Logger
from pathlib import PurePath, Path
import shutil
from time import perf_counter
from typing import Callable
def get_paths(
from_dir_path: PurePath,
pattern: str,
check_function: Callable = lambda path: True,
) -> list[PurePath]:
from_dir_path = Path(from_dir_path)
return [
PurePath(path.relative_to(from_dir_path))
for path in from_dir_path.rglob(pattern)
if check_function(path)
]
def copy_paths(
from_dir_path: PurePath,
to_dir_path: PurePath,
paths: list[PurePath],
):
for path in paths:
to_file_path = Path(to_dir_path) / path
to_file_path.parent.mkdir(
parents=True,
exist_ok=True,
)
shutil.copy2(
Path(from_dir_path) / path,
to_file_path,
)
def log(
logger: Logger,
start_text: str,
success_text: str,
):
def decorator(func):
def wrapper(*args, **kwargs):
logger.info(start_text)
start_time = perf_counter()
func()
end_time = perf_counter()
logger.info('%s (%f s)' % (
success_text,
end_time - start_time,
))
return wrapper
return decorator