2012-08-14 2 views
1

python Google App Engine 애플리케이션에서 suds를 사용하려고합니다.suds : google app engine support

client = Client(url) 
    File "/base/data/home/apps/sandbox/test.349741318547153856/suds/client.py", 
line 109, in __init__ 
    options.cache = ObjectCache(days=1) 
    File "/base/data/home/apps/sandbox/test.349741318547153856/suds/cache.py", 
line 141, in __init__ 
    location = os.path.join(tmp(), 'suds') 
    File "/base/python_runtime/python_dist/lib/python2.5/tempfile.py", 
line 45, in PlaceHolder 
    raise NotImplementedError("Only tempfile.TemporaryFile is 
available for use") 
NotImplementedError: Only tempfile.TemporaryFile is available for use 

내가 client.py에서 라인 (109)을 변경 시도 :

options.cache = ObjectCache(days=1) 

에 :이 역 추적 입니다

options.cache = None 

그리고 지금은 작동하지만 난 아니에요 그 것이 미래의 에 영향을 줄 수 있는지 확인하십시오.

아무도 나를 도울 수 있다면 정말 고맙습니다. 사전에

감사합니다.

답변

2

appengine의 로컬 파일에 쓸 수 없습니다. 이유는 당신이 임시 파일에 처리 된 WSDL의 캐시를 작성하려고하는 오류가 발생 이유. 캐시하지 않거나 대체 캐시 메커니즘을 제공해야합니다. 나는 비싼 WSDL 파일로 appengine에 suds를 사용하고있다. 그래서 dev가 서버 파일 시스템에 캐시를 작성하기 위해 캐싱을 해킹 한 다음 배치 된 코드와 함께 캐시를 업로드했다.

내가 속이고 - 일종의.

def precache_wsdl(wsdl,principal): 
    log = logging.getLogger() 
    log.setLevel = logging.info 
    cache_location = os.path.join(os.path.dirname(__file__),"cache") 
    security = Security() 
    token = UsernameToken(*principal) 
    security.tokens.append(token) 
    client = Client(wsdl,cache=FileCache(cache_location)) 
    client.set_options(wsse=security) 

이 코드는 내 응용 프로그램 코드에서 정의했습니다. 원격 명령 api를로드하고 캐시를 미리 채운 로컬로 실행했습니다. 그렇다면 실제 appengine 코드에서 cach_location이 올바르게 설정되었는지 확인합니다. remote_api 쉘에서 실행할 때 서버 코드와 동일한 제한 사항으로 실행되지 않습니다. 실제로 쉘 아래에서 실행할 필요조차 없지만 그렇게 많이하는 경향이 있습니다.

+1

덕분에 ... 당신이 찾아 주실 수는, 당신은 어떻게 해킹 했습니까? –

+1

Ok..Buddy .. 내가 options.cache = None을 사용하면 퍼포먼스 나 다른 어떤 것에 영향을 미치는지 확인하고 싶다. –

+0

캐시하지 않으면 적어도 인스턴스가 시작될 때마다 wsdl 파일을 검색하고 다시 구문 분석하는 데 드는 비용이 발생합니다. 적절한 방법은 크기에 따라 데이터 저장소 또는 BLOB 저장소에 저장하는 자체 캐시 구현을 작성하는 것입니다. –

2

pip에서 jurko-suds를 사용하고 생성자에 cache=을 설정하십시오. 프롬프트 응답 buddy..for

from suds.cache import NoCache 
[...] 
client = Client(url, cache=NoCache())