Skip to content

AttributeError: __metadata__ on Python 3.13 #303

@kamyarghajar

Description

@kamyarghajar

There is compatibility problem which raises the following exception:

File "venv/lib/python3.13/site-packages/injector/__init__.py", line 1768, in build
    return self._build_class(self._target, **kwargs)
           ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
  File "venv/lib/python3.13/site-packages/injector/__init__.py", line 1763, in _build_class
    return self._injector.create_object(cls, additional_kwargs=kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "venv/lib/python3.13/site-packages/injector/__init__.py", line 1177, in create_object
    self.call_with_injection(init, self_=instance, kwargs=additional_kwargs)
    ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "venv/lib/python3.13/site-packages/injector/__init__.py", line 1216, in call_with_injection
    bindings = get_bindings(callable)
  File "venv/lib/python3.13/site-packages/injector/__init__.py", line 1358, in get_bindings
    has_injectable_parameters = any(
        _is_specialization(v, Annotated) and _inject_marker in v.__metadata__
        for v in type_hints.values()
    )
  File "venv/lib/python3.13/site-packages/injector/__init__.py", line 1359, in <genexpr>
    _is_specialization(v, Annotated) and _inject_marker in v.__metadata__
                                                           ^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/python@3.13/3.13.11/Frameworks/Python.framework/Versions/3.13/lib/python3.13/typing.py", line 1378, in __getattr__
    raise AttributeError(attr)
AttributeError: __metadata__. Did you mean: '__getattr__'?

which might be fixed by replacing:

has_injectable_parameters = any(
    _is_specialization(v, Annotated) and _inject_marker in v.__metadata__
    for v in type_hints.values()
)

in __init__.py file with:

has_injectable_parameters = any(
    _is_specialization(v, Annotated) and _inject_marker in getattr(v, "__metadata__", ())
    for v in type_hints.values()
)

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