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.
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
Release history Release notifications | RSS feed
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)
File details
Details for the file input_algorithms-0.6.0.tar.gz
.
File metadata
- Download URL: input_algorithms-0.6.0.tar.gz
- Upload date:
- Size: 20.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d437ba67b907446f5c9a550787330334e404f6caad5d8d80544101f5f28e043f |
|
MD5 | e28e018a523da52183c8d633542a551e |
|
BLAKE2b-256 | 8a8acf55a81ba250ee4d7d715d7e3a6c349cff066d48e5677192799288109393 |