Source code for glorpen.config.loaders
# -*- coding: utf-8 -*-
'''
.. moduleauthor:: Arkadiusz Dzięgiel <arkadiusz.dziegiel@glorpen.pl>
'''
from contextlib import contextmanager
[docs]class BaseLoader(object):
"""Base class for any loader."""
def __init__(self, filepath=None, fileobj=None):
super(BaseLoader, self).__init__()
self.filepath = filepath
self.fileobj = fileobj
self._setup()
[docs] def _setup(self):
"""Extending classes can use it to setup loader."""
pass
@contextmanager
def _source_stream(self):
if self.filepath:
with open(self.filepath, "rt") as f:
yield f
else:
yield self.fileobj
[docs] def _parse(self, data):
"""Extending classes should overwrite this method with parsing logic."""
raise NotImplementedError()
[docs] def load(self):
"""Reads source specified in constructor."""
with self._source_stream() as f:
return self._parse(f)
[docs]class YamlLoader(BaseLoader):
"""Reads yaml files."""
def _setup(self):
import yaml
self._yaml = yaml
def _parse(self, data):
return self._yaml.safe_load(data)