def __init__(self): """Generic initialization code.""" # session folder (create if missing) self.session_folder = '../sessions' create_folder(self.session_folder) # log folder (create if missing) self.log_folder = f'{self.session_folder}/logs' create_folder(self.log_folder) # work folder (create and clear) self.work_folder = f'{self.session_folder}/{script_name()}/work' clear_folder(self.work_folder) # configuration engines self.config = None self.option = None # database self.database = None self.target_db_conn = None # parameter driven self.dataset_id = '' self.table_name = '' # since we start logging before we read config/options we log to known path vs dataset specific path log_setup(log_file_name=f'{self.log_folder}/{script_name()}.log') log_session_info()
def run(self): """ Options --onetime[=1] run once, then exit; use if called by an external scheduler. --nowait[=1] run immediately without waiting for scheduler to determine execution. """ # exit if __init__ didn't find a valid project file if not self.project_name: return # display application banner app_name = script_name() print(f'UDP {app_name.title()} {self.project_name}') copyright_year = f'{now():%Y}' copyright_message = f'Copyright (c) 2018-{copyright_year} Alterra Mountain Company, Inc.' print(copyright_message) # make sure root sessions folder exists create_folder(self.session_folder) # since we start logging before we read config/options we log to known path vs dataset specific path log_setup( log_file_name=f'{self.session_folder}/{self.project_name}.log') log_session_info() # common setup self.setup() # application specific startup logic self.start() # scheduling behavior based on --onetime, --nowait option if self.option('onetime') == '1': # one-time run; use when this script is being called by an external scheduler logger.info('Option(onetime=1): executing once') self.main() else: if self.option('nowait') == '1': # no-wait option; execute immediately without waiting for scheduler to initiate logger.info( 'Option(nowait=1): executing immediately, then following regular schedule' ) self.main() # standard wait for scheduled time slot and run logic while True: self.progress_message('waiting for next job ...') if self.schedule.wait(): self.main() if self.option('scheduled_onetime') == '1': logger.info( 'Option(scheduled_onetime=1): ran once at first scheduled timeslot' ) break else: break self.cleanup()
def test(): # activate logging log_setup() log_session_info() # load standard config config = ConfigSectionKey("../conf", "../local") config.load("bootstrap.ini", "bootstrap") config.load("init.ini") config.load("connect.ini") setup(config)
def run(self, *args, **kwargs): """ Options --onetime[=1] run once, then exit; use if called by an external scheduler. --nonwait[=1] run immediately without waiting for scheduler to determine execution. """ # make sure root sessions folder exists create_folder('../sessions') # TODO: We start logging before we read config and options so we don't know datapool or anything else. # TODO: We should log to a default app log and then SWITCH LOG file over after we process options and # TODO: and config files ??? (2018-09-25) log_setup(log_file_name=f'../sessions/{script_name()}.log') log_session_info() self.setup(*args, **kwargs) self.start() # scheduling behavior based on --onetime, --nowait option if self.option('onetime') == '1': # one-time run; use when this script is being called by an external scheduler logger.info('Option(onetime=1): executing once') self.main() else: if self.option('nowait') == '1': # no-wait option; execute immediately without waiting for scheduler to initiate logger.info('Option(nowait=1): executing immediately, then following regular schedule') self.main() # standard wait for scheduled time slot and run logic while True: if self.schedule.wait(): self.main() else: break self.cleanup()
"dataVersion": "", "metadataVersion": "1" } json_queue_message = json.dumps(queue_message) # response = queue.get() # notification = ObjectstoreNotification(response) queue.put(json_queue_message) response = queue.get() notification = ObjectstoreNotification(response) queue.delete(notification) """ while True: time.sleep(1) response = queue.get() if response: notification = ObjectstoreNotification(response) queue.delete(notification) logger.info(f'Test mode: notification message = {notification}') else: break """ if __name__ == '__main__': log_setup(log_level=logging.INFO) log_session_info() main()
def main(): # default and custom basicConfig() log_setup() log_session_info() logger.info('Started') test()