CyberSource / cybersource-rest-client-python

Python client library for the CyberSource REST API
Other
20 stars 36 forks source link

Exception: Callable has no attribute __abc_registry #20

Open kimgault opened 5 years ago

kimgault commented 5 years ago

Expected Behavior

Cybersource-REST-Client-Python should work with the Python 3.7.

Actual Behavior

Users receive a Callable has no attribute __abc_registry error.

This is a known issue when installing typing on a system that has Python > 3.6 because typing is in the standard library since version 3.5. Importing typing with Python 3.7 fails.

Cloudwatch Log

[ERROR] AttributeError: type object 'Callable' has no attribute '_abc_registry'
Traceback (most recent call last):
  File "/var/lang/lib/python3.7/imp.py", line 234, in load_module
    return load_source(name, filename, file)
  File "/var/lang/lib/python3.7/imp.py", line 171, in load_source
    module = _load(spec)
  File "<frozen importlib._bootstrap>", line 696, in _load
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/var/task/app.py", line 4, in <module>
    from typing import Optional
  File "/var/task/typing.py", line 1347, in <module>
    class Callable(extra=collections_abc.Callable, metaclass=CallableMeta):
  File "/var/task/typing.py", line 1003, in __new__
    self._abc_registry = extra._abc_registry

Steps to Reproduce the Problem

  1. Installed the latest available version of the SDK through pip so it will install all required dependencies too.
  2. Create a test.py file and import the Cybersource SDK in an environment with Python > 3.5.
  3. Execute the script python or upload the code to Lambda and run it.

Suggestion for Fix

Opened a PR here: https://github.com/CyberSource/cybersource-rest-client-python/pull/21

gnongsie commented 5 years ago

Hi,

I may be wrong but I do not see this behavior in our tests.

Kindly refer to our builds on Travis CI to see the behavior with different versions of Python.

Link : https://travis-ci.org/CyberSource/cybersource-rest-samples-python

Let me know if I have missed something or if you still have some doubts.