mirror of
https://github.com/explosion/spaCy.git
synced 2024-12-25 01:16:28 +03:00
Check for any non-Doc returned value for components (#11424)
This commit is contained in:
parent
8fc0efc502
commit
78f5503a29
|
@ -230,8 +230,9 @@ class Errors(metaclass=ErrorsWithCodes):
|
|||
"initialized component.")
|
||||
E004 = ("Can't set up pipeline component: a factory for '{name}' already "
|
||||
"exists. Existing factory: {func}. New factory: {new_func}")
|
||||
E005 = ("Pipeline component '{name}' returned None. If you're using a "
|
||||
"custom component, maybe you forgot to return the processed Doc?")
|
||||
E005 = ("Pipeline component '{name}' returned {returned_type} instead of a "
|
||||
"Doc. If you're using a custom component, maybe you forgot to "
|
||||
"return the processed Doc?")
|
||||
E006 = ("Invalid constraints for adding pipeline component. You can only "
|
||||
"set one of the following: before (component name or index), "
|
||||
"after (component name or index), first (True) or last (True). "
|
||||
|
|
|
@ -1028,8 +1028,8 @@ class Language:
|
|||
raise ValueError(Errors.E109.format(name=name)) from e
|
||||
except Exception as e:
|
||||
error_handler(name, proc, [doc], e)
|
||||
if doc is None:
|
||||
raise ValueError(Errors.E005.format(name=name))
|
||||
if not isinstance(doc, Doc):
|
||||
raise ValueError(Errors.E005.format(name=name, returned_type=type(doc)))
|
||||
return doc
|
||||
|
||||
def disable_pipes(self, *names) -> "DisabledPipes":
|
||||
|
|
|
@ -670,3 +670,25 @@ def test_dot_in_factory_names(nlp):
|
|||
|
||||
with pytest.raises(ValueError, match="not permitted"):
|
||||
Language.factory("my.evil.component.v1", func=evil_component)
|
||||
|
||||
|
||||
def test_component_return():
|
||||
"""Test that an error is raised if components return a type other than a
|
||||
doc."""
|
||||
nlp = English()
|
||||
|
||||
@Language.component("test_component_good_pipe")
|
||||
def good_pipe(doc):
|
||||
return doc
|
||||
|
||||
nlp.add_pipe("test_component_good_pipe")
|
||||
nlp("text")
|
||||
nlp.remove_pipe("test_component_good_pipe")
|
||||
|
||||
@Language.component("test_component_bad_pipe")
|
||||
def bad_pipe(doc):
|
||||
return doc.text
|
||||
|
||||
nlp.add_pipe("test_component_bad_pipe")
|
||||
with pytest.raises(ValueError, match="instead of a Doc"):
|
||||
nlp("text")
|
||||
|
|
Loading…
Reference in New Issue
Block a user