##// END OF EJS Templates
Merge pull request #1996 from minrk/ascii...
Merge pull request #1996 from minrk/ascii frontend test tweaks for ASCII locale add some encoding to readline history tests that would fail in casting locales (ascii), so that the expected output really matches what should happen. also relaxes a few timeouts in another test, which were seen to fail while poking around, to avoid spurious failures. closes #1589

File last commit:

r7649:8c11e5ca
r7675:3c2ce20d merge
Show More
sysinfo.py
168 lines | 5.1 KiB | text/x-python | PythonLexer
Brian Granger
Work to address the review comments on Fernando's branch....
r2498 # encoding: utf-8
"""
Fernando Perez
Complete support of git commit info with IPython.sys_info()....
r3204 Utilities for getting information about IPython and the system it's running in.
Brian Granger
Work to address the review comments on Fernando's branch....
r2498 """
#-----------------------------------------------------------------------------
Matthias BUSSONNIER
update copyright to 2011/20xx-2011...
r5390 # Copyright (C) 2008-2011 The IPython Development Team
Brian Granger
Work to address the review comments on Fernando's branch....
r2498 #
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import os
import platform
Fernando Perez
Complete support of git commit info with IPython.sys_info()....
r3204 import pprint
Brian Granger
Work to address the review comments on Fernando's branch....
r2498 import sys
import subprocess
Fernando Perez
Complete support of git commit info with IPython.sys_info()....
r3204 from ConfigParser import ConfigParser
Brian Granger
Work to address the review comments on Fernando's branch....
r2498 from IPython.core import release
MinRK
add encoding to sys_info
r7649 from IPython.utils import py3compat, _sysinfo, encoding
Fernando Perez
Complete support of git commit info with IPython.sys_info()....
r3204
#-----------------------------------------------------------------------------
Brian Granger
Work to address the review comments on Fernando's branch....
r2498 # Code
#-----------------------------------------------------------------------------
Fernando Perez
Complete support of git commit info with IPython.sys_info()....
r3204 def pkg_commit_hash(pkg_path):
"""Get short form of commit hash given directory `pkg_path`
We get the commit hash from (in order of preference):
MinRK
store git commit hash in utils._sysinfo instead of hidden git_commit_info.ini data file.
r6315 * IPython.utils._sysinfo.commit
Fernando Perez
Complete support of git commit info with IPython.sys_info()....
r3204 * git output, if we are in a git repository
MinRK
store git commit hash in utils._sysinfo instead of hidden git_commit_info.ini data file.
r6315 If these fail, we return a not-found placeholder tuple
Fernando Perez
Complete support of git commit info with IPython.sys_info()....
r3204
Parameters
----------
pkg_path : str
directory containing package
MinRK
store git commit hash in utils._sysinfo instead of hidden git_commit_info.ini data file.
r6315 only used for getting commit from active repo
Fernando Perez
Complete support of git commit info with IPython.sys_info()....
r3204
Returns
-------
hash_from : str
Where we got the hash from - description
hash_str : str
short form of hash
"""
# Try and get commit from written commit text file
MinRK
store git commit hash in utils._sysinfo instead of hidden git_commit_info.ini data file.
r6315 if _sysinfo.commit:
return "installation", _sysinfo.commit
Fernando Perez
Complete support of git commit info with IPython.sys_info()....
r3204 # maybe we are in a repository
proc = subprocess.Popen('git rev-parse --short HEAD',
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
cwd=pkg_path, shell=True)
repo_commit, _ = proc.communicate()
if repo_commit:
return 'repository', repo_commit.strip()
return '(none found)', '<not found>'
def pkg_info(pkg_path):
"""Return dict describing the context of this package
Parameters
----------
pkg_path : str
path containing __init__.py for package
Returns
-------
context : dict
with named parameters of interest
"""
src, hsh = pkg_commit_hash(pkg_path)
return dict(
ipython_version=release.version,
ipython_path=pkg_path,
commit_source=src,
commit_hash=hsh,
sys_version=sys.version,
sys_executable=sys.executable,
sys_platform=sys.platform,
platform=platform.platform(),
os_name=os.name,
MinRK
add encoding to sys_info
r7649 default_encoding=encoding.DEFAULT_ENCODING,
Fernando Perez
Complete support of git commit info with IPython.sys_info()....
r3204 )
Thomas Kluyver
Various fixes to tests in IPython.utils.
r4891 @py3compat.doctest_refactor_print
Brian Granger
Work to address the review comments on Fernando's branch....
r2498 def sys_info():
"""Return useful information about IPython and the system, as a string.
Fernando Perez
Complete support of git commit info with IPython.sys_info()....
r3204 Example
-------
In [2]: print sys_info()
{'commit_hash': '144fdae', # random
'commit_source': 'repository',
'ipython_path': '/home/fperez/usr/lib/python2.6/site-packages/IPython',
'ipython_version': '0.11.dev',
'os_name': 'posix',
'platform': 'Linux-2.6.35-22-generic-i686-with-Ubuntu-10.10-maverick',
'sys_executable': '/usr/bin/python',
'sys_platform': 'linux2',
'sys_version': '2.6.6 (r266:84292, Sep 15 2010, 15:52:39) \\n[GCC 4.4.5]'}
"""
p = os.path
path = p.dirname(p.abspath(p.join(__file__, '..')))
return pprint.pformat(pkg_info(path))
Brian Granger
Work to address the review comments on Fernando's branch....
r2498
def _num_cpus_unix():
"""Return the number of active CPUs on a Unix system."""
return os.sysconf("SC_NPROCESSORS_ONLN")
def _num_cpus_darwin():
"""Return the number of active CPUs on a Darwin system."""
p = subprocess.Popen(['sysctl','-n','hw.ncpu'],stdout=subprocess.PIPE)
return p.stdout.read()
def _num_cpus_windows():
"""Return the number of active CPUs on a Windows system."""
return os.environ.get("NUMBER_OF_PROCESSORS")
def num_cpus():
"""Return the effective number of CPUs in the system as an integer.
This cross-platform function makes an attempt at finding the total number of
available CPUs in the system, as returned by various underlying system and
python calls.
If it can't find a sensible answer, it returns 1 (though an error *may* make
it return a large positive number that's actually incorrect).
"""
# Many thanks to the Parallel Python project (http://www.parallelpython.com)
# for the names of the keys we needed to look up for this function. This
# code was inspired by their equivalent function.
ncpufuncs = {'Linux':_num_cpus_unix,
'Darwin':_num_cpus_darwin,
'Windows':_num_cpus_windows,
# On Vista, python < 2.5.2 has a bug and returns 'Microsoft'
# See http://bugs.python.org/issue1082 for details.
'Microsoft':_num_cpus_windows,
}
ncpufunc = ncpufuncs.get(platform.system(),
# default to unix version (Solaris, AIX, etc)
_num_cpus_unix)
try:
ncpus = max(1,int(ncpufunc()))
except:
ncpus = 1
return ncpus