Python AttributeError: __enter__ from с self.request из импортированной библиотеки - PullRequest
0 голосов
/ 12 февраля 2020

Итак, я занимаюсь автоматизацией сети и тестирую сценарий, написанный кем-то другим, который использует библиотеку 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

Я вошел в сценарии из библиотеки выше, и попытался добавить различные операторы печати, чтобы выяснить, где он ломается, но в итоге я получаю тот же вывод. Мне может просто понадобиться помощь в понимании этой точной части кода или, может быть, просто как ее устранить. Цените любую помощь здесь. Спасибо!

...