From 02b0e03465acb25edbd1a59e4feddbf9b66db2ef Mon Sep 17 00:00:00 2001 From: Marc Andreu Grillo Aguilar Date: Wed, 11 Feb 2026 15:14:36 -0500 Subject: [PATCH] LIBFCREPO-1758: Allow configuring of plastron client cache per request https://umd-dit.atlassian.net/browse/LIBFCREPO-1758 --- src/solrizer/web.py | 13 ++++++++++++- tests/test_web.py | 18 +++++++++++++++--- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/solrizer/web.py b/src/solrizer/web.py index bf303c7..91ad704 100644 --- a/src/solrizer/web.py +++ b/src/solrizer/web.py @@ -130,11 +130,12 @@ from solrizer import __version__ from solrizer.errors import ( + ConfigurationError, NoResourceRequested, ProblemDetailError, ResourceNotAvailable, UnknownCommand, - problem_detail_response, ConfigurationError, + problem_detail_response, ) from solrizer.indexers import IndexerContext, IndexerError from solrizer.solr import create_atomic_update @@ -260,6 +261,16 @@ def create_app(): if '__default__' not in app.config['INDEXERS']: app.config['INDEXERS']['__default__'] = ['content_model'] + @app.before_request + def before_request(): + plastron_cache_enabled = request.args.get('plastron-cache-enabled') + if plastron_cache_enabled == 'no' or plastron_cache_enabled == '0': + app.config['PLASTRON_CACHE_ENABLED'] = False + client.session = get_session(app.config) + else: + app.config['PLASTRON_CACHE_ENABLED'] = True + client.session = get_session(app.config) + # Source: https://gist.github.com/alexaleluia12/e40f1dfa4ce598c2e958611f67d28966 @app.after_request def after_request(response): diff --git a/tests/test_web.py b/tests/test_web.py index 46c0ae1..6409ee7 100644 --- a/tests/test_web.py +++ b/tests/test_web.py @@ -1,11 +1,11 @@ from typing import Any -from unittest.mock import patch, MagicMock +from unittest.mock import MagicMock, patch import pytest from requests import Session -from requests_cache import CachedSession, BaseCache +from requests_cache import BaseCache, CachedSession -from solrizer.web import load_config_from_files, get_session +from solrizer.web import get_session, load_config_from_files def test_load_config_from_files(datadir): @@ -88,3 +88,15 @@ def test_health_check(client): assert 'total' in memory assert 'used' in memory assert 'used_percent' in memory + + +def test_session_before_request(client, app): + app.config['PLASTRON_CACHE_ENABLED'] = True + + response = client.get('/', query_string={'plastron-cache-enabled': 'no'}) + assert response.status_code == 200 + assert isinstance(app.config['repo'].client.session, Session) + + response = client.get('/') + assert response.status_code == 200 + assert isinstance(app.config['repo'].client.session, CachedSession)