2012-01-09 62 views
2

我有興趣開發自記文件管道。Pweave可以和Ruffus一起玩嗎?

我可以在Pweave塊中包裝Ruffus任務嗎?

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的作者我很高興看到,利奧能夠解決這個問題。我希望你不要介意我爲你的問題添加了pweave標籤。 – 2012-02-23 06:38:01

回答

2

我是Ruffus的作者,剛剛檢查了ruffus的變化,以允許它與pweave合作進入谷歌源代碼庫。我將在下一個版本中發佈。

你可以得到最新的(固定)源使用下面的命令行,如果你不耐煩:

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

利奧

,具體情況如下:

Ruffus採用全合格每個ruffus任務函數的名稱(帶模塊名稱)唯一標識代碼,以便管道任務可以按名稱引用。

Pweave代碼非常簡單。太好了! Pweave每次向python解釋器發送大塊代碼,以塊爲單位完成塊。當然,塊不屬於任何「模塊」,並且任務函數的值爲None而不是任何字符串。

一個明智的str()轉換None"None"似乎已經解決了這個問題。

獅子座

1

爲了記錄,pweave可以很好地與裝飾器一起工作。

這與當使用function.__module__屬性時ruffus如何識別哪個函數是哪個函數實際上必須屬於模塊文件有關。我不確定你是否可以欺騙它來包含創建這些函數標識符所需的所有信息。

您可以看到自己的錯誤,如果您編輯包含pweave使得try:...exceptpweb.py腳本:語句在pweave()功能更詳細的(最簡單的只是註釋掉tryexcept部分)。你得到的錯誤是在最粗糙的部分。

爲了提供一個簡單的用戶界面,我建議您不要使用複雜的庫,如ruffus,因爲ruffus特別使用了一些hacks(語法糖,如果您願意的話)。如果您爲此目的而使用它,您可以嘗試聯繫對我的功能要求非常敏感的作者。他可能會對如何做到這一點有一些想法。