3131from appdaemon .logging import Logging
3232from appdaemon .models .config import AppDaemonConfig
3333
34+ from .models .config .yaml import MainConfig
35+
3436try :
3537 import pid
3638except ImportError :
@@ -107,16 +109,13 @@ def stop(self):
107109 self .http_object .stop ()
108110
109111 # noinspection PyBroadException,PyBroadException
110- def run (self , ad_config_model : AppDaemonConfig , hadashboard , admin , aui , api , http ):
112+ def run (self , ad_config_model : AppDaemonConfig , * args , http ):
111113 """Start AppDaemon up after initial argument parsing.
112114
113115 Args:
114116 ad_config_model: Config for AppDaemon Object.
115- hadashboard: Config for HADashboard Object.
116- admin: Config for admin Object.
117- aui: Config for aui Object.
118- api: Config for API Object
119- http: Config for HTTP Object
117+ *args: Gets used to create the HTTP object.
118+ http: Main HTTP config
120119 """
121120
122121 try :
@@ -142,16 +141,9 @@ def run(self, ad_config_model: AppDaemonConfig, hadashboard, admin, aui, api, ht
142141
143142 # Initialize Dashboard/API/admin
144143
145- if http is not None and ( hadashboard is not None or admin is not None or aui is not None or api is not False ):
144+ if http is not None and any ( arg is not None for arg in args ):
146145 self .logger .info ("Initializing HTTP" )
147- self .http_object = HTTP (
148- self .AD ,
149- hadashboard ,
150- admin ,
151- aui ,
152- api ,
153- http ,
154- )
146+ self .http_object = HTTP (self .AD , * args , http )
155147 self .AD .register_http (self .http_object )
156148 else :
157149 if http is not None :
@@ -314,11 +306,17 @@ def main(self): # noqa: C901
314306 else :
315307 ad_kwargs ["module_debug" ] = module_debug_cli
316308
317- # Validate the AppDaemon configuration
318- ad_config_model = AppDaemonConfig .model_validate (ad_kwargs )
309+ if hadashboard := config .get ("hadashboard" ):
310+ hadashboard ["config_dir" ] = config_dir
311+ hadashboard ["config_file" ] = config_file
312+ hadashboard ["dashboard" ] = True
313+ hadashboard ["profile_dashboard" ] = args .profiledash
314+
315+ model = MainConfig .model_validate (config )
316+ dump_kwargs = dict (mode = 'json' , by_alias = True , exclude_unset = True )
319317
320318 if args .debug .upper () == "DEBUG" :
321- model_json = ad_config_model .model_dump (by_alias = True , exclude_unset = True )
319+ model_json = model .model_dump (** dump_kwargs )
322320 print (json .dumps (model_json , indent = 4 , default = str , sort_keys = True ))
323321 except ValidationError as e :
324322 print (f"Configuration error in: { config_file } " )
@@ -332,59 +330,7 @@ def main(self): # noqa: C901
332330 print (e )
333331 sys .exit (1 )
334332
335- hadashboard = None
336- if "hadashboard" in config :
337- if config ["hadashboard" ] is None :
338- hadashboard = {}
339- else :
340- hadashboard = config ["hadashboard" ]
341-
342- hadashboard ["profile_dashboard" ] = args .profiledash
343- hadashboard ["config_dir" ] = config_dir
344- hadashboard ["config_file" ] = config_file
345- if args .profiledash :
346- hadashboard ["profile_dashboard" ] = True
347-
348- if "dashboard" not in hadashboard :
349- hadashboard ["dashboard" ] = True
350-
351- old_admin = None
352- if "old_admin" in config :
353- if config ["old_admin" ] is None :
354- old_admin = {}
355- else :
356- old_admin = config ["old_admin" ]
357- admin = None
358- if "admin" in config :
359- if config ["admin" ] is None :
360- admin = {}
361- else :
362- admin = config ["admin" ]
363- api = None
364- if "api" in config :
365- if config ["api" ] is None :
366- api = {}
367- else :
368- api = config ["api" ]
369-
370- http = None
371- if "http" in config :
372- http = config ["http" ]
373-
374- # Setup _logging
375-
376- if "log" in config :
377- print (
378- "ERROR" ,
379- "'log' directive deprecated, please convert to new 'logs' syntax" ,
380- )
381- sys .exit (1 )
382- if "logs" in config :
383- logs = config ["logs" ]
384- else :
385- logs = {}
386-
387- self .logging = Logging (logs , args .debug )
333+ self .logging = Logging (model .logs .model_dump (** dump_kwargs ), args .debug )
388334 self .logger = self .logging .get_logger ()
389335
390336 if "time_zone" in config ["appdaemon" ]:
@@ -407,23 +353,33 @@ def main(self): # noqa: C901
407353 )
408354 self .logger .info ("Configuration read from: %s" , config_file )
409355
410- utils .deprecation_warnings (ad_config_model , self .logger )
356+ utils .deprecation_warnings (model . appdaemon , self .logger )
411357
412358 self .logging .dump_log_config ()
413359 self .logger .debug ("AppDaemon Section: %s" , config .get ("appdaemon" ))
414360 self .logger .debug ("HADashboard Section: %s" , config .get ("hadashboard" ))
415361
362+ run = functools .partial (
363+ self .run ,
364+ model .appdaemon ,
365+ model .hadashboard .model_dump (** dump_kwargs ),
366+ model .old_admin ,
367+ model .admin ,
368+ model .api ,
369+ http = model .http .model_dump (** dump_kwargs ),
370+ )
371+
416372 if pidfile is not None :
417373 self .logger .info ("Using pidfile: %s" , pidfile )
418374 dir = os .path .dirname (pidfile )
419375 name = os .path .basename (pidfile )
420376 try :
421377 with pid .PidFile (name , dir ):
422- self . run (ad_config_model , hadashboard , old_admin , admin , api , http )
378+ run ()
423379 except pid .PidFileError :
424380 self .logger .error ("Unable to acquire pidfile - terminating" )
425381 else :
426- self . run (ad_config_model , hadashboard , old_admin , admin , api , http )
382+ run ()
427383
428384
429385def main ():
0 commit comments