2017-01-09 12 views
0

私はabeiveを追加/削除しようとしています(gerrit set-reviewer)、pygerritからREST APIを使用する必要があります。私はしかし、rest.delete()は私の2つの場合にValueError: No JSON object could be decodedを与え、rest.post()方法を使用して、問題なく審査を追加することができます。pygerrit rest.delete()は "ValueError:No JSONオブジェクトをデコードできませんでした"を返します

まず、以下の例の口コミ中(userID)削除されますが、API自体は、JSONのエラーを返します。 400 Client Error: Bad Request for urlrest.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には、戻ると、エラーを動作しない以下の方法を用いて、2つだけの引数をとります。私は何が欠けていますか?

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応答がないことを示しているので、私はあなたの2回目の試行が正しいものだと思います。残念ながら、なぜうまくいかなかったのか分かりませんでした。私がチェックするために、いくつかのitensを指摘してみましょう...

(1)

なぜあなたは使用しました:

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

の代わりに:

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

(2)

このURLは間違っているようです:

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

正しいものは次のようになります。

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

私が手に "HTTPError:400クライアントエラー:不正な要求URLの" 両方の方法でエラーを! [23]:changes = rest.get( "/ changes"): – askb

+0

In [22]:クエリ= ['ステータス:開いている'、 '所有者:自己'、 'トピック:いくつかのトピック'、 '制限:100'] [23] /?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 –

関連する問題