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.
- pyhw/__init__.py +1 -1
- pyhw/__main__.py +2 -2
- pyhw/backend/cpu/cpuBase.py +6 -3
- pyhw/backend/cpu/windows.py +48 -0
- pyhw/backend/gpu/gpuBase.py +8 -4
- pyhw/backend/gpu/windows.py +41 -0
- pyhw/backend/host/hostBase.py +5 -5
- pyhw/backend/host/hostInfo.py +17 -8
- pyhw/backend/host/windows.py +32 -1
- pyhw/backend/kernel/kernelBase.py +3 -2
- pyhw/backend/kernel/kernelInfo.py +6 -0
- pyhw/backend/kernel/windows.py +23 -1
- pyhw/backend/memory/memoryBase.py +8 -4
- pyhw/backend/memory/windows.py +36 -0
- pyhw/backend/nic/linux.py +20 -3
- pyhw/backend/nic/nicBase.py +8 -4
- pyhw/backend/nic/windows.py +44 -0
- pyhw/backend/npu/npuBase.py +8 -6
- pyhw/backend/npu/windows.py +40 -0
- pyhw/backend/os/osBase.py +6 -3
- pyhw/backend/os/osInfo.py +6 -0
- pyhw/backend/os/windows.py +35 -0
- pyhw/backend/shell/shellBase.py +4 -1
- pyhw/backend/shell/shellInfo.py +10 -0
- pyhw/backend/shell/unix.py +2 -10
- pyhw/backend/shell/windows.py +29 -0
- pyhw/backend/title/titleBase.py +2 -2
- pyhw/backend/title/titleInfo.py +9 -0
- pyhw/backend/title/unix.py +2 -9
- pyhw/backend/title/windows.py +10 -1
- pyhw/backend/uptime/linux.py +3 -3
- pyhw/backend/uptime/macos.py +3 -3
- pyhw/backend/uptime/uptimeBase.py +6 -3
- pyhw/backend/uptime/windows.py +49 -0
- pyhw/frontend/color/colorConfig.py +52 -0
- pyhw/frontend/logo/ascii/windows_10.pyhw +19 -0
- pyhw/frontend/logo/ascii/windows_11.pyhw +17 -0
- pyhw/frontend/logo/ascii/windows_2025.pyhw +17 -0
- pyhw/frontend/logo/ascii/windows_old.pyhw +16 -0
- pyhw/library/lib/iokitGPULib.dylib +0 -0
- pyhw/pyhwUtil/pyhwUtil.py +10 -3
- {pyhw-0.7.3.dist-info → pyhw-0.8.0.dist-info}/METADATA +12 -5
- {pyhw-0.7.3.dist-info → pyhw-0.8.0.dist-info}/RECORD +47 -34
- pyhw/library/lib/iokitHostLib.dylib +0 -0
- {pyhw-0.7.3.dist-info → pyhw-0.8.0.dist-info}/LICENSE +0 -0
- {pyhw-0.7.3.dist-info → pyhw-0.8.0.dist-info}/WHEEL +0 -0
- {pyhw-0.7.3.dist-info → pyhw-0.8.0.dist-info}/entry_points.txt +0 -0
- {pyhw-0.7.3.dist-info → pyhw-0.8.0.dist-info}/top_level.txt +0 -0
pyhw/backend/shell/unix.py
CHANGED
@@ -2,22 +2,14 @@
|
|
2
2
|
In dev.
|
3
3
|
"""
|
4
4
|
from ...pyhwUtil import getDocker
|
5
|
-
from
|
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 =
|
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
|
pyhw/backend/title/titleBase.py
CHANGED
@@ -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")
|
pyhw/backend/title/unix.py
CHANGED
@@ -2,19 +2,12 @@
|
|
2
2
|
In dev.
|
3
3
|
"""
|
4
4
|
import subprocess
|
5
|
-
from
|
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 =
|
10
|
+
self.__titleInfo = TitleInfo()
|
18
11
|
|
19
12
|
def getTitle(self):
|
20
13
|
self.__getTitle()
|
pyhw/backend/title/windows.py
CHANGED
@@ -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
|
-
|
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
|
pyhw/backend/uptime/linux.py
CHANGED
@@ -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}
|
27
|
+
self.__uptimeInfo.uptime = f"{minutes} mins {seconds} secs"
|
28
28
|
else:
|
29
|
-
self.__uptimeInfo.uptime = f"{hours} hours {minutes}
|
29
|
+
self.__uptimeInfo.uptime = f"{hours} hours {minutes} mins {seconds} secs"
|
30
30
|
else:
|
31
|
-
self.__uptimeInfo.uptime = f"{days} days {hours} hours {minutes}
|
31
|
+
self.__uptimeInfo.uptime = f"{days} days {hours} hours {minutes} mins {seconds} secs"
|
pyhw/backend/uptime/macos.py
CHANGED
@@ -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}
|
25
|
+
self._uptimeInfo.uptime = f"{minutes} mins {seconds} secs"
|
26
26
|
else:
|
27
|
-
self._uptimeInfo.uptime = f"{hours} hours {minutes}
|
27
|
+
self._uptimeInfo.uptime = f"{hours} hours {minutes} mins {seconds} secs"
|
28
28
|
else:
|
29
|
-
self._uptimeInfo.uptime = f"{days} days {hours} hours {minutes}
|
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
|
-
|
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.
|
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.
|
16
|
+
Requires-Dist: pypci-ng>=0.1.2
|
17
17
|
|
18
18
|
# PyHw
|
19
19
|
[](https://pepy.tech/project/pyhw)
|
20
20
|

|
21
|
+

|
21
22
|
|
22
23
|

|
23
24
|

|
24
25
|

|
26
|
+

|
25
27
|
|
26
28
|

|
27
29
|

|
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
|
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
|
[//]: # ()
|
36
|
-
![demo]
|
37
|
-
|
38
|
+
[//]: # ()
|
39
|
+

|
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=
|
2
|
-
pyhw/__main__.py,sha256=
|
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=
|
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=
|
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=
|
20
|
-
pyhw/backend/host/hostInfo.py,sha256=
|
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=
|
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=
|
26
|
-
pyhw/backend/kernel/kernelInfo.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
53
|
-
pyhw/backend/os/osInfo.py,sha256=
|
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=
|
56
|
-
pyhw/backend/shell/
|
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=
|
59
|
-
pyhw/backend/title/
|
60
|
-
pyhw/backend/title/
|
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=
|
64
|
-
pyhw/backend/uptime/macos.py,sha256=
|
65
|
-
pyhw/backend/uptime/uptimeBase.py,sha256=
|
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=
|
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/
|
89
|
-
pyhw/
|
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=
|
106
|
+
pyhw/pyhwUtil/pyhwUtil.py,sha256=h3XsZFGwzkW75kj853IWVlxwDz8R8A3UR-bxju95aeY,6703
|
94
107
|
pyhw/pyhwUtil/sysctlUtil.py,sha256=S-rUvqi7ZrMyMouIhxlyHEQ4agM7sCT1Y7uzs3Hu5-o,841
|
95
|
-
pyhw-0.
|
96
|
-
pyhw-0.
|
97
|
-
pyhw-0.
|
98
|
-
pyhw-0.
|
99
|
-
pyhw-0.
|
100
|
-
pyhw-0.
|
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
|
File without changes
|
File without changes
|