fix: update component registration to use new class reference (#8715)

The pyright language server is now able to resolve the import and provide completions for the component.

Co-authored-by: Michele Pangrazzi <xmikex83@gmail.com>
This commit is contained in:
Per Lunnemann Hansen 2025-01-27 14:52:24 +01:00 committed by GitHub
parent 0ac47b0064
commit 0e6d2a4c39
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 7 deletions

View File

@ -512,10 +512,12 @@ class _Component:
# We must explicitly redefine the type of the class to make sure language servers
# and type checkers understand that the class is of the correct type.
# mypy doesn't like that we do this though so we explicitly ignore the type check.
cls: cls.__name__ = new_class(cls.__name__, cls.__bases__, {"metaclass": ComponentMeta}, copy_class_namespace) # type: ignore[no-redef]
new_cls: cls.__name__ = new_class(
cls.__name__, cls.__bases__, {"metaclass": ComponentMeta}, copy_class_namespace
) # type: ignore[no-redef]
# Save the component in the class registry (for deserialization)
class_path = f"{cls.__module__}.{cls.__name__}"
class_path = f"{new_cls.__module__}.{new_cls.__name__}"
if class_path in self.registry:
# Corner case, but it may occur easily in notebooks when re-running cells.
logger.debug(
@ -523,15 +525,15 @@ class _Component:
new imported from '{new_module_name}'",
component=class_path,
module_name=self.registry[class_path],
new_module_name=cls,
new_module_name=new_cls,
)
self.registry[class_path] = cls
logger.debug("Registered Component {component}", component=cls)
self.registry[class_path] = new_cls
logger.debug("Registered Component {component}", component=new_cls)
# Override the __repr__ method with a default one
cls.__repr__ = _component_repr
new_cls.__repr__ = _component_repr
return cls
return new_cls
def __call__(self, cls: Optional[type] = None):
# We must wrap the call to the decorator in a function for it to work

View File

@ -0,0 +1,4 @@
---
fixes:
- |
Fixes a bug that causes pyright type checker to fail for all component objects.