mirror of
				https://github.com/HorlogeSkynet/archey4
				synced 2025-11-04 04:00:27 +01: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
 | 
						|
            )
 |