pyhw 0.7.3__py3-none-any.whl → 0.8.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. pyhw/__init__.py +1 -1
  2. pyhw/__main__.py +2 -2
  3. pyhw/backend/cpu/cpuBase.py +6 -3
  4. pyhw/backend/cpu/windows.py +48 -0
  5. pyhw/backend/gpu/gpuBase.py +8 -4
  6. pyhw/backend/gpu/windows.py +41 -0
  7. pyhw/backend/host/hostBase.py +5 -5
  8. pyhw/backend/host/hostInfo.py +17 -8
  9. pyhw/backend/host/windows.py +32 -1
  10. pyhw/backend/kernel/kernelBase.py +3 -2
  11. pyhw/backend/kernel/kernelInfo.py +6 -0
  12. pyhw/backend/kernel/windows.py +23 -1
  13. pyhw/backend/memory/memoryBase.py +8 -4
  14. pyhw/backend/memory/windows.py +36 -0
  15. pyhw/backend/nic/linux.py +20 -3
  16. pyhw/backend/nic/nicBase.py +8 -4
  17. pyhw/backend/nic/windows.py +44 -0
  18. pyhw/backend/npu/npuBase.py +8 -6
  19. pyhw/backend/npu/windows.py +40 -0
  20. pyhw/backend/os/osBase.py +6 -3
  21. pyhw/backend/os/osInfo.py +6 -0
  22. pyhw/backend/os/windows.py +35 -0
  23. pyhw/backend/shell/shellBase.py +4 -1
  24. pyhw/backend/shell/shellInfo.py +10 -0
  25. pyhw/backend/shell/unix.py +2 -10
  26. pyhw/backend/shell/windows.py +29 -0
  27. pyhw/backend/title/titleBase.py +2 -2
  28. pyhw/backend/title/titleInfo.py +9 -0
  29. pyhw/backend/title/unix.py +2 -9
  30. pyhw/backend/title/windows.py +10 -1
  31. pyhw/backend/uptime/linux.py +3 -3
  32. pyhw/backend/uptime/macos.py +3 -3
  33. pyhw/backend/uptime/uptimeBase.py +6 -3
  34. pyhw/backend/uptime/windows.py +49 -0
  35. pyhw/frontend/color/colorConfig.py +52 -0
  36. pyhw/frontend/logo/ascii/windows_10.pyhw +19 -0
  37. pyhw/frontend/logo/ascii/windows_11.pyhw +17 -0
  38. pyhw/frontend/logo/ascii/windows_2025.pyhw +17 -0
  39. pyhw/frontend/logo/ascii/windows_old.pyhw +16 -0
  40. pyhw/library/lib/iokitGPULib.dylib +0 -0
  41. pyhw/pyhwUtil/pyhwUtil.py +10 -3
  42. {pyhw-0.7.3.dist-info → pyhw-0.8.0.dist-info}/METADATA +12 -5
  43. {pyhw-0.7.3.dist-info → pyhw-0.8.0.dist-info}/RECORD +47 -34
  44. pyhw/library/lib/iokitHostLib.dylib +0 -0
  45. {pyhw-0.7.3.dist-info → pyhw-0.8.0.dist-info}/LICENSE +0 -0
  46. {pyhw-0.7.3.dist-info → pyhw-0.8.0.dist-info}/WHEEL +0 -0
  47. {pyhw-0.7.3.dist-info → pyhw-0.8.0.dist-info}/entry_points.txt +0 -0
  48. {pyhw-0.7.3.dist-info → pyhw-0.8.0.dist-info}/top_level.txt +0 -0
@@ -2,22 +2,14 @@
2
2
  In dev.
3
3
  """
4
4
  from ...pyhwUtil import getDocker
5
- from dataclasses import dataclass
5
+ from .shellInfo import ShellInfo
6
6
  import os
7
7
  import subprocess
8
8
 
9
9
 
10
- @dataclass
11
- class ShellInfoUnix:
12
- shell = ""
13
- version = ""
14
- path = ""
15
- info = ""
16
-
17
-
18
10
  class ShellDetectUnix:
19
11
  def __init__(self):
20
- self.__shellInfo = ShellInfoUnix()
12
+ self.__shellInfo = ShellInfo()
21
13
 
22
14
  def getShellInfo(self):
23
15
  if getDocker():
@@ -0,0 +1,29 @@
1
+ """
2
+ In dev.
3
+ """
4
+ from ...pyhwException import BackendException
5
+ from .shellInfo import ShellInfo
6
+ import json
7
+ import subprocess
8
+
9
+
10
+ class ShellDetectWindows:
11
+ def __init__(self):
12
+ self.__shellInfo = ShellInfo()
13
+
14
+ def getShellInfo(self):
15
+ COMMAND = "$PSVersionTable.PSVersion | ConvertTo-JSON"
16
+
17
+ try:
18
+ result = subprocess.run(["powershell", "-NoProfile", "-Command", COMMAND], capture_output=True, text=True)
19
+ except subprocess.SubprocessError:
20
+ raise BackendException("Error running PowerShell command.")
21
+
22
+ res = json.loads(result.stdout)
23
+ major = res["Major"]
24
+ minor = res["Minor"]
25
+
26
+ self.__shellInfo.shell = "PowerShell"
27
+ self.__shellInfo.version = f"{major}.{minor}"
28
+ self.__shellInfo.info = f"PowerShell {major}.{minor}"
29
+ return self.__shellInfo
@@ -1,5 +1,3 @@
1
- from .unix import TitleDetectUnix
2
- from .windows import TitleDetectWindows
3
1
  from ...pyhwException import OSUnsupportedException
4
2
 
5
3
 
@@ -9,8 +7,10 @@ class TitleDetect:
9
7
 
10
8
  def getTitle(self):
11
9
  if self.OS in ["linux", "macos", "freebsd"]:
10
+ from .unix import TitleDetectUnix
12
11
  return TitleDetectUnix().getTitle()
13
12
  elif self.OS == "windows":
13
+ from .windows import TitleDetectWindows
14
14
  return TitleDetectWindows().getTitle()
15
15
  else:
16
16
  raise OSUnsupportedException("Unsupported operating system")
@@ -0,0 +1,9 @@
1
+ from dataclasses import dataclass
2
+
3
+
4
+ @dataclass
5
+ class TitleInfo:
6
+ def __init__(self):
7
+ self.username = ""
8
+ self.hostname = ""
9
+ self.title = ""
@@ -2,19 +2,12 @@
2
2
  In dev.
3
3
  """
