rendered paste bodydiff --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):