Personal functions, classes, and decorators used in some of my projects
This decorator can be added to any class to initialize it with a logger, and add extra logging functionality to that class.
The following additional kwargs are handled in init:
logger(Logger) Used as the parent logger, if not set, uses the root logger._log_init(bool) Can be passed to loggified classes, to enable or disable additional initialization logging._log_bump(int) Changes the log level for added loggers.
Loggified classes will also log use of __setattr__, and __getitem__.
Like @loggify but meant to be used as a base class
Decorator for methods, logs calls and args. Log level adjustable by changing log_level.
A logging.Formatter which colors the loglevel portion.
Helpful utility functions/decorators.
A collection of functions used when starting a script.
Processes argparser args and returns a kwargs dict.
Adds a logger if passed, can apply over a base_kwargs dict.
Creates a logger using the passed name
Creates an argparser with the passed program name/descrption.
Adds arguments for basic things such as debug levels, log files, log options
The log options are used with
process_argsand a supplied logger.
Takes a passed argparser and does basic argument parsing. Mostly used to handle log options for the passed logger.
Takes a package name, description, and optional arguments.
Returns the argparser.args and logger as a tuple.
Additional argparser arguments can be passed in the format:
ARGS = [
{'flags': ['-p', '--port'], 'dest': 'listen_port', 'type': int, 'nargs': '?', 'help': 'Port to listen on.'},
{'flags': ['-a', '--address'], 'dest': 'listen_ip', 'type': str, 'nargs': '?', 'help': 'Address to listen on.'},
{'flags': ['config_file'], 'type': str, 'nargs': '?', 'help': 'Config file to use.'}]
The flags are unpackes as args for argparser.add_argument while the rest of the keys are unpacked into the kwargs.
Wraps get_args_n_kwargs and just returns the kwargs dict
Prints all cmdline flags and help strings for shell autocomplete scripts to read.
The format is flag<space>helpstring<\n>
This decorator is designed to be added to functions, automatically expands pased dicts/lists into the function it wraps.
This function does not return values for most operations, it is designed to be used within a class where the wrapped function sets class attributes.
Essentially a dumb set, but is a list so is ordered
A function designed to print complex data structures in a nice manner
Replaces a line in a file
def replace_file_line(file_path, old_line, new_line):
Used by @add_thread, appends the passed function to the init of a class.
Takes two dicts as args, walks the first dict using the structure of the second dict.
If fail_safe is set, returns none when keys can't be found.