mirror of
https://github.com/HorlogeSkynet/archey4
synced 2025-04-16 16:00:13 +02:00

* Moved constants and logo ascii art out of the main file * Moved Configuration class to separate file * Moved Output class to a separate file * Moved hostname class definition to it's own separate file * Moved Model class definition to it's own file * Moved Kernel class to its own file * Moved uptime class definition to it's own file * Moved Disk class definition to its own file * Moved RAM class definition to it's own file * Moved CPU class definition to it's own file * Moved LanIp class definition to it's own file * Moved WanIp class definition to a separate file * Moved Packages class definition to separate file * Moved User class definition to its own file * Moved entry class definitions to their own directory * Moved GPU entry class definition to a separate file * Moved temperature entry class definition to a separate file * Moved terminal entry class definition to separate file * Moved shell entry class definition to separate file * Rewrited the `LanIp` module to handle more cases and optimizations * Moved window manager and desktop environment class definitions to separate files * Moved distro class definition to separate file * Removed direct use of COLOR_DICT in disk.py and ram.py * Moved unit tests and modified import paths * Moved {DE,WM}_DICT constants to their respective modules * Made `Configuration` & `Processes` (new class) act as singletons * Set the `Configuration` internal `config` dictionary to "private" attribute + Now relies on a `.pylintrc` file for Pylint (now almost fully-compliant) + Fixed typos + Added another dependency on `netifaces`, but this should remove the assumption about tools available in the user's environment + The project may now be run as a Python module + Marked Python 3.8 as supported for SetupTools + Added instructions (and tests) to build a standalone version of Archey + Adds @lannuttia to COPYRIGHT (initiator of the major rework) - Removed the dependency to `net-tools` Co-authored-by: Samuel FORESTIER <dev@samuel.domains>
79 lines
2.3 KiB
Python
79 lines
2.3 KiB
Python
"""
|
|
Output class file.
|
|
It supports entries lazy-insertion, logo detection, and final printing.
|
|
"""
|
|
|
|
import re
|
|
import sys
|
|
from subprocess import check_output
|
|
|
|
import distro
|
|
|
|
from archey.distributions import Distributions
|
|
from archey.constants import COLOR_DICT, LOGOS_DICT
|
|
|
|
|
|
class Output:
|
|
"""
|
|
This is the object handling output entries populating.
|
|
It also handles the logo choice based on some system detections.
|
|
"""
|
|
def __init__(self):
|
|
# First we check whether the Kernel has been compiled as a WSL.
|
|
if re.search(
|
|
'Microsoft',
|
|
check_output(['uname', '-r'], universal_newlines=True)):
|
|
self.distribution = Distributions.WINDOWS
|
|
|
|
else:
|
|
distribution_id = distro.id()
|
|
|
|
for distribution in Distributions:
|
|
if re.fullmatch(
|
|
distribution.value,
|
|
distribution_id,
|
|
re.IGNORECASE):
|
|
self.distribution = distribution
|
|
break
|
|
|
|
else:
|
|
self.distribution = Distributions.LINUX
|
|
|
|
# Each class output will be added in the list below afterwards
|
|
self.results = []
|
|
|
|
def append(self, key, value):
|
|
"""Append a pre-formatted entry to the final output content"""
|
|
self.results.append(
|
|
'{0}{1}:{2} {3}'.format(
|
|
COLOR_DICT[self.distribution][1],
|
|
key,
|
|
COLOR_DICT['clear'],
|
|
value
|
|
)
|
|
)
|
|
|
|
def output(self):
|
|
"""
|
|
Finally render the output entries.
|
|
It handles text centering additionally to value and colors replacing.
|
|
"""
|
|
# Let's center the entries according to the logo (handles odd numbers)
|
|
self.results[0:0] = [''] * ((18 - len(self.results)) // 2)
|
|
self.results.extend([''] * (18 - len(self.results)))
|
|
|
|
try:
|
|
print(
|
|
LOGOS_DICT[self.distribution].format(
|
|
c=COLOR_DICT[self.distribution],
|
|
r=self.results
|
|
) + COLOR_DICT['clear']
|
|
)
|
|
|
|
except UnicodeError:
|
|
print(
|
|
'Your locale or TTY seems not supporting UTF8 encoding.\n'
|
|
'Please disable Unicode within your configuration file.',
|
|
file=sys.stderr
|
|
)
|