Strictus Dictus
Project description
pip install strictus-dictus
StrictusDictus is a base class for special dict sub-classes, instances of which only accept keys that are declared in the class’s type hints.
This is useful for quick data transfer object definitions, for example, when you are expressing someone else’s JSON or YAML schema in your code and want to access the contents of the parsed dictionaries using dot notation and have your IDE auto-complete the attribute names.
from strictus_dictus import StrictusDictus
class Header(StrictusDictus):
title: str
sent: str
class Tag(StrictusDictus):
value: str
class Message(StrictusDictus):
header: Header
body: str
tags: List[Tag]
source = {
"header": {
"title": "Hello, world!",
"sent": "2018-10-20 18:09:42",
},
"body": "What is going on?",
"tags": [
{
"value": "unread",
},
],
}
# Parse the message
message = Message(source)
# Access attributes
assert message.header.title == "Hello, world!"
assert message.tags[0].value == "unread"
# Convert back to a standard dictionary
message.to_dict()
The values of these keys are accessible as attributes with dot notation as well as with [] notation, however, if the source dictionary is missing the key, StrictusDictus will not introduce it so access via [] notation will raise a KeyError. However, the attribute will be initialised to hold the special EMPTY value.
To create an instance use YourClass(standard_dict) and to export to a standard dictionary use YourClass().to_dict().
Only a limited set of type hints are supported by StrictusDictus. Unsupported type hints will be silently ignored and values will be returned unprocessed.
Supported type hints are (SD denotes any class inheriting from StrictusDictus):
class Examples:
x1: primitive_type # could be any type, but not from typing.*; value won't be processed
x2: List # unprocessed list
x3: Dict # unprocessed dictionary
x4: SD
x5: List[SD]
x6: Dict[str, SD]
You can annotate x with List[Any] and Dict[Any, Any], but the values won’t be processed by StrictusDictus.
A StrictusDictus class cannot reference itself in its type hints (not even with forward references).
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
Built Distribution
File details
Details for the file strictus-dictus-0.0.4.tar.gz
.
File metadata
- Download URL: strictus-dictus-0.0.4.tar.gz
- Upload date:
- Size: 4.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.0 CPython/3.6.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 20e0e40fe2ac900f7e03cc8c222d60d129d5e6677030f5b093dd21cf9d35ec02 |
|
MD5 | 319e28d6a47b5c5f6321c77c20b029c5 |
|
BLAKE2b-256 | 3f0744f0bfe12f101a532104b0e7f61229d718afe86c80a5b66828ca1444a0b0 |
File details
Details for the file strictus_dictus-0.0.4-py3-none-any.whl
.
File metadata
- Download URL: strictus_dictus-0.0.4-py3-none-any.whl
- Upload date:
- Size: 4.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.0 CPython/3.6.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cf1b362dbe8c754ac03c53fd0f7e10f7e04e1ab05dffe520f1dd4696e42fe12f |
|
MD5 | 85b578c8570da2bbd287c199155d00e3 |
|
BLAKE2b-256 | 0b6f28ebe4c683cf1f5a7873d3c366a516e65e075fb8f789a718ac9fbff92272 |