def repository():
@singledispatch
def _repogitory(obj):
return obj
def _register(cls, func=None):
if func is None:
return lambda f: _register(cls, f)
if isinstance(func, type):
if issubclass(func, ObjConverter):
func = func(cls)
if isinstance(func, ObjConverter):
func.repogitory = _repogitory
func = func.run
return _repogitory.org_register(cls, func)
_repogitory.org_register = _repogitory.register
_repogitory.register = _register
def fromSQLAlchemyModel(model, attrs=None, ignores=None):
names = [col.name for col in model.__table__.columns]
ObjConverter.build(_repogitory, model, names, attrs, ignores)
_repogitory.fromSQLAlchemyModel = fromSQLAlchemyModel
def fromDjangoModel(model, attrs, ignores):
ObjConverter.build(_repogitory, model, _django_get_all_field_names(model),
attrs, ignores)
_repogitory.fromDjangoModel = fromDjangoModel
def raw(obj):
return obj
_repogitory.register(str, raw)
def conv_seq(obj):
return tuple(_repogitory(o) for o in obj)
_repogitory.register(abc.Sequence, conv_seq)
_repogitory.register(abc.Set, conv_seq)
@_repogitory.register(abc.Mapping)
def conv_mapping(obj):
return {_repogitory(k):_repogitory(v) for k, v in obj.items()}
def conv_date(obj):
return obj.isoformat()
_repogitory.register(datetime.date, conv_date)
_repogitory.register(datetime.datetime, conv_date)
return _repogitory
评论列表
文章目录