From 54ee767a8014e4c7083baa241b9f7031d8cbb9ac Mon Sep 17 00:00:00 2001 From: Juho Inkinen <34240031+juhoinkinen@users.noreply.github.com> Date: Wed, 27 Sep 2023 16:12:43 +0300 Subject: [PATCH] Initialize projects matching pattern given in env variable --- annif/registry.py | 5 ++++- tests/conftest.py | 9 ++++++++- tests/test_project.py | 14 ++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/annif/registry.py b/annif/registry.py index a97dc366e..aaf41c98f 100644 --- a/annif/registry.py +++ b/annif/registry.py @@ -1,6 +1,7 @@ """Registry that keeps track of Annif projects""" from __future__ import annotations +import os import re from flask import Flask, current_app @@ -35,9 +36,11 @@ def __init__( self._projects_config_path = projects_config_path self._datadir = datadir self._init_vars() + projects_pattern = os.getenv("ANNIF_PROJECTS_INIT", ".*") if init_projects: for project in self._projects[self._rid].values(): - project.initialize() + if re.search(projects_pattern, project.project_id) is not None: + project.initialize() def _init_vars(self) -> None: # initialize the static variables, if necessary diff --git a/tests/conftest.py b/tests/conftest.py index 76378a98d..75247262d 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,6 +1,6 @@ """common fixtures for use by all test classes""" -import os.path +import os import shutil import unittest.mock @@ -33,6 +33,13 @@ def app_with_initialize(): return app +@pytest.fixture(scope="module") +@unittest.mock.patch.dict(os.environ, {"ANNIF_PROJECTS_INIT": ".*-fi"}) +def app_with_initialize_fi_projects(): + app = annif.create_app(config_name="annif.default_config.TestingInitializeConfig") + return app + + @pytest.fixture def app_client(app): with app.test_client() as app_client: diff --git a/tests/test_project.py b/tests/test_project.py index e626e180c..c2258ceb4 100644 --- a/tests/test_project.py +++ b/tests/test_project.py @@ -300,6 +300,20 @@ def test_project_initialized(app_with_initialize): assert project.backend.initialized +def test_project_not_initialized_with_selection(app_with_initialize_fi_projects): + with app_with_initialize_fi_projects.app_context(): + project = annif.registry.get_project("dummy-en") + assert not project.initialized + assert not project.backend.initialized + + +def test_project_initialized_with_selection(app_with_initialize_fi_projects): + with app_with_initialize_fi_projects.app_context(): + project = annif.registry.get_project("dummy-fi") + assert project.initialized + assert project.backend.initialized + + def test_project_file_not_found(): app = annif.create_app(config_name="annif.default_config.TestingNoProjectsConfig") with app.app_context():