2014-11-22 2 views
1

내 웹 서버가 원격 SOAP 서비스에서 데이터를 요청해야합니다. 이것은 매우 드물게 발생하므로 캐싱을 원하지 않습니다. SOAP 공급자는 때때로 스키마를 변경하고 새로운 매개 변수를 추가하기 때문에 매번 전체 스키마를 다운로드하고 구문 분석해야합니다.SUDS 스키마 캐싱을 완전히 비활성화하십시오.

이 코드 사용하고 있습니다 :

url = 'http://someurl' 
cli = suds.client.Client(url) 
cli.set_options(cache=None) 
return cli 

을하지만 여전히 캐시를 가지고있다./tmp/suds에 임시 데이터가 생성됩니다. 어떻게 을 완전히 비우기 캐싱을 비활성화합니까?

cli.set_options.Client(url, cache=None)으로 변경하면 문제가 해결됩니까? 죄송합니다. 현재이 테스트를 할 수있는 능력이 없습니다.

답변

7

우선, 여러 버전과 거품이 흩어져 있기 때문에 명확하게 대답하기가 약간 어렵습니다. 현재 fedorahosted의 버전은 유지 보수가되지 않은 것처럼 보이지만 다른 포크는 꽤 활성 상태입니다 (비교).

Client은 다른 클래스를 인스턴스화하고 캐싱 옵션을 전달하기 때문에 생성자에서 캐시 옵션을 설정하는 것이 좋습니다. 즉 나중에 코드를 변경하면 이러한 다른 클래스에 아무런 영향을 미치지 않을 수도 있습니다 (코드 깊이가 너무 깊어서는 안됩니다).

또한 캐시를 해제 할 옳은 일이 코드의 일부는 cache == None 확인하지 않기 때문에

from suds.cache import NoCache 
# ... 
cli = suds.client.Client(url, cache=NoCache()) 

를 사용하는 것 같다.

그러나 나는 모든 캐시를 무조건 사용 불가능하게하는 것이 어려울 것이라고 제안하는 메일 링리스트의 다른 게시물을 보았으므로 위의 제안으로 모든 캐시를 비활성화 할 수 있는지 말할 수는 없습니다.

+0

펠릭스, 이걸 확인해보고 작동한다면 답을 받아 들일 것입니다. BTW, Suds 0.4를 사용하고 있습니다. 그것은 유지되지 않습니까? –

+1

거품이 난 후에 가장 좋은 선택은 [jurko-suds] (https://bitbucket.org/jurko/suds) 일 가능성이 큽니다. 나는 또한 구글이 그들의 필요를 위해 그 거품 포크의 수정 된 버전을 사용한다고 생각한다. 어떤 이유로 든 fedorahosted 비눗물 관리자는 2 년이 지나기 전에 비활성 상태입니다. (나는 꽤 오래 전에 핑을 시도했지만 아무 소용이 없었습니다). –

관련 문제