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

1#!/usr/bin/env python3 

2 

3# Standard libraries 

4from os import environ 

5from typing import Dict, List, NamedTuple 

6 

7# Environments class 

8class Environments: 

9 

10 # Constants 

11 LINE_EOL: str = '\n' 

12 

13 # Variable 

14 class Variable(NamedTuple): 

15 

16 # Variables 

17 name: str 

18 description: str 

19 fallback: str 

20 

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, '') 

27 

28 # Members 

29 __group: str 

30 __variables: Dict[str, Variable] 

31 

32 # Constructor 

33 def __init__(self) -> None: 

34 self.__group = '' 

35 self.__variables = {} 

36 

37 # Group 

38 @property 

39 def group(self) -> str: 

40 return self.__group 

41 

42 # Group 

43 @group.setter 

44 def group(self, value: str) -> None: 

45 self.__group = value 

46 

47 # Add 

48 def add( 

49 self, 

50 key: str, 

51 name: str, 

52 description: str, 

53 fallback: str = '', 

54 ) -> None: 

55 

56 # Append variable to list 

57 self.__variables[key] = Environments.Variable( 

58 name=name, 

59 description=description, 

60 fallback=fallback, 

61 ) 

62 

63 # Help 

64 def help(self, help_position: int) -> str: 

65 

66 # Variables 

67 lines: List[str] = [] 

68 

69 # Append group 

70 if self.__group: 

71 lines += [f'{self.__group}:'] 

72 

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] 

80 

81 # Result 

82 return Environments.LINE_EOL.join(lines) 

83 

84 # Value 

85 def value(self, key: str) -> str: 

86 

87 # Get value of declared variable 

88 if key in self.__variables: 

89 return self.__variables[key].value 

90 

91 # Fallback 

92 return ''