pyhw 0.3.7__py3-none-any.whl → 0.4.1__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
pyhw/__main__.py CHANGED
@@ -10,6 +10,7 @@ from .backend.cpu import CPUDetect
10
10
  from .backend.gpu import GPUDetect
11
11
  from .backend.memory import MemoryDetect
12
12
  from .backend.nic import NICDetect
13
+ from .backend.npu import NPUDetect
13
14
  from .pyhwUtil import createDataString
14
15
  from .pyhwUtil import getOS, selectOSLogo
15
16
 
@@ -34,6 +35,9 @@ def main():
34
35
  nic_info = NICDetect(os=current_os).getNICInfo()
35
36
  if nic_info.number > 0:
36
37
  data.NIC = nic_info.nics
38
+ npu_info = NPUDetect(os=current_os).getNPUInfo()
39
+ if npu_info.number > 0:
40
+ data.NPU = npu_info.npus
37
41
 
38
42
  Printer(logo_os=selectOSLogo(OSDetect(os=current_os).getOSInfo().id), data=createDataString(data)).cPrint()
39
43
 
@@ -20,3 +20,4 @@ class Data:
20
20
  GPU = ["Default Value"]
21
21
  Memory = "Default Value"
22
22
  NIC = ["Default Value"]
23
+ NPU = ["Default Value"]
pyhw/backend/gpu/linux.py CHANGED
@@ -2,6 +2,7 @@ import subprocess
2
2
  from .gpuInfo import GPUInfo
3
3
  from ..cpu import CPUDetect
4
4
  from ...pyhwUtil import getArch
5
+ import pypci
5
6
 
6
7
 
7
8
  class GPUDetectLinux:
@@ -14,19 +15,17 @@ class GPUDetectLinux:
14
15
  return self.__gpuInfo
15
16
 
16
17
  def __getGPUInfo(self):
17
- try:
18
- pci_info = subprocess.run(["bash", "-c", "lspci"], capture_output=True, text=True).stdout.strip()
19
- except subprocess.SubprocessError:
20
- return
21
- if len(pci_info) == 0: # no pcie devices found
18
+ gpu_devices = pypci.PCI().FindAllVGA()
19
+ if len(gpu_devices) == 0:
22
20
  self.__handleNonePciDevices()
23
- for line in pci_info.split("\n"):
24
- if "VGA" in line or "Display" in line or "3D " in line:
25
- gpu = line.split(": ")[1]
26
- self.__gpuInfo.gpus.append(self.__gpuNameClean(gpu))
21
+ else:
22
+ for device in gpu_devices:
23
+ if device.subsystem_device_name != "":
24
+ device_name = f"{device.vendor_name} {device.device_name} ({device.subsystem_device_name})"
25
+ else:
26
+ device_name = f"{device.vendor_name} {device.device_name}"
27
+ self.__gpuInfo.gpus.append(self.__gpuNameClean(device_name))
27
28
  self.__gpuInfo.number += 1
28
- if self.__gpuInfo.number == 0:
29
- self.__handleNonePciDevices() # fallback to a sbc device detection method
30
29
 
31
30
  def __handleNonePciDevices(self):
32
31
  # if detector can't find any VGA/Display/3D GPUs, assume the host is a sbc device, this function is a placeholder for a more advanced method.
pyhw/backend/nic/linux.py CHANGED
@@ -2,6 +2,7 @@ import subprocess
2
2
  from .nicInfo import NICInfo
3
3
  from ...pyhwUtil import getArch
4
4
  from ...pyhwException import BackendException
5
+ import pypci
5
6
 
6
7
 
7
8
  class NICDetectLinux:
@@ -14,20 +15,17 @@ class NICDetectLinux:
14
15
  return self.__nicInfo
15
16
 
16
17
  def __getNICInfo(self):
17
- try:
18
- pci_info = subprocess.run(["bash", "-c", "lspci"], capture_output=True, text=True).stdout.strip()
19
- except subprocess.SubprocessError:
20
- return
21
- if len(pci_info) == 0: # no pcie devices found
18
+ nic_devices = pypci.PCI().FindAllNIC()
19
+ if len(nic_devices) == 0:
22
20
  self.__handleNonePciDevices()
