mock_alchemy.comparison#

A module for comparing SQLAlchemy expressions.

class mock_alchemy.comparison.ExpressionMatcher(e)[source]#

Bases: PrettyExpression

Matcher for comparing SQLAlchemy expressions.

Similar to http://www.voidspace.org.uk/python/mock/examples.html#more-complex-argument-matching

For example:

>>> c = column('column')
>>> c2 = column('column2')
>>> l1 = c.label('foo')
>>> l2 = c.label('foo')
>>> l3 = c.label('bar')
>>> l4 = c2.label('foo')
>>> e1 = c.in_(['foo', 'bar'])
>>> e2 = c.in_(['foo', 'bar'])
>>> e3 = c.in_(['cat', 'dog'])
>>> e4 = c == 'foo'
>>> e5 = func.lower(c)

>>> ExpressionMatcher(e1) == mock.ANY
True
>>> ExpressionMatcher(e1) == 5
False
>>> ExpressionMatcher(e1) == e2
True
>>> ExpressionMatcher(e1) != e2
False
>>> ExpressionMatcher(e1) == e3
False
>>> ExpressionMatcher(e1) == e4
False
>>> ExpressionMatcher(e5) == func.lower(c)
True
>>> ExpressionMatcher(e5) == func.upper(c)
False
>>> ExpressionMatcher(e1) == ExpressionMatcher(e2)
True
>>> ExpressionMatcher(c) == l1
False
>>> ExpressionMatcher(l1) == l2
True
>>> ExpressionMatcher(l1) == l3
True
>>> ExpressionMatcher(l1) == l4
False

It also works with nested structures:

>>> ExpressionMatcher([c == 'foo']) == [c == 'foo']
True
>>> a = {'foo': c == 'foo', 'bar': 5, 'hello': 'world'}
>>> ExpressionMatcher(a) == a
True
class mock_alchemy.comparison.PrettyExpression(e)[source]#

Bases: object

Wrapper around given expression with pretty representations.

Wraps any expression in order to represent in a string in a pretty fashion. This also enables easier comparison through string representations.

expr#

Some kind of expression or a PrettyExpression itself.

For example:

>>> c = column('column')
>>> PrettyExpression(c == 5)
BinaryExpression(sql='"column" = :column_1', params={'column_1': 5})
>>> PrettyExpression(10)
10
>>> PrettyExpression(PrettyExpression(15))
15