deev.translation#
- class DeevJsonEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)#
Bases:
JSONEncoderConstructor for JSONEncoder, with sensible defaults.
If skipkeys is false, then it is a TypeError to attempt encoding of keys that are not str, int, float, bool or None. If skipkeys is True, such items are simply skipped.
If ensure_ascii is true, the output is guaranteed to be str objects with all incoming non-ASCII characters escaped. If ensure_ascii is false, the output can contain non-ASCII characters.
If check_circular is true, then lists, dicts, and custom encoded objects will be checked for circular references during encoding to prevent an infinite recursion (which would cause an RecursionError). Otherwise, no such check takes place.
If allow_nan is true, then NaN, Infinity, and -Infinity will be encoded as such. This behavior is not JSON specification compliant, but is consistent with most JavaScript based encoders and decoders. Otherwise, it will be a ValueError to encode such floats.
If sort_keys is true, then the output of dictionaries will be sorted by key; this is useful for regression tests to ensure that JSON serializations can be compared on a day-to-day basis.
If indent is a non-negative integer, then JSON array elements and object members will be pretty-printed with that indent level. An indent level of 0 will only insert newlines. None is the most compact representation.
If specified, separators should be an (item_separator, key_separator) tuple. The default is (’, ‘, ‘: ‘) if indent is
Noneand (‘,’, ‘: ‘) otherwise. To get the most compact JSON representation, you should specify (‘,’, ‘:’) to eliminate whitespace.If specified, default is a function that gets called for objects that can’t otherwise be serialized. It should return a JSON encodable version of the object or raise a
TypeError.- encode(o)#
Return a JSON string representation of a Python data structure.
- Return type:
str
>>> from json.encoder import JSONEncoder >>> JSONEncoder().encode({"foo": ["bar", "baz"]}) '{"foo": ["bar", "baz"]}'
- class DeevJsonDecoder(*, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)#
Bases:
JSONDecoderobject_hook, if specified, will be called with the result of every JSON object decoded and its return value will be used in place of the givendict. This can be used to provide custom deserializations (e.g. to support JSON-RPC class hinting).object_pairs_hook, if specified will be called with the result of every JSON object decoded with an ordered list of pairs. The return value ofobject_pairs_hookwill be used instead of thedict. This feature can be used to implement custom decoders. Ifobject_hookis also defined, theobject_pairs_hooktakes priority.parse_float, if specified, will be called with the string of every JSON float to be decoded. By default this is equivalent to float(num_str). This can be used to use another datatype or parser for JSON floats (e.g. decimal.Decimal).parse_int, if specified, will be called with the string of every JSON int to be decoded. By default this is equivalent to int(num_str). This can be used to use another datatype or parser for JSON integers (e.g. float).parse_constant, if specified, will be called with one of the following strings: -Infinity, Infinity, NaN. This can be used to raise an exception if invalid JSON numbers are encountered.If
strictis false (true is the default), then control characters will be allowed inside strings. Control characters in this context are those with character codes in the 0-31 range, including'\t'(tab),'\n','\r'and'\0'.- decode(s, _w=None)#
Return the Python representation of
s(astrinstance containing a JSON document).- Return type:
Any
- configure_serialization(*, encoder=None, decoder=None, serializer=None, deserializer=None)#
Set json encoders/decoders used for sql translations.
This because complex types such as lists, tuples, dicts, Decimals, etc/etc being stored to db get serialized (stored as a string.)
When the default serializer encounters an unsupported type the serialization fails.
This provides you a mechanism to customize serialization.
If you wish to extend the default behavior without re-implementing it all, you can inherit from the exposed DeevJsonEncoder and DeevJsonDecoder, then pass your subclassed versions in. If your work is not proprietary, consider submitting an issue on github to have the support formally added.
Alternatively, if you want to wholesale swap the serializer (something other than json, or a json impl you prefer) you can provide serializer and deserializer callbacks instead. If you set new serializer/deserializer callbacks the encoders will not be used (and, detecting that serializer/deserializer are custom will throw on any attempt to set new encoders.)
- Return type:
None
- deunionize(t)#
- Return type:
type
- hydrate(entity, data, attrs=None, from_sql=False)#
Hydrates an entity in-place from a “splat.”
- Parameters:
entity (
object) – The entity to hydrate.data (
dict[str,Any]) – The data to hydrate.attrs (
Optional[list[str]]) – Specify which attrs/props to hydrate, otherwise hydrates all.from_sql (
bool) – If True, source values are presumed to be sql objects that need to be mapped to python objects.
- Return type:
Any- Returns:
The original entity, hydrated.
- splat(entity, attrs=None, to_sql=False)#
Splatter entity attributes/fields into a dict.
- Parameters:
entity (
object) – The entity to splatter.attrs (
Optional[list[str]]) – Specify which attrs/fields to splatter, otherwise splatter all.to_sql (
bool) – If True, destination values need to be mapped to sql objects.
- Return type:
dict[str,Any]- Returns:
The resulting splat.
- to_pyobject(value, hint)#
- Return type:
Any
- to_sqlobject(value, hint)#
- Return type:
Any