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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
|