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

1"""The `version` module holds the version information for Pydantic.""" 

2 

3from __future__ import annotations as _annotations 1zAabcdefghBiCDjklmnopqMGHIJKLEFrstuvwxy

4 

5from pydantic_core import __version__ as __pydantic_core_version__ 1zAabcdefghBiCDjklmnopqMGHIJKLEFrstuvwxy

6 

7__all__ = 'VERSION', 'version_info' 1zAabcdefghBiCDjklmnopqMGHIJKLEFrstuvwxy

8 

9VERSION = '2.11.0a2' 1zAabcdefghBiCDjklmnopqMGHIJKLEFrstuvwxy

10"""The version of Pydantic.""" 1abcdefghijklmnopqGHIJKLrstuvwxy

11 

12 

13def version_short() -> str: 1zAabcdefghBiCDjklmnopqMGHIJKLEFrstuvwxy

14 """Return the `major.minor` part of Pydantic version. 

15 

16 It returns '2.1' if Pydantic version is '2.1.1'. 

17 """ 

18 return '.'.join(VERSION.split('.')[:2]) 1zAabcdefghBiCDjklmnopqMGHIJKLEFrstuvwxy

19 

20 

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

28 

29 import pydantic_core._pydantic_core as pdc 1zAabcdefghBiCDjklmnopqEFrstuvwxy

30 

31 from ._internal import _git as git 1zAabcdefghBiCDjklmnopqEFrstuvwxy

32 

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

44 

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

49 

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 ) 

54 

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

66 

67 

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

72 

73 

74def parse_mypy_version(version: str) -> tuple[int, int, int]: 1zAabcdefghBiCDjklmnopqMGHIJKLEFrstuvwxy

75 """Parse `mypy` string version to a 3-tuple of ints. 

76 

77 It parses normal version like `1.11.0` and extra info followed by a `+` sign 

78 like `1.11.0+dev.d6d9d8cd4f27c52edac1f537e236ec48a01e54cb.dirty`. 

79 

80 Args: 

81 version: The mypy version string. 

82 

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