/strictus-dictus

Strictus Dictus (cousin of Biggus Dickus). Superseded by https://github.com/jbasko/strictus

Primary LanguagePython

Strictus Dictus

pip install strictus-dictus

StrictusDictus (aka sdict) 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 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.

sdict is suitable for nested structures.

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 as expected. 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):

You can annotate x with List[Any] and Dict[Any, Any], but the values won't be processed by StrictusDictus.

Limitations

  • An sdict sub-class cannot reference itself in its type hints (not even with forward references).

Dataclasses?

Dataclass is a great building block, but it doesn't treat dictionaries seriously.

I would expect line.end.y to hold value 5 , but that's not the case. In fact, print(line.end.y) raises an AttributeError: