Что лучше использовать, декоратор или что-то ещё?
У меня есть небольшой модуль, который генерирует JSON структуру папок на сервере и отправляет её в ответ на AJAX запрос пользователю сайта. Я хочу скрыть действительный путь к файлам и папкам, но отправлять кодированную строку, которая будет однозначно соответствовать пути к файлу. Одна из частей алгоритма должна подменять путь (класса pathlib.Path) в последовательность inode идентификаторов. inode - уникальный идентификатор файлоподобного объекта в POSIX системах, то есть на сервере каждому файлу сопоставляется уникальное число. Я хочу путь формата:
/repository/A_User/uploads/Folders/Fill folder 1/Links folder
Преобразовать во что-то вроде:
/1571188/1571200/1571218/1571205/1571197/1571587
На входе и выходе нескольких функций, например:
def get_all_leaves(path, parent_path):
if path:
path = Path(path)
if Path.exists(path) and _is_safe_path(path):
return [
(
node.inode(),
node.name,
relpath(node.path, parent_path),
node.is_dir(follow_symlinks=True),
node.is_dir(follow_symlinks=True) and any(scandir(node.path))
) for node in scandir(path)]
Как вы видите, функция принимает 2 пути и возвращает генератор, который перечисляет пути. Хорошее ли решение в данном случае написать декоратор, который будет преобразовывать все входные аргументы из list в pathlib.Path и все выходные аргументы из pathlib.Path в list? Вопрос в чистоте кода, а не в алгоритме. Как бы вы решали подобную задачу? Хочется написать чистый, легко поддерживаемый и понятный код. Я рассматриваю ещё вариант создать сериализатор и передавать его каждой функции в качестве параметра.