Может ли Pweave хорошо играть с Руффусом?
Я заинтересован в разработке самодокументируемых трубопроводов.
Могу ли я обернуть задания Руффуса в куски Pweave?
Pweave and Ruffus
==============================================================
**Let's see if Pweave and ruffus can play nice**
<<load_imports>>=
import time
from ruffus import *
@
**Do this**
<<task1>>=
task1_param = [
[ None, 'job1.stage1'], # 1st job
[ None, 'job2.stage1'], # 2nd job
]
@files(task1_param)
def first_task(no_input_file, output_file):
open(output_file, "w")
@
У меня такое чувство, что декораторы Раффуса отбрасывают Pweave:
$ Pweave ruffus.Pnw
Processing chunk 1 named load_imports
Processing chunk 2 named task1
<type 'exceptions.TypeError'>
("unsupported operand type(s) for +: 'NoneType' and 'str'",)
Возможно, есть обходной путь?
2 ответа
Я являюсь автором Ruffus и только что зарегистрировал изменения в ruffus, чтобы позволить ему сотрудничать с pweave в хранилище исходного кода Google. Я буду в следующем выпуске.
Вы можете получить последний (исправленный) источник с помощью следующей командной строки, если вам не терпится:
hg clone https://bunbun68@code.google.com/p/ruffus/
Лео
Детали следующие:
Ruffus использует полное имя (с именем модуля) каждой функции задачи ruffus, чтобы однозначно идентифицировать код, чтобы можно было ссылаться на задачи конвейера по имени.
Код Pweave был очень простым. Ницца! Pweave отправляет куски кода за раз интерпретатору python для exec
чок за куском Конечно, чанки не принадлежат ни одному "модулю", а функции задач имеют function.__module__
значения None
а не любая строка.
Единый разумный str()
преобразование None
в "None"
кажется, решил проблему.
Лео
Для записи, pweave отлично работает с декораторами.
Это связано с тем, как ruffus определяет, какая функция является какой - функция должна принадлежать файлу модуля, так как function.__module__
свойство используется. Я не уверен, что вы можете обмануть это, включив всю информацию, необходимую для создания этих идентификаторов функций.
Вы можете увидеть ошибки для себя, если вы редактируете pweb.py
скрипт включен в pweave, так что try:...except
: заявления в pweave()
функция более многословна (проще всего просто закомментировать try
а также except
части). Ошибки, которые вы получаете, находятся в самых глубоких кусочках грубости.
Я бы посоветовал держаться подальше от сложной библиотеки, такой как ruffus, для дидактических целей, так как ruffus, в частности, использует несколько хаков (синтаксический сахар, если хотите) для обеспечения простого пользовательского интерфейса. Если вы намерены использовать его для этой цели, вы можете попробовать связаться с автором, который был довольно отзывчив на мои запросы. У него могут быть некоторые идеи о том, как это сделать.