Coverage for pydantic/version.py: 100.00%
28 statements
« prev ^ index » next coverage.py v7.9.2, created at 2025-07-15 15:02 +0000
« prev ^ index » next coverage.py v7.9.2, created at 2025-07-15 15:02 +0000
1"""The `version` module holds the version information for Pydantic."""
3from __future__ import annotations as _annotations 1FGabcdefghijMHkIJlmnopqrstuNPKLvwxyzABCDEO
5from pydantic_core import __version__ as __pydantic_core_version__ 1FGabcdefghijMHkIJlmnopqrstuNPKLvwxyzABCDEO
7__all__ = 'VERSION', 'version_info' 1FGabcdefghijMHkIJlmnopqrstuNPKLvwxyzABCDEO
9VERSION = '2.11.7' 1FGabcdefghijMHkIJlmnopqrstuNPKLvwxyzABCDEO
10"""The version of Pydantic.""" 1abcdefghijMklmnopqrstuNPvwxyzABCDEO
13def version_short() -> str: 1FGabcdefghijMHkIJlmnopqrstuNPKLvwxyzABCDEO
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]) 1FGabcdefghijMHkIJlmnopqrstuNPKLvwxyzABCDEO
21def version_info() -> str: 1FGabcdefghijMHkIJlmnopqrstuNPKLvwxyzABCDEO
22 """Return complete version information for Pydantic and its dependencies."""
23 import importlib.metadata 1FGabcdefghijMHkIJlmnopqrstuNKLvwxyzABCDEO
24 import platform 1FGabcdefghijMHkIJlmnopqrstuNKLvwxyzABCDEO
25 import sys 1FGabcdefghijMHkIJlmnopqrstuNKLvwxyzABCDEO
26 from pathlib import Path 1FGabcdefghijMHkIJlmnopqrstuNKLvwxyzABCDEO
28 import pydantic_core._pydantic_core as pdc 1FGabcdefghijMHkIJlmnopqrstuNKLvwxyzABCDEO
30 from ._internal import _git as git 1FGabcdefghijMHkIJlmnopqrstuNKLvwxyzABCDEO
32 # get data about packages that are closely related to pydantic, use pydantic or often conflict with pydantic
33 package_names = { 1FGabcdefghijMHkIJlmnopqrstuNKLvwxyzABCDEO
34 'email-validator',
35 'fastapi',
36 'mypy',
37 'pydantic-extra-types',
38 'pydantic-settings',
39 'pyright',
40 'typing_extensions',
41 }
42 related_packages = [] 1FGabcdefghijMHkIJlmnopqrstuNKLvwxyzABCDEO
44 for dist in importlib.metadata.distributions(): 1FGabcdefghijMHkIJlmnopqrstuNKLvwxyzABCDEO
45 name = dist.metadata['Name'] 1FGabcdefghijHkIJlmnopqrstuKLvwxyzABCDE
46 if name in package_names: 1FGabcdefghijHkIJlmnopqrstuKLvwxyzABCDE
47 related_packages.append(f'{name}-{dist.version}') 1FGabcdefghijHkIJlmnopqrstuKLvwxyzABCDE
49 pydantic_dir = Path(__file__).parents[1].resolve() 1FGabcdefghijHkIJlmnopqrstuKLvwxyzABCDE
50 most_recent_commit = ( 1FGabcdefghijHkIJlmnopqrstuKLvwxyzABCDE
51 git.git_revision(pydantic_dir) if git.is_git_repo(pydantic_dir) and git.have_git() else 'unknown'
52 )
54 info = { 1FGabcdefghijHkIJlmnopqrstuKLvwxyzABCDE
55 'pydantic version': VERSION,
56 'pydantic-core version': pdc.__version__,
57 'pydantic-core build': getattr(pdc, 'build_info', None) or pdc.build_profile,
58 'python version': sys.version,
59 'platform': platform.platform(),
60 'related packages': ' '.join(related_packages),
61 'commit': most_recent_commit,
62 }
63 return '\n'.join('{:>30} {}'.format(k + ':', str(v).replace('\n', ' ')) for k, v in info.items()) 1FGabcdefghijMHkIJlmnopqrstuNKLvwxyzABCDEO
66def check_pydantic_core_version() -> bool: 1FGabcdefghijMHkIJlmnopqrstuNPKLvwxyzABCDEO
67 """Check that the installed `pydantic-core` dependency is compatible."""
68 # Keep this in sync with the version constraint in the `pyproject.toml` dependencies:
69 return __pydantic_core_version__ == '2.35.1' 1FGabcdefghijMHkIJlmnopqrstuNKLvwxyzABCDEO
72def parse_mypy_version(version: str) -> tuple[int, int, int]: 1FGabcdefghijMHkIJlmnopqrstuNPKLvwxyzABCDEO
73 """Parse `mypy` string version to a 3-tuple of ints.
75 It parses normal version like `1.11.0` and extra info followed by a `+` sign
76 like `1.11.0+dev.d6d9d8cd4f27c52edac1f537e236ec48a01e54cb.dirty`.
78 Args:
79 version: The mypy version string.
81 Returns:
82 A triple of ints, e.g. `(1, 11, 0)`.
83 """
84 return tuple(map(int, version.partition('+')[0].split('.'))) # pyright: ignore[reportReturnType] 1P