pyhw 0.6.6__tar.gz → 0.6.8__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. {pyhw-0.6.6/src/pyhw.egg-info → pyhw-0.6.8}/PKG-INFO +1 -1
  2. {pyhw-0.6.6 → pyhw-0.6.8}/pyproject.toml +1 -1
  3. pyhw-0.6.8/src/pyhw/backend/host/linux.py +65 -0
  4. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/shell/unix.py +20 -2
  5. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/library/lib/iokitGPULib.dylib +0 -0
  6. pyhw-0.6.8/src/pyhw/library/lib/iokitHostLib.dylib +0 -0
  7. pyhw-0.6.8/src/pyhw/pyhwUtil/__init__.py +4 -0
  8. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/pyhwUtil/pyhwUtil.py +21 -5
  9. {pyhw-0.6.6 → pyhw-0.6.8/src/pyhw.egg-info}/PKG-INFO +1 -1
  10. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw.egg-info/SOURCES.txt +1 -0
  11. pyhw-0.6.6/src/pyhw/backend/host/linux.py +0 -59
  12. pyhw-0.6.6/src/pyhw/pyhwUtil/__init__.py +0 -4
  13. {pyhw-0.6.6 → pyhw-0.6.8}/LICENSE +0 -0
  14. {pyhw-0.6.6 → pyhw-0.6.8}/README.md +0 -0
  15. {pyhw-0.6.6 → pyhw-0.6.8}/setup.cfg +0 -0
  16. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/__init__.py +0 -0
  17. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/__main__.py +0 -0
  18. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/__init__.py +0 -0
  19. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/backendBase.py +0 -0
  20. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/cpu/__init__.py +0 -0
  21. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/cpu/cpuBase.py +0 -0
  22. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/cpu/cpuInfo.py +0 -0
  23. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/cpu/linux.py +0 -0
  24. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/cpu/macos.py +0 -0
  25. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/gpu/__init__.py +0 -0
  26. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/gpu/gpuBase.py +0 -0
  27. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/gpu/gpuInfo.py +0 -0
  28. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/gpu/linux.py +0 -0
  29. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/gpu/macos.py +0 -0
  30. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/host/__init__.py +0 -0
  31. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/host/hostBase.py +0 -0
  32. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/host/hostInfo.py +0 -0
  33. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/host/macos.py +0 -0
  34. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/host/windows.py +0 -0
  35. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/kernel/__init__.py +0 -0
  36. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/kernel/kernelBase.py +0 -0
  37. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/kernel/kernelInfo.py +0 -0
  38. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/kernel/unix.py +0 -0
  39. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/kernel/windows.py +0 -0
  40. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/memory/__init__.py +0 -0
  41. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/memory/linux.py +0 -0
  42. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/memory/macos.py +0 -0
  43. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/memory/memoryBase.py +0 -0
  44. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/memory/memoryInfo.py +0 -0
  45. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/metal/t.py +0 -0
  46. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/nic/__init__.py +0 -0
  47. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/nic/linux.py +0 -0
  48. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/nic/macos.py +0 -0
  49. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/nic/nicBase.py +0 -0
  50. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/nic/nicInfo.py +0 -0
  51. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/npu/__init__.py +0 -0
  52. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/npu/linux.py +0 -0
  53. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/npu/macos.py +0 -0
  54. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/npu/npuBase.py +0 -0
  55. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/npu/npuInfo.py +0 -0
  56. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/os/__init__.py +0 -0
  57. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/os/linux.py +0 -0
  58. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/os/macos.py +0 -0
  59. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/os/osBase.py +0 -0
  60. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/os/osInfo.py +0 -0
  61. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/shell/__init__.py +0 -0
  62. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/shell/shellBase.py +0 -0
  63. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/title/__init__.py +0 -0
  64. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/title/titleBase.py +0 -0
  65. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/title/unix.py +0 -0
  66. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/title/windows.py +0 -0
  67. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/uptime/__init__.py +0 -0
  68. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/uptime/linux.py +0 -0
  69. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/uptime/macos.py +0 -0
  70. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/uptime/uptimeBase.py +0 -0
  71. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/backend/uptime/uptimeInfo.py +0 -0
  72. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/frontend/__init__.py +0 -0
  73. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/frontend/color/__init__.py +0 -0
  74. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/frontend/color/colorConfig.py +0 -0
  75. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/frontend/color/colorSet.py +0 -0
  76. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/frontend/color/colorUtil.py +0 -0
  77. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/frontend/frontendBase.py +0 -0
  78. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/frontend/logo/__init__.py +0 -0
  79. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/frontend/logo/ascii/alpine.pyhw +0 -0
  80. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/frontend/logo/ascii/arch.pyhw +0 -0
  81. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/frontend/logo/ascii/armbian.pyhw +0 -0
  82. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/frontend/logo/ascii/centos.pyhw +0 -0
  83. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/frontend/logo/ascii/debian.pyhw +0 -0
  84. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/frontend/logo/ascii/fedora.pyhw +0 -0
  85. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/frontend/logo/ascii/fedora_small.pyhw +0 -0
  86. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/frontend/logo/ascii/linux.pyhw +0 -0
  87. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/frontend/logo/ascii/macOS.pyhw +0 -0
  88. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/frontend/logo/ascii/raspbian.pyhw +0 -0
  89. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/frontend/logo/ascii/ubuntu.pyhw +0 -0
  90. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/frontend/logo/ascii/ubuntu_small.pyhw +0 -0
  91. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/frontend/logo/logoBase.py +0 -0
  92. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/macos.py +0 -0
  93. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/pyhwException/__init__.py +0 -0
  94. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/pyhwException/pyhwException.py +0 -0
  95. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw/pyhwUtil/sysctlUtil.py +0 -0
  96. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw.egg-info/dependency_links.txt +0 -0
  97. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw.egg-info/entry_points.txt +0 -0
  98. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw.egg-info/requires.txt +0 -0
  99. {pyhw-0.6.6 → pyhw-0.6.8}/src/pyhw.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyhw
