Source code for yapc.utilities

#!/usr/bin/env python
u"""
utilities.py
Written by Tyler Sutterley (10/2021)
Management utilities for Yet Another Photon Classifier (YAPC)

UPDATE HISTORY:
    Written 10/2021
"""
import os
import re
import shutil
import logging

[docs]def build_logger(name, **kwargs): """ Builds a logging instance with the specified name Parameters ---------- name: str name of the logger format: str event description message format level: int or obj, default logging.CRITICAL lowest-severity log message logger will handle propagate: bool, default False events logged will be passed to higher level handlers stream: obj or NoneType, default None specified stream to initialize StreamHandler """ # set default arguments kwargs.setdefault('format', '%(levelname)s:%(name)s:%(message)s') kwargs.setdefault('level', logging.CRITICAL) kwargs.setdefault('propagate',False) kwargs.setdefault('stream',None) # build logger logger = logging.getLogger(name) logger.setLevel(kwargs['level']) logger.propagate = kwargs['propagate'] # create and add handlers to logger if not logger.handlers: # create handler for logger handler = logging.StreamHandler(stream=kwargs['stream']) formatter = logging.Formatter(kwargs['format']) handler.setFormatter(formatter) # add handler to logger logger.addHandler(handler) return logger
# PURPOSE: convert file lines to arguments
[docs]def convert_arg_line_to_args(arg_line): """ Convert file lines to arguments Parameters ---------- arg_line: str line string containing a single argument and/or comments """ # remove commented lines and after argument comments for arg in re.sub(r'\#(.*?)$',r'',arg_line).split(): if not arg.strip(): continue yield arg
# PURPOSE: make a copy of a file with all system information
[docs]def copy(source, destination, move=False): """ Copy or move a file with all system information Parameters ---------- source: str source file destination: str copied destination file move: bool, default False remove the source file """ source = os.path.abspath(os.path.expanduser(source)) destination = os.path.abspath(os.path.expanduser(destination)) shutil.copyfile(source, destination) shutil.copystat(source, destination) if move: os.remove(source)