Commit 57848949 authored by William Fong's avatar William Fong

resolving merge conflicts

parents 8b022919 0867800e
......@@ -2,10 +2,13 @@ import os
import pathlib
import typing
import deal
from configurables.core import ConfigurationBuilder, ConfigurationFactory
from configurables.parse import PARSING_REGISTRY, autoparse_config
@deal.pre(lambda _: pathlib.Path(_.config_path).exists())
def configure(
target: typing.Callable,
config_path: typing.Union[str, bytes, os.PathLike],
......@@ -41,6 +44,7 @@ def configure(
return target(**config)
@deal.pre(lambda _: len(_.name) > 0)
def define_param(name, type=str):
"""
A decorator to add a required parameter to a ConfigurationBuilder. This
......@@ -79,6 +83,7 @@ def define_param(name, type=str):
return _internal
@deal.pre(lambda _: len(_.name) > 0)
def define_option(name, type, default=None):
"""
A decorator to add an optional parameter to a ConfigurationBuilder. This
......@@ -123,6 +128,7 @@ def define_option(name, type, default=None):
return _internal
@deal.pre(lambda _: len(_.config_section) > 0)
def configurable(config_section):
"""
The top-level decorator to fully bind a callable.
......
......@@ -97,12 +97,14 @@ class ConfigurationBuilder:
options: typing.Dict[str, Option]
function: CastLike
def add_parameter(self, name: str, type: typing.Callable):
@deal.pre(lambda _: len(_.name) > 0)
def add_parameter(self, name: str, type: CastLike):
parameter = Parameter(name=name, type=type)
self.parameters[name] = parameter
@deal.pre(lambda _: len(_.name) > 0)
def add_option(
self, name: str, type: typing.Callable, default: typing.Any = None
self, name: str, type: CastLike, default: typing.Any = None
):
option = Option(name=name, type=type, default=default)
self.options[name] = option
......@@ -135,12 +137,14 @@ class ConfigurationFactory:
self.builder = config_builder
self.section = section
@deal.pure
def _resolve_param(
self, key: str, file_opts: ConfigLike, overrides: ConfigLike
):
_type = self.builder.parameters[key].type
return _type(overrides.get(key, os.environ.get(key, file_opts[key])))
@deal.pure
def _resolve_option(
self, key: str, file_opts: ConfigLike, overrides: ConfigLike
):
......@@ -154,6 +158,7 @@ class ConfigurationFactory:
)
)
@deal.pre(lambda _: pathlib.Path(_.filepath).exists())
def parse(self, filepath: PathLike, **overrides):
kwargs = {}
file_opts = parse_ini(filepath, self.section)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment