summaryrefslogtreecommitdiff
path: root/warlock/core.py
blob: 1753d24e01e0c1582852b993da26c18361f92ad3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
"""Core Warlock functionality"""

#import jsonschema


def model_factory(schema):
    """Generate a model class based on the provided JSON Schema

    :param schema: dict representing valid JSON schema
    """
    class Model(object):
        """Self-validating model for arbitrary objects"""
        def __init__(self, **kwargs):
            self.__dict__['raw'] = kwargs

        def __getattr__(self, key):
            try:
                return self.__dict__['raw'][key]
            except KeyError:
                raise AttributeError(key)

        def __setattr__(self, key, value):
            if key in self.__dict__['raw']:
                self.__dict__['raw'][key] = value
            else:
                raise AttributeError(key)

    Model.__name__ = schema['name']
    return Model