def setup_schema(): """For each model, install a marshmallow schema generator as `model.__schema__()`, and add an entry to the `schema` module. """ for class_ in _Base._decl_class_registry.values(): if hasattr(class_, '__tablename__'): if class_.__name__.endswith('Schema'): raise _ModelConversionError( "For safety, setup_schema can not be used when a" "Model class ends with 'Schema'") def add_schema(schema_class_name, exclude=[], add_to_model=False): """Add schema to module namespace, and, optionally, to model object. Parameters ---------- schema_class_name : str Name of schema. exclude : list of str, optional List of model attributes to exclude from schema. Defaults to `[]`. add_to_model : bool, optional Boolean indicating whether to install this schema generator on the model as `model.__schema__`. Defaults to `False`. """ schema_class_meta = type( f'{schema_class_name}_meta', (), { 'model': class_, 'sqla_session': _DBSession, 'ordered': True, 'exclude': [], 'include_fk': True, 'include_relationships': False, }, ) for exclude_attr in exclude: if (hasattr(class_, exclude_attr) and getattr(class_, exclude_attr) is not None): schema_class_meta.exclude.append(exclude_attr) schema_class = type(schema_class_name, (_ModelSchema, ), {'Meta': schema_class_meta}) if add_to_model: setattr(class_, '__schema__', schema_class) setattr(sys.modules[__name__], schema_class_name, schema_class()) schema_class_name = class_.__name__ add_schema(schema_class_name, exclude=['created_at', 'modified'], add_to_model=True) add_schema( f'{schema_class_name}NoID', exclude=['created_at', 'id', 'modified', 'single_user_group'], )
def setup_schema(): """For each model, install a marshmallow schema generator as `model.__schema__()`, and add an entry to the `schema` module. """ for class_ in _Base._decl_class_registry.values(): if hasattr(class_, '__tablename__'): if class_.__name__.endswith('Schema'): raise _ModelConversionError( "For safety, setup_schema can not be used when a" "Model class ends with 'Schema'") class Meta(object): model = class_ sqla_session = _DBSession schema_class_name = '%s' % class_.__name__ schema_class = type(schema_class_name, (_ModelSchema, ), {'Meta': Meta}) setattr(class_, '__schema__', schema_class) setattr(sys.modules[__name__], class_.__name__, schema_class())