Skip to main content

A minimal DSL for Python

Project description

A minimal DSL for Python

https://travis-ci.org/fcurella/minilanguage.svg

Minilanguage is a minimal DSL for Python written with Ply.

Is it intended to be a starting point for writing more specific DSLs.

Currently, it only implements simple boolean logic and objects/strings evaluation.

Example

from minilanguage.grammar import FeatureParser

context = {
    'country': 'US',
    'user': {
        'username': 'regular_user',
        'data_bag': {
            "payload": 'abc',
        }
    }
}

parser = FeatureParser()
parser.build()

parser.evaluate("2 + 0.5", context)
# 2.5

parser.evaluate("12 + 12", context)
# 24

parser.evaluate("12 == 12", context)
# True

parser.evaluate("12 != 12", context)
# False

parser.evaluate("12 and False", context)
# False

parser.evaluate("12 or False", context)
# 12

parser.evaluate("12 > 10", context)
# True

parser.evaluate("12 < 10", context)
# False

parser.evaluate("12 <= 12", context)
# True

parser.evaluate("12 >= 12", context)
# True

parser.evaluate("country", context)
# 'US'

parser.evaluate("country == 'US'", context)
# True

parser.evaluate("user.username", context)
# 'regular_user'

parser.evaluate("'a', 'b'", context)
# tuple('a', 'b')

parser.evaluate("user.data_bag.payload", context)
# 'abc'

parser.evaluate("12 if False else 14", context)
# 14

License

This software is released under the MIT License.

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

minilanguage-0.3.0.tar.gz (5.2 kB view hashes)

Uploaded Source

Built Distribution

minilanguage-0.3.0-py2.py3-none-any.whl (6.8 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page