2017-01-09 5 views
0

pygerrit에서 REST API를 사용해야하는 리뷰 작성자 (gerrit set-reviewer)를 추가/제거하려고합니다. 제거됩니다 아래의 예 검토 (userID)에서,pygerrit rest.delete()는 "ValueError : JSON 객체를 디코딩 할 수 없습니다."

첫째,하지만 API 자체는 JSON 오류를 반환 : 나는 그러나 rest.delete() 두 가지 경우에 저에게 ValueError: No JSON object could be decoded을 제공의 rest.post() 방법을 사용하여 문제없이 검토를 추가 할 수 있습니다. 400 Client Error: Bad Request for url : rest.delete()를 사용하여 두 번째

In [64]: reviewer1 = "userID" 
In [65]: rest.delete("/changes/" + changeid + "/reviewers/userID", data='{"message" : "%s"}' % "removed the reviewer" + reviewer1) 
ERROR:root:Invalid json content: 
--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-65-c972126a9f79> in <module>() 
----> 1 rest.delete("/changes/" + changeid + "/reviewers/userID", data='{"message" : "%s"}' % "removed the reviewer" + reviewer1) 

/home/user/.virtualenvs/testpy/local/lib/python2.7/site-packages/pygerrit/rest/__init__.pyc in delete(self, endpoint, **kwargs) 
    171   kwargs.update(self.kwargs.copy()) 
    172   response = requests.delete(self.make_url(endpoint), **kwargs) 
--> 173   return _decode_response(response) 
    174 
    175  def review(self, change_id, revision, review): 

/home/user/.virtualenvs/testpy/local/lib/python2.7/site-packages/pygerrit/rest/__init__.pyc in _decode_response(response) 
    48   content = content[len(GERRIT_MAGIC_JSON_PREFIX):] 
    49  try: 
---> 50   return json.loads(content) 
    51  except ValueError: 
    52   logging.error('Invalid json content: %s' % content) 

/usr/lib/python2.7/json/__init__.pyc in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw) 
    337    parse_int is None and parse_float is None and 
    338    parse_constant is None and object_pairs_hook is None and not kw): 
--> 339   return _default_decoder.decode(s) 
    340  if cls is None: 
    341   cls = JSONDecoder 

/usr/lib/python2.7/json/decoder.pyc in decode(self, s, _w) 
    362 
    363   """ 
--> 364   obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    365   end = _w(s, end).end() 
    366   if end != len(s): 

/usr/lib/python2.7/json/decoder.pyc in raw_decode(self, s, idx) 
    380    obj, end = self.scan_once(s, idx) 
    381   except StopIteration: 
--> 382    raise ValueError("No JSON object could be decoded") 
    383   return obj, end 

ValueError: No JSON object could be decoded 

, 문서에 따라 1에서, 그리고 반환 및 오류를 작동하지 않습니다 아래의 방법을 사용하여, 두 개의 인수를합니다. 내가 뭘 놓치고 있니?

In [63]: rest.delete("/changes/" + changeid + "/reviewers/userID") 
--------------------------------------------------------------------------- 
HTTPError         Traceback (most recent call last) 
<ipython-input-63-e71b8c78bcf1> in <module>() 
----> 1 rest.delete("/changes/" + changeid + "/reviewers/userID") 

/home/user/.virtualenvs/testpy/local/lib/python2.7/site-packages/pygerrit/rest/__init__.pyc in delete(self, endpoint, **kwargs) 
    171   kwargs.update(self.kwargs.copy()) 
    172   response = requests.delete(self.make_url(endpoint), **kwargs) 
--> 173   return _decode_response(response) 
    174 
    175  def review(self, change_id, revision, review): 

/home/user/.virtualenvs/testpy/local/lib/python2.7/site-packages/pygerrit/rest/__init__.pyc in _decode_response(response) 
    44  content = response.content.strip() 
    45  logging.debug(content[:512]) 
---> 46  response.raise_for_status() 
    47  if content.startswith(GERRIT_MAGIC_JSON_PREFIX): 
    48   content = content[len(GERRIT_MAGIC_JSON_PREFIX):] 

/home/user/.virtualenvs/testpy/local/lib/python2.7/site-packages/requests/models.pyc in raise_for_status(self) 
    882 
    883   if http_error_msg: 
--> 884    raise HTTPError(http_error_msg, response=self) 
    885 
    886  def close(self): 

HTTPError: 400 Client Error: Bad Request for url: https://git.review.org/gerrit/a/changes/CHANGEID/reviewers/userID 

답변

0

Gerrit delete-reviewer REST documentation는 DELETE 엔드 포인트에 대한 JSON 응답이 없다는 것을 보여줍니다, 그래서 두 번째 시도가 올바른 것 같아요. 불행하게도 왜 작동하지 않는지 알 수 없었습니다. ... 나 일부 itens 확인할 지적하자

(1)

왜 사용 않았다

rest.delete("/changes/" + changeid + "/reviewers/userID") 

대신에 :

rest.delete("/changes/" + changeid + "/reviewers/" + userID) 

(2)

URL이 잘못 되었음 :

,210
https://git.review.org/gerrit/a/changes/CHANGEID/reviewers/userID 

올바른 일을해야한다 :

https://git.review.org/a/changes/CHANGEID/reviewers/userID 
+0

나는 "HTTPError : 400 클라이언트 오류 : URL에 대한 잘못된 요청"GET 두 가지 방법으로 오류! [23]에서 : changes = rest.get ("/ changes") : – askb

+0

[23]에서 : 질의 = [ '상태 : 공개', '소유자 : 자기', '주제 : 일부 주제', '제한 : 100' /? q = % s "%"% 20 ".join (쿼리)) 위의 코드는'https : // git.review.org/gerrit /'에서 작동하므로 URL이 정확해야한다고 가정합니다. 나는 왜이 오류를 "ValueError : No JSON 객체가 디코딩 될 수 있는지"에 대한 이해에 관심이있다. 귀하의 경우 delete() api가 예상대로 작동합니까? – askb

+0

죄송합니다, 저는 python을 사용하지 않지만 명령을 실행하는 검토자를 제거 할 수있었습니다 : curl --request DELETE - netrc https : // GERRIT-SERVER/a/changes/CHANGE/reviewers/USER –

관련 문제