main commit
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2025-10-16 16:30:25 +09:00
parent 91c7e04474
commit 537e7b363f
1146 changed files with 45926 additions and 77196 deletions

View File

@@ -4,14 +4,12 @@
# This module is part of asyncpg and is released under
# the Apache 2.0 License: http://www.apache.org/licenses/LICENSE-2.0
from __future__ import annotations
import re
import typing
from .types import ServerVersion
version_regex: typing.Final = re.compile(
version_regex = re.compile(
r"(Postgre[^\s]*)?\s*"
r"(?P<major>[0-9]+)\.?"
r"((?P<minor>[0-9]+)\.?)?"
@@ -21,15 +19,7 @@ version_regex: typing.Final = re.compile(
)
class _VersionDict(typing.TypedDict):
major: int
minor: int | None
micro: int | None
releaselevel: str | None
serial: int | None
def split_server_version_string(version_string: str) -> ServerVersion:
def split_server_version_string(version_string):
version_match = version_regex.search(version_string)
if version_match is None:
@@ -38,17 +28,17 @@ def split_server_version_string(version_string: str) -> ServerVersion:
f'version from "{version_string}"'
)
version: _VersionDict = version_match.groupdict() # type: ignore[assignment] # noqa: E501
version = version_match.groupdict()
for ver_key, ver_value in version.items():
# Cast all possible versions parts to int
try:
version[ver_key] = int(ver_value) # type: ignore[literal-required, call-overload] # noqa: E501
version[ver_key] = int(ver_value)
except (TypeError, ValueError):
pass
if version["major"] < 10:
if version.get("major") < 10:
return ServerVersion(
version["major"],
version.get("major"),
version.get("minor") or 0,
version.get("micro") or 0,
version.get("releaselevel") or "final",
@@ -62,7 +52,7 @@ def split_server_version_string(version_string: str) -> ServerVersion:
# want to keep that behaviour consistent, i.e not fail
# a major version check due to a bugfix release.
return ServerVersion(
version["major"],
version.get("major"),
0,
version.get("minor") or 0,
version.get("releaselevel") or "final",