De/serialize strings of comma-separated key-value pairs using Python type hints.
Project description
databind.tagline
Databind is a library inspired by Jackson-databind to describe and bind data models for
object-oriented programming. The databind.tagline
module provides functionality to (de-)
serialize strings of comma-separated key-value pairs.
Syntax
- An object is defined of a comma-separated sequence of key-value pairs
- An array is defined as a sequence of values
- Key-value pairs or values can be grouped/nested with surrounding braces
- Unions can be instantiated by prefixing a brace with the union member name
Notation | Syntax | JSON representation |
---|---|---|
Object | a=b,c=d |
{"a": "b", "c": "d"} |
Array | a,b,c |
["a", "b", "c"] |
Union | a{b=c} |
{"type": "a", "a": {"b": "c"}} |
Nesting | a={b=c} |
{"a": {"b": "c"}} |
Nesting | a,{b=c},d |
["a", {"b": "c"}, "d"] |
Quickstart
from databind.core import datamodel, field, uniontype
from databind.tagline import from_str
@datamodel
class BindMount:
src: str
dst: str
read_only: bool = field(altname='readonly', default=False)
@uniontype({
'bind': BindMount
} flat=False)
class Mount:
pass
assert from_str(Mount, 'bind{src=data/,dst=/opt/data}') == BindMount('data/', '/opt/data')
assert from_str(Mount, 'type=bind,bind={src=data/,dst=/opt/data}') == BindMount('data/', '/opt/data')
assert from_str(BindMount, 'src=data/,dst=/opt/data,readonly=true') == BindMount('data/', '/opt/data')
Notes
- All values are loaded as strings. It is up to the user of the
load()
function to interpret the values as needed. Thedump()
function converts numbers to string for convenience. - The union syntax is loaded into nested form, which requires that
@uniontype()
are configured withflat=False
. - The actual data binding is out-sourced with the
databind.json
module (using a custom registry initialized with non-strict JSON converters, seedatabind.tagline:registry
). - The loader/dumper does not currently support escaping control characters. Dumping a string
that contains a control character (like
{
or,
) will result in output that cannot be parsed.
Copyright © 2020 Niklas Rosenstein
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 databind.tagline-0.1.3.tar.gz
.
File metadata
- Download URL: databind.tagline-0.1.3.tar.gz
- Upload date:
- Size: 5.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 991f17631401e09c281f2a8180fe030d11e5df90a83ba04602f8ac19d1f14319 |
|
MD5 | 552d620cbf76d09a1fdf2c4e4893c2b4 |
|
BLAKE2b-256 | 60735a1a185caa505ebe82d9dde8eca4ce57750bc9377fd661b97afbc8962e38 |
File details
Details for the file databind.tagline-0.1.3-py3-none-any.whl
.
File metadata
- Download URL: databind.tagline-0.1.3-py3-none-any.whl
- Upload date:
- Size: 6.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 602ae383b38e447f2a7a581d56084e2456f3fa0242932a7e40ffdf5608beb43a |
|
MD5 | 6e7abf8ab437f7734c6e12da6b3122bf |
|
BLAKE2b-256 | e8a429b59e4c2f6c193388c4ded0eca615b4b2c0f192e93d1cc39946944cb6c9 |