def convert_query_type(column, value): """ Return `value` converted to type expected by `table` for column `key` Args: column (sqlalchemy.orm.attributes.QueryableAttribute): A SQLAlchemy ORM attribute value (str): A value to convert Returns: type: `value`, converted to a different type """ if isinstance(column.type, DATETIME_TYPES): return arrow.get(value).datetime elif isinstance(column.type, sau.ScalarListType): try: value = ast.literal_eval(value) except SyntaxError as exc: logger.error(exc) raise SyntaxError('Cannot convert column {} - invalid syntax: {}' .format(column, value)) else: return value return sau.cast_if(value, type(column.type))
def test_scalar(self): assert cast_if('something', sa.String) == 'something'
def test_synonym(self, article_cls): expr = article_cls.name_synonym assert cast_if(expr, sa.String) is expr
def test_scalar_selectable(self, article_cls): expr = sa.select([article_cls.id]).as_scalar() assert cast_if(expr, sa.Integer) is expr
def test_column_property(self, article_cls): expr = article_cls.name.property assert cast_if(expr, sa.String) is expr
def test_instrumented_attribute(self, article_cls): expr = article_cls.name assert cast_if(expr, sa.String) is expr
def test_scalar_selectable(self, article_cls): expr = get_scalar_subquery(sa.select([article_cls.id])) assert cast_if(expr, sa.Integer) is expr
def test_column(self, article_cls): expr = article_cls.__table__.c.name assert cast_if(expr, sa.String) is expr
def test_scalar(self): assert cast_if("something", sa.String) == "something"
def TestInput(data): if len(data) < 10: pass fdp = atheris.FuzzedDataProvider(data) cast_if(FuzzTable.id, Integer) cast_if(FuzzTable.name, Integer) cast_if(FuzzTable.id, String) cast_if(FuzzTable.name, String) cast_if(fdp.ConsumeInt(10), Integer) cast_if(fdp.ConsumeString(10), Integer) cast_if(fdp.ConsumeInt(10), String) cast_if(fdp.ConsumeString(10), String) db_str = 'sqlite:///fuzz.db' engine = create_engine(db_str) Base.metadata.create_all(engine) try: with Session(engine) as session: name_str = fdp.ConsumeString(20) session.query(FuzzTable).filter( FuzzTable.name.ilike(escape_like(name_str))).all() except SQLAlchemyError as e: pass