lib/formatter.py
"""Formatter class definition."""
import yaml
from lib.config_helper import ConfigHelper
from datetime import datetime
from lib.options import Options
class Formatter(object):
"""Instantiate Formatter class.
Args:
options(lib.Options): Optional.
Attributes:
options(lib.Options): Instance variable. Set from init argument.
product_version(str): Instance variable. Version of connector tool.
event_reference(None): Instance variable. This is overridden as-needed by
sub-classes.
datetime_format(None): Class variable. This is overridden as-needed by
sub-classes.
event_reference_file(None): Class variable. This is overridden
as-needed by sub-classes.
"""
event_reference_file = None
datetime_format = None
def __init__(self, options=None):
self.options = options or Options()
self.product_version = ConfigHelper.get_product_version()
self.event_reference = self.load_yaml_file(self.event_reference_file)
def format_event(self, event):
"""This method is implemented in sub-classes."""
raise NotImplementedError
def format_issue(self, issue):
"""This method is implemented in sub-classes."""
raise NotImplementedError
@classmethod
def format_timestamp(cls, dt):
"""Return a formatted time stamp.
In the parent ``Formatter`` class, this returns ``None`` because no
datetime format is set. Subclasses may set ``self.datetime_format``
to format timestamps for different output requirements.
Args:
fmt(str): Format which describes the desired output format for
time stamp
Returns:
str: Formatted ``dt``.
"""
if cls.datetime_format is None:
return None
return dt.strftime(cls.datetime_format)
@classmethod
def load_yaml_file(cls, event_reference_file):
"""Return Python dict for contents of yaml file."""
if event_reference_file is None:
return None
else:
with open(event_reference_file, 'r') as e_r_file:
return yaml.safe_load(e_r_file)
@classmethod
def halo_timestamp_to_datetime(cls, halo_timestamp):
"""Return datetime object for Halo event timestamp."""
return datetime.strptime(halo_timestamp, '%Y-%m-%dT%H:%M:%S.%fZ')
def format_events(self, events):
"""Iterate over format_event."""
formatted_events = []
for event in events:
formatted_events.append(self.format_event(event))
return formatted_events
def format_issues(self, issues):
"""Iterate over format_issue."""
formatted_issues = []
for issue in issues:
formatted_issues.append(self.format_issue(issue))
return formatted_issues