Source code for TidalPy.initialize

"""Functions used to initialize/reinitialize TidalPy"""
import os
from pathlib import Path

import toml

[docs] def is_notebook() -> bool: try: shell = get_ipython().__class__.__name__ if shell == 'ZMQInteractiveShell': return True # Jupyter notebook or qtconsole elif shell == 'TerminalInteractiveShell': return False # Terminal running IPython else: return False # Other type (?) except NameError: return False # Probably standard Python interpreter
[docs] def initialize(provided_config_file = None): """ Initialize (or reinitialize) TidalPy based on information stored in TidalPy.config Items in TidalPy.config are identical to those in the TidalPy_Config.toml unless the user changed them and called TidalPy.reinit() See more information about TidalPy_Config.toml in TidalPy.configurations.py """ import TidalPy # Are we in a Jupyter Notebook? running_in_jupyter = is_notebook() TidalPy._in_jupyter = running_in_jupyter # Set TidalPy configurations if they are not already set. from TidalPy.configurations import set_config if TidalPy.config is None: # No configuration dictionary has been set. from TidalPy.configurations import set_config set_config('default') # Update default configs with any in the CWD if TidalPy.config['configs']['use_cwd_for_config']: set_config(os.path.join(os.getcwd(), 'TidalPy_Configs.toml')) # Update default configs with any provided directly to initialize. if provided_config_file is not None: set_config(provided_config_file) # Setup pathing from TidalPy.paths import timestamped_str if TidalPy.config: output_dir = os.path.join(os.getcwd(), TidalPy.config['pathing']['save_directory']) if TidalPy.config['pathing']['append_datetime']: output_dir = timestamped_str(output_dir, date=True, time=True, second=False, millisecond=False, preappend=False) TidalPy._output_dir = output_dir else: TidalPy._output_dir = os.getcwd() # Setup world configuration directory path from TidalPy.configurations import set_world_dir if TidalPy.config: if TidalPy.config['configs']['use_cwd_for_world_dir']: set_world_dir(os.getcwd()) else: set_world_dir('default') else: set_world_dir('default') # Setup logging from TidalPy.logger import initialize_handlers, get_logger initialize_handlers() log = get_logger("TidalPy") # Reset initialization status if TidalPy._tidalpy_init: TidalPy._tidalpy_init = False log.debug('TidalPy reinitializing...') else: log.debug('TidalPy initializing...') if TidalPy.config: if TidalPy.config['configs']['save_configs_locally'] or TidalPy.config['logging']['write_log_to_disk']: log.debug(f'Output directory: {TidalPy._output_dir}') # Save a copy of TidalPy's current configurations to the save_dir if TidalPy.config: if TidalPy.config['configs']['save_configs_locally']: # Create output directory if it does not exist Path(TidalPy._output_dir).mkdir(parents=True, exist_ok=True) # Save TidalPy configurations to that directory. config_file_name = 'TidalPy_Configs.toml' config_file_path = os.path.join(TidalPy._output_dir, config_file_name) with open(config_file_path, 'w') as config_file: toml.dump(TidalPy.config, config_file) # Load any other parameters from config to top-level program if TidalPy.config: TidalPy.extensive_logging = TidalPy.config['debug']['extensive_logging'] TidalPy.extensive_checks = TidalPy.config['debug']['extensive_checks'] else: TidalPy.extensive_logging = False TidalPy.extensive_checks = False # Finish initialization TidalPy._tidalpy_init = True log.debug('TidalPy initialization complete.')