Coverage for pydantic/version.py: 100.00%
26 statements
« prev ^ index » next coverage.py v7.5.3, created at 2024-06-21 17:00 +0000
« prev ^ index » next coverage.py v7.5.3, created at 2024-06-21 17:00 +0000
1"""The `version` module holds the version information for Pydantic."""
3from __future__ import annotations as _annotations 1tuvwabcdefxgyzABhijklmNOGHIJKLMCDEFnopqrs
5__all__ = 'VERSION', 'version_info' 1tuvwabcdefxgyzABhijklmNOGHIJKLMCDEFnopqrs
7VERSION = '2.8.0a1' 1tuvwabcdefxgyzABhijklmNOGHIJKLMCDEFnopqrs
8"""The version of Pydantic.""" 1abcdefghijklmGHIJKLMnopqrs
11def version_short() -> str: 1tuvwabcdefxgyzABhijklmNOGHIJKLMCDEFnopqrs
12 """Return the `major.minor` part of Pydantic version.
14 It returns '2.1' if Pydantic version is '2.1.1'.
15 """
16 return '.'.join(VERSION.split('.')[:2]) 1tuvwabcdefxgyzABhijklmNOGHIJKLMCDEFnopqrs
19def version_info() -> str: 1tuvwabcdefxgyzABhijklmNOGHIJKLMCDEFnopqrs
20 """Return complete version information for Pydantic and its dependencies."""
21 import importlib.metadata as importlib_metadata 1tuvwabcdefxgyzABhijklmCDEFnopqrs
22 import os 1tuvwabcdefxgyzABhijklmCDEFnopqrs
23 import platform 1tuvwabcdefxgyzABhijklmCDEFnopqrs
24 import sys 1tuvwabcdefxgyzABhijklmCDEFnopqrs
25 from pathlib import Path 1tuvwabcdefxgyzABhijklmCDEFnopqrs
27 import pydantic_core._pydantic_core as pdc 1tuvwabcdefxgyzABhijklmCDEFnopqrs
29 from ._internal import _git as git 1tuvwabcdefxgyzABhijklmCDEFnopqrs
31 # get data about packages that are closely related to pydantic, use pydantic or often conflict with pydantic
32 package_names = { 1tuvwabcdefxgyzABhijklmCDEFnopqrs
33 'email-validator',
34 'fastapi',
35 'mypy',
36 'pydantic-extra-types',
37 'pydantic-settings',
38 'pyright',
39 'typing_extensions',
40 }
41 related_packages = [] 1tuvwabcdefxgyzABhijklmCDEFnopqrs
43 for dist in importlib_metadata.distributions(): 1tuvwabcdefxgyzABhijklmCDEFnopqrs
44 name = dist.metadata['Name'] 1tuvwabcdefxgyzABhijklmCDEFnopqrs
45 if name in package_names: 1tuvwabcdefxgyzABhijklmCDEFnopqrs
46 related_packages.append(f'{name}-{dist.version}') 1tuvwabcdefxgyzABhijklmCDEFnopqrs
48 pydantic_dir = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) 1tuvwabcdefxgyzABhijklmCDEFnopqrs
49 most_recent_commit = ( 1tuvwabcdefxgyzABhijklmCDEFnopqrs
50 git.git_revision(pydantic_dir) if git.is_git_repo(pydantic_dir) and git.have_git() else 'unknown'
51 )
53 info = { 1tuvwabcdefxgyzABhijklmCDEFnopqrs
54 'pydantic version': VERSION,
55 'pydantic-core version': pdc.__version__,
56 'pydantic-core build': getattr(pdc, 'build_info', None) or pdc.build_profile,
57 'install path': Path(__file__).resolve().parent,
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()) 1tuvwabcdefxgyzABhijklmCDEFnopqrs
66def parse_mypy_version(version: str) -> tuple[int, ...]: 1tuvwabcdefxgyzABhijklmNOGHIJKLMCDEFnopqrs
67 """Parse mypy string version to tuple of ints.
69 It parses normal version like `0.930` and extra info followed by a `+` sign
70 like `0.940+dev.04cac4b5d911c4f9529e6ce86a27b44f28846f5d.dirty`.
72 Args:
73 version: The mypy version string.
75 Returns:
76 A tuple of ints. e.g. (0, 930).
77 """
78 return tuple(map(int, version.partition('+')[0].split('.'))) 1NOGHIJKLM