Что лучше использовать, декоратор или что-то ещё?

Рейтинг: 0Ответов: 0Опубликовано: 18.05.2023

У меня есть небольшой модуль, который генерирует 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? Вопрос в чистоте кода, а не в алгоритме. Как бы вы решали подобную задачу? Хочется написать чистый, легко поддерживаемый и понятный код. Я рассматриваю ещё вариант создать сериализатор и передавать его каждой функции в качестве параметра.

Ответы

Ответов пока нет.