googleads / googleads/googleads-python-lib
Incorrect handling of 401 error response
オープン
まだ誰も着手していません。
enhancement
- 主要言語
- Python
- スター
- 749
- フォーク
- 967
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
For a single user, using his refresh token to do the following:
# Using googleads v23.0.1
customerService = adwordsClient.GetService('CustomerService', version='v201809')
accounts = customerService.getCustomers()
We get the following:
Traceback (most recent call last):
File "/home/user/project/.venv/lib/python3.6/site-packages/googleads/common.py", line 992, in MakeSoapRequest
*packed_args, _soapheaders=soap_headers)['body']['rval']
File "/home/user/project/.venv/lib/python3.6/site-packages/zeep/proxy.py", line 45, in __call__
kwargs,
File "/home/user/project/.venv/lib/python3.6/site-packages/zeep/wsdl/bindings/soap.py", line 130, in send
return self.process_reply(client, operation_obj, response)
File "/home/user/project/.venv/lib/python3.6/site-packages/zeep/wsdl/bindings/soap.py", line 195, in process_reply
return self.process_error(doc, operation)
File "/home/user/project/.venv/lib/python3.6/site-packages/zeep/wsdl/bindings/soap.py", line 287, in process_error
detail=etree_to_string(doc),
zeep.exceptions.Fault: Unknown fault occured
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/home/user/project/src/main.py", line 24, in <module>
from jobs.scheduler import scheduleJobs
File "/home/user/project/src/jobs/__init__.py", line 16, in <module>
from api.users import refreshUserEntities
File "/home/user/project/src/api/users.py", line 46, in <module>
from external import adwords_api
File "/home/user/project/src/external/adwords_api/__init__.py", line 1723, in <module>
refreshToken=refreshToken,
File "/home/user/project/.venv/lib/python3.6/site-packages/retrying.py", line 49, in wrapped_f
return Retrying(*dargs, **dkw).call(f, *args, **kw)
File "/home/user/project/.venv/lib/python3.6/site-packages/retrying.py", line 206, in call
return attempt.get(self._wrap_exception)
File "/home/user/project/.venv/lib/python3.6/site-packages/retrying.py", line 247, in get
six.reraise(self.value[0], self.value[1], self.value[2])
File "/home/user/project/.venv/lib/python3.6/site-packages/six.py", line 693, in reraise
raise value
File "/home/user/project/.venv/lib/python3.6/site-packages/retrying.py", line 200, in call
attempt = Attempt(fn(*args, **kwargs), attempt_number, False)
File "/home/user/project/src/external/adwords_api/__init__.py", line 260, in getDirectlyAccessibleAccountsForRefreshToken
accounts = customerService.getCustomers()
File "/home/user/project/.venv/lib/python3.6/site-packages/googleads/common.py", line 997, in MakeSoapRequest
'{%s}ApiExceptionFault' % self._GetBindingNamespace())
TypeError: a bytes-like object is required, not 'str'
The exception object is of type Fault, and contains the following response:
b'<?xml version=\'1.0\' encoding=\'utf-8\'?>\n<HTML>\n<HEAD>\n<TITLE>Unauthorized</TITLE>\n</HEAD>\n<BODY BGCOLOR="#FFFFFF" TEXT="#000000">\n<H1>Unauthorized</H1>\n<H2>Error 401</H2>\n</BODY>\n</HTML>'
I am guessing the API is not returning a proper SOAP response, instead - it is returning an HTML response denoting the error.
I am not sure if the library should handle this, or if the API behavior is invalid.
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
googleads/common.py の MakeSoapRequest から始め、customerService.getCustomers() の経路と Fault 応答の処理方法を追ってください。HTML 401 応答に対して期待される処理を確認し、完成した動作で、API のエラー情報を保持したまま、表示されている TypeError が発生しなくなっていることを検証してください。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- api
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100