Coverage for src/probable_fiesta/app/builder/my_app_builder.py: 46%

141 statements  

« prev     ^ index     » next       coverage.py v7.1.0, created at 2023-01-30 18:57 -0500

1"""My App builder class.""" 

2 

3class MyApp: 

4 def __init__(self): 

5 self.context = None # property 

6 self.name = None # property 

7 self.arguments = None # property 

8 self.config = None # property 

9 self.args_parse = None # property required by args 

10 

11 self.error = None # required by args_parse 

12 self.validated_args = None # required by args_parse 

13 self.args = None ## remove 

14 

15 self.context_holder = {} # hold context 

16 

17 def __str__(self): 

18 return f"MyApp: {self.context} {self.name} {self.error} {self.validated_args} {self.args_parse} {self.args}" 

19 

20 def run(self): 

21 return self.context.command_queue.run_all() 

22 

23 def add_context(self, context): 

24 if not context.name in self.context_holder.keys(): 

25 self.context_holder[context.name] = context 

26 print("Context already exists: ", context.name) 

27 

28 def is_valid(self): 

29 print("Will validate app here") 

30 if not self.validated_args: 

31 print("No validated args") 

32 return False 

33 for name in self.context_holder.keys(): 

34 failed = False 

35 if not name in self.validated_args: 

36 print("No validated args for context: ", name) 

37 failed = True 

38 else: 

39 # Map validated args to context name in context_holder 

40 self.add_context() 

41 return not failed # negate answer 

42 

43 def run_all_commands(self): 

44 print("Will run command here") 

45 if not self.is_valid(): 

46 print("App is not valid") 

47 return 

48 print("App is valid") 

49 stdout = [] 

50 for name in self.context_holder.keys(): 

51 print("Running command for context: ", name) 

52 stdout.append(self.context_holder[name].command_queue.run_all()) 

53 print("stdout: ", stdout) 

54 return stdout 

55 

56 def run(self, name): 

57 print("Will run a command here") 

58 if not self.is_valid(): 

59 print("App is not valid") 

60 return 

61 if not name in self.context_holder.keys(): 

62 print("No context for name: ", name) 

63 return 

64 print("App is valid") 

65 return self.context_holder[name].command_queue.run_all() 

66 

67class MyAppBuilder: 

68 def __init__(self, my_app=None): 

69 if my_app is None: 

70 self.my_app = MyApp() 

71 else: 

72 self.my_app = my_app 

73 

74 @property 

75 def context(self): 

76 return MyAppContextBuilder(self.my_app) 

77 

78 @property 

79 def name(self): 

80 return MyAppNameBuilder(self.my_app) 

81 

82 @property 

83 def arguments(self): 

84 return MyAppArgsBuilder(self.my_app) 

85 

86 @property 

87 def config(self): 

88 return MyAppConfigBuilder(self.my_app) 

89 

90 @property 

91 def args_parse(self): 

92 return MyAppArgsParseBuilder(self.my_app) 

93 

94 def build(self): 

95 return self.my_app 

96 

97 def run(self): 

98 return self.my_app.run() 

99 

100class MyAppArgsParseBuilder(MyAppBuilder): 

101 def __init__(self, my_app): 

102 super().__init__(my_app) 

103 

104 def set_args_parse(self, args_parse): 

105 self.my_app.args_parse = args_parse 

106 return self 

107 

108class MyAppContextBuilder(MyAppBuilder): 

109 def __init__(self, my_app): 

110 super().__init__(my_app) 

111 

112 def set_context(self, context): 

113 self.my_app.context = context 

114 return self 

115 

116 def set_context_name(self, name): 

117 self.my_app.context.name = name 

118 return self 

119 

120 def set_context_queue(self, command_queue): 

121 self.my_app.context.command_queue = command_queue 

122 return self 

123 

124 def add_context(self, context): 

125 self.my_app.add_context(context) 

126 return self 

127 

128class MyAppNameBuilder(MyAppBuilder): 

129 def __init__(self, my_app): 

130 super().__init__(my_app) 

131 

132 def set_name(self, name): 

133 self.my_app.name = name 

134 return self 

135 

136class MyAppArgsBuilder(MyAppBuilder): 

137 def __init__(self, my_app): 

138 super().__init__(my_app) 

139 

140 def set_arguments(self, arguments): 

141 self.my_app.arguments = arguments 

142 return self 

143 

144 def set_args_parse(self, parser): 

145 self.my_app.args_parse = parser 

146 return self 

147 

148 def validate_args(self, args=None): 

149 if args is not None: 

150 self.my_app.arguments = args 

151 

152 a = self.my_app.arguments 

153 va = None 

154 

155 if a: 

156 if self.my_app.args_parse is None: 

157 raise Exception("No argument parser set.") 

158 # Validate arguments with args parse 

159 va = self.my_app.args_parse.parse_args(a) 

160 else: 

161 va = self.my_app.args_parse.parse_args(None) 

162 

163 if self.my_app.args_parse.error_message: 

164 self.my_app.error = f"{self.my_app.args_parse.error_message}" 

165 if not va: 

166 self.my_app.validated_args = None 

167 else: 

168 self.my_app.validated_args = va 

169 

170 return self 

171 

172 def validate_with_args_parse(self, args_parse, args=None): 

173 self.set_args_parse(args_parse) 

174 self.validate_args(args) 

175 return self 

176 

177 def get_valid_args(self): 

178 return self.my_app.validated_args 

179 

180class MyAppConfigBuilder(MyAppBuilder): 

181 def __init__(self, my_app): 

182 super().__init__(my_app) 

183 

184 def set_config(self, config): 

185 self.my_app.config = config 

186 return self