PNG  IHDRxsBIT|d pHYs+tEXtSoftwarewww.inkscape.org<,tEXtComment File Manager

File Manager

Path: /opt/alt/python311/lib/python3.11/site-packages/jsons/

Viewing File: __init__.py

"""
Works with Python3.5+

JSON (de)serialization (jsons) from and to dicts and plain old Python objects.

Works with dataclasses (Python3.7+).


**Example:**

    >>> from dataclasses import dataclass
    >>> @dataclass
    ... class Car:
    ...     color: str
    >>> @dataclass
    ... class Person:
    ...     car: Car
    ...     name: str
    >>> c = Car('Red')
    >>> p = Person(c, 'John')
    >>> dumped = dump(p)
    >>> dumped['name']
    'John'
    >>> dumped['car']['color']
    'Red'
    >>> p_reloaded = load(dumped, Person)
    >>> p_reloaded.name
    'John'
    >>> p_reloaded.car.color
    'Red'


Deserialization will work with older Python classes (Python3.5+) given that
type hints are present for custom types (i.e. any type that is not set at
the bottom of this module). Serialization will work with no type hints at
all.


**Example**

    >>> class Car:
    ...     def __init__(self, color):
    ...         self.color = color
    >>> class Person:
    ...     def __init__(self, car: Car, name):
    ...         self.car = car
    ...         self.name = name
    >>> c = Car('Red')
    >>> p = Person(c, 'John')
    >>> dumped = dump(p)
    >>> dumped['name']
    'John'
    >>> dumped['car']['color']
    'Red'
    >>> p_reloaded = load(dumped, Person)
    >>> p_reloaded.name
    'John'
    >>> p_reloaded.car.color
    'Red'


Alternatively, you can make use of the `JsonSerializable` class.


**Example**

    >>> class Car(JsonSerializable):
    ...     def __init__(self, color):
    ...         self.color = color
    >>> class Person(JsonSerializable):
    ...     def __init__(self, car: Car, name):
    ...         self.car = car
    ...         self.name = name
    >>> c = Car('Red')
    >>> p = Person(c, 'John')
    >>> dumped = p.json
    >>> dumped['name']
    'John'
    >>> dumped['car']['color']
    'Red'
    >>> p_reloaded = Person.from_json(dumped)
    >>> p_reloaded.name
    'John'
    >>> p_reloaded.car.color
    'Red'

"""
from collections.abc import Mapping
from datetime import datetime, date, time, timezone, timedelta
from decimal import Decimal
from enum import Enum, IntEnum
from pathlib import PurePath
from typing import Union, List, Tuple, Iterable, Optional, DefaultDict, Dict
from uuid import UUID

from jsons._common_impl import NoneType
from jsons._dump_impl import (
    dump,
    dumps,
    dumpb,
)
from jsons._extra_impl import (
    announce_class,
    suppress_warnings,
    suppress_warning,
)
from jsons._fork_impl import fork
from jsons._key_transformers import (
    camelcase,
    snakecase,
    pascalcase,
    lispcase,
)
from jsons._lizers_impl import (
    get_serializer,
    get_deserializer,
    set_serializer,
    set_deserializer,
)
from jsons._load_impl import (
    load,
    loads,
    loadb,
)
from jsons._package_info import __version__
from jsons._transform_impl import transform
from jsons._validation import (
    validate,
    get_validator,
    set_validator,
)
from jsons.classes.json_serializable import JsonSerializable
from jsons.classes.verbosity import Verbosity
from jsons.deserializers.default_complex import default_complex_deserializer
from jsons.deserializers.default_date import default_date_deserializer
from jsons.deserializers.default_datetime import default_datetime_deserializer
from jsons.deserializers.default_decimal import default_decimal_deserializer
from jsons.deserializers.default_defaultdict import default_defaultdict_deserializer
from jsons.deserializers.default_dict import default_dict_deserializer
from jsons.deserializers.default_enum import default_enum_deserializer
from jsons.deserializers.default_iterable import default_iterable_deserializer
from jsons.deserializers.default_list import default_list_deserializer
from jsons.deserializers.default_mapping import default_mapping_deserializer
from jsons.deserializers.default_nonetype import default_nonetype_deserializer
from jsons.deserializers.default_object import default_object_deserializer
from jsons.deserializers.default_path import default_path_deserializer
from jsons.deserializers.default_primitive import default_primitive_deserializer
from jsons.deserializers.default_string import default_string_deserializer
from jsons.deserializers.default_time import default_time_deserializer
from jsons.deserializers.default_timedelta import default_timedelta_deserializer
from jsons.deserializers.default_timezone import default_timezone_deserializer
from jsons.deserializers.default_tuple import default_tuple_deserializer
from jsons.deserializers.default_union import default_union_deserializer
from jsons.deserializers.default_uuid import default_uuid_deserializer
from jsons.deserializers.default_zone_info import default_zone_info_deserializer
from jsons.exceptions import (
    JsonsError,
    ValidationError,
    SerializationError,
    DeserializationError,
    DecodeError,
    UnfulfilledArgumentError,
    InvalidDecorationError
)
from jsons.serializers.default_complex import default_complex_serializer
from jsons.serializers.default_date import default_date_serializer
from jsons.serializers.default_datetime import default_datetime_serializer
from jsons.serializers.default_decimal import default_decimal_serializer
from jsons.serializers.default_dict import default_dict_serializer
from jsons.serializers.default_enum import default_enum_serializer
from jsons.serializers.default_iterable import default_iterable_serializer
from jsons.serializers.default_list import default_list_serializer
from jsons.serializers.default_object import default_object_serializer
from jsons.serializers.default_path import default_path_serializer
from jsons.serializers.default_primitive import default_primitive_serializer
from jsons.serializers.default_time import default_time_serializer
from jsons.serializers.default_timedelta import default_timedelta_serializer
from jsons.serializers.default_timezone import default_timezone_serializer
from jsons.serializers.default_tuple import default_tuple_serializer
from jsons.serializers.default_union import default_union_serializer
from jsons.serializers.default_uuid import default_uuid_serializer
from jsons.serializers.default_zone_info import default_zone_info_serializer

