Skip to content

Commit b9f6089

Browse files
committed
Handle non-standard version strings coming from api
1 parent 2d725fa commit b9f6089

2 files changed

Lines changed: 17 additions & 3 deletions

File tree

juju/client/connector.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import copy
55
import logging
66

7-
from packaging import version
7+
from packaging import version, InvalidVersion
88

99
import macaroonbakery.httpbakery as httpbakery
1010

@@ -13,7 +13,7 @@
1313
from juju.client.gocookies import GoCookieJar, go_to_py_cookie
1414
from juju.client.jujudata import API_ENDPOINTS_KEY, FileJujuData
1515
from juju.client.proxy.factory import proxy_from_config
16-
from juju.errors import JujuConnectionError, JujuError
16+
from juju.errors import JujuConnectionError, JujuError, JujuUnknownVersion
1717
from juju.version import CLIENT_VERSION
1818

1919
log = logging.getLogger("connector")
@@ -88,7 +88,17 @@ async def connect(self, **kwargs):
8888
self._connection = await Connection.connect(**kwargs)
8989

9090
# Check if we support the target controller
91-
juju_server_version = version.parse(self._connection.info["server-version"])
91+
server_version = self._connection.info["server-version"]
92+
try:
93+
juju_server_version = version.parse(server_version)
94+
except InvalidVersion as err:
95+
# We're only interested in the major version, so
96+
# we attempt to clean up versions such as 3.4-rc1.2 as just 3.4
97+
if '-' not in server_version:
98+
raise JujuUnknownVersion(err)
99+
juju_server_version = version.parse(server_version.split('-')[0])
100+
101+
# CLIENT_VERSION statically comes from the VERSION file in the repo
92102
client_version = version.parse(CLIENT_VERSION)
93103

94104
if juju_server_version.major != client_version.major:

juju/errors.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,3 +137,7 @@ class AbstractMethodError(Exception):
137137

138138
class PylibjujuError(JujuError):
139139
pass
140+
141+
142+
class JujuUnknownVersion(PylibjujuError):
143+
pass

0 commit comments

Comments
 (0)