1

PythonのRuffusパッケージでパイプラインを作成したいのですが、私はその最も簡単な概念に苦しんでいます。 2つのタスクを順に実行する必要があります。第2のタスクは、第1のタスクの出力に依存する。 Ruffusのドキュメントでは、すべてが外部ファイルへのインポート/エクスポート用に設計されています。私は辞書のような内部データ型を扱いたい。内部入力のRuffusパイプライン

@followsは入力を受け付けず、@transformはdictsをとらないという問題があります。何か不足していますか?

def task1(): 
    # generate dict 
    properties = {'status': 'original'} 
    return properties 

@follows(task1) 
def task2(properties): 
    # update dict 
    properties['status'] = 'updated' 
    return properties 

最終的に、パイプラインは、外出先でクラスオブジェクトを更新するクラス内の関数のセットを結合する必要があります。

答えて

0

入力/出力ファイルがある場合は、Ruffusデコレータのみを使用してください。 task1file1.txtを生成し、たとえば、これは次のようにあなたがパイプラインを書くことができfile2.txtを生成task2ための入力は、次のとおりです。あなただけの入力として辞書を取りたい場合は

@originate('file1.txt') 
def task1(output): 
    with open(output,'w') as out_file: 
     # write stuff to out_file 

@follows(task1) 
@transform(task1, suffix('1.txt'),'2.txt') 
def task2(input_,output): 
    with open(input_) as in_file, open(output,'w') as out_file: 
     # read stuff from in_file and write stuff to out_file 

、あなたはしないでくださいRuffusを必要とする(それが順次実行されるように)またはtask2task1を呼び出して、あなただけの適切なコードを注文することができます。

def task1(): 
    properties = {'status': 'original'} 
    return properties 

def task2(): 
    properties = task1() 
    properties['status'] = 'updated' 
    return properties 
+0

答えに感謝を。私は、タスクに直接依存することなく、モジュラーパイプラインを構築したかったのです。これが私が辞書のRuffusパッケージを乱用したかった理由です。 Ruffusはこの種のハックを意味していないようです:) – Damian

+0

@Damian 'pipeline_run'を呼び出すと、ファイルの存在(タイムスタンプ)をチェックするので、あなたの望む動作はRuffusでは不可能だと思います –

関連する問題