summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErwin Junge <erwin@junge.nl>2021-02-08 22:29:30 +0100
committerErwin Junge <erwin@junge.nl>2021-02-08 22:29:30 +0100
commit3a8bea25dc0d2fd9498ad6b4069baed399d2c59b (patch)
tree369e3fd16c2c3b2abc84268aaeae381a8c155c8e
parent2fbdc35125ad5d9a9f613736f194a33ec69bb14b (diff)
Support cpus with non-sequential core ids
-rwxr-xr-xbpytop.py6
-rw-r--r--poetry.lock203
-rw-r--r--pyproject.toml1
-rw-r--r--tests/test_classes.py4
-rw-r--r--tests/test_functions.py15
5 files changed, 121 insertions, 108 deletions
diff --git a/bpytop.py b/bpytop.py
index 38d6e8b..8f1f933 100755
--- a/bpytop.py
+++ b/bpytop.py
@@ -5067,6 +5067,7 @@ def get_cpu_name() -> str:
def get_cpu_core_mapping() -> List[int]:
mapping: List[int] = []
+ core_ids: List[int] = []
if SYSTEM == "Linux" and os.path.isfile("/proc/cpuinfo"):
try:
@@ -5079,7 +5080,10 @@ def get_cpu_core_mapping() -> List[int]:
if num > THREADS - 1:
break
elif line.startswith("core id"):
- mapping[num] = int(line.strip()[(line.index(": ")+2):])
+ core_id = int(line.strip()[(line.index(": ")+2):])
+ if core_id not in core_ids:
+ core_ids.append(core_id)
+ mapping[num] = core_ids.index(core_id)
if num < THREADS - 1:
raise Exception
except:
diff --git a/poetry.lock b/poetry.lock
index 0485dc4..b13187c 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,116 +1,115 @@
[[package]]
-category = "dev"
-description = "An abstract syntax tree for Python with inference support."
name = "astroid"
+version = "2.4.2"
+description = "An abstract syntax tree for Python with inference support."
+category = "dev"
optional = false
python-versions = ">=3.5"
-version = "2.4.2"
[package.dependencies]
lazy-object-proxy = ">=1.4.0,<1.5.0"
six = ">=1.12,<2.0"
+typed-ast = {version = ">=1.4.0,<1.5", markers = "implementation_name == \"cpython\" and python_version < \"3.8\""}
wrapt = ">=1.11,<2.0"
-[package.dependencies.typed-ast]
-python = "<3.8"
-version = ">=1.4.0,<1.5"
-
[[package]]
-category = "dev"
-description = "Atomic file writes."
-marker = "sys_platform == \"win32\""
name = "atomicwrites"
+version = "1.4.0"
+description = "Atomic file writes."
+category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-version = "1.4.0"
[[package]]
-category = "dev"
-description = "Classes Without Boilerplate"
name = "attrs"
+version = "20.3.0"
+description = "Classes Without Boilerplate"
+category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-version = "20.3.0"
[package.extras]
-dev = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "furo", "sphinx", "pre-commit"]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "furo", "sphinx", "pre-commit"]
docs = ["furo", "sphinx", "zope.interface"]
-tests = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"]
-tests_no_zope = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"]
[[package]]
-category = "dev"
-description = "Cross-platform colored terminal text."
-marker = "sys_platform == \"win32\""
name = "colorama"
+version = "0.4.4"
+description = "Cross-platform colored terminal text."
+category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-version = "0.4.4"
[[package]]
-category = "dev"
-description = "Read metadata from Python packages"
-marker = "python_version < \"3.8\""
name = "importlib-metadata"
+version = "3.4.0"
+description = "Read metadata from Python packages"
+category = "dev"
optional = false
python-versions = ">=3.6"
-version = "3.4.0"
[package.dependencies]
+typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
-[package.dependencies.typing-extensions]
-python = "<3.8"
-version = ">=3.6.4"
-
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=3.5,<3.7.3 || >3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
[[package]]
-category = "dev"
-description = "iniconfig: brain-dead simple config-ini parsing"
name = "iniconfig"
+version = "1.1.1"
+description = "iniconfig: brain-dead simple config-ini parsing"
+category = "dev"
optional = false
python-versions = "*"
-version = "1.1.1"
[[package]]
-category = "dev"
-description = "A Python utility / library to sort Python imports."
name = "isort"
+version = "5.7.0"
+description = "A Python utility / library to sort Python imports."
+category = "dev"
optional = false
python-versions = ">=3.6,<4.0"
-version = "5.7.0"
[package.extras]
-colors = ["colorama (>=0.4.3,<0.5.0)"]
pipfile_deprecated_finder = ["pipreqs", "requirementslib"]
requirements_deprecated_finder = ["pipreqs", "pip-api"]
+colors = ["colorama (>=0.4.3,<0.5.0)"]
[[package]]
-category = "dev"
-description = "A fast and thorough lazy object proxy."
name = "lazy-object-proxy"
+version = "1.4.3"
+description = "A fast and thorough lazy object proxy."
+category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-version = "1.4.3"
[[package]]
-category = "dev"
-description = "McCabe checker, plugin for flake8"
name = "mccabe"
+version = "0.6.1"
+description = "McCabe checker, plugin for flake8"
+category = "dev"
optional = false
python-versions = "*"
-version = "0.6.1"
[[package]]
+name = "more-itertools"
+version = "8.7.0"
+description = "More routines for operating on iterables, beyond itertools"
category = "dev"
-description = "Optional static typing for Python"
-name = "mypy"
optional = false
python-versions = ">=3.5"
+
+[[package]]
+name = "mypy"
version = "0.790"
+description = "Optional static typing for Python"
+category = "dev"
+optional = false
+python-versions = ">=3.5"
[package.dependencies]
mypy-extensions = ">=0.4.3,<0.5.0"
@@ -121,164 +120,158 @@ typing-extensions = ">=3.7.4"
dmypy = ["psutil (>=4.0)"]
[[package]]
-category = "dev"
-description = "Experimental type system extensions for programs checked with the mypy typechecker."
name = "mypy-extensions"
+version = "0.4.3"
+description = "Experimental type system extensions for programs checked with the mypy typechecker."
+category = "dev"
optional = false
python-versions = "*"
-version = "0.4.3"
[[package]]
-category = "dev"
-description = "Core utilities for Python packages"
name = "packaging"
+version = "20.9"
+description = "Core utilities for Python packages"
+category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-version = "20.8"
[package.dependencies]
pyparsing = ">=2.0.2"
[[package]]
-category = "dev"
-description = "plugin and hook calling mechanisms for python"
name = "pluggy"
+version = "0.13.1"
+description = "plugin and hook calling mechanisms for python"
+category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-version = "0.13.1"
[package.dependencies]
-[package.dependencies.importlib-metadata]
-python = "<3.8"
-version = ">=0.12"
+importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
[package.extras]
dev = ["pre-commit", "tox"]
[[package]]
-category = "main"
-description = "Cross-platform lib for process and system monitoring in Python."
name = "psutil"
+version = "5.8.0"
+description = "Cross-platform lib for process and system monitoring in Python."
+category = "main"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-version = "5.8.0"
[package.extras]
test = ["ipaddress", "mock", "unittest2", "enum34", "pywin32", "wmi"]
[[package]]
-category = "dev"
-description = "library with cross-python path, ini-parsing, io, code, log facilities"
name = "py"
+version = "1.10.0"
+description = "library with cross-python path, ini-parsing, io, code, log facilities"
+category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-version = "1.10.0"
[[package]]
-category = "dev"
-description = "python code static checker"
name = "pylint"
+version = "2.6.0"
+description = "python code static checker"
+category = "dev"
optional = false
python-versions = ">=3.5.*"
-version = "2.6.0"
[package.dependencies]
astroid = ">=2.4.0,<=2.5"
-colorama = "*"
+colorama = {version = "*", markers = "sys_platform == \"win32\""}
isort = ">=4.2.5,<6"
mccabe = ">=0.6,<0.7"
toml = ">=0.7.1"
[[package]]
-category = "dev"
-description = "Python parsing module"
name = "pyparsing"
+version = "2.4.7"
+description = "Python parsing module"
+category = "dev"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
-version = "2.4.7"
[[package]]
-category = "dev"
-description = "pytest: simple powerful testing with Python"
name = "pytest"
+version = "6.2.2"
+description = "pytest: simple powerful testing with Python"
+category = "dev"
optional = false
python-versions = ">=3.6"
-version = "6.2.2"
[package.dependencies]
-atomicwrites = ">=1.0"
+atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""}
attrs = ">=19.2.0"
-colorama = "*"
+colorama = {version = "*", markers = "sys_platform == \"win32\""}
+importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
iniconfig = "*"
packaging = "*"
pluggy = ">=0.12,<1.0.0a1"
py = ">=1.8.2"
toml = "*"
-[package.dependencies.importlib-metadata]
-python = "<3.8"
-version = ">=0.12"
-
[package.extras]
testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"]
[[package]]
-category = "dev"
-description = "Python 2 and 3 compatibility utilities"
name = "six"
+version = "1.15.0"
+description = "Python 2 and 3 compatibility utilities"
+category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
-version = "1.15.0"
[[package]]
-category = "dev"
-description = "Python Library for Tom's Obvious, Minimal Language"
name = "toml"
+version = "0.10.2"
+description = "Python Library for Tom's Obvious, Minimal Language"
+category = "dev"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
-version = "0.10.2"
[[package]]
-category = "dev"
-description = "a fork of Python 2 and 3 ast modules with type comment support"
name = "typed-ast"
+version = "1.4.2"
+description = "a fork of Python 2 and 3 ast modules with type comment support"
+category = "dev"
optional = false
python-versions = "*"
-version = "1.4.2"
[[package]]
-category = "dev"
-description = "Backported and Experimental Type Hints for Python 3.5+"
name = "typing-extensions"
+version = "3.7.4.3"
+description = "Backported and Experimental Type Hints for Python 3.5+"
+category = "dev"
optional = false
python-versions = "*"
-version = "3.7.4.3"
[[package]]
-category = "dev"
-description = "Module for decorators, wrappers and monkey patching."
name = "wrapt"
+version = "1.12.1"
+description = "Module for decorators, wrappers and monkey patching."
+category = "dev"
optional = false
python-versions = "*"
-version = "1.12.1"
[[package]]
-category = "dev"
-description = "Backport of pathlib-compatible object wrapper for zip files"
-marker = "python_version < \"3.8\""
name = "zipp"
+version = "3.4.0"
+description = "Backport of pathlib-compatible object wrapper for zip files"
+category = "dev"
optional = false
python-versions = ">=3.6"
-version = "3.4.0"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=3.5,<3.7.3 || >3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "jaraco.test (>=3.2.0)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "jaraco.test (>=3.2.0)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
[metadata]
-content-hash = "4581a52fdd9d300030d31176f465e80c9a5156c58e79eae96dafe4c96cde1a9e"
-lock-version = "1.0"
+lock-version = "1.1"
python-versions = "^3.7"
+content-hash = "b3bd3798e1494ff11c901ea6d6c21d7d42daf0c58cf688edb702430bf977233b"
[metadata.files]
astroid = [
@@ -336,6 +329,10 @@ mccabe = [
{file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"},
{file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"},
]
+more-itertools = [
+ {file = "more-itertools-8.7.0.tar.gz", hash = "sha256:c5d6da9ca3ff65220c3bfd2a8db06d698f05d4d2b9be57e1deb2be5a45019713"},
+ {file = "more_itertools-8.7.0-py3-none-any.whl", hash = "sha256:5652a9ac72209ed7df8d9c15daf4e1aa0e3d2ccd3c87f8265a0673cd9cbc9ced"},
+]
mypy = [
{file = "mypy-0.790-cp35-cp35m-macosx_10_6_x86_64.whl", hash = "sha256:bd03b3cf666bff8d710d633d1c56ab7facbdc204d567715cb3b9f85c6e94f669"},
{file = "mypy-0.790-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:2170492030f6faa537647d29945786d297e4862765f0b4ac5930ff62e300d802"},
@@ -357,8 +354,8 @@ mypy-extensions = [
{file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"},
]
packaging = [
- {file = "packaging-20.8-py2.py3-none-any.whl", hash = "sha256:24e0da08660a87484d1602c30bb4902d74816b6985b93de36926f5bc95741858"},
- {file = "packaging-20.8.tar.gz", hash = "sha256:78598185a7008a470d64526a8059de9aaa449238f280fc9eb6b13ba6c4109093"},
+ {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"},
+ {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"},
]
pluggy = [
{file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
diff --git a/pyproject.toml b/pyproject.toml
index 001266b..7b45f19 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -16,6 +16,7 @@ psutil = "^5.7.0"
pytest = "^6.1.1"
mypy = "^0.790"
pylint = "^2.6.0"
+more-itertools = "^8.7.0"
[tool.poetry.scripts]
bpytop = "bpytop:main"
diff --git a/tests/test_classes.py b/tests/test_classes.py
index 956fda7..8cb01e6 100644
--- a/tests/test_classes.py
+++ b/tests/test_classes.py
@@ -58,7 +58,9 @@ def test_CpuCollector_collect_temps():
pytest.skip("Not testing temperature collection if no sensors was detected!")
CpuCollector._collect_temps()
assert len(CpuCollector.cpu_temp) == bpytop.THREADS + 1
- assert isinstance(CpuCollector.cpu_temp[0][0], int)
+ for temp_instance in CpuCollector.cpu_temp:
+ assert temp_instance
+ assert isinstance(temp_instance[0], int)
assert isinstance(CpuCollector.cpu_temp_high, int)
assert isinstance(CpuCollector.cpu_temp_crit, int)
diff --git a/tests/test_functions.py b/tests/test_functions.py
index b2e7826..19fec26 100644
--- a/tests/test_functions.py
+++ b/tests/test_functions.py
@@ -1,12 +1,21 @@
+from more_itertools import divide
+
import bpytop
-from bpytop import get_cpu_name, get_cpu_core_mapping, create_box, floating_humanizer, units_to_bytes
-from bpytop import Fx, SYSTEM
+from bpytop import (CORES, SYSTEM, THREADS, Fx, create_box, floating_humanizer,
+ get_cpu_core_mapping, get_cpu_name, units_to_bytes)
+
def test_get_cpu_name():
assert isinstance(get_cpu_name(), str)
def test_get_cpu_core_mapping():
- assert isinstance(get_cpu_core_mapping(), list)
+ cpu_core_mapping = get_cpu_core_mapping()
+ assert isinstance(cpu_core_mapping, list)
+ # Assert cpu submappings are sequential
+ for submapping in divide(THREADS//CORES, cpu_core_mapping):
+ submapping = list(submapping)
+ for a, b in zip(submapping[:-1], submapping[1:]):
+ assert b - a == 1
def test_create_box():
assert len(create_box(x=1, y=1, width=10, height=10, title="", title2="", line_color=None, title_color=None, fill=True, box=None)) > 1