archey4/archey/output.py
Anthony Lannutti 4dcf479826 Software Architecture major rework (#41)
* 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>
2019-07-22 11:56:03 +02:00

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
)