Filter Conditions in PynamoDB#

Filter conditions in PynamoDB are objects of the class pynamodb.expressions.condition.Comparison. For testing, you can get the string representation by casting it to a string, and I can use that for matching.

Example#

Creating a condition#

condition = None
if source:
    condition &= Model.source == source
if time_limit:
    time_limit_min = datetime.timestamp(datetime.now() - timedelta(days=time_limit))
    condition &= time_limit_min <= Model.last_updated

In PynamoDB, filter objects overload common Python logic operators for translation into DynamoDB’s conditional filter operators. You can find the translation table here.

Testing condition objects by stringifying#

filter_string = str(
    filter_condition
)
if limit and filter_string == "source = {'S': 'test_source'}":
    do_something()
elif filter_string == "source = {'S': 'test_source'}":
    do_something_else()
elif filter_string.startswith(
    "(source = {'S': 'test_source'} AND last_updated >= {'N':"
):
    do_something_entirely_different()
elif filter_string.startswith("last_updated >= {'N':"):
    do_more()