refactor: excel parse

This commit is contained in:
Blizzard
2026-04-16 10:01:11 +08:00
parent 680ecc320f
commit f62f95ec02
7941 changed files with 2899112 additions and 0 deletions
@@ -0,0 +1,16 @@
class QdrantException(Exception):
"""Base class"""
class ResourceExhaustedResponse(QdrantException):
def __init__(self, message: str, retry_after_s: int) -> None:
self.message = message if message else "Resource Exhausted Response"
try:
self.retry_after_s = int(retry_after_s)
except Exception as ex:
raise QdrantException(
f"Retry-After header value is not a valid integer: {retry_after_s}"
) from ex
def __str__(self) -> str:
return self.message.strip()
@@ -0,0 +1,24 @@
import warnings
from typing import Optional
SEEN_MESSAGES = set()
def show_warning(message: str, category: type[Warning] = UserWarning, stacklevel: int = 2) -> None:
warnings.warn(message, category, stacklevel=stacklevel)
def show_warning_once(
message: str,
category: type[Warning] = UserWarning,
idx: Optional[str] = None,
stacklevel: int = 1,
) -> None:
"""
Show a warning of the specified category only once per program run.
"""
key = idx if idx is not None else message
if key not in SEEN_MESSAGES:
SEEN_MESSAGES.add(key)
show_warning(message, category, stacklevel)
@@ -0,0 +1,65 @@
import logging
from typing import Any, Optional
from collections import namedtuple
import httpx
from qdrant_client.auth import BearerAuth
Version = namedtuple("Version", ["major", "minor", "rest"])
def get_server_version(
rest_uri: str, rest_headers: dict[str, Any], auth_provider: Optional[BearerAuth]
) -> Optional[str]:
response = httpx.get(rest_uri, headers=rest_headers, auth=auth_provider)
if response.status_code == 200:
version_info = response.json().get("version", None)
if not version_info:
logging.debug(
f"Unable to parse response from server: {response}, server version defaults to None"
)
return version_info
else:
logging.debug(
f"Unexpected response from server: {response}, server version defaults to None"
)
return None
def parse_version(version: str) -> Version:
if not version:
raise ValueError("Version is None")
try:
major, minor, *rest = version.split(".")
return Version(int(major), int(minor), rest)
except ValueError as er:
raise ValueError(
f"Unable to parse version, expected format: x.y.z, found: {version}"
) from er
def is_compatible(client_version: Optional[str], server_version: Optional[str]) -> bool:
if not client_version:
logging.debug(f"Unable to compare with client version {client_version}")
return False
if not server_version:
logging.debug(f"Unable to compare with server version {server_version}")
return False
if client_version == server_version:
return True
try:
parsed_server_version = parse_version(server_version)
parsed_client_version = parse_version(client_version)
except ValueError as er:
logging.debug(f"Unable to compare versions: {er}")
return False
major_dif = abs(parsed_server_version.major - parsed_client_version.major)
if major_dif >= 1:
return False
return abs(parsed_server_version.minor - parsed_client_version.minor) <= 1