def model_fields(model, db_session=None, only=None, exclude=None,
        field_args=None, converter=None):
    mapper = model._sa_class_manager.mapper
    converter = converter or ModelConverter()
    field_args = field_args or {}

    properties = ((p.key, p) for p in mapper.iterate_properties)
    if only:
        properties = (x for x in properties if x[0] in only)
    elif exclude:
        properties = (x for x in properties if x[0] not in exclude)

    field_dict = {}
    for name, prop in properties:
        field = converter.convert(model, mapper, prop,
            field_args.get(name), db_session)
        if field is not None:
            field_dict[name] = field

    return field_dict
Unification is different than combining in that it imposes constraints on
dataset/ETHPy150Open RoseOu/flasky/venv/lib/python2.7/site-packages/wtforms/ext/sqlalchemy/orm.py/model_fields--crossover with--dataset/ETHPy150Open iskandr/parakeet/parakeet/shape_inference/shape_inference.py/ShapeInference.unify_scalar_var