diff --git a/.github/workflows/test_build.yaml b/.github/workflows/test_build.yaml
index dd8066a..bc0092f 100644
--- a/.github/workflows/test_build.yaml
+++ b/.github/workflows/test_build.yaml
@@ -30,7 +30,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
- os: [ubuntu-latest, windows-latest, macos-13, ubuntu-24.04-arm]
+ os: [ubuntu-latest, windows-latest, macos-13]
# https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json
python-version: ["3.9", "3"]
steps:
diff --git a/src/besapi/besapi.py b/src/besapi/besapi.py
index c9d8150..cacaab8 100644
--- a/src/besapi/besapi.py
+++ b/src/besapi/besapi.py
@@ -29,7 +29,7 @@
import requests
import urllib3.poolmanager
-__version__ = "4.0.2"
+__version__ = "4.1.2"
besapi_logger = logging.getLogger("besapi")
@@ -615,7 +615,7 @@ def session_relevance_xml(self, relevance, **kwargs):
return RESTResult(
self.session.post(
self.url("query"),
- data=f"relevance={urllib.parse.quote(relevance, safe=':+')}",
+ data=f"relevance={urllib.parse.quote(relevance, safe=':')}",
verify=self.verify,
**kwargs,
)
diff --git a/tests/test_besapi.py b/tests/test_besapi.py
index a70973d..57a4e34 100644
--- a/tests/test_besapi.py
+++ b/tests/test_besapi.py
@@ -312,6 +312,58 @@ def test_bes_conn_json():
assert result is not None
assert "TestString" in result
assert "BES Support" in result
+ print("testing session relevance with + in relevance")
+ str_relevance_plus = 'lengths of first matches (regex " +") of " "'
+ result = bes_conn.session_relevance_xml(str_relevance_plus)
+ print(result)
+ assert result is not None
+ else:
+ pytest.skip("Skipping BESConnection test, no config file or login failed.")
+
+
+def test_bes_conn_session_relevance_with_plus():
+ """Test the BESConnection class with JSON output."""
+
+ bes_conn = besapi.plugin_utilities.get_besapi_connection(None)
+
+ if bes_conn and bes_conn.login():
+ print("testing session relevance with + in relevance")
+ str_relevance_plus = 'lengths of first matches (regex " +") of " "'
+ str_relevance_answer = "8"
+ result = bes_conn.session_relevance_xml(str_relevance_plus)
+ print(result)
+ assert result is not None
+ print(result.request.request.body)
+ assert f'{str_relevance_answer}' in str(result)
+ result = bes_conn.session_relevance_json_string(str_relevance_plus)
+ print(result)
+ assert result is not None
+ assert str_relevance_answer in str(result)
+ result = bes_conn.session_relevance_json(str_relevance_plus)
+ print(result)
+ assert result is not None
+ assert f"[{str_relevance_answer}]" in str(result["result"])
+ result = bes_conn.session_relevance_string(str_relevance_plus)
+ print(result)
+ assert result is not None
+ assert str_relevance_answer in str(result)
+ result = bes_conn.session_relevance_array(str_relevance_plus)
+ print(result)
+ assert result is not None
+ assert f"['{str_relevance_answer}']" in str(result)
+ result = bes_conn.session_relevance_json_array(str_relevance_plus)
+ print(result)
+ assert result is not None
+ assert f"[{str_relevance_answer}]" in str(result)
+
+ # test already escaped +
+ str_relevance_plus = r'lengths of first matches (regex " %2b") of " "'
+ print(str_relevance_plus)
+ result = bes_conn.session_relevance_xml(str_relevance_plus)
+ print(result)
+ assert result is not None
+ print(result.request.request.body)
+ assert f'{str_relevance_answer}' in str(result)
else:
pytest.skip("Skipping BESConnection test, no config file or login failed.")