def acolite_settings(settings): import os from acolite import acolite ## read defaults default_settings = acolite.config['acolite_defaults'] setd = acolite.settings_read(default_settings) ## read settings file if settings is not None: ## path to settings file given if type(settings) is str: if os.path.exists(settings): setu = acolite.settings_read(settings) else: print('Settings file {} not found.'.format(settings)) return (1) elif type(settings) is dict: setu = settings else: print('Settings not recognised.') return (1) else: setu = {} ## set defaults for options not specified for key in setd.keys(): if key in setu.keys(): continue else: setu[key] = setd[key] return (setu)
def restore(self, settings_file=None): if settings_file is None: initial_dir=os.path.dirname(self.settings_file) initial_file=os.path.basename(self.settings_file) settings_file = filedialog.askopenfilename(title='Select settings file to restore.', initialdir=initial_dir, initialfile=initial_file) if len(settings_file) > 0: self.settings_file = settings_file try: self.setimport = settings_read(self.settings_file) for k in self.setimport: self.acolite_settings[k] = self.setimport[k] except: print('Could not restore settings from {}'.format(settings_file)) try: ## clear ROI self.sbox.delete(1.0, END) self.nbox.delete(1.0, END) self.wbox.delete(1.0, END) self.ebox.delete(1.0, END) ## set ROI if in settings file if 'limit' in self.acolite_settings: if self.acolite_settings['limit'] is not None: if len(self.acolite_settings['limit'])==4: self.sbox.insert(1.0, self.acolite_settings['limit'][0]) self.nbox.insert(1.0, self.acolite_settings['limit'][2]) self.wbox.insert(1.0, self.acolite_settings['limit'][1]) self.ebox.insert(1.0, self.acolite_settings['limit'][3]) ## clear and set inputfile self.tinput.delete(1.0, END) if 'inputfile' not in self.acolite_settings: self.acolite_settings['inputfile'] = '' self.tinput.insert(END,self.acolite_settings['inputfile']) ## clear and set output self.toutput.delete(1.0, END) if 'output' not in self.acolite_settings: self.acolite_settings['output'] = '' self.toutput.insert(END,self.acolite_settings['output']) ## if 'l2w_parameters' in self.acolite_settings: l2wpar=self.acolite_settings['l2w_parameters'] if (l2wpar is not None): if len(l2wpar)>0: self.tl2wpar.delete(1.0,END) if type(l2wpar) is list: l2wpar = ','.join(l2wpar) self.tl2wpar.insert(1.0, l2wpar) ## restore RGB buttons v = 1 tag = 'rgb_rhot' if tag in self.acolite_settings: v = 1 if self.acolite_settings[tag] else 0 self.rgb_rhot.set(v) v = 1 tag = 'rgb_rhos' if tag in self.acolite_settings: v = 1 if self.acolite_settings[tag] else 0 self.rgb_rhos.set(v) v = 1 tag = 'map_l2w' if tag in self.acolite_settings: v = 1 if self.acolite_settings[tag] else 0 self.map_l2w.set(v) ## done restoring settings print('Restored settings file {}'.format(settings_file)) except: print('Failed to restore settings.')
def acolite_cli(*args): import os ## object for logging stdout to log file when processing class LogTee(object): def __init__(self, name): self.name = name ## make new file if os.path.exists(os.path.dirname(self.name)) is False: os.makedirs(os.path.dirname(self.name)) self.file = open(self.name, 'w') self.file.close() self.mode = 'a' self.stdout = sys.stdout sys.stdout = self def __del__(self): sys.stdout = self.stdout def write(self, data): self.stdout.write(data) data = data.strip() if len(data) > 0: self.file = open(self.name, self.mode) self.file.write('{}: {}\n'.format( datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), data)) self.file.close() def flush(self): pass import argparse parser = argparse.ArgumentParser(description='ACOLITE CLI') parser.add_argument('--settings', help='settings file') parser.add_argument('--images', help='list of images') #args = parser.parse_args() args, unknown = parser.parse_known_args() if args.settings is None: print('No settings file given.') return (1) import sys, datetime from acolite.acolite import acolite_run, settings_read acolite_settings = settings_read(args.settings) if 'runid' not in acolite_settings: acolite_settings['runid'] = datetime.datetime.now().strftime( '%Y%m%d_%H%M%S') if 'output' not in acolite_settings: print('No output specified in settings file.') return (1) logfile = '{}/{}'.format( acolite_settings['output'], 'acolite_run_{}_log.txt'.format(acolite_settings['runid'])) log = LogTee(logfile) print('Running ACOLITE') if args.images is None: acolite_run(settings=acolite_settings) else: images = args.images if ',' in images: images = images.split(',') if type(images) is not list: if not os.path.isdir(images): with open(images, 'r') as f: images = [line.strip() for line in f.readlines()] else: images = [images] acolite_settings['inputfile'] = images acolite_run(settings=acolite_settings)