Skip to content

QuiNovas/dynamodb-conditional-expressions

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dynamodb-ce

Installation

pip install dynamodb-ce

Overview

dynamodb-ce is a compiler that can compile DynamoDB Conditional Expressions into executable Python truthy functions that evaluate either a Python dict or a DynamoDB item (with DynamoDB typing).

Setting up the parser requires setting expression attribute names and values, just as they would be set when calling DynamoDB. Expression attribute values can be represented either using Python types or DynamoDB types.

Compilation is done once per (expression, attribute names, attribute values) tuple and cached. The truthy function that is the result of the compilation is designed to be extremely fast.

Lexing and parsing courtesy of SLY.

Usage

Using DynamoDB types:

from dynamodb_ce import CeParser

parser = CeParser(
    expression_attribute_names={"#path": "body"},
    expression_attribute_values={':string1': {'S': "a"}, ':string2': {'S': "b"}, ':number1': {'N': 1}, ':number2': {'N': 2}}
)
item = {"body": {"M": {"number1": {"N": 1}, "number2": {"N": 2}, "string1": {"S": "a"}, "string2": {"S": "b"}}}}
parser.evaluate("#path.string2 > #path.string1", item)

Using Python types

from dynamodb_ce import CeParser

parser = CeParser(
    expression_attribute_names={"#path": "body"},
    expression_attribute_values={':string1': "a", ':string2': "b", ':number1': 1, ':number2': 2}
)
item = {"body": {"number1": 1, "number2": 2, "string1": "a", "string2": "b"}}
parser.evaluate("#path.string2 > #path.string1", item)

Using the parsed (compiled) result directly

from dynamodb_ce import CeParser

parser = CeParser(
    expression_attribute_names={"#path": "body"},
    expression_attribute_values={':string1': "a", ':string2': "b", ':number1': 1, ':number2': 2}
)
item = {"body": {"number1": 1, "number2": 2, "string1": "a", "string2": "b"}}
truthy = parser.parse("#path.string2 > #path.string1")
truthy(item)

About

A parser for DynamoDB conditional expressions that returns a truthy function

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages