From 8ad7445bbccf239717f0b1100faacd80e0fec441 Mon Sep 17 00:00:00 2001 From: Osma Suominen Date: Thu, 20 Jan 2022 10:06:45 +0200 Subject: [PATCH] Show friendlier message if loading spaCy model fails --- annif/analyzer/spacy.py | 8 +++++++- tests/test_analyzer_spacy.py | 7 +++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/annif/analyzer/spacy.py b/annif/analyzer/spacy.py index 96a746b38..4e058e583 100644 --- a/annif/analyzer/spacy.py +++ b/annif/analyzer/spacy.py @@ -2,6 +2,7 @@ import spacy from . import analyzer +from annif.exception import OperationFailedException import annif.util _KEY_LOWERCASE = 'lowercase' @@ -12,7 +13,12 @@ class SpacyAnalyzer(analyzer.Analyzer): def __init__(self, param, **kwargs): self.param = param - self.nlp = spacy.load(param, exclude=['ner', 'parser']) + try: + self.nlp = spacy.load(param, exclude=['ner', 'parser']) + except IOError as err: + raise OperationFailedException( + f"Loading spaCy model '{param}' failed - " + + f"please download the model.\n{err}") if _KEY_LOWERCASE in kwargs: self.lowercase = annif.util.boolean(kwargs[_KEY_LOWERCASE]) else: diff --git a/tests/test_analyzer_spacy.py b/tests/test_analyzer_spacy.py index 5ae3f4c46..fb53d8e9d 100644 --- a/tests/test_analyzer_spacy.py +++ b/tests/test_analyzer_spacy.py @@ -2,10 +2,17 @@ import pytest import annif.analyzer +from annif.exception import OperationFailedException spacy = pytest.importorskip("annif.analyzer.spacy") +def test_spacy_model_not_found(): + with pytest.raises(OperationFailedException) as excinfo: + annif.analyzer.get_analyzer("spacy(not_found)") + assert "Loading spaCy model 'not_found' failed" in str(excinfo.value) + + def test_spacy_english_tokenize_words(): analyzer = annif.analyzer.get_analyzer("spacy(en_core_web_sm)") words = analyzer.tokenize_words("""