Skip to content

Commit

Permalink
cover whole check with try catch, remove + "/", use proper urljoin (#889
Browse files Browse the repository at this point in the history
)

* cover whole check with try catch, remove + "/", use proper urljoin

* upd async client
  • Loading branch information
generall authored Jan 22, 2025
1 parent ecbaf73 commit 0513a58
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 36 deletions.
38 changes: 23 additions & 15 deletions qdrant_client/async_qdrant_remote.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
# ****** WARNING: THIS FILE IS AUTOGENERATED ******

import importlib.metadata
import logging
import math
import platform
from multiprocessing import get_all_start_methods
Expand All @@ -29,6 +30,7 @@
import numpy as np
from grpc import Compression
from urllib3.util import Url, parse_url
from urllib.parse import urljoin
from qdrant_client.common.client_warnings import show_warning, show_warning_once
from qdrant_client import grpc as grpc
from qdrant_client._pydantic_compat import construct
Expand Down Expand Up @@ -141,7 +143,8 @@ def __init__(
)
self._grpc_compression = grpc_compression
address = f"{self._host}:{self._port}" if self._port is not None else self._host
self.rest_uri = f"{self._scheme}://{address}{self._prefix}"
base_url = f"{self._scheme}://{address}"
self.rest_uri = urljoin(base_url, self._prefix)
self._rest_args = {"headers": self._rest_headers, "http2": http2, **kwargs}
if limits is not None:
self._rest_args["limits"] = limits
Expand Down Expand Up @@ -169,21 +172,26 @@ def __init__(
self._grpc_root_client: Optional[grpc.QdrantStub] = None
self._closed: bool = False
if check_compatibility:
client_version = importlib.metadata.version("qdrant-client")
server_version = get_server_version(
self.rest_uri, self._rest_headers, self._rest_args.get("auth")
)
if not server_version:
show_warning(
message=f"Failed to obtain server version. Unable to check client-server compatibility. Set check_version=False to skip version check.",
category=UserWarning,
stacklevel=4,
try:
client_version = importlib.metadata.version("qdrant-client")
server_version = get_server_version(
self.rest_uri, self._rest_headers, self._rest_args.get("auth")
)
elif not is_compatible(client_version, server_version):
show_warning(
message=f"Qdrant client version {client_version} is incompatible with server version {server_version}. Major versions should match and minor version difference must not exceed 1. Set check_version=False to skip version check.",
category=UserWarning,
stacklevel=4,
if not server_version:
show_warning(
message=f"Failed to obtain server version. Unable to check client-server compatibility. Set check_version=False to skip version check.",
category=UserWarning,
stacklevel=4,
)
elif not is_compatible(client_version, server_version):
show_warning(
message=f"Qdrant client version {client_version} is incompatible with server version {server_version}. Major versions should match and minor version difference must not exceed 1. Set check_version=False to skip version check.",
category=UserWarning,
stacklevel=4,
)
except Exception as er:
logging.debug(
f"Unable to get server version: {er}, server version defaults to None"
)

@property
Expand Down
6 changes: 1 addition & 5 deletions qdrant_client/common/version_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,7 @@
def get_server_version(
rest_uri: str, rest_headers: dict[str, Any], auth_provider: Optional[BearerAuth]
) -> Optional[str]:
try:
response = httpx.get(rest_uri + "/", headers=rest_headers, auth=auth_provider)
except Exception as er:
logging.debug(f"Unable to get server version: {er}, server version defaults to None")
return None
response = httpx.get(rest_uri, headers=rest_headers, auth=auth_provider)

if response.status_code == 200:
version_info = response.json().get("version", None)
Expand Down
39 changes: 23 additions & 16 deletions qdrant_client/qdrant_remote.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import numpy as np
from grpc import Compression
from urllib3.util import Url, parse_url
from urllib.parse import urljoin

from qdrant_client.common.client_warnings import show_warning, show_warning_once
from qdrant_client import grpc as grpc
Expand Down Expand Up @@ -163,7 +164,8 @@ def __init__(
self._grpc_compression = grpc_compression

address = f"{self._host}:{self._port}" if self._port is not None else self._host
self.rest_uri = f"{self._scheme}://{address}{self._prefix}"
base_url = f"{self._scheme}://{address}"
self.rest_uri = urljoin(base_url, self._prefix)

self._rest_args = {"headers": self._rest_headers, "http2": http2, **kwargs}

Expand Down Expand Up @@ -206,23 +208,28 @@ def __init__(
self._closed: bool = False

if check_compatibility:
client_version = importlib.metadata.version("qdrant-client")
server_version = get_server_version(
self.rest_uri, self._rest_headers, self._rest_args.get("auth")
)
if not server_version:
show_warning(
message=f"Failed to obtain server version. Unable to check client-server compatibility. Set check_version=False to skip version check.",
category=UserWarning,
stacklevel=4,
)
elif not is_compatible(client_version, server_version):
show_warning(
message=f"Qdrant client version {client_version} is incompatible with server version {server_version}. Major versions should match and minor version difference must not exceed 1. Set check_version=False to skip version check.",
category=UserWarning,
stacklevel=4,
try:
client_version = importlib.metadata.version("qdrant-client")
server_version = get_server_version(
self.rest_uri, self._rest_headers, self._rest_args.get("auth")
)

if not server_version:
show_warning(
message=f"Failed to obtain server version. Unable to check client-server compatibility. Set check_version=False to skip version check.",
category=UserWarning,
stacklevel=4,
)
elif not is_compatible(client_version, server_version):
show_warning(
message=f"Qdrant client version {client_version} is incompatible with server version {server_version}. Major versions should match and minor version difference must not exceed 1. Set check_version=False to skip version check.",
category=UserWarning,
stacklevel=4,
)
except Exception as er:
logging.debug(f"Unable to get server version: {er}, server version defaults to None")


@property
def closed(self) -> bool:
return self._closed
Expand Down

0 comments on commit 0513a58

Please sign in to comment.