Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/IPython/utils/sysinfo.py: 45%

29 statements  

« prev     ^ index     » next       coverage.py v7.4.4, created at 2024-04-20 06:09 +0000

1# encoding: utf-8 

2""" 

3Utilities for getting information about IPython and the system it's running in. 

4""" 

5 

6#----------------------------------------------------------------------------- 

7# Copyright (C) 2008-2011 The IPython Development Team 

8# 

9# Distributed under the terms of the BSD License. The full license is in 

10# the file COPYING, distributed as part of this software. 

11#----------------------------------------------------------------------------- 

12 

13#----------------------------------------------------------------------------- 

14# Imports 

15#----------------------------------------------------------------------------- 

16 

17import os 

18import platform 

19import pprint 

20import sys 

21import subprocess 

22 

23from IPython.core import release 

24from IPython.utils import _sysinfo, encoding 

25 

26#----------------------------------------------------------------------------- 

27# Code 

28#----------------------------------------------------------------------------- 

29 

30def pkg_commit_hash(pkg_path): 

31 """Get short form of commit hash given directory `pkg_path` 

32 

33 We get the commit hash from (in order of preference): 

34 

35 * IPython.utils._sysinfo.commit 

36 * git output, if we are in a git repository 

37 

38 If these fail, we return a not-found placeholder tuple 

39 

40 Parameters 

41 ---------- 

42 pkg_path : str 

43 directory containing package 

44 only used for getting commit from active repo 

45 

46 Returns 

47 ------- 

48 hash_from : str 

49 Where we got the hash from - description 

50 hash_str : str 

51 short form of hash 

52 """ 

53 # Try and get commit from written commit text file 

54 if _sysinfo.commit: 

55 return "installation", _sysinfo.commit 

56 

57 # maybe we are in a repository 

58 proc = subprocess.Popen('git rev-parse --short HEAD'.split(' '), 

59 stdout=subprocess.PIPE, 

60 stderr=subprocess.PIPE, 

61 cwd=pkg_path) 

62 repo_commit, _ = proc.communicate() 

63 if repo_commit: 

64 return 'repository', repo_commit.strip().decode('ascii') 

65 return '(none found)', '<not found>' 

66 

67 

68def pkg_info(pkg_path): 

69 """Return dict describing the context of this package 

70 

71 Parameters 

72 ---------- 

73 pkg_path : str 

74 path containing __init__.py for package 

75 

76 Returns 

77 ------- 

78 context : dict 

79 with named parameters of interest 

80 """ 

81 src, hsh = pkg_commit_hash(pkg_path) 

82 return dict( 

83 ipython_version=release.version, 

84 ipython_path=pkg_path, 

85 commit_source=src, 

86 commit_hash=hsh, 

87 sys_version=sys.version, 

88 sys_executable=sys.executable, 

89 sys_platform=sys.platform, 

90 platform=platform.platform(), 

91 os_name=os.name, 

92 default_encoding=encoding.DEFAULT_ENCODING, 

93 ) 

94 

95def get_sys_info(): 

96 """Return useful information about IPython and the system, as a dict.""" 

97 p = os.path 

98 path = p.realpath(p.dirname(p.abspath(p.join(__file__, '..')))) 

99 return pkg_info(path) 

100 

101def sys_info(): 

102 """Return useful information about IPython and the system, as a string. 

103 

104 Examples 

105 -------- 

106 :: 

107  

108 In [2]: print(sys_info()) 

109 {'commit_hash': '144fdae', # random 

110 'commit_source': 'repository', 

111 'ipython_path': '/home/fperez/usr/lib/python2.6/site-packages/IPython', 

112 'ipython_version': '0.11.dev', 

113 'os_name': 'posix', 

114 'platform': 'Linux-2.6.35-22-generic-i686-with-Ubuntu-10.10-maverick', 

115 'sys_executable': '/usr/bin/python', 

116 'sys_platform': 'linux2', 

117 'sys_version': '2.6.6 (r266:84292, Sep 15 2010, 15:52:39) \\n[GCC 4.4.5]'} 

118 """ 

119 return pprint.pformat(get_sys_info()) 

120 

121 

122def num_cpus(): 

123 """DEPRECATED 

124 

125 Return the effective number of CPUs in the system as an integer. 

126 

127 This cross-platform function makes an attempt at finding the total number of 

128 available CPUs in the system, as returned by various underlying system and 

129 python calls. 

130 

131 If it can't find a sensible answer, it returns 1 (though an error *may* make 

132 it return a large positive number that's actually incorrect). 

133 """ 

134 import warnings 

135 

136 warnings.warn( 

137 "`num_cpus` is deprecated since IPython 8.0. Use `os.cpu_count` instead.", 

138 DeprecationWarning, 

139 stacklevel=2, 

140 ) 

141 

142 return os.cpu_count() or 1