Beispiel #1
0
    def test_required_inside_optional_dict_in_dict(self):
        spec = translate({
            'foo': optional({
                'a': 1,
                'b': optional(2),
            }),
        })

        data = {}
        expected = {'foo': None}
        assert merge_defaults(spec, data) == expected

        data = {'foo': None}
        expected = {'foo': None}
        assert merge_defaults(spec, data) == expected

        data = {'foo': {}}
        # XXX CHANGED:
        #expected = {'foo': {'a': 1, 'b': 2}}
        expected = {'foo': {'a': 1, 'b': None}}
        assert merge_defaults(spec, data) == expected

        data = {'foo': {'a': 3}}
        # XXX CHANGED:
        #expected = {'foo': {'a': 3, 'b': 2}}
        expected = {'foo': {'a': 3, 'b': None}}
        assert merge_defaults(spec, data) == expected

        data = {'foo': {'b': 3}}
        expected = {'foo': {'a': 1, 'b': 3}}
        assert merge_defaults(spec, data) == expected
Beispiel #2
0
    def test_required_inside_optional_dict_in_dict(self):
        spec = translate({"foo": optional({"a": 1, "b": optional(2)})})

        data = {}
        expected = {"foo": None}
        assert merge_defaults(spec, data) == expected

        data = {"foo": None}
        expected = {"foo": None}
        assert merge_defaults(spec, data) == expected

        data = {"foo": {}}
        # XXX CHANGED:
        # expected = {'foo': {'a': 1, 'b': 2}}
        expected = {"foo": {"a": 1, "b": None}}
        assert merge_defaults(spec, data) == expected

        data = {"foo": {"a": 3}}
        # XXX CHANGED:
        # expected = {'foo': {'a': 3, 'b': 2}}
        expected = {"foo": {"a": 3, "b": None}}
        assert merge_defaults(spec, data) == expected

        data = {"foo": {"b": 3}}
        expected = {"foo": {"a": 1, "b": 3}}
        assert merge_defaults(spec, data) == expected
Beispiel #3
0
 def test_callable_nested_in_dict(self):
     """ Nested callable defaults.
     """
     spec = translate({"content": {"text": lambda: t("hello")}})
     data = {}
     expected = {"content": {"text": t("hello")}}
     assert merge_defaults(spec, data) == expected
Beispiel #4
0
 def test_callable_nested_in_dict(self):
     """ Nested callable defaults.
     """
     spec = translate({'content': {'text': lambda: t('hello')}})
     data = {}
     expected = {'content': {'text': t('hello')}}
     assert merge_defaults(spec, data) == expected
Beispiel #5
0
 def __init__(self, conf=None, extra=None):
     if not conf:
         conf = {}
     if extra:
         conf.update(extra)
     if self.needs is NotImplemented:
         raise NotImplementedError('{}.needs'.format(self.__class__.__name__))
     merged = merge_defaults(self.needs, conf)
     validate(self.needs, merged)
     self.update(merged)
     self.init()
Beispiel #6
0
    def _dump_to_file(self, file_path, facts, create=False):
        if not os.path.exists(file_path):
            # make sure the year and month dirs are created
            month_dir = os.path.dirname(file_path)
            if not os.path.exists(month_dir):
                os.makedirs(month_dir)

        fact_ods = []
        for fact in facts:
            # insert defaults
            monk.merge_defaults(models.Fact.structure, fact)

            # validate structure and types
            monk.validate(models.Fact.structure, fact)

            # ensure field order and stuff
            fact_od = _prepare_fact_for_yaml(fact)

            fact_ods.append(fact_od)

        with open(file_path, 'w') as f:
            yaml.dump(fact_ods, f, allow_unicode=True, default_flow_style=False)
Beispiel #7
0
def load_card(path, model):
    with open(path) as f:
        raw_card = yaml.load(f)

    card = compat.fix_strings_to_unicode(raw_card)

    if not card:
        return

    # populate defaults
    card = merge_defaults(model, card)

    card = DotExpandedDict(card)

    try:
        # XXX HACK
        card.concerns = [models.Concern(**x) for x in card.get('concerns') or []]

        validate(model, card)
    except (ValidationError, TypeError) as e:
        safe_path = compat.encode(path)
        raise type(e)('{path}: {e}'.format(path=safe_path, e=e))

    return card
Beispiel #8
0
 def test_validator_in_dict(self):
     spec = translate({"foo": IsA(str, default="bar")})
     data = {}
     expected = {"foo": "bar"}
     assert merge_defaults(spec, data) == expected
Beispiel #9
0
 def test_complex_list_of_dicts(self):
     "some items are populated, some aren't"
     spec = {"a": [{"b": 1}]}
     data = {"a": [{}, {"c": 1}, {"b": 2, "c": {"d": 1}}]}
     expected = {"a": [{"b": 1}, {"b": 1, "c": 1}, {"b": 2, "c": {"d": 1}}]}
     assert merge_defaults(spec, data) == expected
Beispiel #10
0
 def test_validator_in_dict(self):
     spec = translate({'foo': IsA(str, default='bar')})
     data = {}
     expected = {'foo': 'bar'}
     assert merge_defaults(spec, data) == expected
Beispiel #11
0
 def test_complex_list_of_dicts(self):
     "some items are populated, some aren't"
     spec = {'a': [{'b': 1}]}
     data = {'a': [{}, {'c': 1}, {'b': 2, 'c': {'d': 1}}]}
     expected = {'a': [{'b': 1}, {'b': 1, 'c': 1}, {'b': 2, 'c': {'d': 1}}]}
     assert merge_defaults(spec, data) == expected