KEY_TRANSFORMER_SNAKECASE = snakecase
KEY_TRANSFORMER_CAMELCASE = camelcase
KEY_TRANSFORMER_PASCALCASE = pascalcase
KEY_TRANSFORMER_LISPCASE = lispcase

__all__ = [
    # Functions:
    '__version__',
    dump.__name__,
    dumps.__name__,
    dumpb.__name__,
    load.__name__,
    loads.__name__,
    loadb.__name__,
    transform.__name__,
    fork.__name__,
    set_serializer.__name__,
    'get_serializer',
    set_deserializer.__name__,
    'get_deserializer',
    'get_validator',
    set_validator.__name__,
    validate.__name__,
    'announce_class',
    suppress_warnings.__name__,
    suppress_warning.__name__,

    # Types:
    JsonSerializable.__name__,
    Verbosity.__name__,

    # Key transformers:
    snakecase.__name__,
    camelcase.__name__,
    pascalcase.__name__,
    lispcase.__name__,
    'KEY_TRANSFORMER_SNAKECASE',
    'KEY_TRANSFORMER_CAMELCASE',
    'KEY_TRANSFORMER_PASCALCASE',
    'KEY_TRANSFORMER_LISPCASE',

    # Errors:
    JsonsError.__name__,
    ValidationError.__name__,
    SerializationError.__name__,
    DeserializationError.__name__,
    DecodeError.__name__,
    UnfulfilledArgumentError.__name__,
    InvalidDecorationError.__name__,

    # Serializers:
    default_tuple_serializer.__name__,
    default_dict_serializer.__name__,
    default_iterable_serializer.__name__,
    default_list_serializer.__name__,
    default_enum_serializer.__name__,
    default_complex_serializer.__name__,
    default_datetime_serializer.__name__,
    default_date_serializer.__name__,
    default_time_serializer.__name__,
    default_timezone_serializer.__name__,
    default_timedelta_serializer.__name__,
    default_primitive_serializer.__name__,
    default_object_serializer.__name__,
    default_decimal_serializer.__name__,
    default_uuid_serializer.__name__,
    default_union_serializer.__name__,
    default_path_serializer.__name__,

    # Deserializers:
    default_list_deserializer.__name__,
    default_tuple_deserializer.__name__,
    default_union_deserializer.__name__,
    default_dict_deserializer.__name__,
    default_defaultdict_deserializer.__name__,
    default_enum_deserializer.__name__,
    default_complex_deserializer.__name__,
    default_datetime_deserializer.__name__,
    default_date_deserializer.__name__,
    default_time_deserializer.__name__,
    default_timezone_deserializer.__name__,
    default_timedelta_deserializer.__name__,
    default_string_deserializer.__name__,
    default_nonetype_deserializer.__name__,
    default_primitive_deserializer.__name__,
    default_mapping_deserializer.__name__,
    default_iterable_deserializer.__name__,
    default_object_deserializer.__name__,
    default_uuid_deserializer.__name__,
    default_decimal_deserializer.__name__,
    default_path_deserializer.__name__,
]