23
- return
24
- for line in pci_info.split("\n"):
25
- if "Ethernet controller" in line or "Network controller" in line:
26
- nic = line.split(": ")[1]
27
- self.__nicInfo.nics.append(self.__nicNameClean(nic))
21
+ else:
22
+ for device in nic_devices:
23
+ if device.subsystem_device_name != "":
24
+ device_name = f"{device.vendor_name} {device.device_name} ({device.subsystem_device_name})"
25
+ else:
26
+ device_name = f"{device.vendor_name} {device.device_name}"
27
+ self.__nicInfo.nics.append(self.__nicNameClean(device_name))
28
28
  self.__nicInfo.number += 1
29
- if self.__nicInfo.number == 0:
30
- self.__handleNonePciDevices() # fallback to usb detection method
31
29
 
32
30
  def __handleNonePciDevices(self):
33
31
  # placeholder for a more advanced method.
@@ -40,4 +38,4 @@ class NICDetectLinux:
40
38
  return nic_name_clean
41
39
 
42
40
  def __sortNICList(self):
43
- return self.__nicInfo.nics.sort()
41
+ return self.__nicInfo.nics.sort()
pyhw/backend/nic/macos.py CHANGED
@@ -1,4 +1,5 @@
1
1
  from .nicInfo import NICInfo
2
+ import subprocess
2
3
 
3
4
 
4
5
  class NICDetectMacOS:
@@ -9,3 +10,9 @@ class NICDetectMacOS:
9
10
  self.__nicInfo.nics.append("en0")
10
11
  self.__nicInfo.number = 1
11
12
  return self.__nicInfo
13
+
14
+ def __getNICInfo(self):
15
+ # Placeholder for a more advanced method.
16
+ interfaces = subprocess.run(["bash", "-c", "route get default | grep interface"], capture_output=True, text=True).stdout.strip()
17
+
18
+
@@ -0,0 +1,5 @@
1
+ from .npuBase import NPUDetect
2
+
3
+ __all__ = ['NPUDetect']
4
+
5
+
@@ -0,0 +1,42 @@
1
+ import subprocess
2
+ from .npuInfo import NPUInfo
3
+ from ..cpu import CPUDetect
4
+ from ...pyhwUtil import getArch
5
+ import pypci
6
+
7
+
8
+ class NPUDetectLinux:
9
+ def __init__(self):
10
+ self.__npuInfo = NPUInfo()
11
+
12
+ def getNPUInfo(self):
13
+ self.__getNPUInfo()
14
+ self.__sortNPUList()
15
+ return self.__npuInfo
16
+
17
+ def __getNPUInfo(self):
18
+ npu_devices = pypci.PCI().FindAllNPU()
19
+ if len(npu_devices) == 0:
20
+ self.__handleNonePciDevices()
21
+ else:
22
+ for device in npu_devices:
23
+ if device.subsystem_device_name != "":
24
+ device_name = f"{device.vendor_name} {device.device_name} ({device.subsystem_device_name})"
25
+ else:
26
+ device_name = f"{device.vendor_name} {device.device_name}"
27
+ self.__npuInfo.npus.append(self.__npuNameClean(device_name))
28
+ self.__npuInfo.number += 1
29
+
30
+ def __handleNonePciDevices(self):
31
+ # Place Holder for unknown NPU
32
+ self.__npuInfo.number = 1
33
+ self.__npuInfo.npus.append("Not found")
34
+
35
+ @staticmethod
36
+ def __npuNameClean(npu_name: str):
37
+ npu_name_clean = npu_name.replace("Corporation ", "")
38
+ return npu_name_clean
39
+
40
+ def __sortNPUList(self):
41
+ self.__npuInfo.npus.sort()
42
+
@@ -0,0 +1,39 @@
1
+ from .npuInfo import NPUInfo
2
+ from ...pyhwUtil import getArch
3
+ import json
4
+ import subprocess
5
+
6
+
7
+ class NPUDetectMacOS:
8
+ def __init__(self):
9
+ self.__npuInfo = NPUInfo()
10
+ self.__arch = getArch()
11
+
12
+ def getNPUInfo(self):
13
+ if self.__arch == "aarch64":
14
+ self.__getNPUAppleSilicon()
15
+ else: # Does not consider powerPC based Macs.
16
+ self.__getNPUIntel()
17
+ return self.__npuInfo
18
+
19
+ def __getNPUAppleSilicon(self):
20
+ # Place holder
21
+ self.__npuInfo.npus.append("Neural Engine [SOC Integrated]")
22
+ self.__npuInfo.number += 1
23
+
24
+ def __getNPUIntel(self):
25
+ # Place holder
26
+ self.__npuInfo.npus.append("Not Found")
27
+ self.__npuInfo.number += 1
28
+
29
+ @staticmethod
30
+ def __handleVendor(vendor):
31
+ if vendor == "sppci_vendor_Apple":
32
+ return "Apple"
33
+ elif vendor == "sppci_vendor_intel":
34
+ return "Intel"
35
+ elif vendor == "sppci_vendor_amd":
36
+ return "AMD"
37
+ else:
38
+ return vendor
39
+
@@ -0,0 +1,17 @@
1
+ from .linux import NPUDetectLinux
2
+ from .macos import NPUDetectMacOS
3
+
4
+
5
+ class NPUDetect:
6
+ def __init__(self, os):
7
+ self.OS = os
8
+
9
+ def getNPUInfo(self):
10
+ if self.OS == "linux":
11
+ return NPUDetectLinux().getNPUInfo()
12
+ elif self.OS == "macos":
13
+ return NPUDetectMacOS().getNPUInfo()
14
+ else:
15
+ raise NotImplementedError("Unsupported operating system")
16
+
17
+
@@ -0,0 +1,10 @@
1
+ from dataclasses import dataclass
2
+
3
+
4
+ @dataclass
5
+ class NPUInfo:
6
+ def __init__(self):
7
+ self.number = 0
8
+ self.npus = []
9
+
10
+
pyhw/pyhwUtil/pyhwUtil.py CHANGED
@@ -53,6 +53,8 @@ def createDataString(data: Data):
53
53
  data_string += f" Memory: {data.Memory}\n"
