ó i'dWc@sOdZddlmZddlmZmZmZddlmZddl m Z m Z ddl Z ddl mZddlmZmZd „Zd „Zd „Zd „Zd „Zd„Zd„Zd„Zd„Zd„Zd„Zieej6eej6eej6eeej eƒej!6eeej"eƒej#6eeej$eƒej%6eeej&eede'ƒƒej(6eeej)eede'ƒƒej*6eeej+eede,ƒƒej-6eeej.eede,ƒƒej/6eeej0eede,ƒƒej16eeej2eede,ƒƒej36eeej4eede,ƒƒej56eeej6eede,ƒƒej76eeej8eede,ƒƒej96eeej:eede,ƒƒej;6eeej<eede'ƒƒej=6eeej>eede'ƒƒej?6eeej@eede'ƒƒejA6eeejBeede'ƒƒejC6eeejDeede'ƒƒejE6eeejFeede'ƒƒejG6eeejHeede'ƒƒejI6eeejJeede'ƒƒejK6eeejLeƒejM6eeejNeƒejO6eeejPeƒejQ6eejR6ZSdS(s¡ Provide thin wrappers around C functions for adding named values to an nvlist. ADD: each key maps to a function with this signature: function(nvlistp, name, value) -> None value will be checked to be of the right type, e.g. LIST_ADD[DATA_TYPE_BOOLEAN](nvlistp, str, bool) -> None For C funtions that are of DATA_TYPE *_ARRAY, the value being set must be an Iterable of the appropriate type. iÿÿÿÿ(tIterable(tENOMEMtEINVALtENOENT(tpartial(tIntegraltRealN(tnvlistp(tconsttcfunccCstdƒ‚dS(Ns'can't add "DATA_TYPE_UNKNOWN" to nvlist(t RuntimeError(tnvltnametval((s ../add.pytnvl_add_unknown0scCstdƒ‚dS(Ns'can't add "DATA_TYPE_HRTIME" for nvlist(tNotImplementedError(R R R ((s ../add.pytnvl_add_hrtime5scCs÷t|tƒs(tdt|ƒƒ‚n|tkrªtj||ƒ}|dkró|tkrmtdƒ‚n|tkrˆt dƒ‚nt |dt j |ƒƒ‚qónItj ||tjƒ}|dtfkrót |dt j |ƒƒ‚ndS(Nsval: '%s' object is not boolis&nvlist_add_boolean(): invalid arguments)nvlist_add_boolean(): insufficient memorysnvlist_add_boolean(): %s(t isinstancetboolt TypeErrorttypetTrueR tnvlist_add_booleanRRt MemoryErrortOSErrortoststrerrort nvlist_removeRtDATA_TYPE_BOOLEANR(R R R terr((s ../add.pytnvl_add_boolean9s    "csΈr|dp|}ˆr'd| p*d‰d|d‰‡‡‡fd†}t|tƒ sot|tƒr‘tdt|ƒ|ƒfƒ‚nˆ|ko¨ˆknr±|Std||ƒfƒ‚dS(Niiics(ˆrdˆˆdfSdˆdSdS(Ns range(%d, %d)is range(%d)(((tmaximumtminimumtsigned(s ../add.pyt range_strSss"val: '%s' object not integer in %ssval: %d not in %s(RRRRRt ValueError(tbitsR!R R"((RR R!s ../add.pyt chk_integralNscCs,t|tƒs(tdt|ƒƒ‚n|S(Nsval: '%s' object not str(RtstrRR(R ((s ../add.pyt check_stringcscCs>t|tƒs(tdt|ƒƒ‚n|tkr:dp=dS(Nsval: '%s' object not boolii(RRRRR(R ((s ../add.pyt check_booleanjscCsGx@t|tƒsBy |j}Wqtdt|ƒƒ‚qXqW|S(Ns&val: '%s' object not POINTER(nvlist_t)(RRt_as_parameter_RR(R ((s ../add.pyt check_nvlistqs cCsBt|tƒ st|tƒr8tdt|ƒƒ‚nt|ƒS(Nsval: '%s' object not Real(RRRRRtfloat(R ((s ../add.pyt check_double~scCsš||ƒ}||||ƒ}|dkr–|tkrLtd|jƒ‚n|tkrntd|jƒ‚nt|d|jtj|ƒfƒ‚ndS(Nis%s(): invalid arguments%s(): insufficient memorys%s(): %s(RRt__name__RRRRR(t cfunctiontcheckvalR R R tnvalR((s ../add.pytnvl_add_scalar†s    c Csjt|tƒ st|tƒr8tdt|ƒƒ‚ntƒ}xot|ƒD]a\}}y|j||ƒƒWqNttfk r®}t|ƒd|t|ƒfƒ‚qNXqNWt |ƒ} |j dj | } |||| |Œ| ƒ}|dkrf|t krtd|j ƒ‚n|tkr>td|j ƒ‚nt|d|j tj|ƒfƒ‚ndS(Ns)val: '%s' object not collections.Iterablesindex = %d: %siis%s(): invalid arguments%s(): insufficient memorys%s(): %s(RRR&RRtlistt enumeratetappendR#tlentargtypest_type_RR-RRRRR( R.R/R R R tilisttidxtelemRtnelemtcarray((s ../add.pyt nvl_add_array“s& *    cCsUyt|ƒWntk r!nXtdt|ƒƒ‚ttjt|||ƒdS(Ns/val: '%s' object not valid collections.Iterable(R*RRR=R tnvlist_add_nvlist_array(R R R ((s ../add.pytnvl_add_nvlist_array±s iii i@(Tt__doc__t collectionsRterrnoRRRt functoolsRtnumbersRRRtlibnvpair.cstructRt libnvpairRR RRRR%R'R(R*R,R1R=R?tDATA_TYPE_UNKNOWNtDATA_TYPE_HRTIMERtnvlist_add_doubletDATA_TYPE_DOUBLEtnvlist_add_boolean_valuetDATA_TYPE_BOOLEAN_VALUEtnvlist_add_boolean_arraytDATA_TYPE_BOOLEAN_ARRAYtnvlist_add_bytetFalsetDATA_TYPE_BYTEtnvlist_add_byte_arraytDATA_TYPE_BYTE_ARRAYtnvlist_add_int8RtDATA_TYPE_INT8tnvlist_add_int8_arraytDATA_TYPE_INT8_ARRAYtnvlist_add_int16tDATA_TYPE_INT16tnvlist_add_int16_arraytDATA_TYPE_INT16_ARRAYtnvlist_add_int32tDATA_TYPE_INT32tnvlist_add_int32_arraytDATA_TYPE_INT32_ARRAYtnvlist_add_int64tDATA_TYPE_INT64tnvlist_add_int64_arraytDATA_TYPE_INT64_ARRAYtnvlist_add_uint8tDATA_TYPE_UINT8tnvlist_add_uint8_arraytDATA_TYPE_UINT8_ARRAYtnvlist_add_uint16tDATA_TYPE_UINT16tnvlist_add_uint16_arraytDATA_TYPE_UINT16_ARRAYtnvlist_add_uint32tDATA_TYPE_UINT32tnvlist_add_uint32_arraytDATA_TYPE_UINT32_ARRAYtnvlist_add_uint64tDATA_TYPE_UINT64tnvlist_add_uint64_arraytDATA_TYPE_UINT64_ARRAYtnvlist_add_stringtDATA_TYPE_STRINGtnvlist_add_string_arraytDATA_TYPE_STRING_ARRAYtnvlist_add_nvlisttDATA_TYPE_NVLISTtDATA_TYPE_NVLIST_ARRAYtADD(((s ../add.pyt%s¾