return fields class IndicoSchema(mm.Schema): @post_dump(pass_many=True, pass_original=True) def _call_post_dump_signal(self, data, many, orig): data_list = data if many else [data] orig_list = orig if many else [orig] signals.plugin.schema_post_dump.send(type(self), data=data_list, orig=orig_list, many=many) return data_list if many else data_list[0] @pre_load def _call_pre_load_signal(self, data): signals.plugin.schema_pre_load.send(type(self), data=data) return data class _IndicoModelSchemaOpts(SchemaOpts): def __init__(self, meta, **kwargs): super(_IndicoModelSchemaOpts, self).__init__(meta, **kwargs) self.model_converter = getattr(meta, 'model_converter', IndicoModelConverter) class IndicoModelSchema(MSQLAModelSchema, IndicoSchema): OPTIONS_CLASS = _IndicoModelSchemaOpts mm.Schema = IndicoSchema mm.ModelSchema = IndicoModelSchema webargs_flask_parser.schema_class = IndicoSchema
data_list = data if many else [data] orig_list = orig if many else [orig] signals.plugin.schema_post_dump.send(type(self), data=data_list, orig=orig_list, many=many) return data_list if many else data_list[0] @pre_load def _call_pre_load_signal(self, data, **kwargs): signals.plugin.schema_pre_load.send(type(self), data=data) return data @post_load def _call_post_load_signal(self, data, **kwargs): signals.plugin.schema_post_load.send(type(self), data=data) return data class _IndicoModelSchemaOpts(SchemaOpts): def __init__(self, meta, **kwargs): super().__init__(meta, **kwargs) self.model_converter = getattr(meta, 'model_converter', IndicoModelConverter) class IndicoModelSchema(MSQLAModelSchema, IndicoSchema): OPTIONS_CLASS = _IndicoModelSchemaOpts mm.Schema = IndicoSchema mm.ModelSchema = IndicoModelSchema webargs_flask_parser.schema_class = IndicoSchema # just in case someone uses the wrong import indico_webargs_flask_parser.schema_class = IndicoSchema
return default # XXX: To allow renaming/aliasing of fields we need to let mm-sqlalchemy # generate all fields from the models and leave it up to mm itself to # exclude fields we don't care about kwargs['fields'] = () fields = super(fossirModelConverter, self).fields_for_model(model, *args, **kwargs) for key, field in fields.items(): new_key = _get_from_mro('marshmallow_aliases', key) if new_key: del fields[key] fields[new_key] = field if field.attribute is None: field.attribute = key return fields class _fossirSchemaOpts(SchemaOpts): def __init__(self, meta): super(_fossirSchemaOpts, self).__init__(meta) self.model_converter = getattr(meta, 'model_converter', fossirModelConverter) class fossirModelSchema(mm.ModelSchema): OPTIONS_CLASS = _fossirSchemaOpts mm.ModelSchema = fossirModelSchema