pyhw 0.2.0b0__py3-none-any.whl → 0.2.2b0__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/backend/cpu/linux.py +30 -0
- pyhw/backend/host/linux.py +18 -5
- pyhw/frontend/color/colorConfig.py +23 -1
- pyhw/frontend/logo/ascii/armbian.pyhw +14 -0
- pyhw/frontend/logo/ascii/raspbian.pyhw +23 -0
- pyhw/pyhwUtil/pyhwUtil.py +11 -0
- {pyhw-0.2.0b0.dist-info → pyhw-0.2.2b0.dist-info}/METADATA +40 -2
- {pyhw-0.2.0b0.dist-info → pyhw-0.2.2b0.dist-info}/RECORD +12 -10
- {pyhw-0.2.0b0.dist-info → pyhw-0.2.2b0.dist-info}/WHEEL +1 -1
- {pyhw-0.2.0b0.dist-info → pyhw-0.2.2b0.dist-info}/LICENSE +0 -0
- {pyhw-0.2.0b0.dist-info → pyhw-0.2.2b0.dist-info}/entry_points.txt +0 -0
- {pyhw-0.2.0b0.dist-info → pyhw-0.2.2b0.dist-info}/top_level.txt +0 -0
pyhw/backend/cpu/linux.py
CHANGED
@@ -10,6 +10,9 @@ class CPUDetectLinux:
|
|
10
10
|
def getCPUInfo(self):
|
11
11
|
self.__getCPUInfo()
|
12
12
|
self.__modelClean()
|
13
|
+
self.__handleSBC()
|
14
|
+
if self.__cpuInfo.model == "":
|
15
|
+
self.__cpuInfo.model = "Unknown"
|
13
16
|
if self.__cpuInfo.model != "":
|
14
17
|
self.__cpuInfo.cpu = self.__cpuInfo.model
|
15
18
|
if self.__cpuInfo.cores != "":
|
@@ -51,3 +54,30 @@ class CPUDetectLinux:
|
|
51
54
|
def __modelClean(self):
|
52
55
|
self.__cpuInfo.model = self.__cpuInfo.model.replace("(R)", "")
|
53
56
|
self.__cpuInfo.model = self.__cpuInfo.model.replace("(TM)", "")
|
57
|
+
|
58
|
+
def __handleSBC(self):
|
59
|
+
# some values should be double-checked
|
60
|
+
# Info source: https://github.com/raspberrypi/firmware/tree/master/boot
|
61
|
+
raspberry_pi_soc_map = {
|
62
|
+
"Raspberry Pi 2 Model B Rev 1.1": "BCM2836",
|
63
|
+
"Raspberry Pi 2 Model B Rev 1.2": "BCM2837",
|
64
|
+
"Raspberry Pi 3 Model B": "BCM2837",
|
65
|
+
"Raspberry Pi 3 Model B+": "BCM2837",
|
66
|
+
"Raspberry Pi 4 Model B": "BCM2711",
|
67
|
+
"Raspberry Pi 5": "BCM2712",
|
68
|
+
}
|
69
|
+
if os.path.exists("/sys/firmware/devicetree/base/model"):
|
70
|
+
try:
|
71
|
+
with open("/sys/firmware/devicetree/base/model", "r") as f:
|
72
|
+
model = f.read().strip()
|
73
|
+
except FileNotFoundError:
|
74
|
+
model = ""
|
75
|
+
if "Raspberry Pi" in model:
|
76
|
+
map_cpu = raspberry_pi_soc_map.get(model, "Unknown")
|
77
|
+
if map_cpu != "Unknown":
|
78
|
+
self.__cpuInfo.model = map_cpu
|
79
|
+
else:
|
80
|
+
pass
|
81
|
+
else:
|
82
|
+
pass
|
83
|
+
|
pyhw/backend/host/linux.py
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
"""
|
4
4
|
from ...pyhwUtil import getArch
|
5
5
|
from .hostInfo import HostInfo
|
6
|
+
import os
|
6
7
|
|
7
8
|
|
8
9
|
class HostDetectLinux:
|
@@ -25,11 +26,23 @@ class HostDetectLinux:
|
|
25
26
|
except FileNotFoundError:
|
26
27
|
pass
|
27
28
|
elif self.__arch in ["aarch64", "arm32"]:
|
28
|
-
try
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
29
|
+
# try to find dmi folder since some arm based desktops and servers may have same structure as x86_64 machines.
|
30
|
+
if os.path.exists("/sys/devices/virtual/dmi/id"):
|
31
|
+
try:
|
32
|
+
with open("/sys/devices/virtual/dmi/id/product_name", "r") as f:
|
33
|
+
self.__hostInfo.name = f.read().strip()
|
34
|
+
with open("/sys/devices/virtual/dmi/id/product_version", "r") as f:
|
35
|
+
self.__hostInfo.version = f.read().strip()
|
36
|
+
self.__hostInfo.model = self.__hostInfo.name + " " + self.__hostInfo.version
|
37
|
+
except FileNotFoundError:
|
38
|
+
pass
|
39
|
+
else:
|
40
|
+
# some single board computers may not have dmi folder, try to find model name in device tree.
|
41
|
+
try:
|
42
|
+
with open("/sys/firmware/devicetree/base/model", "r") as f:
|
43
|
+
self.__hostInfo.model = f.read().strip()
|
44
|
+
except FileNotFoundError:
|
45
|
+
pass
|
33
46
|
|
34
47
|
def __getHostFamily(self):
|
35
48
|
pass
|
@@ -21,13 +21,23 @@ class ColorConfigSet:
|
|
21
21
|
return ColorConfigSetU.ubuntu
|
22
22
|
elif self.__os_name == "ubuntu_small":
|
23
23
|
return ColorConfigSetU.ubuntu_small
|
24
|
+
elif self.__os_name == "raspbian":
|
25
|
+
return ColorConfigSetR.raspbian
|
26
|
+
elif self.__os_name == "armbian":
|
27
|
+
return ColorConfigSetA.armbian
|
24
28
|
else:
|
25
29
|
return ColorConfigSetL.linux # default to Linux
|
26
30
|
|
27
31
|
|
28
32
|
@dataclass
|
29
33
|
class ColorConfigSetA:
|
30
|
-
|
34
|
+
armbian = {
|
35
|
+
"colors": [
|
36
|
+
ColorSet.COLOR_FG_RED
|
37
|
+
],
|
38
|
+
"colorKeys": ColorSet.COLOR_FG_YELLOW,
|
39
|
+
"colorTitle": ColorSet.COLOR_FG_YELLOW
|
40
|
+
}
|
31
41
|
|
32
42
|
|
33
43
|
@dataclass
|
@@ -90,6 +100,18 @@ class ColorConfigSetM:
|
|
90
100
|
}
|
91
101
|
|
92
102
|
|
103
|
+
@dataclass
|
104
|
+
class ColorConfigSetR:
|
105
|
+
raspbian = {
|
106
|
+
"colors": [
|
107
|
+
ColorSet.COLOR_FG_RED,
|
108
|
+
ColorSet.COLOR_FG_GREEN
|
109
|
+
],
|
110
|
+
"colorKeys": ColorSet.COLOR_FG_RED,
|
111
|
+
"colorTitle": ColorSet.COLOR_FG_GREEN
|
112
|
+
}
|
113
|
+
|
114
|
+
|
93
115
|
@dataclass
|
94
116
|
class ColorConfigSetU:
|
95
117
|
ubuntu = {
|
@@ -0,0 +1,14 @@
|
|
1
|
+
█ █ █ █ █ █ █ █ █ █ █
|
2
|
+
███████████████████████
|
3
|
+
▄▄██ ██▄▄
|
4
|
+
▄▄██ ███████████ ██▄▄
|
5
|
+
▄▄██ ██ ██ ██▄▄
|
6
|
+
▄▄██ ██ ██ ██▄▄
|
7
|
+
▄▄██ ██ ██ ██▄▄
|
8
|
+
▄▄██ █████████████ ██▄▄
|
9
|
+
▄▄██ ██ ██ ██▄▄
|
10
|
+
▄▄██ ██ ██ ██▄▄
|
11
|
+
▄▄██ ██ ██ ██▄▄
|
12
|
+
▄▄██ ██▄▄
|
13
|
+
███████████████████████
|
14
|
+
█ █ █ █ █ █ █ █ █ █ █
|
@@ -0,0 +1,23 @@
|
|
1
|
+
$2`.::///+:/-. --///+//-:`
|
2
|
+
`+oooooooooooo: `+oooooooooooo:
|
3
|
+
/oooo++//ooooo: ooooo+//+ooooo.
|
4
|
+
`+ooooooo:-:oo- +o+::/ooooooo:
|
5
|
+
`:oooooooo+`` `.oooooooo+-
|
6
|
+
`:++ooo/. :+ooo+/.`$1
|
7
|
+
...` `.----.` ``..
|
8
|
+
.::::-``:::::::::.`-:::-`
|
9
|
+
-:::-` .:::::::-` `-:::-
|
10
|
+
`::. `.--.` `` `.---.``.::`
|
11
|
+
.::::::::` -::::::::` `
|
12
|
+
.::` .:::::::::- `::::::::::``::.
|
13
|
+
-:::` ::::::::::. ::::::::::.`:::-
|
14
|
+
:::: -::::::::. `-:::::::: ::::
|
15
|
+
-::- .-:::-.``....``.-::-. -::-
|
16
|
+
.. `` .::::::::. `..`..
|
17
|
+
-:::-` -::::::::::` .:::::`
|
18
|
+
:::::::` -::::::::::` :::::::.
|
19
|
+
.::::::: -::::::::. ::::::::
|
20
|
+
`-:::::` ..--.` ::::::.
|
21
|
+
`...` `...--..` `...`
|
22
|
+
.::::::::::
|
23
|
+
`.-::::-`
|
pyhw/pyhwUtil/pyhwUtil.py
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
import platform
|
2
2
|
from ..backend import Data
|
3
3
|
import os
|
4
|
+
from dataclasses import dataclass
|
4
5
|
|
5
6
|
|
6
7
|
def getOS():
|
@@ -53,6 +54,12 @@ def createDataString(data: Data):
|
|
53
54
|
return data_string
|
54
55
|
|
55
56
|
|
57
|
+
@dataclass
|
58
|
+
class SupportedOS:
|
59
|
+
ColorConfig = ["armbian", "debian", "fedora", "macOS", "raspbian", "ubuntu"]
|
60
|
+
AsciiLogo = ["armbian", "debian", "fedora", "macOS", "raspbian", "ubuntu"]
|
61
|
+
|
62
|
+
|
56
63
|
def selectOSLogo(os_id: str):
|
57
64
|
"""
|
58
65
|
Select the logo based on the os id and terminal size.
|
@@ -61,6 +68,10 @@ def selectOSLogo(os_id: str):
|
|
61
68
|
"""
|
62
69
|
if getOS() == "macos":
|
63
70
|
return os_id
|
71
|
+
if os_id in SupportedOS.ColorConfig and os_id in SupportedOS.AsciiLogo:
|
72
|
+
pass
|
73
|
+
else:
|
74
|
+
return "linux"
|
64
75
|
rows_str, columns_str = os.popen('stty size', 'r').read().split()
|
65
76
|
rows = int(rows_str)
|
66
77
|
columns = int(columns_str)
|
@@ -1,10 +1,12 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: pyhw
|
3
|
-
Version: 0.2.
|
3
|
+
Version: 0.2.2b0
|
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
|
7
7
|
Project-URL: homepage, https://github.com/xiaoran007/pyhw
|
8
|
+
Keywords: neofetch,system information,command line tool,python,hardware information,fastfetch,fetching
|
9
|
+
Classifier: Development Status :: 4 - Beta
|
8
10
|
Classifier: Programming Language :: Python :: 3
|
9
11
|
Classifier: License :: OSI Approved :: BSD License
|
10
12
|
Classifier: Operating System :: OS Independent
|
@@ -16,20 +18,56 @@ License-File: LICENSE
|
|
16
18
|

|
17
19
|

|
18
20
|
|
21
|
+

|
22
|
+

|
19
23
|
|
20
24
|
|
21
25
|
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 part of the linux systems and macOS are supported.**
|
22
26
|
|
23
|
-
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 🤔)
|
27
|
+
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 🤔).
|
24
28
|
|
29
|
+
## Install
|
25
30
|
There are already a lot of similar tools so you can choose any of them; they're all essentially no different. If you want to try this tool, just install it directly by pip.
|
26
31
|
```shell
|
27
32
|
pip install pyhw
|
28
33
|
```
|
34
|
+
To upgrade pyhw:
|
35
|
+
```shell
|
36
|
+
pip install pyhw --upgrade
|
37
|
+
```
|
29
38
|
You can then use this tool directly from the command line with the following command, just like neofetch.
|
30
39
|
```shell
|
31
40
|
pyhw
|
32
41
|
```
|
42
|
+
Please note that the command line entry for __pyhw__ is created by pip, and depending on the user, this entry may not in the __system PATH__. If you encounter this problem, pip will give you a prompt, follow the prompts to add entry to the __system PATH__.
|
43
|
+
|
44
|
+
### Important note about debian 12:
|
45
|
+
If you use system pip to install pyhw, you will encounter this problem on debian12 and some related distributions:
|
46
|
+
```text
|
47
|
+
error: externally-managed-environment
|
48
|
+
|
49
|
+
× This environment is externally managed
|
50
|
+
╰─> To install Python packages system-wide, try apt install
|
51
|
+
python3-xyz, where xyz is the package you are trying to
|
52
|
+
install.
|
53
|
+
|
54
|
+
If you wish to install a non-Debian-packaged Python package,
|
55
|
+
create a virtual environment using python3 -m venv path/to/venv.
|
56
|
+
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
|
57
|
+
sure you have python3-full installed.
|
58
|
+
|
59
|
+
For more information visit http://rptl.io/venv
|
60
|
+
|
61
|
+
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
|
62
|
+
hint: See PEP 668 for the detailed specification.
|
63
|
+
```
|
64
|
+
This is due to the fact that system python is not supposed to be managed by pip. You can use a virtual environment (venv) or force remove this restriction (not recommended).
|
65
|
+
|
66
|
+
## Supported (Tested) OS
|
67
|
+
* macOS arm64, x86_64
|
68
|
+
* debian-based distro x86_64
|
69
|
+
* RaspberryPi OS arm64
|
70
|
+
|
33
71
|
|
34
72
|
## Build from source
|
35
73
|
### Build tools
|
@@ -6,7 +6,7 @@ pyhw/backend/backendBase.py,sha256=t9FKQPdK7yFZF0vrsXpjIUJNKrB-cXYeL5MDohlgguA,4
|
|
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
|
9
|
-
pyhw/backend/cpu/linux.py,sha256=
|
9
|
+
pyhw/backend/cpu/linux.py,sha256=9TA74SIc72DoCvYI7QkxEcWqUjV7whpF68envpX6T_4,3424
|
10
10
|
pyhw/backend/cpu/macos.py,sha256=mnnH9ABiBgAiyA8-H9_tq2PC5OeneVLj67nMGoLDXh4,2873
|
11
11
|
pyhw/backend/gpu/__init__.py,sha256=EpMjPvUaXt0LTNMvGmB8WgXbUB9keCxuOhu8NT3Re6o,56
|
12
12
|
pyhw/backend/gpu/gpuBase.py,sha256=Ge0DX2P8_EB7ovM7glmPUnVsPJL3OUHV2t_1T5mimR0,409
|
@@ -16,7 +16,7 @@ pyhw/backend/gpu/macos.py,sha256=sgrROfJC59KWjxfW2n90thVEjgDNYYLWo_pETDFPKQA,230
|
|
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=dr82gDA4SQgyTTI3Kq5V3V6qEDH4DXoJo0wyqeXYdHk,2005
|
20
20
|
pyhw/backend/host/macos.py,sha256=u-Orwcq0FCcr2eR9mOKUc85LGkyuiO6rZ-ggIwob92k,14593
|
21
21
|
pyhw/backend/host/windows.py,sha256=rjDJaIs-5zspzFsNCMCh6m2yZXEXI0vccqeBpmAdEBk,53
|
22
22
|
pyhw/backend/kernel/__init__.py,sha256=fGjwjpOhwA_PnsWbwoq102hwhTay2ufYKaTqxjSV2-I,65
|
@@ -50,26 +50,28 @@ pyhw/backend/uptime/uptimeInfo.py,sha256=TobPEV3MBT3Fiv3W6TOzD3a4MNW-vz2Oi_Trlci
|
|
50
50
|
pyhw/frontend/__init__.py,sha256=xgv_iVv9w4cLXklbdtFWXu7J7KJxBCUw-ZcUQb_abFc,57
|
51
51
|
pyhw/frontend/frontendBase.py,sha256=VjZ-_sV-awDJVLHBzG8z3YK3W92-SS_Q5-_Q0PgyB3w,3708
|
52
52
|
pyhw/frontend/color/__init__.py,sha256=xk511qWwdYWEVjk_zOaC4fs81HtwR4ELr3wi1tTL824,191
|
53
|
-
pyhw/frontend/color/colorConfig.py,sha256=
|
53
|
+
pyhw/frontend/color/colorConfig.py,sha256=bC-UUStINoWqig3ieHE91wUa4PG1EzkAaMx5HxwjJrU,3313
|
54
54
|
pyhw/frontend/color/colorSet.py,sha256=spH8PlRu7capouf-yUgDHgoPCnM5aJ_ncascISZfz2g,1421
|
55
55
|
pyhw/frontend/color/colorUtil.py,sha256=VhcPmAJmXGIiRBfVZE2jg_iy-SfbxqwOSvkRz-nbUOQ,94
|
56
56
|
pyhw/frontend/logo/__init__.py,sha256=mozEarHueBUgtDHKSd-RDaFysMLUiW3VQ8KcBtlKGCI,47
|
57
57
|
pyhw/frontend/logo/logoBase.py,sha256=NjRCg0CXjmW4_7UZp2ZBgy2PZOAqaR6SYHg9zd90kRo,634
|
58
|
+
pyhw/frontend/logo/ascii/armbian.pyhw,sha256=Cg8tFIMdHdHLMlQrKm902C4OStKKHnCkDykNxbaSpfA,773
|
58
59
|
pyhw/frontend/logo/ascii/debian.pyhw,sha256=ZmO1fg3Uc_ofF-CZSOP0Qo298luDASh2Zt50UmY6DBQ,437
|
59
60
|
pyhw/frontend/logo/ascii/fedora.pyhw,sha256=IuFE6BByaNfVgn1pn7rKH7QVlIJyEmgGopCAOpXa6oM,742
|
60
61
|
pyhw/frontend/logo/ascii/fedora_small.pyhw,sha256=_LSBzuCJjMa8pzmiJ3KN7Ndi-TryYPmtEfKqxxPAFfE,601
|
61
62
|
pyhw/frontend/logo/ascii/linux.pyhw,sha256=IMe6YNElwCjLtv6kgSkERbATyyJAK531vcrT-otaLWE,300
|
62
63
|
pyhw/frontend/logo/ascii/macOS.pyhw,sha256=HBGROtBb7wrNtRqAQ9ND7zxK0l17BRsmpgc2dMo_m6s,474
|
64
|
+
pyhw/frontend/logo/ascii/raspbian.pyhw,sha256=DLxiMzxBbO6siqSrw7bPGAoUonpvMkgGttwNW3eKDXE,751
|
63
65
|
pyhw/frontend/logo/ascii/ubuntu.pyhw,sha256=l-Q0PfutxXYMwTojqeiM88063x4V0RBkZUHmi6YdsNc,833
|
64
66
|
pyhw/frontend/logo/ascii/ubuntu_small.pyhw,sha256=Xf8LSZdZUu9aEG3efhb1FUlUEuJ-3UztcIOJISpKhPw,229
|
65
67
|
pyhw/pyhwException/__init__.py,sha256=8JsFvtF13g0Y5t4z9fRndDXtfCzuBM59jDf6PhWSFSk,220
|
66
68
|
pyhw/pyhwException/pyhwException.py,sha256=wxuzFQa9g7XB1q9TUKO_55lw7wMEJMpzG8w1GVTFVa0,197
|
67
69
|
pyhw/pyhwUtil/__init__.py,sha256=PzeP9fXsIhvr3sUpJ4DxW9_H25DEIasBFfXd_NztfR4,226
|
68
|
-
pyhw/pyhwUtil/pyhwUtil.py,sha256=
|
70
|
+
pyhw/pyhwUtil/pyhwUtil.py,sha256=qJREsuPU_lq7T0Ictc-_BkGEp0Zh24Ptq8aklkEe6GY,2292
|
69
71
|
pyhw/pyhwUtil/sysctlUtil.py,sha256=S-rUvqi7ZrMyMouIhxlyHEQ4agM7sCT1Y7uzs3Hu5-o,841
|
70
|
-
pyhw-0.2.
|
71
|
-
pyhw-0.2.
|
72
|
-
pyhw-0.2.
|
73
|
-
pyhw-0.2.
|
74
|
-
pyhw-0.2.
|
75
|
-
pyhw-0.2.
|
72
|
+
pyhw-0.2.2b0.dist-info/LICENSE,sha256=hJs6RBqSVCexbTsalkMLNFI5t06kekQEsSVaOt_-yLs,1497
|
73
|
+
pyhw-0.2.2b0.dist-info/METADATA,sha256=xoVEbweXqieXzY2vPLXYbeI7s1vValbhJROFTWlaSfw,3914
|
74
|
+
pyhw-0.2.2b0.dist-info/WHEEL,sha256=Mdi9PDNwEZptOjTlUcAth7XJDFtKrHYaQMPulZeBCiQ,91
|
75
|
+
pyhw-0.2.2b0.dist-info/entry_points.txt,sha256=q-AB8im_QahpmNrmy4aPTJRGi0LlbNlnI3kF7s6pKss,44
|
76
|
+
pyhw-0.2.2b0.dist-info/top_level.txt,sha256=7Inxvxt1TngEricKZEex9_WJZS3DbKYFUXDz4v5WHYU,5
|
77
|
+
pyhw-0.2.2b0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|