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

Python 3.11 AttributeError: module 'collections' has no attribute 'Iterable' #105

Open
network-shark opened this issue Jun 30, 2023 · 2 comments

Comments

@network-shark
Copy link

network-shark commented Jun 30, 2023

Hey !

It seems that there was a deprecation in the collections lib.

When using reclass with python 3.10+ I do get the following error.

AttributeError: module 'collections' has no attribute 'Iterable'

Did a quick google search and found a workaround.

Let me know what you think. I could create a PR.

reclass/values/parser_funcs.py

11c11,15
< import collections
---
> try:
>     from collections.abc import Iterable
> except ImportError:
>     from collections import Iterable
>
52c56
<     if (isinstance(w, collections.Iterable) and
---
>     if (isinstance(w, Iterable) and
╰─ reclass -n node01 -b .
Traceback (most recent call last):
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/storage/memcache_proxy.py", line 51, in get_class
    return self._classes_cache[environment][name]
           ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
KeyError: 'base'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/bin/reclass", line 33, in <module>
    sys.exit(load_entry_point('reclass==1.7.0', 'console_scripts', 'reclass')())
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/cli.py", line 44, in main
    data = reclass.nodeinfo(options.nodename)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/core.py", line 272, in nodeinfo
    return self._nodeinfo_as_dict(nodename, self._nodeinfo(nodename, None))
                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/core.py", line 250, in _nodeinfo
    node = self._node_entity(nodename)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/core.py", line 245, in _node_entity
    return self._recurse_entity(node_entity, merge_base=merge_base, context=merge_base, seen=seen,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/core.py", line 135, in _recurse_entity
    class_entity = self._storage.get_class(klass, environment, self._settings)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/storage/memcache_proxy.py", line 55, in get_class
    ret = self._real_storage.get_class(name, environment, settings)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/storage/yaml_fs/__init__.py", line 111, in get_class
    entity = YamlData.from_file(path).get_entity(name, pathname, settings)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/storage/yamldata.py", line 98, in get_entity
    parameters = datatypes.Parameters(parameters, settings, self._uri)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/datatypes/parameters.py", line 67, in __init__
    self.merge(mapping)
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/datatypes/parameters.py", line 234, in merge
    wrapped = self._wrap_dict(other)
              ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/datatypes/parameters.py", line 124, in _wrap_dict
    d[k] = self._get_wrapped(k, v)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/datatypes/parameters.py", line 110, in _get_wrapped
    return self._wrap_value(value)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/datatypes/parameters.py", line 97, in _wrap_value
    return self._wrap_dict(value)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/datatypes/parameters.py", line 124, in _wrap_dict
    d[k] = self._get_wrapped(k, v)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/datatypes/parameters.py", line 110, in _get_wrapped
    return self._wrap_value(value)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/datatypes/parameters.py", line 97, in _wrap_value
    return self._wrap_dict(value)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/datatypes/parameters.py", line 124, in _wrap_dict
    d[k] = self._get_wrapped(k, v)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/datatypes/parameters.py", line 110, in _get_wrapped
    return self._wrap_value(value)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/datatypes/parameters.py", line 102, in _wrap_value
    return Value(value, self._settings, self._uri,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/values/value.py", line 31, in __init__
    self._item = self._parser.parse(value, self._settings)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/values/parser.py", line 68, in parse
    tokens = parsers.listify(tokens)
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sharky/.pyenv/versions/py3110_network_automation/lib/python3.11/site-packages/reclass/values/parser_funcs.py", line 52, in listify
    if (isinstance(w, collections.Iterable) and
                      ^^^^^^^^^^^^^^^^^^^^
AttributeError: module 'collections' has no attribute 'Iterable'
 
@ganto
Copy link

ganto commented Jul 1, 2023

Does the fix from #103 doesn't work in this case? Haven't tested it with Python 3.11 yet.

@mknod
Copy link

mknod commented Sep 13, 2024

With python 3.12 I ran into this error and fixed it using #103 thank you

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

3 participants