4
4
  import subprocess
5
- from dataclasses import dataclass
6
-
7
-
8
- @dataclass
9
- class TitleInfoUnix:
10
- username = ""
11
- hostname = ""
12
- title = ""
5
+ from .titleInfo import TitleInfo
13
6
 
14
7
 
15
8
  class TitleDetectUnix:
16
9
  def __init__(self):
17
- self.__titleInfo = TitleInfoUnix()
10
+ self.__titleInfo = TitleInfo()
18
11
 
19
12
  def getTitle(self):
20
13
  self.__getTitle()
@@ -1,8 +1,17 @@
1
1
  """
2
2
  In dev.
3
3
  """
4
+ from .titleInfo import TitleInfo
5
+ import getpass
6
+ import platform
4
7
 
5
8
 
6
9
  class TitleDetectWindows:
10
+ def __init__(self):
11
+ self.__titleInfo = TitleInfo()
12
+
7
13
  def getTitle(self):
8
- pass
14
+ self.__titleInfo.username = getpass.getuser()
15
+ self.__titleInfo.hostname = platform.node()
16
+ self.__titleInfo.title = f"{self.__titleInfo.username}@{self.__titleInfo.hostname}"
17
+ return self.__titleInfo
@@ -24,8 +24,8 @@ class UptimeDetectLinux:
24
24
  seconds = int(seconds)
25
25
  if days == 0:
26
26
  if hours == 0:
27
- self.__uptimeInfo.uptime = f"{minutes} min {seconds} sec"
27
+ self.__uptimeInfo.uptime = f"{minutes} mins {seconds} secs"
28
28
  else:
29
- self.__uptimeInfo.uptime = f"{hours} hours {minutes} min {seconds} sec"
29
+ self.__uptimeInfo.uptime = f"{hours} hours {minutes} mins {seconds} secs"
30
30
  else:
31
- self.__uptimeInfo.uptime = f"{days} days {hours} hours {minutes} min {seconds} sec"
31
+ self.__uptimeInfo.uptime = f"{days} days {hours} hours {minutes} mins {seconds} secs"
@@ -22,11 +22,11 @@ class UptimeDetectMacOS:
22
22
  seconds = int(seconds)
23
23
  if days == 0:
24
24
  if hours == 0:
25
- self._uptimeInfo.uptime = f"{minutes} min {seconds} sec"
25
+ self._uptimeInfo.uptime = f"{minutes} mins {seconds} secs"
26
26
  else:
27
- self._uptimeInfo.uptime = f"{hours} hours {minutes} min {seconds} sec"
27
+ self._uptimeInfo.uptime = f"{hours} hours {minutes} mins {seconds} secs"
28
28
  else:
29
- self._uptimeInfo.uptime = f"{days} days {hours} hours {minutes} min {seconds} sec"
29
+ self._uptimeInfo.uptime = f"{days} days {hours} hours {minutes} mins {seconds} secs"
30
30
  return self._uptimeInfo
31
31
 
32
32
  def _getUptime(self):
@@ -1,6 +1,3 @@
1
- from .linux import UptimeDetectLinux
2
- from .macos import UptimeDetectMacOS
3
- from .bsd import UptimeDetectBSD
4
1
  from ...pyhwException import OSUnsupportedException
5
2
 
6
3
 
@@ -17,10 +14,16 @@ class UptimeDetect:
17
14
  :return: dataclass UptimeInfo, direct attr: uptime
