Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dataclasses has become a dependency of dacite on python 3.7.x #48

Closed
mvalkon opened this issue Apr 15, 2019 · 7 comments
Closed

Dataclasses has become a dependency of dacite on python 3.7.x #48

mvalkon opened this issue Apr 15, 2019 · 7 comments

Comments

@mvalkon
Copy link

mvalkon commented Apr 15, 2019

I'm getting a confusing error with dacite 0.0.25. I'm using dacite in anAWS Lambda function (which is why the traceback looks a little funny), and I'm getting the following exception when importing dacite.config.Config:

AttributeError: module 'typing' has no attribute '_ClassVar'
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/cris/queue_event.py", line 8, in <module>
    from dacite import Config, from_dict
  File "/var/task/dacite/__init__.py", line 1, in <module>
    from dacite.config import Config
  File "/var/task/dacite/config.py", line 14, in <module>
    @dataclass
  File "/var/task/dataclasses.py", line 958, in dataclass
    return wrap(_cls)
  File "/var/task/dataclasses.py", line 950, in wrap
    return _process_class(cls, init, repr, eq, order, unsafe_hash, frozen)
  File "/var/task/dataclasses.py", line 801, in _process_class
    for name, type in cls_annotations.items()]
  File "/var/task/dataclasses.py", line 801, in <listcomp>
    for name, type in cls_annotations.items()]
  File "/var/task/dataclasses.py", line 659, in _get_field
    if (_is_classvar(a_type, typing)
  File "/var/task/dataclasses.py", line 550, in _is_classvar
    return type(a_type) is typing._ClassVar

For some reason, the 0.0.25 release introduces dataclasses==0.6 as a dependency even though I'm on python 3.7.2

% pip --version
pip 19.0.3 from /usr/local/opt/pyenv/versions/3.7.2/envs/test/lib/python3.7/site-packages/pip (python 3.7)
% python --version
Python 3.7.2
% pip freeze
% pip install dacite
Collecting dacite
  Using cached https://files.pythonhosted.org/packages/48/a8/218d76025df9b63f6896f91a432a2ccbc658efb8c404e2d0af8c28f89dde/dacite-0.0.25-py3-none-any.whl
Collecting dataclasses (from dacite)
  Using cached https://files.pythonhosted.org/packages/26/2f/1095cdc2868052dd1e64520f7c0d5c8c550ad297e944e641dbf1ffbb9a5d/dataclasses-0.6-py3-none-any.whl
Installing collected packages: dataclasses, dacite
Successfully installed dacite-0.0.25 dataclasses-0.6
% pip freeze
dacite==0.0.25
dataclasses==0.6

If I attempt to install the 0.0.24, the dataclasses dependency is not present

pip install dacite==0.0.24
Collecting dacite==0.0.24
  Using cached https://files.pythonhosted.org/packages/60/a8/50cc19f7254f688c41140fd33531499f7d0b529617757c119a5b0e95ce01/dacite-0.0.24-py3-none-any.whl
Installing collected packages: dacite
Successfully installed dacite-0.0.24
% pip freeze
dacite==0.0.24

I went through the setup.py and cannot really understand where the dataclasses dependency leaks in on a 3.7 python. At the moment I've resorted to downgrading to 0.0.24 for my use case.

@konradhalas
Copy link
Owner

@mvalkon thank you for reporting this issue. I have no idea what is going on, but I will check it :)

@micah-williamson
Copy link

I'm having this same issue. It relates to conditional dependencies in the setup file.

PR here-

#49

@konradhalas
Copy link
Owner

Fixed, please try with newest version 0.0.26. Now I explicite "deploy" package on PyPI with Python 3.7 version.

@micah-williamson
Copy link

Thanks for the fast response. That worked!

@mvalkon
Copy link
Author

mvalkon commented Apr 25, 2019

Thanks for the fix @konradhalas

@konradhalas
Copy link
Owner

No problem guys, it was my fault. Thank you for reporting!

@beetree
Copy link

beetree commented Feb 16, 2020

Still having the same issue with version 1.2.0

Here's log from lambda:

Function Logs:
START RequestId: d4d174f0-60ea-474c-bcad-d865736d2fc0 Version: $LATEST
[ERROR] AttributeError: module 'typing' has no attribute '_ClassVar'
Traceback (most recent call last):
  File "/var/lang/lib/python3.8/imp.py", line 234, in load_module
    return load_source(name, filename, file)
  File "/var/lang/lib/python3.8/imp.py", line 171, in load_source
    module = _load(spec)
  File "<frozen importlib._bootstrap>", line 702, in _load
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/var/task/src/new_order/order_load_from_shopify.py", line 2, in <module>
    from lib.Order import Order
  File "/var/task/lib/Order.py", line 3, in <module>
    from dacite import from_dict
  File "/var/task/aws_packages/dacite/__init__.py", line 1, in <module>
    from dacite.config import Config
  File "/var/task/aws_packages/dacite/config.py", line 6, in <module>
    class Config:
  File "/var/task/aws_packages/dataclasses.py", line 958, in dataclass
    return wrap(_cls)
  File "/var/task/aws_packages/dataclasses.py", line 950, in wrap
    return _process_class(cls, init, repr, eq, order, unsafe_hash, frozen)
  File "/var/task/aws_packages/dataclasses.py", line 800, in _process_class
    cls_fields = [_get_field(cls, name, type)
  File "/var/task/aws_packages/dataclasses.py", line 800, in <listcomp>
    cls_fields = [_get_field(cls, name, type)
  File "/var/task/aws_packages/dataclasses.py", line 659, in _get_field
    if (_is_classvar(a_type, typing)
  File "/var/task/aws_packages/dataclasses.py", line 550, in _is_classvar
    return type(a_type) is typing._ClassVarEND RequestId: d4d174f0-60ea-474c-bcad-d865736d2fc0
REPORT RequestId: d4d174f0-60ea-474c-bcad-d865736d2fc0	Duration: 4879.35 ms	Billed Duration: 4900 ms	Memory Size: 128 MB	Max Memory Used: 30 MB	
Unknown application error occurred

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants