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
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
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
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
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()
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)
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
def test_validator_in_dict(self): spec = translate({"foo": IsA(str, default="bar")}) data = {} expected = {"foo": "bar"} assert merge_defaults(spec, data) == expected
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
def test_validator_in_dict(self): spec = translate({'foo': IsA(str, default='bar')}) data = {} expected = {'foo': 'bar'} assert merge_defaults(spec, data) == expected
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