18
15
  """
19
16
  if self.OS == "linux":
17
+ from .linux import UptimeDetectLinux
20
18
  return UptimeDetectLinux().getUptimeInfo()
21
19
  elif self.OS == "macos":
20
+ from .macos import UptimeDetectMacOS
22
21
  return UptimeDetectMacOS().getUptimeInfo()
23
22
  elif self.OS == "freebsd":
23
+ from .bsd import UptimeDetectBSD
24
24
  return UptimeDetectBSD().getUptimeInfo()
25
+ elif self.OS == "windows":
26
+ from .windows import UptimeDetectWindows
27
+ return UptimeDetectWindows().getUptimeInfo()
25
28
  else:
26
29
  raise OSUnsupportedException("Unsupported operating system")
@@ -0,0 +1,49 @@
1
+ from ...pyhwException import BackendException
2
+ from .uptimeInfo import UptimeInfo
3
+ import subprocess
4
+ import json
5
+ import re
6
+ from datetime import datetime
7
+
8
+
9
+ class UptimeDetectWindows:
10
+ def __init__(self):
11
+ self.__uptimeInfo = UptimeInfo()
12
+
13
+ def getUptimeInfo(self):
14
+ self.__getUptime()
15
+ return self.__uptimeInfo
16
+
17
+ def __getUptime(self):
18
+ COMMAND = 'Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object LastBootUpTime | ConvertTo-JSON'
19
+ try:
20
+ result = subprocess.run(["powershell", "-NoProfile", "-Command", COMMAND], capture_output=True, text=True)
21
+ except subprocess.SubprocessError:
22
+ raise BackendException("Error while getting system uptime")
23
+
24
+ res = json.loads(result.stdout)
25
+ timestamp_str = res['LastBootUpTime']
26
+ match = re.search(r'\d+', timestamp_str)
27
+
28
+ if match:
29
+ timestamp_ms = int(match.group(0))
30
+ last_boot_time = datetime.utcfromtimestamp(timestamp_ms / 1000)
31
+ current_time = datetime.utcnow()
32
+ uptime = current_time - last_boot_time
33
+ days = uptime.days
34
+ seconds = uptime.seconds
35
+ hours = seconds // 3600
36
+ minutes = (seconds % 3600) // 60
37
+ secs = (seconds % 3600) % 60
38
+
39
+ if days == 0:
40
+ if hours == 0:
41
+ self.__uptimeInfo.uptime = f"{minutes} mins {secs} secs"
42
+ else:
43
+ self.__uptimeInfo.uptime = f"{hours} hours {minutes} mins {secs} secs"
44
+ else:
45
+ self.__uptimeInfo.uptime = f"{days} days {hours} hours {minutes} mins {secs} secs"
46
+ else:
47
+ raise BackendException("Error while getting system uptime")
48
+
49
+
@@ -33,6 +33,14 @@ class ColorConfigSet:
33
33
  return ColorConfigSetC.centos
34
34
  elif self.__os_name == "freebsd":
35
35
  return ColorConfigSetF.freebsd
36
+ elif self.__os_name == "windows_old":
37
+ return ColorConfigSetW.windows_old
38
+ elif self.__os_name == "windows_10":
39
+ return ColorConfigSetW.windows_10
40
+ elif self.__os_name == "windows_11":
41
+ return ColorConfigSetW.windows_11
42
+ elif self.__os_name == "windows_2025":
43
+ return ColorConfigSetW.windows_2025
36
44
  else:
37
45
  return ColorConfigSetL.linux # default to Linux
38
46
 
@@ -176,3 +184,47 @@ class ColorConfigSetU:
176
184
  "colorKeys": ColorSet.COLOR_FG_RED,
177
185
  "colorTitle": ColorSet.COLOR_FG_RED
178
186
  }
187
+
188
+
189
+ @dataclass
190
+ class ColorConfigSetW:
191
+ windows_old = {
192
+ "colors": [
193
+ ColorSet.COLOR_FG_RED,
194
+ ColorSet.COLOR_FG_GREEN,
195
+ ColorSet.COLOR_FG_BLUE,
196
+ ColorSet.COLOR_FG_YELLOW
197
+ ],
198
+ "colorKeys": ColorSet.COLOR_FG_BLUE,
199
+ "colorTitle": ColorSet.COLOR_FG_GREEN
200
+ }
201
+ windows_10 = {
202
+ "colors": [
203
+ ColorSet.COLOR_FG_CYAN,
204
+ ColorSet.COLOR_FG_CYAN,
205
+ ColorSet.COLOR_FG_CYAN,
206
+ ColorSet.COLOR_FG_CYAN
207
+ ],
208
+ "colorKeys": ColorSet.COLOR_FG_YELLOW,
209
+ "colorTitle": ColorSet.COLOR_FG_GREEN
210
+ }
211
+ windows_11 = {
212
+ "colors": [
213
+ ColorSet.COLOR_FG_BLUE,
214
+ ColorSet.COLOR_FG_BLUE,
215
+ ColorSet.COLOR_FG_BLUE,
216
+ ColorSet.COLOR_FG_BLUE
217
+ ],
218
+ "colorKeys": ColorSet.COLOR_FG_YELLOW,
219
+ "colorTitle": ColorSet.COLOR_FG_CYAN
220
+ }
221
+ windows_2025 = {
222
+ "colors": [
223
+ ColorSet.COLOR_FG_BLUE,
224
+ ColorSet.COLOR_FG_BLUE,
225
+ ColorSet.COLOR_FG_BLUE,
226
+ ColorSet.COLOR_FG_BLUE
227
+ ],
228
+ "colorKeys": ColorSet.COLOR_FG_YELLOW,
229
+ "colorTitle": ColorSet.COLOR_FG_CYAN
230
+ }
@@ -0,0 +1,19 @@
1
+ $2..,
2
+ ....,,:;+ccllll
3
+ $1 ...,,+:; $2cllllllllllllllllll
4
+ $1,cclllllllllll $2lllllllllllllllllll
5
+ $1llllllllllllll $2lllllllllllllllllll
6
+ $1llllllllllllll $2lllllllllllllllllll
7
+ $1llllllllllllll $2lllllllllllllllllll
8
+ $1llllllllllllll $2lllllllllllllllllll
9
+ $1llllllllllllll $2lllllllllllllllllll
10
+
11
+ $3llllllllllllll $4lllllllllllllllllll
12
+ $3llllllllllllll $4lllllllllllllllllll
13
+ $3llllllllllllll $4lllllllllllllllllll
14
+ $3llllllllllllll $4lllllllllllllllllll
15
+ $3llllllllllllll $4lllllllllllllllllll
16
+ $3`'ccllllllllll $4lllllllllllllllllll
17
+ $3 `' \*:: $4:ccllllllllllllllll
18
+ ````''*::cll
19
+ ``
@@ -0,0 +1,17 @@
1
+ $1///////////////// $2/////////////////
2
+ $1///////////////// $2/////////////////
3
+ $1///////////////// $2/////////////////
4
+ $1///////////////// $2/////////////////
5
+ $1///////////////// $2/////////////////
6
+ $1///////////////// $2/////////////////
7
+ $1///////////////// $2/////////////////
8
+ $1///////////////// $2/////////////////
9
+
10
+ $3///////////////// $4/////////////////
11
+ $3///////////////// $4/////////////////
12
+ $3///////////////// $4/////////////////
13
+ $3///////////////// $4/////////////////
14
+ $3///////////////// $4/////////////////
15
+ $3///////////////// $4/////////////////
16
+ $3///////////////// $4/////////////////
17
+ $3///////////////// $4/////////////////
@@ -0,0 +1,17 @@
1
+ $1 ##%%%%%%%%% $2%%%%%%%%%##
2
+ $1 ###%%%%%%%%%% $2%%%%%%%%%%###
3
+ $1 ####%%%%%%%%%%% $2%%%%%%%%%%%####
4
+ $1 ##%%%%%%%%%%%%%% $2%%%%%%%%%%%%%%##
5
+ $1#%%%%%%%%%%%%%%%% $2%%%%%%%%%%%%%%%%#
6
+ $1%%%%%%%%%%%%%%%%% $2%%%%%%%%%%%%%%%%%
7
+ $1%%%%%%%%%%%%%%%%% $2%%%%%%%%%%%%%%%%%
8
+ $1%%%%%%%%%%%%%%%%% $2#%%%%%%%%%%%%%%%%
9
+
10
+ $3%%%%%%%%%%%%%%%%% $4#%%%%%%%%%%%%%%%%
11
+ $3%%%%%%%%%%%%%%%%% $4%%%%%%%%%%%%%%%%%
12
+ $3%%%%%%%%%%%%%%%%% $4%%%%%%%%%%%%%%%%%
13
+ $3%%%%%%%%%%%%%%%%% $4%%%%%%%%%%%%%%%%#
14
+ $3 ###%%%%%%%%%%%%% $4%%%%%%%%%%%%%%%##
15
+ $3 ####%%%%%%%%%%% $4%%%%%%%%%%%#%####
16
+ $3 ##%#%%%%%%%%% $4%%%%%%%%%%%######
17
+ $3 ##%%%%%%%%% $4%%%%%%%%%########
@@ -0,0 +1,16 @@
1
+ $1 ,.=:!!t3Z3z.,
2
+ :tt:::tt333EE3
3
+ $1 Et:::ztt33EEEL$2 @Ee., ..,
4
+ $1 ;tt:::tt333EE7$2 ;EEEEEEttttt33#
5
+ $1 :Et:::zt333EEQ.$2 $EEEEEttttt33QL
6
+ $1 it::::tt333EEF$2 @EEEEEEttttt33F
7
+ $1 ;3=*^```"*4EEV$2 :EEEEEEttttt33@.
8
+ $3 ,.=::::!t=., $1`$2 @EEEEEEtttz33QF
9
+ $3 ;::::::::zt33)$2 "4EEEtttji3P*
10
+ $3 :t::::::::tt33.$4:Z3z..$2 ``$4 ,..g.
11
+ $3 i::::::::zt33F$4 AEEEtttt::::ztF
12
+ $3 ;:::::::::t33V$4 ;EEEttttt::::t3
13
+ $3 E::::::::zt33L$4 @EEEtttt::::z3F
14
+ $3{3=*^```"*4E3)$4 ;EEEtttt:::::tZ`
15
+ $3 `$4 :EEEEtttt::::z7
16
+ "VEzjt:;;z>*`
Binary file
pyhw/pyhwUtil/pyhwUtil.py CHANGED
@@ -173,8 +173,10 @@ def createDataStringOld(data: Data):
173
173
 
174
174
  @dataclass
175
175
  class SupportedOS:
176
- ColorConfig = ["armbian", "arch", "alpine", "centos", "debian", "fedora", "macOS", "raspbian", "ubuntu", "freebsd"]
177
- AsciiLogo = ["armbian", "arch", "alpine", "centos", "debian", "fedora", "macOS", "raspbian", "ubuntu", "freebsd"]
176
+ ColorConfig = ["armbian", "arch", "alpine", "centos", "debian", "fedora", "macOS", "raspbian", "ubuntu", "freebsd",
177
+ "windows_old", "windows_10", "windows_11", "windows_2025"]
178
+ AsciiLogo = ["armbian", "arch", "alpine", "centos", "debian", "fedora", "macOS", "raspbian", "ubuntu", "freebsd",
179
+ "windows_old", "windows_10", "windows_11", "windows_2025"]
178
180
 
179
181
 
180
182
  def selectOSLogo(os_id: str):
@@ -183,8 +185,13 @@ def selectOSLogo(os_id: str):
183
185
  :param os_id: str, os id.
184
186
  :return: str, logo id.
185
187
  """
