2012-01-09 8 views
2

Я заинтересован в разработке самодокументирующих трубопроводов.Может ли Плейв играть хорошо с Ruffus?

Могу ли я обернуть Ruffus заданиями в 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") 
@ 

Я получаю чувство декораторы Ruffus бросают 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'",) 

Возможно, есть обходной путь?

+0

Привет Джереми, как автор Pweave я рад видеть, что Лео был в состоянии исправить это. Надеюсь, вы не возражаете, что я добавил тэг плеера к вашему вопросу. –

ответ

2

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

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

hg clone https://[email protected]/p/ruffus/ 

Leo

Деталь следующим образом:

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

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

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

Лео

1

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^