A minimum viable package for processing structured data
Project description
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
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 jertl-0.1.3.tar.gz
.
File metadata
- Download URL: jertl-0.1.3.tar.gz
- Upload date:
- Size: 81.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.23.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 870a83daab23b8d60bd1cbf791956439cfac2e25933abc0c18faad3aebcea6c9 |
|
MD5 | f2aa0c9c54b0e9a998edfc9508252f30 |
|
BLAKE2b-256 | bfa70310754692a055f788af929080389b1100543770f3fbd94b9f5f619f0f7e |
File details
Details for the file jertl-0.1.3-py3-none-any.whl
.
File metadata
- Download URL: jertl-0.1.3-py3-none-any.whl
- Upload date:
- Size: 33.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.23.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cc1d5cd81cdd42566da2328f5d03453c574b50eaba54781de3aa4c1618e3da8b |
|
MD5 | a83b2b5dcb37248290fc66088898ab62 |
|
BLAKE2b-256 | dcd7542a513cfbbafca4098f255fd07fbf9438b311f80bb48844ff5f665aeb96 |