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
« prev ^ index » next coverage.py v7.1.0, created at 2023-01-30 18:57 -0500
1"""My App builder class."""
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
11 self.error = None # required by args_parse
12 self.validated_args = None # required by args_parse
13 self.args = None ## remove
15 self.context_holder = {} # hold context
17 def __str__(self):
18 return f"MyApp: {self.context} {self.name} {self.error} {self.validated_args} {self.args_parse} {self.args}"
20 def run(self):
21 return self.context.command_queue.run_all()
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)
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
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
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()
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
74 @property
75 def context(self):
76 return MyAppContextBuilder(self.my_app)
78 @property
79 def name(self):
80 return MyAppNameBuilder(self.my_app)
82 @property
83 def arguments(self):
84 return MyAppArgsBuilder(self.my_app)
86 @property
87 def config(self):
88 return MyAppConfigBuilder(self.my_app)
90 @property
91 def args_parse(self):
92 return MyAppArgsParseBuilder(self.my_app)
94 def build(self):
95 return self.my_app
97 def run(self):
98 return self.my_app.run()
100class MyAppArgsParseBuilder(MyAppBuilder):
101 def __init__(self, my_app):
102 super().__init__(my_app)
104 def set_args_parse(self, args_parse):
105 self.my_app.args_parse = args_parse
106 return self
108class MyAppContextBuilder(MyAppBuilder):
109 def __init__(self, my_app):
110 super().__init__(my_app)
112 def set_context(self, context):
113 self.my_app.context = context
114 return self
116 def set_context_name(self, name):
117 self.my_app.context.name = name
118 return self
120 def set_context_queue(self, command_queue):
121 self.my_app.context.command_queue = command_queue
122 return self
124 def add_context(self, context):
125 self.my_app.add_context(context)
126 return self
128class MyAppNameBuilder(MyAppBuilder):
129 def __init__(self, my_app):
130 super().__init__(my_app)
132 def set_name(self, name):
133 self.my_app.name = name
134 return self
136class MyAppArgsBuilder(MyAppBuilder):
137 def __init__(self, my_app):
138 super().__init__(my_app)
140 def set_arguments(self, arguments):
141 self.my_app.arguments = arguments
142 return self
144 def set_args_parse(self, parser):
145 self.my_app.args_parse = parser
146 return self
148 def validate_args(self, args=None):
149 if args is not None:
150 self.my_app.arguments = args
152 a = self.my_app.arguments
153 va = None
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)
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
170 return self
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
177 def get_valid_args(self):
178 return self.my_app.validated_args
180class MyAppConfigBuilder(MyAppBuilder):
181 def __init__(self, my_app):
182 super().__init__(my_app)
184 def set_config(self, config):
185 self.my_app.config = config
186 return self