+1i,~dZddlZddlmZddlmZmZddlmZee j j Z GddZ dS)zQ Configuration loader for Frank Loads and validates configuration from JSON file N)Path)DictAny)loggerceZdZdZdZdZddeffd ZddefdZdZ dZ de ee ffd Z dd ed e de fd Zd ed e fdZedefdZedefdZedefdZedefdZedefdZedefdZedefdZedefdZedefdZdZxZS)SchedulerConfigzConfiguration manager for FrankN config_pathcl|j&t||_|jSN) _instancesuper__new__)clsr __class__s C:\PYTHON\Frank\core\config.pyrzSchedulerConfig.__new__s* = !GGOOC00CM}c|jdS|ttdz dz }||_|dS)Nconfigzfrank_config.json)_configstr _FRANK_ROOTr _load_config)selfr s r__init__zSchedulerConfig.__init__sM < # F  kH47JJKKK& rct|j}|sLtjd|jd||_|dSt|dd5}tj ||_dddn #1swxYwYtj d|jdS)z!Load configuration from JSON filezConfig file not found at z, using defaultsrutf-8encodingNzConfiguration loaded from ) rr existsrwarning_get_default_configr _save_configopenjsonloadinfor config_filefs rrzSchedulerConfig._load_config#s 4+,, !!## I NYt7GYYY Z Z Z3355DL        k3999 ,Q#y||  , , , , , , , , , , , , , , , KGT5EGG H H H H HsB--B14B1c*t|j}|jddt |dd5}t j|j|ddddn #1swxYwYtj d |jdS) zSave configuration to JSON fileT)parentsexist_okwrr)indentNzConfiguration saved to ) rr parentmkdirr$r%dumprrr'r(s rr#zSchedulerConfig._save_config0s4+,,    === +sW 5 5 5 1 IdlAa 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 @d.>@@AAAAAsA,,A03A0returnc dddddddddd d d ttd z d z ttd z dz ddddddddddddddddddddidS)zGet default configurationz1.3.0 productionzC:\PYTHON\Frank\data\frank.dbT)pathwal_mode<)check_interval_secondsmax_concurrent_jobsjob_timeout_defaultenable_recoveryrecovery_delay_secondsINFOlogsdaemon executionsd)leveldaemon_log_direxecution_log_dirretention_daysmax_file_size_mbF ) enable_popup enable_emailpopup_duration_secondsnotify_on_completionnotify_on_failurenotify_on_timeoutlighti2)themerefresh_interval_msdashboard_recent_jobshistory_page_sizedatahubzC:/PYTHON/DataHubzC:/PYTHON/DataHub/venvzC:/PYTHON/DataHub/logs)rootvenvrC)version environmentdatabaserDlogging notificationsguiprojects)rrrs rr"z#SchedulerConfig._get_default_config9s'8  +-'('+#'*,  "%kF&:X&E"F"F%(v)= )L%M%M"$$' !% %*,(-%)%) !'+)+%' /44G* * * rkeydefaultc|d}|j}|D]'}t|tr ||vr ||}$|cS|S)z+Get configuration value by dot-notation key.)splitr isinstancedict)rrdrekeysvalueks rgetzSchedulerConfig.getgsZyy~~   A%&& 1::a rrlc|d}|j}|ddD]}||vri||<||}|||d<|dS)z+Set configuration value by dot-notation keyrgN)rhrr#)rrdrlrkrrms rsetzSchedulerConfig.settsryy~~crc  Aq AYFF tBx rc,|dS)Nz database.pathrnrcs r database_pathzSchedulerConfig.database_pathsxx(((rch|d}|r|Sttdz dz S)Nzdatabase.local_pathdatazfrank_local.dbrnrrrvals rlocal_database_pathz#SchedulerConfig.local_database_paths:hh,--  J;'*::;;;rc.|ddS)Nz logging.levelrBrsrcs r log_levelzSchedulerConfig.log_levelsxx000rch|d}|r|Sttdz dz S)Nzlogging.daemon_log_dirrCrDrwrxs rrHzSchedulerConfig.daemon_log_dirs9hh/00  J;'(2333rch|d}|r|Sttdz dz S)Nzlogging.execution_log_dirrCrErwrxs rrIz!SchedulerConfig.execution_log_dirs9hh233  J;',6777rc.|ddS)Nzdaemon.max_concurrent_jobsr:rsrcs rr>z#SchedulerConfig.max_concurrent_jobssxx4a888rc.|ddS)Nzdaemon.job_timeout_defaultr;rsrcs rr?z#SchedulerConfig.job_timeout_defaultxx4d;;;rc.|ddS)Nznotifications.enable_popupTrsrcs renable_popup_notificationsz*SchedulerConfig.enable_popup_notificationsrrc.|ddS)Nznotifications.notify_on_failureTrsrcs rrQz!SchedulerConfig.notify_on_failuresxx94@@@rc.|dS)zReload configuration from fileN)rrcs rreloadzSchedulerConfig.reloads rr )__name__ __module__ __qualname____doc__r rrrrrr#rrr"rnrqpropertyrtrzr|rHrIintr>r?boolrrQr __classcell__)rs@rrrs))IG# C I I IBBB, T#s(^, , , , \  s S C     s 3    )s)))X)rs  d8nn#* aaaaaaaaaar