Итак, я занимаюсь автоматизацией сети и тестирую сценарий, написанный кем-то другим, который использует библиотеку dnacentersdk - которая ссылается на продукт под названием Cisco DNA Center, если вы с ним не знакомы. Это используется для вызовов API к продукту. Я использовал pip для установки вышеуказанной библиотеки, и она, конечно, импортируется в основной скрипт. Я изменил все переменные из скрипта, чтобы они указывали на мое собственное устройство, и оно подключается нормально, но не завершится. Основной сценарий long, который выполняет вызовы библиотеки выше, которые являются чрезвычайно длинными сценариями, поэтому я не буду вставлять все это, но когда я его запускаю, я получаю следующую трассировку и не могу понять:
Traceback (most recent call last):
File "template_archive.py", line 201, in <module>
archive_templates(dnac)
File "template_archive.py", line 57, in archive_templates
templates = dnac.template_programmer.gets_the_templates_available()
File "C:\Users\me\AppData\Local\Programs\Python\Python37-32\lib\site-packages\dnacentersdk\api\v1_3_0\template_programmer.py", line 275, in gets_the_templates_available
json=_payload)
File "C:\Users\me\AppData\Local\Programs\Python\Python37-32\lib\site-packages\dnacentersdk\restsession.py", line 390, in get
with self.request('GET', url, erc, 0, params=params, **kwargs) as resp:
AttributeError: __enter__
Часть кода из сценария restsession.py, которую он вызывает, находится здесь, помните, что этот сценарий является частью библиотеки, а не моей:
def get(self, url, params=None, **kwargs):
"""Sends a GET request.
Args:
url(basestring): The URL of the API endpoint.
params(dict): The parameters for the HTTP GET request.
**kwargs:
erc(int): The expected (success) response code for the request.
others: Passed on to the requests package.
Raises:
ApiError: If anything other than the expected response code is
returned by the DNA Center API endpoint.
"""
check_type(url, basestring, may_be_none=False)
check_type(params, dict)
# Expected response code
erc = kwargs.pop('erc', EXPECTED_RESPONSE_CODE['GET'])
stream = kwargs.get('stream', None)
with self.request('GET', url, erc, 0, params=params, **kwargs) as resp:
if stream and 'fileName' in resp.headers:
try:
file_name = resp.headers.get('fileName')
with open(file_name, 'wb') as f:
logger.debug('Downloading {} ...'.format(file_name))
for chunk in resp.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
except Exception as e:
raise dnacentersdkException('DownloadFailure {}'.format(e))
logger.debug('Downloaded')
return extract_and_parse_json(resp, ignore=stream)
return None
Я вошел в сценарии из библиотеки выше, и попытался добавить различные операторы печати, чтобы выяснить, где он ломается, но в итоге я получаю тот же вывод. Мне может просто понадобиться помощь в понимании этой точной части кода или, может быть, просто как ее устранить. Цените любую помощь здесь. Спасибо!