2013-03-07 2 views
0

HTTP 메서드 (GET, POST 등)를 설정하기 위해 Zope 2.10.9의 ZPublisher.Client .callmethod 인수와 함께 호출 해 보았습니다.하지만 예상대로 작동하지 않습니다. 항상 POST 요청을 보냅니다. 내가 method 인수를 제공하지 않으면 항상 GET 요청을 보냅니다.ZPublisher.Client.call로 HTTP 메서드를 설정하는 방법은 무엇입니까?

응용 프로그램 코드 : 나는 Client.py에 조금을 추적 한

Client.call(
    'http://...', 
    username = 'jdoe', 
    password = 'mypw', 
    method = 'GET') 

: OK

def call(url,username=None, password=None, **kw): 
    return apply(Function(url,username=username, password=password),(), kw) 

, 그래서 kw = { 'method': 'GET' }. 지금까지 내가 말할 수있는이

Function.__init__(
    'http://...', 
    username = 'jdoe', 
    password = 'mypw' 
).__call__(
    method = 'GET') 

Function.__init__로 변환 인수의 일환으로 method을 기대하지만이 전달되지 것 :

def __init__(self,url, 
       arguments=(),method=None,username=None,password=None, 
       timeout=None, 
       **headers): 
     ... 
     if method is not None: self.method=method 

Function.__call__ 이미 설정할 수 method을 기대 :

def __call__(self,*args,**kw): 
     method=self.method 

call의 서명과 apply 전화 __init__에 맞게 수정해야합니까, 아니면 내가 오해하고 있습니까? 이 오류가 정말 있다면, 여기에 제안 된 패치 (나 ™ 작동)입니다 :

--- Client.py.orig 
+++ Client.py 
@@ -271,9 +271,9 @@ 

     return f 

-def call(url,username=None, password=None, **kw): 
+def call(url, arguments=(), method=None, username=None, password=None, timeout=None, **kw): 

- return apply(Function(url,username=username, password=password),(), kw) 
+ return apply(Function(url, arguments=arguments, method=method, username=username, password=password, timeout=timeout),(), kw) 

############################################################################## 
# Implementation details below here 

Bug report.

답변

1

ZPublisher.Client 모듈은 실제로 고대이며 유지 관리되지 않은 것으로 간주되어야합니다.

예, call() 함수는 method의 변경을 처리하지 않으며 사용자가 제안한 방식을 처리하여 추가하면 작동합니다. 해결 방법은 call() 함수를 사용하지 않고 대신 Function() 클래스를 직접 사용하는 것입니다.

부담없이 Zope issue tracker에 패치를 추가하십시오.

+0

+1 OP에서 언급 한대로 버그 보고서를 만들었습니다. – l0b0

관련 문제