Source code for confmodel.fallbacks

from confmodel.config import FieldFallback


class SingleFieldFallback(FieldFallback):
    def __init__(self, field_name):
        self.field_name = field_name
        self.required_fields = [field_name]

    def build_value(self, config):
        return getattr(config, self.field_name)


class FormatStringFieldFallback(FieldFallback):
    def __init__(self, format_string, required_fields, optional_fields=()):
        self.format_string = format_string
        self.required_fields = required_fields
        self.optional_fields = optional_fields

    def build_value(self, config):
        field_values = {}
        for field_name in self.required_fields:
            field_values[field_name] = getattr(config, field_name)
        for field_name in self.optional_fields:
            field_values[field_name] = getattr(config, field_name)
        return self.format_string.format(**field_values)