From d92a60f1fe0ba9b2994b147507b70814950c86db Mon Sep 17 00:00:00 2001 From: Oluwapizzy Date: Tue, 15 Sep 2026 16:23:15 -0400 Subject: [PATCH] Forward QUERY_TOO_COMPLEX from conflict search. --- api/namex/VERSION.py | 2 +- api/namex/resources/requests.py | 18 ++++++++++++++---- api/namex/services/solr/solr_client.py | 13 ++++++++++++- api/pyproject.toml | 2 +- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/api/namex/VERSION.py b/api/namex/VERSION.py index 6d7a8db52..ac18bbe55 100644 --- a/api/namex/VERSION.py +++ b/api/namex/VERSION.py @@ -1 +1 @@ -__version__ = '1.2.73' +__version__ = '1.2.74' diff --git a/api/namex/resources/requests.py b/api/namex/resources/requests.py index 09bc5b35e..572ccb8e4 100644 --- a/api/namex/resources/requests.py +++ b/api/namex/resources/requests.py @@ -44,7 +44,7 @@ from namex.services.name_request import NameRequestService from namex.services.name_request.name_request import get_nrs_like_names, get_nrs_like_nr_num from namex.services.name_request.utils import check_ownership, get_or_create_user_by_jwt, valid_state_transition -from namex.services.solr.solr_client import SolrClient +from namex.services.solr.solr_client import QUERY_TOO_COMPLEX, SolrClient, SolrClientException from namex.services.solr.solr_helpers import SolrHlpers from namex.utils import queue_util from namex.utils.auth import cors_preflight @@ -1453,6 +1453,7 @@ class PossibleConflicts(Resource): responses={ 200: 'Conflict results fetched successfully', 401: 'Unauthorized', + 422: 'Query too complex for conflict search', 500: 'Internal server error', }, ) @@ -1460,9 +1461,18 @@ def get(name): start = request.args.get('start', PossibleConflicts.START) rows = request.args.get('rows', PossibleConflicts.ROWS) exact_phrase = str(request.args.get('exact_phrase', '')).strip() - results = SolrHlpers.get_possible_conflicts( - name, start=start, rows=rows, exact_phrase=exact_phrase - ) + try: + results = SolrHlpers.get_possible_conflicts( + name, start=start, rows=rows, exact_phrase=exact_phrase + ) + except SolrClientException as err: + body = err.body if isinstance(err.body, dict) else {} + if body.get('code') == QUERY_TOO_COMPLEX: + payload = {'code': QUERY_TOO_COMPLEX} + if body.get('message'): + payload['message'] = body['message'] + return make_response(jsonify(payload), err.status_code or 422) + raise return make_response(jsonify(results), 200) diff --git a/api/namex/services/solr/solr_client.py b/api/namex/services/solr/solr_client.py index 6ead01e7d..1c6798bcc 100644 --- a/api/namex/services/solr/solr_client.py +++ b/api/namex/services/solr/solr_client.py @@ -3,6 +3,8 @@ from namex.utils.auth import get_client_credentials +QUERY_TOO_COMPLEX = 'QUERY_TOO_COMPLEX' + class SolrClientException(Exception): def __init__(self, wrapped_err=None, body=None, message='Solr client exception', status_code=500): @@ -79,7 +81,16 @@ def get_possible_conflicts(cls, name, start=0, rows=100, exact_phrase=''): headers={'Authorization': f'Bearer {token}'} ) if resp.status_code != 200: - raise SolrClientException(message=f'Solr search failed: {resp.text}', status_code=resp.status_code) + body = None + try: + body = resp.json() + except ValueError: + body = None + raise SolrClientException( + body=body, + message=f'Solr search failed: {resp.text}', + status_code=resp.status_code, + ) return resp.json() diff --git a/api/pyproject.toml b/api/pyproject.toml index a9d1cf6a9..290fd944b 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "namex" -version = "1.50.2" +version = "1.50.3" description = "" authors = ["Thor Wolpert "] license = "Apache Software License Version 2.0"