2012-01-09 6 views
2

私は自己文書化パイプラインの開発に興味があります。Puffaは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/ 

レオ

次のような詳細は以下のとおりです。

Ruffusは完全修飾を使用していますパイプラインタスクを名前で参照できるように、コードを一意に識別する各ruffusタスク関数の名前(モジュール名付き)。

Pweaveコードは非常に簡単でした。ニース! Pweaveは一度にPythonインタプリタにコードのチャンクを送り、execチャンクでチャンクを送る。もちろん、チャンクはどのモジュールにも属しておらず、タスク関数はfunction.__module__の値で、文字列ではなくNoneです。

str()Noneから"None"に変換すると問題が解決したようです。

レオ

1

記録のために、pweaveはデコレータでうまく動作します。

これは、function.__module__プロパティが使用されているように、ruffusがどの機能(実際にはモジュールファイルに属していなければならないか)を特定する方法と関係があります。これらの関数識別子を作成するために必要なすべての情報を含めることはできません。 (最も簡単なだけでtryexcept部分をコメントアウトである)pweave()関数内の文より冗長です:

あなたがpweb.pyスクリプトを編集する場合は、あなた自身のためのエラーを表示することができますがtry:...exceptがそのようなことをpweaveに含まれています。あなたが得るエラーは、ruffusの最も深い部分にあります。

ruffusが特にシンプルなユーザーインターフェイスを提供するために多数のハッキング(構文上の砂糖)を使用するので、私は教訓的な目的のためにruffusのような複雑なライブラリから遠ざかることをお勧めします。あなたがこの目的のためにそれを使用して死んでいる場合は、私の機能要求に非常に反応している作者に連絡することができます。彼はこれを行う方法のいくつかのアイデアを持っているかもしれません。