No project description provided
Project description
ruler
A rule dsl language parser in Python
ruler DSL
This mini-language is partially inspired by LISP. A rule is represented by a an s-expression.
Syntax & Structure
(namespace.function_name "some_arguments" "more_arguments_if_applicable")
A rule is usually consist of a function name, and a list of (sometimes optional) arguments. Function names are often namespaced (e.g. "boolean.and"
, "condition.equal"
etc.) and usually only recognized if placed in the first elemnt.
Unless otherwise specified, a rule can be inserted as an argument to another rule, for example a boolean.and
rule.
(boolean.and (condition.equal (basic.field "fieldA") "X"),
condition.equal (basic.field "fieldB") "Y")
Parsing and computing result
In order to parse the rule, just call genruler.parse
. The result is a function where you can put in a context object in order for it to compute a result.
import genruler
rule = genruler.parse('(condition.Equal (basic.Field "fieldA") "X")')
context = {"fieldA": "X"}
rule(context) // should return true
Usage
Installation
I probably should submit this to PyPI so it is pip-installable
Ruler API overview
Array functions
Some array related functions.
array.length
(array.length $argument)
Returns the length of a given array $argument
. For example,
import genruler
rule = genruler.parse('(array.length (basic.Field "fieldA"))')
context = {"fieldA": [1, 2, 3]}
rule(context) // should return 3
Basic functions
Some random functions that don't fit anywhere else goes here
basic.context
(basic.Context $context_sub, $rule)
Temporarily change the context to $context_sub
, and perform $rule
with $context_sub
as the new context
$context_sub
(required): A struct, or a rule to extract a new struct w.r.t. the originalcontext
$rule
(required): the rule to be applied w.r.t.$context_sub
An example:
rule = ruler.parse('(basic.Context (basic.field, 'sub')
(basic.field, 'foo'))')
context = {"sub": {"foo": "bar"}}
rule(context) # returns context['sub']['foo'], which is 'bar'
Basic.field
(basic.field $key $default)
Returns a field value from context
when called.
$key
(required): is akey
in thecontext
.$default
(optional): is a default value to be returned whencontext[key]
does not exist.
basic.value
(basic.value $value)
Returns a value, regardless what is in the context
$value
(required): a value to return. MAY NOT be a sub-rule
Boolean operators
Usually used to chain condition rules (see next section) together
boolean.and_
(boolean.and_ $argument1 $argument2 ...)
Returns True
if all arguments returns True
, or False
otherwise.
boolean.contradiction
(boolean.contradiction)
Always returns a False
, a shorthand for
(basic.Value false)
boolean.not_
(boolean.not_ $argument)
Returns the result of negation done to $argument
.
boolean.or_
(boolean.or $argument2 $argument2)
Returns True
if any of the arguments is True
, or False
otherwise.
boolean.tautology
(boolean.tautology)
Returns True
regardless
Condition rules
Usually returns either true or false
condition.equal
(condition.equal $alpha $beta)
Returns True
if and only if $alpha
is equivalent to $beta
.
condition.gt
(condition.gt $alpha $beta)
Returns True
if and only if $alpha
is greater than $beta
.
condition.ge
(condition.ge $alpha $beta)
Returns True
if and only if $alpha
is greater than or equal to $beta
.
condition.in_
(condition.In $alpha $values)
Returns True
if $alpha
is in $values
condition.is_none
(condition.is_none $alpha)
Returns True
if $alpha
is None
condition.is_true
(condition.Is_True $alpha)
Returns True
if $alpha
is True
condition.lt
(condition.less_than $alpha $beta)
Returns True
if and only if $alpha
is less than $beta
.
condition.le
["condition.Less_Than_Equal", $alpha, $beta]
Returns True
if and only if $alpha
is less than or equal to $beta
.
String operations
Some basic string operations
string.concat
(string.Concat $link $argument1 $argument2 ...)
Concatenate arguments by $link
string.concat_fields
(string.concat_fields $link $key1 $key2 ...)
A short hand for
(string.concat $link (string.Field $key1) (string.field $key2) ...)
Note: $key1
, $key2
etc.
string.lower
(string.lower $value)
Change $value
to lowercase
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file genruler-0.1.0.tar.gz
.
File metadata
- Download URL: genruler-0.1.0.tar.gz
- Upload date:
- Size: 5.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.4 CPython/3.12.6 Linux/6.11.0-8-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | aa711923e5762784216e9d0577266f026bd30fdde600ded6e5ee618370e6b317 |
|
MD5 | 3096de3c6cb2917327c164e5f3fedd6c |
|
BLAKE2b-256 | 2d0254325885b1684ee409dafa7e72182e9eddcfb6b8d83b75536773145f61b5 |
File details
Details for the file genruler-0.1.0-py3-none-any.whl
.
File metadata
- Download URL: genruler-0.1.0-py3-none-any.whl
- Upload date:
- Size: 7.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.4 CPython/3.12.6 Linux/6.11.0-8-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8383b2e768726a26cd9b20fbeb9978514c1bfa5cec7fedc5f29e230f5d629474 |
|
MD5 | 66e62f26737e4e59bb5172b49dce6aa6 |
|
BLAKE2b-256 | deb157b23d41270ef3efd16c3b20d36eaf3323366e0e1526c9e42e8e179ef6b4 |