From 58b376159ce824902bd0d1814e8f54a3d698baef Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 15 Dec 2020 16:32:27 -0600 Subject: [PATCH] [7.x] Handle Python pre-releases properly in meta header Co-authored-by: Seth Michael Larson --- .github/workflows/ci.yml | 9 +++++++-- elasticsearch/connection/base.py | 7 ++++--- test_elasticsearch/test_connection.py | 3 ++- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 672f6007..301fd8c5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -55,13 +55,18 @@ jobs: run: nox -s docs test-linux: - runs-on: ubuntu-latest - strategy: fail-fast: false matrix: python-version: [2.7, 3.5, 3.6, 3.7, 3.8, 3.9] + experimental: [false] + include: + - python-version: 3.9-dev + experimental: true + runs-on: ubuntu-latest + name: test-${{ matrix.python-version }} + continue-on-error: ${{ matrix.experimental }} steps: - name: Checkout Repository uses: actions/checkout@v1 diff --git a/elasticsearch/connection/base.py b/elasticsearch/connection/base.py index f7a98040..c171526d 100644 --- a/elasticsearch/connection/base.py +++ b/elasticsearch/connection/base.py @@ -21,7 +21,6 @@ import gzip import io import re from platform import python_version -import sys import warnings try: @@ -344,7 +343,9 @@ def _python_to_meta_version(version): compatible with 'X-Elastic-Client-Meta'. Essentially replaces any pre-release information with a 'p' suffix. """ - version, version_pre = re.match(r"^([0-9.]+)(.*)$", version).groups() + version, version_pre = re.match( + r"^([0-9][0-9.]*[0-9]|[0-9])(.*)$", version + ).groups() if version_pre: version += "p" return version @@ -353,7 +354,7 @@ def _python_to_meta_version(version): def _get_client_meta_header(client_meta=()): """Builds an 'X-Elastic-Client-Meta' HTTP header""" es_version = _python_to_meta_version(__versionstr__) - py_version = python_version() + ("p" if sys.version_info[3] != "final" else "") + py_version = _python_to_meta_version(python_version()) # First three values have to be 'service', 'language', 'transport' client_meta = (("es", es_version), ("py", py_version), ("t", es_version)) + tuple( client_meta diff --git a/test_elasticsearch/test_connection.py b/test_elasticsearch/test_connection.py index 9d6ee1c1..4c0cd3de 100644 --- a/test_elasticsearch/test_connection.py +++ b/test_elasticsearch/test_connection.py @@ -180,7 +180,7 @@ class TestBaseConnection(TestCase): meta_header = _get_client_meta_header() assert ("es=%s" % (".".join(str(x) for x in __version__),)) in meta_header assert ("t=%s" % (".".join(str(x) for x in __version__),)) in meta_header - assert ("py=%s" % python_version()) in meta_header + assert ("py=%s" % _python_to_meta_version(python_version())) in meta_header meta_header = _get_client_meta_header((("h", "bp"),)) assert meta_header.endswith(",h=bp") @@ -191,6 +191,7 @@ class TestBaseConnection(TestCase): def test_python_to_meta_version(self): assert _python_to_meta_version("1.26.3") == "1.26.3" assert _python_to_meta_version("7.10.1a1") == "7.10.1p" + assert _python_to_meta_version("7.10.a1") == "7.10p" class TestUrllib3Connection(TestCase):