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
« 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"""
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#-----------------------------------------------------------------------------
13#-----------------------------------------------------------------------------
14# Imports
15#-----------------------------------------------------------------------------
17import os
18import platform
19import pprint
20import sys
21import subprocess
23from IPython.core import release
24from IPython.utils import _sysinfo, encoding
26#-----------------------------------------------------------------------------
27# Code
28#-----------------------------------------------------------------------------
30def pkg_commit_hash(pkg_path):
31 """Get short form of commit hash given directory `pkg_path`
33 We get the commit hash from (in order of preference):
35 * IPython.utils._sysinfo.commit
36 * git output, if we are in a git repository
38 If these fail, we return a not-found placeholder tuple
40 Parameters
41 ----------
42 pkg_path : str
43 directory containing package
44 only used for getting commit from active repo
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
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>'
68def pkg_info(pkg_path):
69 """Return dict describing the context of this package
71 Parameters
72 ----------
73 pkg_path : str
74 path containing __init__.py for package
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 )
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)
101def sys_info():
102 """Return useful information about IPython and the system, as a string.
104 Examples
105 --------
106 ::
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())
122def num_cpus():
123 """DEPRECATED
125 Return the effective number of CPUs in the system as an integer.
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.
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
136 warnings.warn(
137 "`num_cpus` is deprecated since IPython 8.0. Use `os.cpu_count` instead.",
138 DeprecationWarning,
139 stacklevel=2,
140 )
142 return os.cpu_count() or 1