Source code for recipe_system.utils.rs_utilities

"""
Set of functions in support of the recipe_system.

"""
import sys
import errno
import itertools
import traceback

from os import makedirs
from os.path import join

[docs]def log_traceback(log): exc_type, exc_value, exc_traceback = sys.exc_info() tblist = traceback.format_exception(exc_type, exc_value, exc_traceback) [log.error(line.rstrip()) for line in tblist] return
[docs]def makedrpkg(pkgname, instruments, modes=None): """ Create the basic structure for a data reduction package that the recipe system will recognize. Parameters ---------- pkgname: str Name of the new dr-package. instruments: list of str Name of the instrument(s) for which to create a directory structure. modes: list of str Name of the recipe modes that will be supported. Eg. modes = ['sq', 'qa'] Default: ['sq'] ('sq'=science quality, 'qa'=quality assessement) """ def touch(fname): with open(fname, 'a'): return if modes is None: modes = ['sq'] for (instr, mode) in itertools.product(instruments, modes): modpath = join(pkgname, instr, 'recipes', mode) try: makedirs(modpath) except OSError as e: if e.errno != errno.EEXIST: raise pass # when ready to ditch python 2.7, replace try except with this: # makedirs(modpath, exist_ok=True) touch(join(modpath, '__init__.py')) for instr in instruments: touch(join(pkgname, '__init__.py')) touch(join(pkgname, instr, '__init__.py')) touch(join(pkgname, instr, 'recipes', '__init__.py')) return