186
- if getOS() == "macos":
188
+ if getOS() == "macos": # macOS does not have small logo
187
189
  return os_id
190
+ if getOS() == "windows": # windows does not have small logo
191
+ if os_id in SupportedOS.ColorConfig and os_id in SupportedOS.AsciiLogo:
192
+ return os_id
193
+ else:
194
+ return "windows_11"
188
195
  if os_id in SupportedOS.ColorConfig and os_id in SupportedOS.AsciiLogo:
189
196
  pass
190
197
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pyhw
3
- Version: 0.7.3
3
+ Version: 0.8.0
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
@@ -13,28 +13,30 @@ Classifier: Operating System :: OS Independent
13
13
  Requires-Python: >=3.9
14
14
  Description-Content-Type: text/markdown
15
15
  License-File: LICENSE
16
- Requires-Dist: pypci-ng>=0.0.10
16
+ Requires-Dist: pypci-ng>=0.1.2
17
17
 
18
18
  # PyHw
19
19
  [![Downloads](https://static.pepy.tech/badge/pyhw)](https://pepy.tech/project/pyhw)
20
20
  ![PyPI - Version](https://img.shields.io/pypi/v/pyhw?label=version)
21
+ ![Static Badge](https://img.shields.io/badge/Python-3.9%2B-green)
21
22
 
22
23
  ![Static Badge](https://img.shields.io/badge/macOS-11%2B-green)
23
24
  ![Static Badge](https://img.shields.io/badge/Linux-blue)
24
25
  ![Static Badge](https://img.shields.io/badge/FreeBSD-red)
26
+ ![Static Badge](https://img.shields.io/badge/Windows-yellow)
25
27
 
26
28
  ![Static Badge](https://img.shields.io/badge/amd64-green)
27
29
  ![Static Badge](https://img.shields.io/badge/arm-blue)
28
30
 
29
31
 
30
- PyHw, a neofetch-like command line tool for fetching system information but written mostly in Python. **Currently, this project is still in the initial stage, only Linux, macOS, and FreeBSD are supported.**
32
+ PyHw, a neofetch-like command line tool for fetching system information but written mostly in Python. **Currently, this project is still in the initial stage, only Linux, macOS, FreeBSD and Windows are supported.**
31
33
 
32
34
  This project is a Python reimplementation of [neofetch](https://github.com/dylanaraps/neofetch) and references the [fastfetch](https://github.com/fastfetch-cli/fastfetch) project for logo style settings. Since this project is implemented in Python, it will be easier to maintain and extend than bash and c implementation. Also, this project only relies on the Python standard library, so you can run it on any device that has a Python environment (I hope so 🤔).
33
35
 
34
36
 
35
37
  [//]: # (![demo]&#40;https://i2.imgs.ovh/d/BQACAgUAAx0EUvSR8wACMvpmyFVohzKxLcUdLiJaEa3wlo_OrQACuw4AAoX-QVaSpG0-rTAeRTUE&#41;)
36
- ![demo](https://files.catbox.moe/xx58xy.jpg)
37
-
38
+ [//]: # (![demo]&#40;https://files.catbox.moe/xx58xy.jpg&#41;)
39
+ ![demo](https://files.catbox.moe/2d21fu.jpg)
38
40
 
39
41
 
40
42
 
@@ -96,7 +98,12 @@ This is due to the fact that system python is not supposed to be managed by pip.
96
98
  * macOS arm64, x86_64
97
99
  * Linux arm64, x86_64
98
100
  * FreeBSD arm64
101
+ * Windows 10 X86_64
99
102
 
103
+ ## Add Logo
104
+ 1. Create a file named **\<os>.pyhw** in **logo/ascii** folder
105
+ 2. Modify **colorConfig.py** file to add a new logo style
106
+ 3. Update **pyhwUtil.py** to enable new logo style.
100
107
 
101
108
  ## Build from source
102
109
  Currently, build process relay on swiftc and macOS IOKit framework. To build package from source, you need a Mac machine with macOS 11 and newer.
@@ -1,73 +1,83 @@
1
- pyhw/__init__.py,sha256=i5zhgfscuWC8vabp6pP1S6z_O5355x2aIv0so00_cmo,22
2
- pyhw/__main__.py,sha256=A0t0jkcwdTXd6ca7POUfm8krjCn2FQaXTIss5gNmNcI,1775
1
+ pyhw/__init__.py,sha256=27YY3zFpeaDh6JoC40AqkjBrn68SqFlsWZzjZtw5jwU,22
2
+ pyhw/__main__.py,sha256=AYSSricHPScjYNF-LgFHfQUqKcxq8FruDW2a89FAXfA,1795
3
3
  pyhw/backend/__init__.py,sha256=knn_3Yroow1h0dqdrozk3zyy3vz-kQyNBRjR6OLmVoY,50
4
4
  pyhw/backend/backendBase.py,sha256=mloo8mPEbgbIdmyQ3I4vdEXMSSjxWi_wnwACmzvHbEo,506
5
5
  pyhw/backend/cpu/__init__.py,sha256=5YfANJVRwNwTRodG0ENOgusrdN592aaSnfq5ok4dKTo,56
6
6
  pyhw/backend/cpu/bsd.py,sha256=Ls97NAsvZGVJj3_fBUcYXjY2gsZvFKhXYtkTHxVVXSs,288
7
- pyhw/backend/cpu/cpuBase.py,sha256=u9kQORv8RJ9BLjG219wNTgBAivHy_lUll4Bkk6TBlXY,576
7
+ pyhw/backend/cpu/cpuBase.py,sha256=2YAOz1K8VLKtLY7iYBxUV9Ikuf4I4d4YivocvZDrdUU,748
8
8
  pyhw/backend/cpu/cpuInfo.py,sha256=A_nNGElq9W7oZ5DFJowLdFBE0ZvXKr5h29E6TGAvbRc,251
9
9
  pyhw/backend/cpu/linux.py,sha256=zJ2cOwQHtolJrMMY1WXVbLLIRNPxeClUgzLAAkd7As4,3346
10
10
  pyhw/backend/cpu/macos.py,sha256=pacU-yT7q-HKerkh2Q0BSdzSY6dKzHfSnRZBmimqqXk,2953
11
+ pyhw/backend/cpu/windows.py,sha256=A3oIvVUVMGPEqiM9QBiK0OwElcEf1LDhNi_23AimooQ,1723
11
12
  pyhw/backend/gpu/__init__.py,sha256=EpMjPvUaXt0LTNMvGmB8WgXbUB9keCxuOhu8NT3Re6o,56
12
13
  pyhw/backend/gpu/bsd.py,sha256=hNFiCek770CXOh3DK3I3-g272-a1S5D7LolGJBsLXaU,124
13
- pyhw/backend/gpu/gpuBase.py,sha256=DyY1bVrsaWczkbrrN6J7kG-Kh9yic3Lqww8yLZNCet8,521
14
+ pyhw/backend/gpu/gpuBase.py,sha256=ZPT9o7PhYpzlwign0GsCT519F9DGx-1UEMVVOM8MV_k,748
14
15
  pyhw/backend/gpu/gpuInfo.py,sha256=d_z_z5DiZAg85wP0VOBQEU0QHdaK3qFqA2Tp9Eq8-Zs,133
15
16
  pyhw/backend/gpu/linux.py,sha256=E-evoL-spQbHB8JvbZXSq5ypc2SeePVUPnhEQrSPQpg,1619
16
17
  pyhw/backend/gpu/macos.py,sha256=SmTqqTrIMRW-GVPmDs8xAiOX7HsCjrGh9qkxLQCdvO8,3850
18
+ pyhw/backend/gpu/windows.py,sha256=Hv-vtWQGKv6_Nxc8raEBq7NNm5TR6xg6x6BK3Aa2uP4,1249
17
19
  pyhw/backend/host/__init__.py,sha256=Efaj7-Oya7H8HdpZHQCLrwn-mcfPb-d6yfh4dzsE_7I,58
18
20
  pyhw/backend/host/bsd.py,sha256=9gKnM6yysHBKwS3EQvb0pCeylh3dzHvoEuPe14zo9wQ,382
19
- pyhw/backend/host/hostBase.py,sha256=Dt3zZjkL6iUM9eOKkPUBAZ_2Lx-GQSIjsQhkLmjCUAk,678
20
- pyhw/backend/host/hostInfo.py,sha256=Xvz0LugPiCSWMkcDsp4p2rrojYFZauL6Q-gCZ6NLz5k,184
21
+ pyhw/backend/host/hostBase.py,sha256=gM49SY6rEaxec_0bUOMk7QlEfR7vjfWp3BXEUqgdncc,762
22
+ pyhw/backend/host/hostInfo.py,sha256=grz15M2t3f_enqQvc7Qn6HlEfYwa66bu2NYvm8VpJ-g,452
21
23
  pyhw/backend/host/linux.py,sha256=vGIl1b61vB-uilPk6awPOIWRaxnIsR43L20sNHeM5bI,2824
22
24
  pyhw/backend/host/macos.py,sha256=KW-EJK9g1xHNrFsVxJv5GPLpc_ZevX0Zv1WjZUzRkzo,15369
23
- pyhw/backend/host/windows.py,sha256=rjDJaIs-5zspzFsNCMCh6m2yZXEXI0vccqeBpmAdEBk,53
25
+ pyhw/backend/host/windows.py,sha256=qn2QiTK2wIijyyw_QKdiSizY3teyS-9RNBu5RxEPRSw,1185
24
26
  pyhw/backend/kernel/__init__.py,sha256=fGjwjpOhwA_PnsWbwoq102hwhTay2ufYKaTqxjSV2-I,65
25
- pyhw/backend/kernel/kernelBase.py,sha256=ZUj5wqar9mLUlIYrTDzyCWjrwzGtP6WJIIAXy5v1zhM,490
26
- pyhw/backend/kernel/kernelInfo.py,sha256=QQYni0IVeFZ2IVNDC06U728Q01Rq3R6qRDYCxMjtJrY,189
27
+ pyhw/backend/kernel/kernelBase.py,sha256=3ZmkRkvwoWk3R-by2cgBlZnMSQzVjTC8Owmv53Pm4II,539
28
+ pyhw/backend/kernel/kernelInfo.py,sha256=Nkumd0McbimCjc7yJrvz6bcwpWu1Tdo_LKomjZr7Jgk,341
27
29
  pyhw/backend/kernel/unix.py,sha256=XDV2GIjamERcmlrQFaKFZY-OJO1xj76Im_7lmg2uFzo,1192
28
- pyhw/backend/kernel/windows.py,sha256=lxZ7T9Ea0Qbq3pf_TjSAHSM2YTozC6ivv7dKdLOTl3s,58
30
+ pyhw/backend/kernel/windows.py,sha256=RY0Cwwn_eJP4iP43gHLjcQzhwwdU4yc2NGLDajbmtvI,900
29
31
  pyhw/backend/memory/__init__.py,sha256=zGBWxfPAAk8ivCBWPLJIpuD-lB7wUJT3x8u2jHiAoCY,65
30
32
  pyhw/backend/memory/bsd.py,sha256=GKTCs6RocdoWj-5ZZRMB4xAWGWljor6leuwX-L-7bW0,251
31
33
  pyhw/backend/memory/linux.py,sha256=kxP0LxXdTWYRtu9nDyKqZeIzZrQI84kVOPMeN1GwSOo,917
32
34
  pyhw/backend/memory/macos.py,sha256=ur2HxmmmVkXmaxEcw_otphifVp_csfNMJdgt-idCq7M,2770
33
- pyhw/backend/memory/memoryBase.py,sha256=wl6zN3-U_jRNsaWM9szWPvWjiq3Ca8Rcm-aMRdAJge8,554
35
+ pyhw/backend/memory/memoryBase.py,sha256=trubcJ_7JD_FnrKefUycPFd4OZMFj3Rk75ih5YVsSXg,790
34
36
  pyhw/backend/memory/memoryInfo.py,sha256=OQF165uEyuapAsi7cKacQYDRnKdrQHeldfyFwzS9N2g,186
37
+ pyhw/backend/memory/windows.py,sha256=T_yWJCu-joWvXXuaIgnMRGaDtsp-frQD_cx8IFVgdpA,1208
35
38
  pyhw/backend/metal/t.py,sha256=52yv-JoXNfaIOfcxEEidIg0MoyFtzWvTRm550kQKPZA,391
36
39
  pyhw/backend/nic/__init__.py,sha256=eP4eOYIvMF3LcTf954hJa6TnB8R4Qahss2g-UcgypKY,57
37
40
  pyhw/backend/nic/bsd.py,sha256=lIXnPqzSA2qexUt0P9OHMmxoI5c5XBi2V80RY9S0wsM,135
38
- pyhw/backend/nic/linux.py,sha256=vS-bZSvPOjNaPLO6wyJHILVEsEVJJK2aQ4wUcXsgm74,1308
41
+ pyhw/backend/nic/linux.py,sha256=3H91Nw87frzZA4P6Q5GbjHSaI7q4Q5-v6R8BgdvplgQ,1976
39
42
  pyhw/backend/nic/macos.py,sha256=63gZjSmUGwGqfs41IWrEXmSz9O8eQy4G5oql3JLZmoo,855
40
- pyhw/backend/nic/nicBase.py,sha256=cT_rxqIEcvvKFsvjKlkCJ8RIfp7QHxDE9_SImXDae0s,735
43
+ pyhw/backend/nic/nicBase.py,sha256=Kng5qoe7FHcnQaf6S-LUe_HyOaBJe0L1SVstdIQ_WJY,962
41
44
  pyhw/backend/nic/nicInfo.py,sha256=wuBuL-aIzD441IUDPGz5e0xctcZ-opdpgqkVxgbvZLg,133
45
+ pyhw/backend/nic/windows.py,sha256=c67JwHARtPxNsZ-0_MVKUfc7DwpsRVn7kiHdx_NyDn8,1297
42
46
  pyhw/backend/npu/__init__.py,sha256=PgLKbwpgT5vw9xpa294Zxb94McyxNXW46_vMbT2Iqyc,58
43
47
  pyhw/backend/npu/bsd.py,sha256=eKkOWZ4MBybR_KOGGcsWUpzCGgghhvuBy5VNsnEE8cI,134
44
48
  pyhw/backend/npu/linux.py,sha256=mXHSYRION3pghwk6_4vgHxjSkNxI68ksGLkFZstR0mc,1192
45
49
  pyhw/backend/npu/macos.py,sha256=c-iSmGfBWYeoh7nXuCFmPlVH6bc6sil_yRsAlabl93k,2513
46
- pyhw/backend/npu/npuBase.py,sha256=qiioBmHDeh2Et1F7lwmNight-2W32C0VmMtx2DIOCz4,523
50
+ pyhw/backend/npu/npuBase.py,sha256=1cVWRmr8g-mDXrJAx2cUO4qWZft2TtT7L2-HzRot2nI,748
47
51
  pyhw/backend/npu/npuInfo.py,sha256=82dK6XvW_XKw4O5-RfR4-qQRR7Plh8qqJLj0YDzISmU,135
52
+ pyhw/backend/npu/windows.py,sha256=Z2v5CORSa1ap66k48G7uVLbon3zaoT4ug5sX2_rt6vM,1196
48
53
  pyhw/backend/os/__init__.py,sha256=rPHQYdQK3qU6ZwwodqVoEWeqBnKffXlJyi4k3-8ViPY,53
49
54
  pyhw/backend/os/bsd.py,sha256=5Q30mkFKdhuup1dRjTEVN58MEGcj7JzbUzh40ld6C14,131
50
55
  pyhw/backend/os/linux.py,sha256=U7dIOKZaG5MSw0S65hAfDfFaBMvbwSCHFIHTwckU9iI,1957
51
56
  pyhw/backend/os/macos.py,sha256=DwgpwRD1a2oTANR_XL3kkMzNawqrt23F79dqBw3ULK8,1906
52
- pyhw/backend/os/osBase.py,sha256=IiyrA5IEtlcaR-xigi8SxD70BimFKCBMjgF0MLihSOk,573
53
- pyhw/backend/os/osInfo.py,sha256=iLPc7INFHH3izascwooj4JBVgvBsSgVPXWBlFXG47mQ,378
57
+ pyhw/backend/os/osBase.py,sha256=2zaOGhaXLrNJS9-9qR4hH9_uFTgA2Sv4ab7YZvNVFaE,744
58
+ pyhw/backend/os/osInfo.py,sha256=NEr76aicI9N3SFrwi1skcpUEjzsyCryTjdE9X1nBjBM,536
59
+ pyhw/backend/os/windows.py,sha256=WyUhkO9loIqwiZ_ezI6J2JHL4A2xzQAuTzkO1ZOStr4,1149
54
60
  pyhw/backend/shell/__init__.py,sha256=SeQ7OLNSl_V1JCCWnJGjLilAWiSe9e5kgsMEt63TMS0,62
55
- pyhw/backend/shell/shellBase.py,sha256=U4HPg_iWhAqaLceBnEVMHFj4A-FNYu7JjsQyi2seEU4,377
56
- pyhw/backend/shell/unix.py,sha256=Vt2wSxAIrzN679v0MjJwBoK6L12OqZOichociFZ9lw8,2109
61
+ pyhw/backend/shell/shellBase.py,sha256=829rchiqXfyA-oKT81mkGGoKBjZflM5NHIRs0_ZSwaY,531
62
+ pyhw/backend/shell/shellInfo.py,sha256=pU32_Akg0TDVFprTfPYaOKWcFkijJkm0FOowfILNRKk,184
63
+ pyhw/backend/shell/unix.py,sha256=qTP3Mk8prI2lnQmUJ41G1Fgu1l8nGn9PB3pyBoewtJg,2010
64
+ pyhw/backend/shell/windows.py,sha256=_Ou4QFkS-_K8xMjxw9X3N0t5duZCa3LnMhft_aiPuE0,854
57
65
  pyhw/backend/title/__init__.py,sha256=l6_WqreSBeK7krapCrbrr4ndnydrXB1aZ50Ve-beV_w,62
58
- pyhw/backend/title/titleBase.py,sha256=nzHcVJqAMZqWJP101YWgRwilSiZ_hHiK-jiI90Pm3r8,495
59
- pyhw/backend/title/unix.py,sha256=9B-zLE8yhlWBnJ-6Aa-DmFmgMV9KdvvNU40drJIaNck,837
60
- pyhw/backend/title/windows.py,sha256=5bXR6yxHk3diVx92sjxPeD6fUVR5sKZJG3K4aM3CGn8,82
66
+ pyhw/backend/title/titleBase.py,sha256=RVWwtTea8G1MutrN3Ttkjky9wwVtRxnHIsOJKpBbvF8,519
67
+ pyhw/backend/title/titleInfo.py,sha256=lUsbQNx80MLHuSCgMzWhc72mj0ykcRuWngn9wydYSos,166
68
+ pyhw/backend/title/unix.py,sha256=XEjPbnbygxs1qDv79kdaGHFGU_8elW7Q2kvpbYWo0P8,747
69
+ pyhw/backend/title/windows.py,sha256=XcW_M5a31zCo11FylOn0R-J0fQGnWZr8n75YJraJlZM,427
61
70
  pyhw/backend/uptime/__init__.py,sha256=X8RVhHWmHpyey0C4gcmrt_u1cHKowhAQRDMAxY3i7p0,65
62
71
  pyhw/backend/uptime/bsd.py,sha256=XdLIvivr78Pr8PqSwQG3eLvjjaM52nK5QcWrwtuNZlg,147
63
- pyhw/backend/uptime/linux.py,sha256=Sh05CgUjAOzPM8LSoZf4fCU-Cl5pwhSJSC7XJ-jFaHU,1027
64
- pyhw/backend/uptime/macos.py,sha256=Io-JrFjmRWHgB7uh4mBTV4rnfJuUvepGh2uiKNhUZcc,1293
65
- pyhw/backend/uptime/uptimeBase.py,sha256=PB0SWpsZyNz5GL5n39rC7DDSpKVAlH2K2eKqOuiEfy0,778
72
+ pyhw/backend/uptime/linux.py,sha256=m9NmnVeQV8ZwRbytQ0gsrkY6UqhuCoMkdc3QQX4v8nI,1033
73
+ pyhw/backend/uptime/macos.py,sha256=sVLmtLgOC7CDBVrfCBKCVApSUmbHEbd6BK3yRgzNzWQ,1299
74
+ pyhw/backend/uptime/uptimeBase.py,sha256=HVRFZHO-2F_UKH0ti9wR16iHCH7Q8dga0HfxFxUEUck,959
66
75
  pyhw/backend/uptime/uptimeInfo.py,sha256=TobPEV3MBT3Fiv3W6TOzD3a4MNW-vz2Oi_Trlcihu7k,114
76
+ pyhw/backend/uptime/windows.py,sha256=fRj218K9gx2Ffg8_dEjWyaFrqFl-niiPHvJjwJhfGeM,1744
67
77
  pyhw/frontend/__init__.py,sha256=xgv_iVv9w4cLXklbdtFWXu7J7KJxBCUw-ZcUQb_abFc,57
68
78
  pyhw/frontend/frontendBase.py,sha256=rPAf7tE1u8uGgZ-mDTOw_O2S2-YsevEzGJsq34eJlXQ,4957
69
79
  pyhw/frontend/color/__init__.py,sha256=xk511qWwdYWEVjk_zOaC4fs81HtwR4ELr3wi1tTL824,191
70
- pyhw/frontend/color/colorConfig.py,sha256=6VADbaM_xwlYF4Ds38xvmRgxVSDWBB71WWDFhiLrQaI,4650
80
+ pyhw/frontend/color/colorConfig.py,sha256=hvpA9R4ajAbqZ0bVq5hOs0PXtTF00ViZ_qXLbBJ1DWU,6225
71
81
  pyhw/frontend/color/colorSet.py,sha256=spH8PlRu7capouf-yUgDHgoPCnM5aJ_ncascISZfz2g,1421
72
82
  pyhw/frontend/color/colorUtil.py,sha256=VhcPmAJmXGIiRBfVZE2jg_iy-SfbxqwOSvkRz-nbUOQ,94
73
83
  pyhw/frontend/logo/__init__.py,sha256=mozEarHueBUgtDHKSd-RDaFysMLUiW3VQ8KcBtlKGCI,47
@@ -85,16 +95,19 @@ pyhw/frontend/logo/ascii/macOS.pyhw,sha256=HBGROtBb7wrNtRqAQ9ND7zxK0l17BRsmpgc2d
85
95
  pyhw/frontend/logo/ascii/raspbian.pyhw,sha256=jEl6WMKF-FGx359ipQ1kzweUJS-NuauYQCFaYime4PQ,159
86
96
  pyhw/frontend/logo/ascii/ubuntu.pyhw,sha256=l-Q0PfutxXYMwTojqeiM88063x4V0RBkZUHmi6YdsNc,833
87
97
  pyhw/frontend/logo/ascii/ubuntu_small.pyhw,sha256=Xf8LSZdZUu9aEG3efhb1FUlUEuJ-3UztcIOJISpKhPw,229
88
- pyhw/library/lib/iokitGPULib.dylib,sha256=18A4SyThKQvzEEOijeWb4XsgXO-iTFYGa0XtrDoBHjY,154808
89
- pyhw/library/lib/iokitHostLib.dylib,sha256=PKNLMhHwB6-sKDaeo3izbPR88OgzjuRGaLV0NvNWVRk,149256
98
+ pyhw/frontend/logo/ascii/windows_10.pyhw,sha256=jv5pzZs_CdOzpeTjyXfXJWcTQwK-J0LNlnyj_sJcuOI,706
99
+ pyhw/frontend/logo/ascii/windows_11.pyhw,sha256=VuQTzbBabaEQhm2JBVhy6Ja6lClUGacQsaiNUih9nhU,656
100
+ pyhw/frontend/logo/ascii/windows_2025.pyhw,sha256=o8eWsiyhNpDoEjiWFiBMfkd-8MdIslGc1Jpm85LU4P8,643
101
+ pyhw/frontend/logo/ascii/windows_old.pyhw,sha256=AMsvWAZ50HM8lweWEmzDWbRNDGkKFJo9qLY_VRKrciY,580
102
+ pyhw/library/lib/iokitGPULib.dylib,sha256=DcJ0GZY79gTFckLFYtZgeKn1T0NFvdO_k_ccCa7od5Y,154808
90
103
  pyhw/pyhwException/__init__.py,sha256=8JsFvtF13g0Y5t4z9fRndDXtfCzuBM59jDf6PhWSFSk,220
91
104
  pyhw/pyhwException/pyhwException.py,sha256=wxuzFQa9g7XB1q9TUKO_55lw7wMEJMpzG8w1GVTFVa0,197
92
105
  pyhw/pyhwUtil/__init__.py,sha256=diIqlNUBfuHu-2VAOJk5nipGLafnWxR3chAAOmX8QRo,250
93
- pyhw/pyhwUtil/pyhwUtil.py,sha256=6aKYh7sEPkqrfevckJO7MGmehGwgu_QVniFjVOw4dYk,6297
106
+ pyhw/pyhwUtil/pyhwUtil.py,sha256=h3XsZFGwzkW75kj853IWVlxwDz8R8A3UR-bxju95aeY,6703
94
107
  pyhw/pyhwUtil/sysctlUtil.py,sha256=S-rUvqi7ZrMyMouIhxlyHEQ4agM7sCT1Y7uzs3Hu5-o,841
95
- pyhw-0.7.3.dist-info/LICENSE,sha256=hJs6RBqSVCexbTsalkMLNFI5t06kekQEsSVaOt_-yLs,1497
96
- pyhw-0.7.3.dist-info/METADATA,sha256=u_SrWbzrQ4VCkFq8xfSEr_F2BNCEHyIBlf8LcWRP8QY,5544
97
- pyhw-0.7.3.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
98
- pyhw-0.7.3.dist-info/entry_points.txt,sha256=q-AB8im_QahpmNrmy4aPTJRGi0LlbNlnI3kF7s6pKss,44
99
- pyhw-0.7.3.dist-info/top_level.txt,sha256=7Inxvxt1TngEricKZEex9_WJZS3DbKYFUXDz4v5WHYU,5
100
- pyhw-0.7.3.dist-info/RECORD,,
108
+ pyhw-0.8.0.dist-info/LICENSE,sha256=hJs6RBqSVCexbTsalkMLNFI5t06kekQEsSVaOt_-yLs,1497
109
+ pyhw-0.8.0.dist-info/METADATA,sha256=2jICwuL3kDvCFc1aJN67Hk3YFGHqQSOjpZkyAAYk5c0,5945
110
+ pyhw-0.8.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
111
+ pyhw-0.8.0.dist-info/entry_points.txt,sha256=q-AB8im_QahpmNrmy4aPTJRGi0LlbNlnI3kF7s6pKss,44
112
+ pyhw-0.8.0.dist-info/top_level.txt,sha256=7Inxvxt1TngEricKZEex9_WJZS3DbKYFUXDz4v5WHYU,5
113
+ pyhw-0.8.0.dist-info/RECORD,,
Binary file
File without changes
File without changes