set_serializer(default_tuple_serializer, (tuple, Tuple))
set_serializer(default_complex_serializer, complex)
set_serializer(default_datetime_serializer, datetime)
set_serializer(default_date_serializer, date)
set_serializer(default_time_serializer, time)
set_serializer(default_timezone_serializer, timezone)
set_serializer(default_timedelta_serializer, timedelta)
set_serializer(default_primitive_serializer, (str, int, float, bool, None))
set_serializer(default_enum_serializer, (Enum, IntEnum))  # must be after primitive_serializer
set_serializer(default_dict_serializer, Mapping, False)
set_serializer(default_list_serializer, (list, List))
set_serializer(default_iterable_serializer, Iterable, False)
set_serializer(default_object_serializer, object, False)
set_serializer(default_uuid_serializer, UUID)
set_serializer(default_decimal_serializer, Decimal)
set_serializer(default_union_serializer, (Union, Optional))
set_serializer(default_path_serializer, PurePath)

set_deserializer(default_list_deserializer, (list, List))
set_deserializer(default_tuple_deserializer, (tuple, Tuple))
set_deserializer(default_union_deserializer, (Union, Optional))
set_deserializer(default_defaultdict_deserializer, DefaultDict)
set_deserializer(default_datetime_deserializer, datetime)
set_deserializer(default_date_deserializer, date)
set_deserializer(default_time_deserializer, time)
set_deserializer(default_timezone_deserializer, timezone)
set_deserializer(default_timedelta_deserializer, timedelta)
set_deserializer(default_string_deserializer, str)
set_deserializer(default_nonetype_deserializer, NoneType)
set_deserializer(default_primitive_deserializer, (int, float, bool))
set_deserializer(default_enum_deserializer, (Enum, IntEnum))  # must be after primitive_deserializer
set_deserializer(default_mapping_deserializer, (Mapping, dict, Dict), False)
set_deserializer(default_iterable_deserializer, Iterable, False)
set_deserializer(default_object_deserializer, object, False)
set_deserializer(default_uuid_deserializer, UUID)
set_deserializer(default_complex_deserializer, complex)
set_deserializer(default_decimal_deserializer, Decimal)
set_deserializer(default_path_deserializer, PurePath)

if default_zone_info_serializer and default_zone_info_deserializer:
    from zoneinfo import ZoneInfo
    __all__.append(default_zone_info_serializer)
    __all__.append(default_zone_info_deserializer)
    set_serializer(default_zone_info_serializer, ZoneInfo)
    set_deserializer(default_zone_info_deserializer, ZoneInfo)
