jertl - A minimum viable package for processing structured data
Where developers declaratively define and execute common operations on complex data structures.
Operations are specified using a mini-language in which target structures are visually similar to their textual representation.
Examples
Matching
Jertl can be used to verify the structure of data, select nested values, or both.
>>> movie = {"title": "Pinocchio", "MPAA rating": "PG"}
>>>
>>> match = jertl.match('{"title": title, "MPAA rating": "PG"}', movie)
>>>
>>> if match is not None:
... print(match.bindings['title'])
...
Pinocchio
Filling
Jertl can also be used as a template library.
>>> jertl.fill('{"name": name, "age": age, "status": status}',
... name="Ray",
... age=66,
... status='employed')
{'name': 'Ray', 'age': 66, 'status': 'employed'}
Transforming
Data transformations are defined using representations of the source and target data.
>>> retire = '{"status": "employed", **the_rest} --> {"status": "retired", **the_rest}'
>>>
>>> ray = {'name': 'Ray', 'age': 66, 'status': 'employed'}
>>>
>>> transformation = jertl.transform(retire, ray)
>>> transformation.filled
{'status': 'retired', 'name': 'Ray', 'age': 66}
Collating
You can use Jertl to verify relationships between data structures.
>>> supervises = '''
... supervisor ~ {"underlings": [*_, name, *_]}
... employee ~ {"name": name}
... '''
>>>
>>> jeremy = {'name': 'Jeremy'}
>>> jeff = {'name': 'Jeff', 'underlings': ['Jimmy', 'Johnny', 'Jeremy', 'Joe']}
>>>
>>> collation = jertl.collate(supervises, supervisor=jeff, employee=jeremy)
>>> collation is not None
True
Inferring
Combining all these operations gives you an inference engine.
>>> rule = '''
... //
... // Create a list of movies with their ratings explained
... //
... movies ~ [*_, {"title": title, "MPAA rating": rating}, *_]
... MPAA_ratings ~ [*_, {"rating": rating, "explanation": explanation}, *_]
... -->
... movie := {"title": title, "contents": explanation}
...'''
...
>>> movies = [{'title': 'Toy Story', 'MPAA rating': 'G'},
... {'title': 'South Park: Bigger, Longer & Uncut', 'MPAA rating': 'NC-17'}]
...
>>> MPAA_ratings = [{'rating': 'G',
... 'summary': 'GENERAL AUDIENCES',
... 'explanation': 'Nothing to offend parents for viewing by children.'},
... {'rating': 'PG',
... 'summary': 'PARENTAL GUIDANCE SUGGESTED',
... 'explanation': 'May contain some material parents might not like for their young children'},
... {'rating': 'PG-13',
... 'summary': 'PARENTS STRONGLY CAUTIONED',
... 'explanation': 'Some material may be inappropriate for pre-teens.'},
... {'rating': 'R',
... 'summary': 'RESTRICTED',
... 'explanation': 'Contains some adult material.'},
... {'rating': 'NC-17',
... 'summary': 'NO ONE 17 AND UNDER ADMITTED',
... 'explanation': 'Clearly for adults only.'}]
...
>>> for inference in jertl.infer_all(rule, movies=movies, MPAA_ratings=MPAA_ratings):
... print(inference.fills['movie'])
...
{'title': 'Toy Story', 'contents': 'Nothing to offend parents for viewing by children.'}
{'title': 'South Park: Bigger, Longer & Uncut', 'contents': 'Clearly for adults only.'}
Installation
pip install jertl
Metadata
Release files for jertl 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| jertl-0.1.3.tar.gz | 81.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jertl-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 114.8 kB
Release files / jertl-0.1.3.tar.gz
| Download URL | jertl-0.1.3.tar.gz |
|---|---|
| Size | 81.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
870a83daab23b8d60bd1cbf791956439cfac2e25933abc0c18faad3aebcea6c9
|
|
BLAKE2b-256 checksum How to use checksums |
bfa70310754692a055f788af929080389b1100543770f3fbd94b9f5f619f0f7e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
python-httpx/0.23.0
|
Release files / jertl-0.1.3-py3-none-any.whl
| Download URL | jertl-0.1.3-py3-none-any.whl |
|---|---|
| Size | 33.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cc1d5cd81cdd42566da2328f5d03453c574b50eaba54781de3aa4c1618e3da8b
|
|
BLAKE2b-256 checksum How to use checksums |
dcd7542a513cfbbafca4098f255fd07fbf9438b311f80bb48844ff5f665aeb96
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
python-httpx/0.23.0
|