All pastes #2891092 Raw Edit

Unnamed

public unlisted diff v1 · immutable
#2891092 ·published 2014-12-22 18:55 UTC
rendered paste body
diff --git a/jsd/_lib.py b/jsd/_lib.pyindex 56d76a8..b439357 100644--- a/jsd/_lib.py+++ b/jsd/_lib.py@@ -13,35 +13,65 @@ import six  -class _ObjectMeta(type):+class _TypeMeta(type):++    #def __new__(meta, name, bases, dct):+    #    dct['_keywords'] = []+    #    for name, obj in six.iteritems(dct):+    #        if not name.startswith('__') and not callable(obj):+    #            print name+    #            dct['_keywords'].append(name)++    #    return super(_TypeMeta, meta).__new__(meta, name, bases, dct)++    def __new__(meta, name, bases, dct):+        dct['_keywords'] = {}+        for name, obj in six.iteritems(dct):+            if not name.startswith('__') and not callable(obj):+                print name+                dct['_keywords'][name] = obj++        return super(_TypeMeta, meta).__new__(meta, name, bases, dct)+++class _ObjectMeta(_TypeMeta):      def __new__(meta, name, bases, dct):-        dct.update({-            'properties': {},-            'required_properties': [],-            'required': False,-        })+        properties = {}+        required_properties = []          for _name, obj in list(dct.items()):             if isinstance(obj, _Type):                 del dct[_name]-                dct['properties'][_name] = obj+                properties[_name] = obj                 if obj.required:-                    dct['required_properties'].append(_name)+                    required_properties.append(_name) -        return super(_ObjectMeta, meta).__new__(meta, name, bases, dct)+        cls = super(_ObjectMeta, meta).__new__(meta, name, bases, dct)+        cls.properties = properties+        cls.required_properties = required_properties+        return cls  +@six.add_metaclass(_TypeMeta) class _Type(object):      def __init__(self, required=False, **kwargs):         self.required = required      def json(self):+        obj_json = dict()         if self.required:-            return {'type': self.__class__.__name__.lower()}+            obj_json['type'] = self.type.lower()         else:-            return {'type': [self.__class__.__name__.lower(), 'null']}+            obj_json['type'] = [self.type.lower(), 'null']++        for k, v in six.iteritems(self._keywords):+            if k == '_keywords':+                continue+            obj_json[k] = v++        return obj_json   @six.add_metaclass(_ObjectMeta)@@ -63,7 +93,11 @@ class Object(_Type):   class String(_Type):-    pass+    type = 'string'+    minLength = None+    maxLength = None+    format = None+    pattern = None   class Array(_Type):