b IDATxytVսϓ22 A@IR :hCiZ[v*E:WũZA ^dQeQ @ !jZ'>gsV仿$|?g)&x-EIENT ;@xT.i%-X}SvS5.r/UHz^_$-W"w)Ɗ/@Z &IoX P$K}JzX:;` &, ŋui,e6mX ԵrKb1ԗ)DADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADA݀!I*]R;I2$eZ#ORZSrr6mteffu*((Pu'v{DIߔ4^pIm'77WEEE;vƎ4-$]'RI{\I&G :IHJ DWBB=\WR޽m o$K(V9ABB.}jѢv`^?IOȅ} ڶmG}T#FJ`56$-ھ}FI&v;0(h;Б38CӧOWf!;A i:F_m9s&|q%=#wZprrrla A &P\\СC[A#! {olF} `E2}MK/vV)i{4BffV\|ۭX`b@kɶ@%i$K z5zhmX[IXZ` 'b%$r5M4º/l ԃߖxhʔ)[@=} K6IM}^5k㏷݆z ΗÿO:gdGBmyT/@+Vɶ纽z񕏵l.y޴it뭷zV0[Y^>Wsqs}\/@$(T7f.InݺiR$푔n.~?H))\ZRW'Mo~v Ov6oԃxz! S,&xm/yɞԟ?'uaSѽb,8GלKboi&3t7Y,)JJ c[nzӳdE&KsZLӄ I?@&%ӟ۶mSMMњ0iؐSZ,|J+N ~,0A0!5%Q-YQQa3}$_vVrf9f?S8`zDADADADADADADADADAdqP,تmMmg1V?rSI꒟]u|l RCyEf٢9 jURbztѰ!m5~tGj2DhG*{H9)꒟ר3:(+3\?/;TUݭʴ~S6lڧUJ*i$d(#=Yݺd{,p|3B))q:vN0Y.jkק6;SɶVzHJJЀ-utѹսk>QUU\޲~]fFnK?&ߡ5b=z9)^|u_k-[y%ZNU6 7Mi:]ۦtk[n X(e6Bb."8cۭ|~teuuw|ήI-5"~Uk;ZicEmN/:]M> cQ^uiƞ??Ңpc#TUU3UakNwA`:Y_V-8.KKfRitv޲* 9S6ֿj,ՃNOMߤ]z^fOh|<>@Å5 _/Iu?{SY4hK/2]4%it5q]GGe2%iR| W&f*^]??vq[LgE_3f}Fxu~}qd-ږFxu~I N>\;͗O֊:̗WJ@BhW=y|GgwܷH_NY?)Tdi'?խwhlmQi !SUUsw4kӺe4rfxu-[nHtMFj}H_u~w>)oV}(T'ebʒv3_[+vn@Ȭ\S}ot}w=kHFnxg S 0eޢm~l}uqZfFoZuuEg `zt~? b;t%>WTkķh[2eG8LIWx,^\thrl^Ϊ{=dž<}qV@ ⠨Wy^LF_>0UkDuʫuCs$)Iv:IK;6ֲ4{^6եm+l3>݆uM 9u?>Zc }g~qhKwڭeFMM~pМuqǿz6Tb@8@Y|jx](^]gf}M"tG -w.@vOqh~/HII`S[l.6nØXL9vUcOoB\xoǤ'T&IǍQw_wpv[kmO{w~>#=P1Pɞa-we:iǏlHo׈꒟f9SzH?+shk%Fs:qVhqY`jvO'ρ?PyX3lх]˾uV{ݞ]1,MzYNW~̈́ joYn}ȚF߾׮mS]F z+EDxm/d{F{-W-4wY듏:??_gPf ^3ecg ҵs8R2מz@TANGj)}CNi/R~}c:5{!ZHӋӾ6}T]G]7W6^n 9*,YqOZj:P?Q DFL|?-^.Ɵ7}fFh׶xe2Pscz1&5\cn[=Vn[ĶE鎀uˌd3GII k;lNmشOuuRVfBE]ۣeӶu :X-[(er4~LHi6:Ѻ@ԅrST0trk%$Č0ez" *z"T/X9|8.C5Feg}CQ%͞ˣJvL/?j^h&9xF`њZ(&yF&Iݻfg#W;3^{Wo^4'vV[[K';+mӍִ]AC@W?1^{එyh +^]fm~iԵ]AB@WTk̏t uR?l.OIHiYyԶ]Aˀ7c:q}ힽaf6Z~қm(+sK4{^6}T*UUu]n.:kx{:2 _m=sAߤU@?Z-Vކеz왍Nэ{|5 pڶn b p-@sPg]0G7fy-M{GCF'%{4`=$-Ge\ eU:m+Zt'WjO!OAF@ik&t݆ϥ_ e}=]"Wz_.͜E3leWFih|t-wZۍ-uw=6YN{6|} |*={Ѽn.S.z1zjۻTH]흾 DuDvmvK.`V]yY~sI@t?/ϓ. m&["+P?MzovVЫG3-GRR[(!!\_,^%?v@ҵő m`Y)tem8GMx.))A]Y i`ViW`?^~!S#^+ѽGZj?Vģ0.))A꨷lzL*]OXrY`DBBLOj{-MH'ii-ϰ ok7^ )쭡b]UXSְmռY|5*cֽk0B7镹%ڽP#8nȎq}mJr23_>lE5$iwui+ H~F`IjƵ@q \ @#qG0".0" l`„.0! ,AQHN6qzkKJ#o;`Xv2>,tێJJ7Z/*A .@fفjMzkg @TvZH3Zxu6Ra'%O?/dQ5xYkU]Rֽkق@DaS^RSּ5|BeHNN͘p HvcYcC5:y #`οb;z2.!kr}gUWkyZn=f Pvsn3p~;4p˚=ē~NmI] ¾ 0lH[_L hsh_ғߤc_њec)g7VIZ5yrgk̞W#IjӪv>՞y睝M8[|]\շ8M6%|@PZڨI-m>=k='aiRo-x?>Q.}`Ȏ:Wsmu u > .@,&;+!!˱tﭧDQwRW\vF\~Q7>spYw$%A~;~}6¾ g&if_=j,v+UL1(tWake:@Ș>j$Gq2t7S?vL|]u/ .(0E6Mk6hiۺzښOrifޱxm/Gx> Lal%%~{lBsR4*}{0Z/tNIɚpV^#Lf:u@k#RSu =S^ZyuR/.@n&΃z~B=0eg뺆#,Þ[B/?H uUf7y Wy}Bwegל`Wh(||`l`.;Ws?V@"c:iɍL֯PGv6zctM̠':wuW;d=;EveD}9J@B(0iհ bvP1{\P&G7D޴Iy_$-Qjm~Yrr&]CDv%bh|Yzni_ˆR;kg}nJOIIwyuL}{ЌNj}:+3Y?:WJ/N+Rzd=hb;dj͒suݔ@NKMԄ jqzC5@y°hL m;*5ezᕏ=ep XL n?מ:r`۵tŤZ|1v`V뽧_csج'ߤ%oTuumk%%%h)uy]Nk[n 'b2 l.=͜E%gf$[c;s:V-͞WߤWh-j7]4=F-X]>ZLSi[Y*We;Zan(ӇW|e(HNNP5[= r4tP &0<pc#`vTNV GFqvTi*Tyam$ߏWyE*VJKMTfFw>'$-ؽ.Ho.8c"@DADADADADADADADADA~j*֘,N;Pi3599h=goضLgiJ5փy~}&Zd9p֚ e:|hL``b/d9p? fgg+%%hMgXosج, ΩOl0Zh=xdjLmhݻoO[g_l,8a]٭+ӧ0$I]c]:粹:Teꢢ"5a^Kgh,&= =՟^߶“ߢE ܹS J}I%:8 IDAT~,9/ʃPW'Mo}zNƍ쨓zPbNZ~^z=4mswg;5 Y~SVMRXUյڱRf?s:w ;6H:ºi5-maM&O3;1IKeamZh͛7+##v+c ~u~ca]GnF'ټL~PPPbn voC4R,ӟgg %hq}@#M4IÇ Oy^xMZx ) yOw@HkN˖-Sǎmb]X@n+i͖!++K3gd\$mt$^YfJ\8PRF)77Wא!Cl$i:@@_oG I{$# 8磌ŋ91A (Im7֭>}ߴJq7ޗt^ -[ԩSj*}%]&' -ɓ'ꫯVzzvB#;a 7@GxI{j޼ƌ.LÇWBB7`O"I$/@R @eee@۷>}0,ɒ2$53Xs|cS~rpTYYY} kHc %&k.], @ADADADADADADADADA@lT<%''*Lo^={رc5h %$+CnܸQ3fҥK}vUVVs9G R,_{xˇ3o߾;TTTd}馛]uuuG~iԩ@4bnvmvfϞ /Peeeq}}za I~,誫{UWW뮻}_~YƍSMMMYχ֝waw\ďcxꩧtEƍկ_?۷5@u?1kNׯWzz/wy>}zj3 k(ٺuq_Zvf̘:~ ABQ&r|!%KҥKgԞ={<_X-z !CyFUUz~ ABQIIIjݺW$UXXDٳZ~ ABQƍecW$<(~<RSSvZujjjԧOZQu@4 8m&&&jԩg$ď1h ͟?_{768@g =@`)))5o6m3)ѣƌJ;wҿUTT /KZR{~a=@0o<*狔iFɶ[ˎ;T]]OX@?K.ۈxN pppppppppppppppppPfl߾] ,{ァk۶mڿo5BTӦMӴiӴ|r DB2e|An!Dy'tkΝ[A $***t5' "!駟oaDnΝ:t֭[gDШQ06qD;@ x M6v(PiizmZ4ew"@̴ixf [~-Fٱc&IZ2|n!?$@{[HTɏ#@hȎI# _m(F /6Z3z'\r,r!;w2Z3j=~GY7"I$iI.p_"?pN`y DD?: _  Gÿab7J !Bx@0 Bo cG@`1C[@0G @`0C_u V1 aCX>W ` | `!<S `"<. `#c`?cAC4 ?c p#~@0?:08&_MQ1J h#?/`7;I  q 7a wQ A 1 Hp !#<8/#@1Ul7=S=K.4Z?E_$i@!1!E4?`P_  @Bă10#: "aU,xbFY1 [n|n #'vEH:`xb #vD4Y hi.i&EΖv#O H4IŶ}:Ikh @tZRF#(tXҙzZ ?I3l7q@õ|ۍ1,GpuY Ꮿ@hJv#xxk$ v#9 5 }_$c S#=+"K{F*m7`#%H:NRSp6I?sIՖ{Ap$I$I:QRv2$Z @UJ*$]<FO4IENDB`