54
54
  for nic in data.NIC:
55
55
  data_string += f" NIC: {nic}\n"
56
+ for npu in data.NPU:
57
+ data_string += f" NPU: {npu}\n"
56
58
  return data_string
57
59
 
58
60
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyhw
3
- Version: 0.3.7
3
+ Version: 0.4.1
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,6 +13,7 @@ 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.3
16
17
 
17
18
  # PyHw
18
19
  [![Downloads](https://static.pepy.tech/badge/pyhw)](https://pepy.tech/project/pyhw)
@@ -27,7 +28,9 @@ PyHw, a neofetch-like command line tool for fetching system information but writ
27
28
  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 🤔).
28
29
 
29
30
 
30
- ![demo](https://i2.imgs.ovh/d/BQACAgUAAx0EUvSR8wACMvpmyFVohzKxLcUdLiJaEa3wlo_OrQACuw4AAoX-QVaSpG0-rTAeRTUE)
31
+ [//]: # (![demo]&#40;https://i2.imgs.ovh/d/BQACAgUAAx0EUvSR8wACMvpmyFVohzKxLcUdLiJaEa3wlo_OrQACuw4AAoX-QVaSpG0-rTAeRTUE&#41;)
32
+ ![demo](https://files.catbox.moe/xx58xy.jpg)
33
+
31
34
 
32
35
 
33
36
 
@@ -1,8 +1,8 @@
1
1
  pyhw/__init__.py,sha256=IMjkMO3twhQzluVTo8Z6rE7Eg-9U79_LGKMcsWLKBkY,22
2
- pyhw/__main__.py,sha256=mAlp-qNRg3H9jeftQeNBZPDPyhvSHJ8v0VL_85qPyg8,1616
2
+ pyhw/__main__.py,sha256=3iVi-P0ciOYQPUrelB48gGOWlzFFkEw8n7MzX1K5Pck,1765
3
3
  pyhw/macos.py,sha256=kF973QvtEFky4m8RnYTJ-HWPuJi3625tvnWqJAT_DHM,4598
4
4
  pyhw/backend/__init__.py,sha256=knn_3Yroow1h0dqdrozk3zyy3vz-kQyNBRjR6OLmVoY,50
5
- pyhw/backend/backendBase.py,sha256=wLb03ZsDqWx36KaXnc0tMZfxOSM0_oBnnfv9khyRis4,478
5
+ pyhw/backend/backendBase.py,sha256=mloo8mPEbgbIdmyQ3I4vdEXMSSjxWi_wnwACmzvHbEo,506
6
6
  pyhw/backend/cpu/__init__.py,sha256=5YfANJVRwNwTRodG0ENOgusrdN592aaSnfq5ok4dKTo,56
7
7
  pyhw/backend/cpu/cpuBase.py,sha256=AGWqVjdvb82NiH4kxk3GERdBLwBNhkR23j2ei_l3S18,464
8
8
  pyhw/backend/cpu/cpuInfo.py,sha256=A_nNGElq9W7oZ5DFJowLdFBE0ZvXKr5h29E6TGAvbRc,251
@@ -11,7 +11,7 @@ pyhw/backend/cpu/macos.py,sha256=mnnH9ABiBgAiyA8-H9_tq2PC5OeneVLj67nMGoLDXh4,287
11
11
  pyhw/backend/gpu/__init__.py,sha256=EpMjPvUaXt0LTNMvGmB8WgXbUB9keCxuOhu8NT3Re6o,56
12
12
  pyhw/backend/gpu/gpuBase.py,sha256=Ge0DX2P8_EB7ovM7glmPUnVsPJL3OUHV2t_1T5mimR0,409
13
13
  pyhw/backend/gpu/gpuInfo.py,sha256=d_z_z5DiZAg85wP0VOBQEU0QHdaK3qFqA2Tp9Eq8-Zs,133
14
- pyhw/backend/gpu/linux.py,sha256=Pc9Sajf0tgRyT9zP1lYysQciLmgtNZjsuJNH3xNvwAY,1715
14
+ pyhw/backend/gpu/linux.py,sha256=E-evoL-spQbHB8JvbZXSq5ypc2SeePVUPnhEQrSPQpg,1619
15
15
  pyhw/backend/gpu/macos.py,sha256=kkTq9_ZJwTQ0Jwep4oYq41STDTplFz83jKRYbvlbMhg,2337
16
16
  pyhw/backend/host/__init__.py,sha256=Efaj7-Oya7H8HdpZHQCLrwn-mcfPb-d6yfh4dzsE_7I,58
17
17
  pyhw/backend/host/hostBase.py,sha256=POyDW3f5JSWtEKyCfrVSBEddSwoywe_OBgUExCEuje8,563
@@ -31,10 +31,15 @@ pyhw/backend/memory/memoryBase.py,sha256=RFRWTByH25T3T77maxLyIRRoedIi5M8XLtVbvwB
31
31
  pyhw/backend/memory/memoryInfo.py,sha256=OQF165uEyuapAsi7cKacQYDRnKdrQHeldfyFwzS9N2g,186
32
32
  pyhw/backend/metal/t.py,sha256=52yv-JoXNfaIOfcxEEidIg0MoyFtzWvTRm550kQKPZA,391
33
33
  pyhw/backend/nic/__init__.py,sha256=eP4eOYIvMF3LcTf954hJa6TnB8R4Qahss2g-UcgypKY,57
34
- pyhw/backend/nic/linux.py,sha256=xWZQlPfeQK9vbn3vQvm-liEJ1Zu1LGwkVhGrzJO1jjc,1436
35
- pyhw/backend/nic/macos.py,sha256=YY3BZpv_Kr4kqW6k9xFqFs_ne007czL5tZGs5v_0Z3k,245
34
+ pyhw/backend/nic/linux.py,sha256=2IDhesM77qLt7QK8HzYiMeLyuKWOVVrrDtkLHs7R6lU,1321
35
+ pyhw/backend/nic/macos.py,sha256=Gi-XAf2ZvJcWbwJvTlkpdyKaRDSXXiI2WhISeASxbvc,481
36
36
  pyhw/backend/nic/nicBase.py,sha256=hmVbiPOrDFClQrOBgAUgE8GVkC5nVH280jnlb65CDV4,539
37
37
  pyhw/backend/nic/nicInfo.py,sha256=wuBuL-aIzD441IUDPGz5e0xctcZ-opdpgqkVxgbvZLg,133
38
+ pyhw/backend/npu/__init__.py,sha256=PgLKbwpgT5vw9xpa294Zxb94McyxNXW46_vMbT2Iqyc,58
39
+ pyhw/backend/npu/linux.py,sha256=eQLozhGOh3iHoFXdRYp_Fn9OsrmJ7tsyxcOPUvopOSw,1286
40
+ pyhw/backend/npu/macos.py,sha256=-eoZXMcwiYUeO_ba9lLqWyhV8jmBYkgMi7iMlmVsbeY,1031
41
+ pyhw/backend/npu/npuBase.py,sha256=6lPYmsOGHO-lT-GqaJ2hNXRV_FLYqguuZ_7L6JJCG-g,411
42
+ pyhw/backend/npu/npuInfo.py,sha256=82dK6XvW_XKw4O5-RfR4-qQRR7Plh8qqJLj0YDzISmU,135
38
43
  pyhw/backend/os/__init__.py,sha256=rPHQYdQK3qU6ZwwodqVoEWeqBnKffXlJyi4k3-8ViPY,53
39
44
  pyhw/backend/os/linux.py,sha256=UDUSbCMQQJZqfRFHS270u-ZrW4KfqZxcS_vQZl6VbPo,1977
40
45
  pyhw/backend/os/macos.py,sha256=DwgpwRD1a2oTANR_XL3kkMzNawqrt23F79dqBw3ULK8,1906
@@ -75,11 +80,11 @@ pyhw/frontend/logo/ascii/ubuntu_small.pyhw,sha256=Xf8LSZdZUu9aEG3efhb1FUlUEuJ-3U
75
80
  pyhw/pyhwException/__init__.py,sha256=8JsFvtF13g0Y5t4z9fRndDXtfCzuBM59jDf6PhWSFSk,220
76
81
  pyhw/pyhwException/pyhwException.py,sha256=wxuzFQa9g7XB1q9TUKO_55lw7wMEJMpzG8w1GVTFVa0,197
77
82
  pyhw/pyhwUtil/__init__.py,sha256=PzeP9fXsIhvr3sUpJ4DxW9_H25DEIasBFfXd_NztfR4,226
78
- pyhw/pyhwUtil/pyhwUtil.py,sha256=PXibpl4hfc-xFHV1HNWwkzttC0NQITHLEwojYKMmD-U,2413
83
+ pyhw/pyhwUtil/pyhwUtil.py,sha256=CKXJrt6KGhZCV1J7MjsQ21c_jPmC1I3wZBPCKJfdqbM,2478
79
84
  pyhw/pyhwUtil/sysctlUtil.py,sha256=S-rUvqi7ZrMyMouIhxlyHEQ4agM7sCT1Y7uzs3Hu5-o,841
80
- pyhw-0.3.7.dist-info/LICENSE,sha256=hJs6RBqSVCexbTsalkMLNFI5t06kekQEsSVaOt_-yLs,1497
81
- pyhw-0.3.7.dist-info/METADATA,sha256=5JP-ZHYGRhokv-BldBT2M0gtUAmD5NrIh2Y-EQNLFYQ,4041
82
- pyhw-0.3.7.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
83
- pyhw-0.3.7.dist-info/entry_points.txt,sha256=q-AB8im_QahpmNrmy4aPTJRGi0LlbNlnI3kF7s6pKss,44
84
- pyhw-0.3.7.dist-info/top_level.txt,sha256=7Inxvxt1TngEricKZEex9_WJZS3DbKYFUXDz4v5WHYU,5
85
- pyhw-0.3.7.dist-info/RECORD,,
85
+ pyhw-0.4.1.dist-info/LICENSE,sha256=hJs6RBqSVCexbTsalkMLNFI5t06kekQEsSVaOt_-yLs,1497
86
+ pyhw-0.4.1.dist-info/METADATA,sha256=unr5Vf2YvG3dQfGma2Ahm1BzNwC5lGyJdLNbvdNCFng,4136
87
+ pyhw-0.4.1.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
88
+ pyhw-0.4.1.dist-info/entry_points.txt,sha256=q-AB8im_QahpmNrmy4aPTJRGi0LlbNlnI3kF7s6pKss,44
89
+ pyhw-0.4.1.dist-info/top_level.txt,sha256=7Inxvxt1TngEricKZEex9_WJZS3DbKYFUXDz4v5WHYU,5
90
+ pyhw-0.4.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (74.1.2)
2
+ Generator: setuptools (75.2.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
File without changes