Skip to content

ConfigBase's __post_init__ issue on python 3.14 #228

Description

@DamienGilliard

Describe the bug

Hi, I tried for the first time compas, and compas_viewer, and ran into an issue while trying a minimal example with python 3.14 via uv, on a fedora 43 device:

  File "/home/damien/testing_compas/.venv/lib64/python3.14/site-packages/compas_viewer/config.py", line 59, in __post_init__
    field_type = self.__annotations__[field_name]
                 ^^^^^^^^^^^^^^^^^^^^
AttributeError: 'MenubarConfig' object has no attribute '__annotations__'. Did you mean: '__annotate_func__'?

I could solve this by changing the line 59 of config.py to:

            field_type = type(self).__annotations__[field_name]

I also tried the original code with python 3.9 and the issue disappeared, so it is more a deprecation issue than a real "bug". I don't know how stupid of an idea it is to use compas_viewer in python 3.14 (I guess I will discover soon ;) ), and I don't want to open a pandora box that I have not the time to fix, but if this is only one of a few issues to make compas_viewer compatible with python 3.14, I'd be happy to make a small PR

To Reproduce

Steps to reproduce the behavior:

  1. Fedora 43 (but I guess any OS would have the same issue), fresh uv install, using python 3.14
  2. Sample script:

my pyproject.toml:

[project]
name = "testing-compas"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.14"
dependencies = [
    "compas>=2.15.1",
    "compas-viewer>=2.0.2",
]

my small script:

import compas
import compas_viewer
import compas.geometry
def main():
    viewer = compas_viewer.Viewer()
    box = compas.geometry.Box(1)
    viewer.scene.add(box)
    viewer.show()

if __name__ == "__main__":
    main()

Expected behavior

You should get as me something like:

damien@fedora:~/testing_compas$ uv run main.py 
Traceback (most recent call last):
  File "/home/damien/testing_compas/main.py", line 11, in <module>
    main()
    ~~~~^^
  File "/home/damien/testing_compas/main.py", line 5, in main
    viewer = compas_viewer.Viewer()
  File "/home/damien/testing_compas/.venv/lib64/python3.14/site-packages/compas_viewer/singleton.py", line 20, in __call__
    instance.__init__(*args, **kwargs)
    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/home/damien/testing_compas/.venv/lib64/python3.14/site-packages/compas_viewer/viewer.py", line 27, in __init__
    self.config = config or Config()
                            ~~~~~~^^
  File "<string>", line 5, in __init__
  File "<string>", line 3, in __init__
  File "<string>", line 5, in __init__
  File "/home/damien/testing_compas/.venv/lib64/python3.14/site-packages/compas_viewer/config.py", line 59, in __post_init__
    field_type = self.__annotations__[field_name]
                 ^^^^^^^^^^^^^^^^^^^^
AttributeError: 'MenubarConfig' object has no attribute '__annotations__'. Did you mean: '__annotate_func__'?

Further step

I am going to keep on playing with compas_viewer, and I will make a small PR in a few days if the issues I bump into are manageable (and all fixes backward compatible to 3.9. Up to you to close it without merging if you don't want any change ;) If you know in advance that this is a no-no, let me know as well ;)
Anyway thanks for developing compas !
This makes me very happy :

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions