Schema

Since 0.4, Snaql natively supports great Schema library for the context validation and more values transformation flexibility.

{% sql 'select_by_id' %}
    SELECT *
    FROM news
    WHERE id = {{ news_id }}
    AND creation_date >= {{ date_from }}
    AND rating >= {{ rating }}
{% endsql %}
import datetime
from snaql.factory import Snaql
from schema import Schema, And, Use, SchemaError
from snaql.convertors import guard_date


root_location = os.path.abspath(os.path.dirname(__file__))
snaql_factory = Snaql(root_location, 'queries')


news_queries = snaql_factory.load_queries('unsafe_news.sql')
schema = Schema({
    'news_id': And(Use(int), lambda i: i > 0),
    'rating': And(Use(float), lambda r: r > 0),
    'date_from': And(Use(guard_date)),
})
context = {
    'news_id': '123',
    'date_from': datetime.datetime.utcnow(),
    'rating': 4.22,
}
sql = news_queries.select_by_id(schema=schema, **context)

# SELECT * FROM news 
# WHERE id = 123 
# AND creation_date >= '2016-06-21' 
# AND rating >= 4.22

Sure, you can use standard "guards", convertors or create your own.

results matching ""

    No results matching ""