2012-01-09 4 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)의 저자로서 레오가이 문제를 해결할 수있어서 기쁩니다. 귀하의 질문에 pweave 태그를 추가 했어도 괜찮 았으면 좋겠어요. –

답변

2

저는 Ruffus의 저자이며 ruffus가 Google 소스 코드 저장소에 pweave와 협력 할 수 있도록 변경 사항을 확인했습니다. 나는 다음 릴리스에 올거야.

당신이 참을성이있는 경우 다음과 같은 명령 줄을 사용하여 최신 (고정) 소스를 얻을 수 있습니다 다음과 같이

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

레오

세부 사항은 다음과 같습니다

Ruffus 자격을 갖춘 전체 사용 파이프 라인 태스크가 이름으로 참조 될 수 있도록 코드를 고유하게 식별하는 각 ruffus 태스크 함수의 이름 (모듈 이름 포함).

정연한 코드는 매우 간단했습니다. 좋은! Pweave는 한 번에 파이썬 해석기에 코드 덩어리를 보내어 청크로 exec -ed 청크로 만듭니다. 물론 청크는 "모듈"에 속하지 않으며 작업 함수는 function.__module__ 값이 어떤 문자열이 아닌 None입니다.

str()None에서 "None"으로 변환하는 것이 문제를 해결 한 것으로 보입니다.

레오

1

기록을 위해 pweave는 데코레이터에서 잘 작동합니다.

이것은 ruffus가 function.__module__ 속성이 사용되는 것처럼 실제로 어떤 모듈 파일에 속해야 하는지를 식별하는 방법과 관련이 있습니다. 나는이 기능 식별자를 만드는 데 필요한 모든 정보를 포함하도록 속일 수는 없다. pweave() 기능에 문 더 자세한입니다 (가장 쉬운 그냥 tryexcept 부분을 주석 처리됩니다) : 당신이 pweb.py 스크립트는 try:...except이되도록 pweave에 포함 된 편집하는 경우

당신은 자신에 대한 오류를 볼 수 있습니다. 당신이 얻는 오류는 가장 심한 사소한 부분에 있습니다.

저는 ruffus가 간단한 사용자 인터페이스를 제공하기 위해 여러 가지 해킹 (구문 설탕)을 사용하기 때문에 교훈적인 목적으로 ruffus와 같은 복잡한 라이브러리에 머무르는 것이 좋습니다. 이 목적으로 사용하기에 죽은 사람이라면 내 기능 요청에 매우 민감한 작성자에게 문의 해 볼 수 있습니다. 그는 이것을하는 방법에 대한 몇 가지 아이디어가있을 수 있습니다.