Уведомления

Группа в Telegram: @pythonsu

#1 Июль 18, 2014 06:00:00

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Архитектурный ступор пограмиста

Никак не могу придумать решение. Хочется примерно следующего: есть класс для запуска последовательности команд(неважные детали я убрал и добавил докстринги на русском), хочу перед исполнением команды проверить для них наличие зависимостей.

class Executor(list):
    Dependence = namedtuple('Dependence', ['executable', 'path'])
    def run(self):
	"Исполнение последовательности команд"
        self.check_depends()
        # тут запуск последовательности команд
    @classmethod
    def depend_on(cls, executable, path=None):
	"Добавляет зависимость в список в атрибуте функции __depend_on__"
		
        def wrapper(f):
            dependence = cls.Dependence(executable, path)
            if hasattr(f, '__depend_on__'):
                f.__depend_on__.append(dependence)
            else:
                f.__depend_on__ = [dependence]
            return f
        return wrapper
    def check_depends(self):
	"Проверка наличия зависимостей для последовательности команд"
        def check(dependence):
	    "Проверка зависимости"
        for x in chain(*(getattr(x.func, '__depend_on__', ()) for x in self)):
            check(x)

Вот так объявляются команды

@Executor.depend_on('hg.exe')
def load_sources(revision):
    pass
def build_executive():
    pass
@Executor.depend_on('hhc.exe')
def build_help():
    pass
@Executor.depend_on('candle.exe', WIX_PATH)
@Executor.depend_on('light.exe', WIX_PATH)
def build_installer():
    pass

А вот так они используются
executor = Executor()
executor.append(build_executive)
executor.append(build_help)
executor.run()

Все хорошо, до тех пор пока не используем декорированную функцию
executor.append(partial(load_sources, options.revision))

Ложечки нашлись Я реализовал этот кусок по другому, но осадочек остался все думаю - можно ли реализовать именно в таком синтаксисе? Есть идеи?



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано PooH (Июль 18, 2014 07:28:54)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version