Skip to content

Commit

Permalink
fix: update component registration to use new class reference
Browse files Browse the repository at this point in the history
The pyright language server is now able to resolve the import and provide completions for the component.
  • Loading branch information
kaqmak committed Jan 21, 2025
1 parent f96839e commit c6639af
Showing 1 changed file with 9 additions and 7 deletions.
16 changes: 9 additions & 7 deletions haystack/core/component/component.py
Original file line number Diff line number Diff line change
Expand Up @@ -512,26 +512,28 @@ def copy_class_namespace(namespace):
# 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(
"Component {component} is already registered. Previous imported from '{module_name}', \
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
Expand Down

0 comments on commit c6639af

Please sign in to comment.