d080ca2cc6
further improve developer morale get initial angular loading Add remote css to config index Starts work to port endpoints into config app Add the api blueprint
60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
import os
|
|
import logging
|
|
|
|
from util.config.provider.baseprovider import export_yaml, CannotWriteConfigException
|
|
from util.config.provider.basefileprovider import BaseFileProvider
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def _ensure_parent_dir(filepath):
|
|
""" Ensures that the parent directory of the given file path exists. """
|
|
try:
|
|
parentpath = os.path.abspath(os.path.join(filepath, os.pardir))
|
|
if not os.path.isdir(parentpath):
|
|
os.makedirs(parentpath)
|
|
except IOError as ioe:
|
|
raise CannotWriteConfigException(str(ioe))
|
|
|
|
|
|
class FileConfigProvider(BaseFileProvider):
|
|
""" Implementation of the config provider that reads and writes the data
|
|
from/to the file system. """
|
|
def __init__(self, config_volume, yaml_filename, py_filename):
|
|
super(FileConfigProvider, self).__init__(config_volume, yaml_filename, py_filename)
|
|
|
|
@property
|
|
def provider_id(self):
|
|
return 'file'
|
|
|
|
def save_config(self, config_obj):
|
|
export_yaml(config_obj, self.yaml_path)
|
|
|
|
def write_volume_file(self, filename, contents):
|
|
filepath = os.path.join(self.config_volume, filename)
|
|
_ensure_parent_dir(filepath)
|
|
|
|
try:
|
|
with open(filepath, mode='w') as f:
|
|
f.write(contents)
|
|
except IOError as ioe:
|
|
raise CannotWriteConfigException(str(ioe))
|
|
|
|
return filepath
|
|
|
|
def remove_volume_file(self, filename):
|
|
filepath = os.path.join(self.config_volume, filename)
|
|
os.remove(filepath)
|
|
|
|
def save_volume_file(self, filename, flask_file):
|
|
filepath = os.path.join(self.config_volume, filename)
|
|
_ensure_parent_dir(filepath)
|
|
|
|
# Write the file.
|
|
try:
|
|
flask_file.save(filepath)
|
|
except IOError as ioe:
|
|
raise CannotWriteConfigException(str(ioe))
|
|
|
|
return filepath
|