Skip to main content

Thin DSL for creating input_algorithms

Project description

Input Algorithms

A DSL to assist with writing specifications describing valid data and testing that inputted data meets those defined specifications.

https://travis-ci.org/delfick/input_algorithms.png?branch=master

Why the name?

I got the inspiration from the movie Transcendence when a character says something to the effect of “We could do this if we had better input algorithms”.

Installation

Use pip!:

pip install input_algorithms

Or if you’re developing it:

pip install -e .
pip install -e ".[tests]"

USAGE

Here is an example to help you use the library.

from input_algorithms.validators import Validator
from input_algorithms.dictobj import dictobj
from input_algorithms import spec_base as sb
from input_algorithms.meta import Meta
import re

meta = Meta({},[])

# 1. Create a class defining your fields.
class PersonDictObj(dictobj):
    fields = ["name", "age"]

# 2. Create custom validate methods as required.
class ValidName(Validator):
    def validate(self, meta, val):
        matcher = re.compile("^[A-Za-z\ ]+$")
        if not matcher.match(val):
            raise Exception("{0} doesn't look like a name.".format(val))
        return val

class ValidAge(Validator):
    def validate(self, meta, val):
        if val > 120:
            raise Exception("I don't believe you are that old")
        return val

# 3. Tie together the pieces.
person_spec = sb.create_spec(
    PersonDictObj,
    name = sb.required(sb.valid_string_spec(ValidName())),
    age = sb.and_spec(sb.integer_spec(), ValidAge()),
)

# 4. Have some data
data = {"name": "Ralph", "age": 23}

# 5. Normalise the data into your object
normalised = person_spec.normalise(meta, data)

# 6. Use the object!
print("Name is {0}".format(normalised.name))
print("Age is {0}".format(normalised.age))

Tests

To run the tests in this project, just use the helpful script:

./test.sh

Or run tox:

tox

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

input_algorithms-0.6.0.tar.gz (20.5 kB view details)

Uploaded Source

File details

Details for the file input_algorithms-0.6.0.tar.gz.

File metadata

File hashes

Hashes for input_algorithms-0.6.0.tar.gz
Algorithm Hash digest
SHA256 d437ba67b907446f5c9a550787330334e404f6caad5d8d80544101f5f28e043f
MD5 e28e018a523da52183c8d633542a551e
BLAKE2b-256 8a8acf55a81ba250ee4d7d715d7e3a6c349cff066d48e5677192799288109393

See more details on using hashes here.

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