Source code for mindfoundry.optaas.client.version_check

import warnings
from importlib import metadata
from typing import List, Optional

from requests import Response


# If the client and server versions differ in the Major or Minor part, we display a warning.
# If they only differ in the Patch, it's ok.

def _get_pieces(version: str) -> List[int]:
    try:
        pieces = version.split('.')
        return [int(pieces[0]), int(pieces[1])]
    except BaseException:
        return []


CLIENT_VERSION = metadata.version('mindfoundry-optaas-client')
CLIENT_VERSION_PIECES = _get_pieces(CLIENT_VERSION)

NEWER_VERSION_MESSAGE = """
A new version of the OPTaaS client is available. Please run:
    pip install mindfoundry-optaas-client=={}
To stop these messages, use OPTaaSClient(url, api_key, disable_version_check=True)
"""

OLDER_VERSION_MESSAGE = """
Your OPTaaS client version is not in sync with your OPTaaS server. To avoid unexpected behavior, please run:
    pip install mindfoundry-optaas-client=={}
To stop these messages, use OPTaaSClient(url, api_key, disable_version_check=True)
"""


[docs]def compare_versions(response: Response) -> None: server_version = response.headers.get('X-ApiVersion') if server_version: server_version = server_version.split('.post')[0] if server_version != CLIENT_VERSION: server_version_pieces = _get_pieces(server_version) warning_message = _get_version_warning_message(server_version_pieces) if warning_message: warnings.warn(warning_message.format(server_version))
def _get_version_warning_message(server_version_pieces: List[int]) -> Optional[str]: for client, server in zip(CLIENT_VERSION_PIECES, server_version_pieces): if client < server: return NEWER_VERSION_MESSAGE if client > server: return OLDER_VERSION_MESSAGE return None