3
- Version: 0.6.6
3
+ Version: 0.6.8
4
4
  Summary: PyHw, a neofetch-like command line tool for fetching system information but written mostly in python.
5
5
  Author-email: Xiao Ran <xiaoran.007@icloud.com>
6
6
  License: BSD-3-Clause
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pyhw"
7
- version = "0.6.6"
7
+ version = "0.6.8"
8
8
  description = "PyHw, a neofetch-like command line tool for fetching system information but written mostly in python."
9
9
  keywords = ["neofetch", "system information", "command line tool", "python", "hardware information", "fastfetch", "fetching"]
10
10
  authors = [
@@ -0,0 +1,65 @@
1
+ """
2
+ In dev.
3
+ """
4
+ from ...pyhwUtil import getArch, getDocker
5
+ from .hostInfo import HostInfo
6
+ import os
7
+
8
+
9
+ class HostDetectLinux:
10
+ def __init__(self):
11
+ self.__hostInfo = HostInfo()
12
+ self.__arch = getArch()
13
+ self.__docker = getDocker()
14
+
15
+ def getHostInfo(self):
16
+ self.__getModel()
17
+ return self.__hostInfo
18
+
19
+ def __getModel(self):
20
+ if self.__docker:
21
+ self.__hostInfo.name = f"General {self.__arch} Docker Host"
22
+ self.__hostInfo.version = ""
23
+ self.__hostInfo.model = self.__hostInfo.name + " " + self.__hostInfo.version
24
+ else:
25
+ if self.__arch in ["x86_64", "x86"]:
26
+ try:
27
+ with open("/sys/devices/virtual/dmi/id/product_name", "r") as f:
28
+ product_name = f.read().strip()
29
+ if product_name.startswith("To be filled by O.E.M."):
30
+ self.__hostInfo.name = f"General {self.__arch} Host"
31
+ else:
32
+ self.__hostInfo.name = product_name
33
+ with open("/sys/devices/virtual/dmi/id/product_version", "r") as f:
34
+ version = f.read().strip()
35
+ if version.startswith("To be filled by O.E.M."):
36
+ self.__hostInfo.version = ""
37
+ else:
38
+ self.__hostInfo.version = version
39
+ self.__hostInfo.model = self.__hostInfo.name + " " + self.__hostInfo.version
40
+ except FileNotFoundError:
41
+ pass
42
+ elif self.__arch in ["aarch64", "arm32"]:
43
+ # try to find dmi folder since some arm based desktops and servers may have same structure as x86_64 machines.
44
+ if os.path.exists("/sys/devices/virtual/dmi/id"):
45
+ try:
46
+ with open("/sys/devices/virtual/dmi/id/product_name", "r") as f:
47
+ self.__hostInfo.name = f.read().strip()
48
+ with open("/sys/devices/virtual/dmi/id/product_version", "r") as f:
49
+ self.__hostInfo.version = f.read().strip()
50
+ self.__hostInfo.model = self.__hostInfo.name + " " + self.__hostInfo.version
51
+ except FileNotFoundError:
52
+ pass
53
+ else:
54
+ # some single board computers may not have dmi folder, try to find model name in device tree.
55
+ try:
56
+ with open("/sys/firmware/devicetree/base/model", "r") as f:
57
+ self.__hostInfo.model = f.read().strip()
58
+ except FileNotFoundError:
59
+ pass
60
+
61
+ def __getHostFamily(self):
62
+ pass
63
+
64
+ def __getHostProductName(self):
65
+ pass
@@ -1,6 +1,7 @@
1
1
  """
2
2
  In dev.
3
3
  """
4
+ from ...pyhwUtil import getDocker
4
5
  from dataclasses import dataclass
5
6
  import os
6
7
  import subprocess
@@ -19,7 +20,10 @@ class ShellDetectUnix:
19
20
  self.__shellInfo = ShellInfoUnix()
20
21
 
21
22
  def getShellInfo(self):
22
- self.__getShell()
23
+ if getDocker():
24
+ self.__getShellDocker()
25
+ else:
26
+ self.__getShell()
23
27
  self.__getVersion()
24
28
  self.__shellInfo.info = self.__shellInfo.shell + " " + self.__shellInfo.version
25
29
  return self.__shellInfo
@@ -31,6 +35,19 @@ class ShellDetectUnix:
31
35
  self.__shellInfo.shell = shell_env.split("/")[-1]
32
36
  self.__shellInfo.path = shell_env
33
37
 
38
+ def __getShellDocker(self):
39
+ try:
40
+ with open("/etc/passwd", "r") as f:
41
+ for line in f:
42
+ if line.startswith("root:"):
43
+ root_shell = line.strip().split(":")[-1]
44
+ break
45
+ except:
46
+ root_shell = ""
47
+ if root_shell != "":
48
+ self.__shellInfo.shell = root_shell.split("/")[-1]
49
+ self.__shellInfo.path = root_shell
50
+
34
51
  def __getVersion(self):
35
52
  shell = self.__shellInfo.shell
36
53
  if shell != "":
@@ -39,7 +56,7 @@ class ShellDetectUnix:
39
56
  elif shell == "bash":
40
57
  try:
41
58
  result = subprocess.run(["bash", "-c", "echo $BASH_VERSION"], capture_output=True, text=True)
42
- self.__shellInfo.version = result.stdout.strip()
59
+ self.__shellInfo.version = result.stdout.strip().split("(")[0]
43
60
  except subprocess.SubprocessError:
44
61
  pass
45
62
  elif shell == "zsh":
@@ -54,3 +71,4 @@ class ShellDetectUnix:
54
71
 
55
72
 
56
73
 
74
+
@@ -0,0 +1,4 @@
1
+ from .pyhwUtil import getOS, getArch, getDocker, createDataString, selectOSLogo
2
+ from .sysctlUtil import sysctlGetString, sysctlGetInt
3
+
4
+ __all__ = ["getOS", "getArch", "getDocker", "createDataString", "selectOSLogo", "sysctlGetString", "sysctlGetInt"]
@@ -38,6 +38,14 @@ def getArch():
38
38
  return "unknown"
39
39
 
40
40
 
41
+ def getDocker() -> bool:
42
+ """
43
+ Check if the current environment is running in Docker.
44
+ :return: bool, True if running in Docker, False otherwise.
45
+ """
46
+ return os.path.exists("/.dockerenv")
47
+
48
+
41
49
  class DataStringProcessor:
42
50
  def __init__(self, data: Data):
43
51
  self.data = data
@@ -46,8 +54,11 @@ class DataStringProcessor:
46
54
  @staticmethod
47
55
  def __getENV() -> int:
48
56
  if getOS() == "linux":
49
- _, columns_str = os.popen('stty size', 'r').read().split()
50
- columns = int(columns_str)
57
+ try:
58
+ _, columns_str = os.popen('stty size', 'r').read().split()
59
+ columns = int(columns_str)
60
+ except:
61
+ columns = 80 # default terminal size is 80 columns
51
62
  else:
52
63
  # macOS default terminal size is 80 columns
53
64
  columns = 80
@@ -176,9 +187,14 @@ def selectOSLogo(os_id: str):
176
187
  pass
177
188
  else:
178
189
  return "linux"
179
- rows_str, columns_str = os.popen('stty size', 'r').read().split()
180
- rows = int(rows_str)
181
- columns = int(columns_str)
190
+ try:
191
+ rows_str, columns_str = os.popen('stty size', 'r').read().split()
192
+ rows = int(rows_str)
193
+ columns = int(columns_str)
194
+ except:
195
+ # Default terminal size is 24 rows and 80 columns
196
+ rows = 24
197
+ columns = 80
182
198
  if columns <= 80:
183
199
  if os_id in ["fedora", "ubuntu"]:
184
200
  return f"{os_id}_small"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyhw
3
- Version: 0.6.6
3
+ Version: 0.6.8
4
4
  Summary: PyHw, a neofetch-like command line tool for fetching system information but written mostly in python.
5
5
  Author-email: Xiao Ran <xiaoran.007@icloud.com>
6
6
  License: BSD-3-Clause
@@ -87,6 +87,7 @@ src/pyhw/frontend/logo/ascii/raspbian.pyhw
87
87
  src/pyhw/frontend/logo/ascii/ubuntu.pyhw
88
88
  src/pyhw/frontend/logo/ascii/ubuntu_small.pyhw
89
89
  src/pyhw/library/lib/iokitGPULib.dylib
90
+ src/pyhw/library/lib/iokitHostLib.dylib
90
91
  src/pyhw/pyhwException/__init__.py
91
92
  src/pyhw/pyhwException/pyhwException.py
92
93
  src/pyhw/pyhwUtil/__init__.py
@@ -1,59 +0,0 @@
1
- """
2
- In dev.
3
- """
4
- from ...pyhwUtil import getArch
5
- from .hostInfo import HostInfo
6
- import os
7
-
8
-
9
- class HostDetectLinux:
10
- def __init__(self):
11
- self.__hostInfo = HostInfo()
12
- self.__arch = getArch()
13
-
14
- def getHostInfo(self):
15
- self.__getModel()
16
- return self.__hostInfo
17
-
18
- def __getModel(self):
19
- if self.__arch in ["x86_64", "x86"]:
20
- try:
21
- with open("/sys/devices/virtual/dmi/id/product_name", "r") as f:
22
- product_name = f.read().strip()
23
- if product_name.startswith("To be filled by O.E.M."):
24
- self.__hostInfo.name = f"General {self.__arch} Host"
25
- else:
26
- self.__hostInfo.name = product_name
27
- with open("/sys/devices/virtual/dmi/id/product_version", "r") as f:
28
- version = f.read().strip()
29
- if version.startswith("To be filled by O.E.M."):
30
- self.__hostInfo.version = ""
31
- else:
32
- self.__hostInfo.version = version
33
- self.__hostInfo.model = self.__hostInfo.name + " " + self.__hostInfo.version
34
- except FileNotFoundError:
35
- pass
36
- elif self.__arch in ["aarch64", "arm32"]:
37
- # try to find dmi folder since some arm based desktops and servers may have same structure as x86_64 machines.
38
- if os.path.exists("/sys/devices/virtual/dmi/id"):
39
- try:
40
- with open("/sys/devices/virtual/dmi/id/product_name", "r") as f:
41
- self.__hostInfo.name = f.read().strip()
42
- with open("/sys/devices/virtual/dmi/id/product_version", "r") as f:
43
- self.__hostInfo.version = f.read().strip()
44
- self.__hostInfo.model = self.__hostInfo.name + " " + self.__hostInfo.version
45
- except FileNotFoundError:
46
- pass
47
- else:
48
- # some single board computers may not have dmi folder, try to find model name in device tree.
49
- try:
50
- with open("/sys/firmware/devicetree/base/model", "r") as f:
51
- self.__hostInfo.model = f.read().strip()
52
- except FileNotFoundError:
53
- pass
54
-
55
- def __getHostFamily(self):
56
- pass
57
-
58
- def __getHostProductName(self):
59
- pass
@@ -1,4 +0,0 @@
1
- from .pyhwUtil import getOS, getArch, createDataString, selectOSLogo
2
- from .sysctlUtil import sysctlGetString, sysctlGetInt
3
-
4
- __all__ = ["getOS", "getArch", "createDataString", "selectOSLogo", "sysctlGetString", "sysctlGetInt"]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes