PyDoIt: обмен определениями задач между модулями - PullRequest
0 голосов
/ 18 июня 2019

Вот более простая версия проблемы, с которой я сталкиваюсь. У меня есть задача в dodo.py файле. Эта задача имеет доступ к переменной уровня модуля name.

# dodo.py
name = 'John'

def task_hello():
    return {
        'actions': [f'echo Hello {name}!']
    }

Теперь я хочу иметь разные версии этой задачи. Наивный способ сделать это будет следующим.

# dodo1.py
name = 'Tim'

def task_hello():
    return {
        'actions': [f'echo Hello {name}!']
    }

И

# dodo2.py
name = 'Julia'

def task_hello():
    return {
        'actions': [f'echo Hello {name}!']
    }

Я хочу несколько dodo модулей. Однако я не хочу копировать определение задачи.

Обратите внимание, что, хотя я упомянул здесь только одну задачу для простоты, у меня есть набор взаимозависимых задач и подзадач. Кроме того, я не хочу использовать параметры командной строки и предпочитаю иметь несколько config файлов.

1 Ответ

0 голосов
/ 18 июня 2019

Наконец я закончил этим заниматься. Это решает проблему. Но я открыт для более элегантных решений.

dodo1.py

def mk_task_hello(name):
    yield {
        'basename': 'hello',
        'name': 'world',
        'actions': [f'echo Hello {name}!']
    }

dodo2.py

from dodo1 import mk_task_hello

name = 'Tim'


def task_hello():
    yield from mk_task_hello(name)

dodo3.py

from dodo1 import mk_task_hello

name = 'Julia'


def task_hello():
    yield from mk_task_hello(name)

dodo1.py является основным модулем реализации задачи, тогда как dodo2.py и dodo3.py - это разные экземпляры. Обратите внимание на поле basename в словаре задач. Это необходимо для работы зависимостей задачи (не показано в примере выше).

...