Source code for boussole.conf.discover

# -*- coding: utf-8 -*-
"""
Backend discover
================

"""
import os

from boussole.exceptions import SettingsBackendError
from boussole.conf.json_backend import SettingsBackendJson
from boussole.conf.yaml_backend import SettingsBackendYaml


[docs]def get_backend(filepath, kind=None): """ From given filepath try to discover which backend format to use. Discovering is pretty naive as it find format from file extension. Args: filepath (str): Settings filepath or filename. Keyword Arguments: kind (str): A format name to enforce a specific backend. Can be either ``json`` or ``yaml``. Default to ``None``. Raises: boussole.exceptions.SettingsBackendError: If extension is unknowed or if given format name is unknowed. Returns: object: Backend object. """ engines = { 'json': SettingsBackendJson, 'yaml': SettingsBackendYaml, } extensions = { 'json': 'json', 'yml': 'yaml', } if not kind: extension = os.path.splitext(filepath)[1] if not extension: msg = ("Unable to discover settings format from an empty file " "extension: {}") raise SettingsBackendError(msg.format(filepath)) elif extension[1:] not in extensions: msg = ("Settings file extension is unknowed from available " "backends: {}") raise SettingsBackendError(msg.format(filepath)) kind = extensions[extension[1:]] elif kind not in engines: msg = "Given settings format is unknowed: {}" raise SettingsBackendError(msg.format(kind)) return engines[kind]