Может ли Pweave хорошо играть с Руффусом? - PullRequest
2 голосов
/ 09 января 2012

Я заинтересован в разработке самодокументируемых трубопроводов.

Можно ли обернуть Раффус заданий в 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 ]

2 голосов
/ 14 января 2012

Я являюсь автором Ruffus и только что зарегистрировал изменения в ruffus, чтобы позволить ему сотрудничать с pweave в хранилище исходного кода Google.Я буду в следующей версии.

Вы можете получить последний (фиксированный) источник с помощью следующей командной строки, если вам не терпится:

hg clone https://bunbun68@code.google.com/p/ruffus/ 

Лев

подробности приведены ниже:

Ruffus использует полное имя (с именем модуля) каждой функции задачи ruffus для уникальной идентификации кода, чтобы можно было ссылаться на задачи конвейера по имени.

PweaveКод был очень простым.Ницца!Pweave отправляет куски кода за раз интерпретатору python, чтобы получить кусочек exec -ed-chunk.Конечно, чанки не принадлежат ни одному «модулю», а функции задач имеют значения function.__module__, равные None, а не какую-либо строку.

Один здравомыслящий str() преобразовавший None в "None", похоже, решил проблему.

Лев

1 голос
/ 10 января 2012

Для записи pweave отлично работает с декораторами.

Это связано с тем, как ruffus определяет, какая функция является какой - функция фактически должна принадлежать файлу модуля, как свойство function.__module__используется.Я не уверен, что вы можете обмануть его, включив всю информацию, необходимую для создания этих идентификаторов функций.

Вы можете сами увидеть ошибки, если отредактируете скрипт pweb.py, включенный в pweave, так, чтобы try:...except: операторы в функции pweave() более многословны (проще всего просто закомментировать части try и except).Ошибки, которые вы получаете, заключаются в самых глубоких недоразумениях.

Я бы посоветовал держаться подальше от сложной библиотеки, такой как ruffus, для дидактических целей, так как ruffus, в частности, использует множество хаков (синтаксический сахар, если хотите).) предоставить простой пользовательский интерфейс.Если вы не можете использовать его для этой цели, вы можете попытаться связаться с автором, который был довольно отзывчив на мои запросы.У него могут быть некоторые идеи, как это сделать.

...