pyhw 0.6.6__py3-none-any.whl → 0.6.7__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- pyhw/backend/host/linux.py +36 -30
- pyhw/backend/shell/unix.py +21 -2
- pyhw/pyhwUtil/__init__.py +2 -2
- pyhw/pyhwUtil/pyhwUtil.py +8 -0
- {pyhw-0.6.6.dist-info → pyhw-0.6.7.dist-info}/METADATA +1 -1
- {pyhw-0.6.6.dist-info → pyhw-0.6.7.dist-info}/RECORD +10 -10
- {pyhw-0.6.6.dist-info → pyhw-0.6.7.dist-info}/LICENSE +0 -0
- {pyhw-0.6.6.dist-info → pyhw-0.6.7.dist-info}/WHEEL +0 -0
- {pyhw-0.6.6.dist-info → pyhw-0.6.7.dist-info}/entry_points.txt +0 -0
- {pyhw-0.6.6.dist-info → pyhw-0.6.7.dist-info}/top_level.txt +0 -0
pyhw/backend/host/linux.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
"""
|
2
2
|
In dev.
|
3
3
|
"""
|
4
|
-
from ...pyhwUtil import getArch
|
4
|
+
from ...pyhwUtil import getArch, getDocker
|
5
5
|
from .hostInfo import HostInfo
|
6
6
|
import os
|
7
7
|
|
@@ -10,47 +10,53 @@ class HostDetectLinux:
|
|
10
10
|
def __init__(self):
|
11
11
|
self.__hostInfo = HostInfo()
|
12
12
|
self.__arch = getArch()
|
13
|
+
self.__docker = getDocker()
|
13
14
|
|
14
15
|
def getHostInfo(self):
|
15
16
|
self.__getModel()
|
16
17
|
return self.__hostInfo
|
17
18
|
|
18
19
|
def __getModel(self):
|
19
|
-
if self.
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
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"):
|
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"]:
|
39
26
|
try:
|
40
27
|
with open("/sys/devices/virtual/dmi/id/product_name", "r") as f:
|
41
|
-
|
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
|
42
33
|
with open("/sys/devices/virtual/dmi/id/product_version", "r") as f:
|
43
|
-
|
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
|
44
39
|
self.__hostInfo.model = self.__hostInfo.name + " " + self.__hostInfo.version
|
45
40
|
except FileNotFoundError:
|
46
41
|
pass
|
47
|
-
|
48
|
-
#
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
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
|
54
60
|
|
55
61
|
def __getHostFamily(self):
|
56
62
|
pass
|
pyhw/backend/shell/unix.py
CHANGED
@@ -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,9 +20,13 @@ class ShellDetectUnix:
|
|
19
20
|
self.__shellInfo = ShellInfoUnix()
|
20
21
|
|
21
22
|
def getShellInfo(self):
|
22
|
-
|
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
|
29
|
+
print(self.__shellInfo.info)
|
25
30
|
return self.__shellInfo
|
26
31
|
|
27
32
|
def __getShell(self):
|
@@ -31,6 +36,19 @@ class ShellDetectUnix:
|
|
31
36
|
self.__shellInfo.shell = shell_env.split("/")[-1]
|
32
37
|
self.__shellInfo.path = shell_env
|
33
38
|
|
39
|
+
def __getShellDocker(self):
|
40
|
+
try:
|
41
|
+
with open("/etc/passwd", "r") as f:
|
42
|
+
for line in f:
|
43
|
+
if line.startswith("root:"):
|
44
|
+
root_shell = line.strip().split(":")[-1]
|
45
|
+
break
|
46
|
+
except:
|
47
|
+
root_shell = ""
|
48
|
+
if root_shell != "":
|
49
|
+
self.__shellInfo.shell = root_shell.split("/")[-1]
|
50
|
+
self.__shellInfo.path = root_shell
|
51
|
+
|
34
52
|
def __getVersion(self):
|
35
53
|
shell = self.__shellInfo.shell
|
36
54
|
if shell != "":
|
@@ -39,7 +57,7 @@ class ShellDetectUnix:
|
|
39
57
|
elif shell == "bash":
|
40
58
|
try:
|
41
59
|
result = subprocess.run(["bash", "-c", "echo $BASH_VERSION"], capture_output=True, text=True)
|
42
|
-
self.__shellInfo.version = result.stdout.strip()
|
60
|
+
self.__shellInfo.version = result.stdout.strip().split("(")[0]
|
43
61
|
except subprocess.SubprocessError:
|
44
62
|
pass
|
45
63
|
elif shell == "zsh":
|
@@ -54,3 +72,4 @@ class ShellDetectUnix:
|
|
54
72
|
|
55
73
|
|
56
74
|
|
75
|
+
|
pyhw/pyhwUtil/__init__.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
from .pyhwUtil import getOS, getArch, createDataString, selectOSLogo
|
1
|
+
from .pyhwUtil import getOS, getArch, getDocker, createDataString, selectOSLogo
|
2
2
|
from .sysctlUtil import sysctlGetString, sysctlGetInt
|
3
3
|
|
4
|
-
__all__ = ["getOS", "getArch", "createDataString", "selectOSLogo", "sysctlGetString", "sysctlGetInt"]
|
4
|
+
__all__ = ["getOS", "getArch", "getDocker", "createDataString", "selectOSLogo", "sysctlGetString", "sysctlGetInt"]
|
pyhw/pyhwUtil/pyhwUtil.py
CHANGED
@@ -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
|
@@ -16,7 +16,7 @@ pyhw/backend/gpu/macos.py,sha256=SmTqqTrIMRW-GVPmDs8xAiOX7HsCjrGh9qkxLQCdvO8,385
|
|
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
|
18
18
|
pyhw/backend/host/hostInfo.py,sha256=Xvz0LugPiCSWMkcDsp4p2rrojYFZauL6Q-gCZ6NLz5k,184
|
19
|
-
pyhw/backend/host/linux.py,sha256=
|
19
|
+
pyhw/backend/host/linux.py,sha256=5wfEbe4au4JqDazBuUTfWLC2sPPa_YuidSGKVwzyI-0,2853
|
20
20
|
pyhw/backend/host/macos.py,sha256=KW-EJK9g1xHNrFsVxJv5GPLpc_ZevX0Zv1WjZUzRkzo,15369
|
21
21
|
pyhw/backend/host/windows.py,sha256=rjDJaIs-5zspzFsNCMCh6m2yZXEXI0vccqeBpmAdEBk,53
|
22
22
|
pyhw/backend/kernel/__init__.py,sha256=fGjwjpOhwA_PnsWbwoq102hwhTay2ufYKaTqxjSV2-I,65
|
@@ -47,7 +47,7 @@ pyhw/backend/os/osBase.py,sha256=AA17HIwmWy7E6nCtqbojTNsHKtcNuehf51FxGcfXu7A,462
|
|
47
47
|
pyhw/backend/os/osInfo.py,sha256=iLPc7INFHH3izascwooj4JBVgvBsSgVPXWBlFXG47mQ,378
|
48
48
|
pyhw/backend/shell/__init__.py,sha256=SeQ7OLNSl_V1JCCWnJGjLilAWiSe9e5kgsMEt63TMS0,62
|
49
49
|
pyhw/backend/shell/shellBase.py,sha256=mylNazVtTbCSzus-IPe1QwnuIGSFNP-z5vYKwTIl_yg,377
|
50
|
-
pyhw/backend/shell/unix.py,sha256=
|
50
|
+
pyhw/backend/shell/unix.py,sha256=Yradj6aj4nqc9CNQvVqzOgwO-p2IIJ_Jt_okL7cF4as,2146
|
51
51
|
pyhw/backend/title/__init__.py,sha256=l6_WqreSBeK7krapCrbrr4ndnydrXB1aZ50Ve-beV_w,62
|
52
52
|
pyhw/backend/title/titleBase.py,sha256=pcnkiNn9N69yc4iicAmpMpC6G7HUMyGCh0V1jjGIP_c,495
|
53
53
|
pyhw/backend/title/unix.py,sha256=9B-zLE8yhlWBnJ-6Aa-DmFmgMV9KdvvNU40drJIaNck,837
|
@@ -80,12 +80,12 @@ pyhw/frontend/logo/ascii/ubuntu_small.pyhw,sha256=Xf8LSZdZUu9aEG3efhb1FUlUEuJ-3U
|
|
80
80
|
pyhw/library/lib/iokitGPULib.dylib,sha256=DcJ0GZY79gTFckLFYtZgeKn1T0NFvdO_k_ccCa7od5Y,154808
|
81
81
|
pyhw/pyhwException/__init__.py,sha256=8JsFvtF13g0Y5t4z9fRndDXtfCzuBM59jDf6PhWSFSk,220
|
82
82
|
pyhw/pyhwException/pyhwException.py,sha256=wxuzFQa9g7XB1q9TUKO_55lw7wMEJMpzG8w1GVTFVa0,197
|
83
|
-
pyhw/pyhwUtil/__init__.py,sha256=
|
84
|
-
pyhw/pyhwUtil/pyhwUtil.py,sha256=
|
83
|
+
pyhw/pyhwUtil/__init__.py,sha256=diIqlNUBfuHu-2VAOJk5nipGLafnWxR3chAAOmX8QRo,250
|
84
|
+
pyhw/pyhwUtil/pyhwUtil.py,sha256=OY89sHr5LBjob7JMbCl-6x1AEPr-15UOE8UoQ04sLvI,5968
|
85
85
|
pyhw/pyhwUtil/sysctlUtil.py,sha256=S-rUvqi7ZrMyMouIhxlyHEQ4agM7sCT1Y7uzs3Hu5-o,841
|
86
|
-
pyhw-0.6.
|
87
|
-
pyhw-0.6.
|
88
|
-
pyhw-0.6.
|
89
|
-
pyhw-0.6.
|
90
|
-
pyhw-0.6.
|
91
|
-
pyhw-0.6.
|
86
|
+
pyhw-0.6.7.dist-info/LICENSE,sha256=hJs6RBqSVCexbTsalkMLNFI5t06kekQEsSVaOt_-yLs,1497
|
87
|
+
pyhw-0.6.7.dist-info/METADATA,sha256=NL0A7juUgOQRXCkDyg32z1NXzAFq8AF2drk4FSrkJi8,5225
|
88
|
+
pyhw-0.6.7.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
|
89
|
+
pyhw-0.6.7.dist-info/entry_points.txt,sha256=q-AB8im_QahpmNrmy4aPTJRGi0LlbNlnI3kF7s6pKss,44
|
90
|
+
pyhw-0.6.7.dist-info/top_level.txt,sha256=7Inxvxt1TngEricKZEex9_WJZS3DbKYFUXDz4v5WHYU,5
|
91
|
+
pyhw-0.6.7.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|