Coverage for src/types/environments.py: 77.78%
36 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-21 21:20 +0000
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-21 21:20 +0000
1#!/usr/bin/env python3
3# Standard libraries
4from os import environ
5from typing import Dict, List, NamedTuple
7# Environments class
8class Environments:
10 # Constants
11 LINE_EOL: str = '\n'
13 # Variable
14 class Variable(NamedTuple):
16 # Variables
17 name: str
18 description: str
19 fallback: str
21 # Value
22 @property
23 def value(self) -> str:
24 if self.fallback:
25 return environ.get(self.name, environ.get(self.fallback, ''))
26 return environ.get(self.name, '')
28 # Members
29 __group: str
30 __variables: Dict[str, Variable]
32 # Constructor
33 def __init__(self) -> None:
34 self.__group = ''
35 self.__variables = {}
37 # Group
38 @property
39 def group(self) -> str:
40 return self.__group
42 # Group
43 @group.setter
44 def group(self, value: str) -> None:
45 self.__group = value
47 # Add
48 def add(
49 self,
50 key: str,
51 name: str,
52 description: str,
53 fallback: str = '',
54 ) -> None:
56 # Append variable to list
57 self.__variables[key] = Environments.Variable(
58 name=name,
59 description=description,
60 fallback=fallback,
61 )
63 # Help
64 def help(self, help_position: int) -> str:
66 # Variables
67 lines: List[str] = []
69 # Append group
70 if self.__group:
71 lines += [f'{self.__group}:']
73 # Append variables
74 for variable in self.__variables.values():
75 line = f' {variable.name: <{help_position - 2}}'
76 line += f'{variable.description}'
77 if variable.fallback:
78 line += f' (fallback: {variable.fallback})'
79 lines += [line]
81 # Result
82 return Environments.LINE_EOL.join(lines)
84 # Value
85 def value(self, key: str) -> str:
87 # Get value of declared variable
88 if key in self.__variables:
89 return self.__variables[key].value
91 # Fallback
92 return ''