"""Support files for podman API implementation.""" import collections import datetime import functools from dateutil.parser import parse as dateutil_parse __all__ = [ 'cached_property', 'datetime_parse', 'datetime_format', ] def cached_property(fn): """Decorate property to cache return value.""" return property(functools.lru_cache(maxsize=8)(fn)) class Config(collections.UserDict): """Silently ignore None values, only take key once.""" def __init__(self, **kwargs): """Construct dictionary.""" super(Config, self).__init__(kwargs) def __setitem__(self, key, value): """Store unique, not None values.""" if value is None: return if super().__contains__(key): return super().__setitem__(key, value) def datetime_parse(string): """Convert timestamps to datetime. tzinfo aware, if provided. """ return dateutil_parse(string.upper(), fuzzy=True) def datetime_format(dt): """Format datetime in consistent style.""" if isinstance(dt, str): return datetime_parse(dt).isoformat() elif isinstance(dt, datetime.datetime): return dt.isoformat() else: raise ValueError('Unable to format {}. Type {} not supported.'.format( dt, type(dt)))