Coverage for pydantic/version.py: 100.00%
29 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-02-13 19:35 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-02-13 19:35 +0000
1"""The `version` module holds the version information for Pydantic."""
3from __future__ import annotations as _annotations 1zAabcdefghBiCDjklmnopqMGHIJKLEFrstuvwxy
5from pydantic_core import __version__ as __pydantic_core_version__ 1zAabcdefghBiCDjklmnopqMGHIJKLEFrstuvwxy
7__all__ = 'VERSION', 'version_info' 1zAabcdefghBiCDjklmnopqMGHIJKLEFrstuvwxy
9VERSION = '2.11.0a2' 1zAabcdefghBiCDjklmnopqMGHIJKLEFrstuvwxy
10"""The version of Pydantic.""" 1abcdefghijklmnopqGHIJKLrstuvwxy
13def version_short() -> str: 1zAabcdefghBiCDjklmnopqMGHIJKLEFrstuvwxy
14 """Return the `major.minor` part of Pydantic version.
16 It returns '2.1' if Pydantic version is '2.1.1'.
17 """
18 return '.'.join(VERSION.split('.')[:2]) 1zAabcdefghBiCDjklmnopqMGHIJKLEFrstuvwxy
21def version_info() -> str: 1zAabcdefghBiCDjklmnopqMGHIJKLEFrstuvwxy
22 """Return complete version information for Pydantic and its dependencies."""
23 import importlib.metadata as importlib_metadata 1zAabcdefghBiCDjklmnopqEFrstuvwxy
24 import os 1zAabcdefghBiCDjklmnopqEFrstuvwxy
25 import platform 1zAabcdefghBiCDjklmnopqEFrstuvwxy
26 import sys 1zAabcdefghBiCDjklmnopqEFrstuvwxy
27 from pathlib import Path 1zAabcdefghBiCDjklmnopqEFrstuvwxy
29 import pydantic_core._pydantic_core as pdc 1zAabcdefghBiCDjklmnopqEFrstuvwxy
31 from ._internal import _git as git 1zAabcdefghBiCDjklmnopqEFrstuvwxy
33 # get data about packages that are closely related to pydantic, use pydantic or often conflict with pydantic
34 package_names = { 1zAabcdefghBiCDjklmnopqEFrstuvwxy
35 'email-validator',
36 'fastapi',
37 'mypy',
38 'pydantic-extra-types',
39 'pydantic-settings',
40 'pyright',
41 'typing_extensions',
42 }
43 related_packages = [] 1zAabcdefghBiCDjklmnopqEFrstuvwxy
45 for dist in importlib_metadata.distributions(): 1zAabcdefghBiCDjklmnopqEFrstuvwxy
46 name = dist.metadata['Name'] 1zAabcdefghBiCDjklmnopqEFrstuvwxy
47 if name in package_names: 1zAabcdefghBiCDjklmnopqEFrstuvwxy
48 related_packages.append(f'{name}-{dist.version}') 1zAabcdefghBiCDjklmnopqEFrstuvwxy
50 pydantic_dir = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) 1zAabcdefghBiCDjklmnopqEFrstuvwxy
51 most_recent_commit = ( 1zAabcdefghBiCDjklmnopqEFrstuvwxy
52 git.git_revision(pydantic_dir) if git.is_git_repo(pydantic_dir) and git.have_git() else 'unknown'
53 )
55 info = { 1zAabcdefghBiCDjklmnopqEFrstuvwxy
56 'pydantic version': VERSION,
57 'pydantic-core version': pdc.__version__,
58 'pydantic-core build': getattr(pdc, 'build_info', None) or pdc.build_profile,
59 'install path': Path(__file__).resolve().parent,
60 'python version': sys.version,
61 'platform': platform.platform(),
62 'related packages': ' '.join(related_packages),
63 'commit': most_recent_commit,
64 }
65 return '\n'.join('{:>30} {}'.format(k + ':', str(v).replace('\n', ' ')) for k, v in info.items()) 1zAabcdefghBiCDjklmnopqEFrstuvwxy
68def check_pydantic_core_version() -> bool: 1zAabcdefghBiCDjklmnopqMGHIJKLEFrstuvwxy
69 """Check that the installed `pydantic-core` dependency is compatible."""
70 # Keep this in sync with the version constraint in the `pyproject.toml` dependencies:
71 return __pydantic_core_version__ == '2.29.0' 1zAabcdefghBiCDjklmnopqEFrstuvwxy
74def parse_mypy_version(version: str) -> tuple[int, int, int]: 1zAabcdefghBiCDjklmnopqMGHIJKLEFrstuvwxy
75 """Parse `mypy` string version to a 3-tuple of ints.
77 It parses normal version like `1.11.0` and extra info followed by a `+` sign
78 like `1.11.0+dev.d6d9d8cd4f27c52edac1f537e236ec48a01e54cb.dirty`.
80 Args:
81 version: The mypy version string.
83 Returns:
84 A triple of ints, e.g. `(1, 11, 0)`.
85 """
86 return tuple(map(int, version.partition('+')[0].split('.'))) # pyright: ignore[reportReturnType] 1MGHIJKL