U Xzf_b@sdZdZddlZzddlmZWnek r<ddlZYnXejddkrGddde Z Gddde Z ej e ej e nej Z Gd d d e Z ej e Gd d d e ZGd dde ZGddde ZGddde ZGddde ZGddde ZGddde ZdS)aContains container classes to represent different protocol buffer types. This file defines container classes which represent categories of protocol buffer field types which need extra maintenance. Currently these categories are: - Repeated scalar fields - These are all repeated fields which aren't composite (e.g. they are of simple types like int32, string, etc). - Repeated composite fields - Repeated fields which are composite. This includes groups and nested messages. zpetar@google.com (Petar Petrov)Nc@sfeZdZdZdddZddZddZd d Zd d Zd dZ ddZ ddZ dZ ddZ ddZdS)MappingNcCs(z ||WStk r"|YSXdSNKeyErrorselfkeydefaultrr{/private/var/folders/n9/53xbvtmd7sjg1q1l55xmpg58n4mgng/T/pip-unpacked-wheel-3cr5c46n/google/protobuf/internal/containers.pygetLs z Mapping.getcCs,z ||Wntk r"YdSXdSdS)NFTrr r rrr __contains__Rs  zMapping.__contains__cCst|Sr)iterr rrr iterkeysZszMapping.iterkeysccs|D]}||VqdSrrrrrr itervalues]szMapping.itervaluesccs|D]}|||fVqdSrrrrrr iteritemsaszMapping.iteritemscCst|Sr)listrrrr keysesz Mapping.keyscsfddDS)Ncsg|]}||fqSrr.0r rrr isz!Mapping.items..rrrrr itemshsz Mapping.itemscsfddDS)Ncsg|] }|qSrrrrrr rlsz"Mapping.values..rrrrr valueskszMapping.valuescCs(t|tjstSt|t|kSr) isinstancecollections_abcrNotImplementeddictrr otherrrr __eq__qs zMapping.__eq__cCs ||k Srrr rrr __ne__vszMapping.__ne__)N)__name__ __module__ __qualname__ __slots__r rrrrrrr__hash__r"r#rrrr rIs rc@sDeZdZdZeZefddZddZddZdd Z d d d Z d S)MutableMappingrcCs@z ||}Wn$tk r0||jkr(|YSX||=|SdSr)r_MutableMapping__marker)r r r valuerrr pop~s   zMutableMapping.popcCs@ztt|}Wntk r(tYnX||}||=||fSr)nextr StopIterationrr r r+rrr popitems zMutableMapping.popitemcCs(z|qWntk r"YnXdSr)r0rrrrr clearszMutableMapping.clearcOst|dkr tdt|n |s,td|d}t|dkrH|dnd}t|trn|D]}||||<qZnr?)r message_listenerrrr __init__szBaseContainer.__init__cCs |j|S)z$Retrieves item by the specified key.r?rrrr __getitem__szBaseContainer.__getitem__cCs t|jS)z0Returns the number of elements in the container.r4r?rrrr __len__szBaseContainer.__len__cCs ||k S)z3Checks if another instance isn't equal to this one.rr rrr r#szBaseContainer.__ne__cCs tddS)Nzunhashable object)r5rrrr r(szBaseContainer.__hash__cCs t|jSrreprr?rrrr __repr__szBaseContainer.__repr__cOs(d|kr|d|d<|jj||dS)NZ sort_functioncmp)r,r?sort)r r8kwargsrrr rJszBaseContainer.sortN) r$r%r&__doc__r'rArCrEr#r(rHrJrrrr r=s r=cseZdZdZdgZfddZddZddZd d Zd d Z d dZ dddZ ddZ ddZ ddZddZddZddZZS)RepeatedScalarFieldContainerzGSimple, type-checked, list-like container for holding repeated scalars. _type_checkercstt||||_dS)a"Args: message_listener: A MessageListener implementation. The RepeatedScalarFieldContainer will call this object's Modified() method when it is modified. type_checker: A type_checkers.ValueChecker instance to run on elements inserted into this container. N)superrMrArN)r r@Z type_checker __class__rr rAs z%RepeatedScalarFieldContainer.__init__cCs*|j|j||jjs&|jdS)z6Appends an item to the list. Similar to list.append().N)r?appendrN CheckValuer>dirtyModifiedr r+rrr rRsz#RepeatedScalarFieldContainer.appendcCs,|j||j||jjs(|jdS)zEInserts the item at the specified position. Similar to list.insert().N)r?insertrNrSr>rTrUr/rrr rWsz#RepeatedScalarFieldContainer.insertcsj|dkr dSz t|}Wn tk r8|s2YdSYnXfdd|D}|r\j|jdS)zBExtends by appending the given iterable. Similar to list.extend().Ncsg|]}j|qSr)rNrS)relemrrr rsz7RepeatedScalarFieldContainer.extend..)rr5r?extendr>rU)r elem_seqZ elem_seq_iter new_valuesrrr rY s  z#RepeatedScalarFieldContainer.extendcCs|j|j|jdS)zAppends the contents of another repeated field of the same type to this one. We do not check the types of the individual fields. N)r?rYr>rUr rrr MergeFromsz&RepeatedScalarFieldContainer.MergeFromcCs|j||jdSz8Removes an item from the list. Similar to list.remove().Nr?remover>rUr rXrrr r_&s z#RepeatedScalarFieldContainer.removecCs|j|}|||SzDRemoves and returns an item at a given index. Similar to list.pop().r? __delitem__r/rrr r,+s  z RepeatedScalarFieldContainer.popcCsPt|tr0|jdk rtd||j|j|n|j||j |<|j dS)z(Sets the item on the specified position.NzExtended slices not supported) rslicestep ValueError __setslice__startstoprNrSr?r>rUr/rrr __setitem__1s   z(RepeatedScalarFieldContainer.__setitem__cCs|j||SzARetrieves the subset of items from between the specified indices.rBr rirjrrr __getslice__;sz)RepeatedScalarFieldContainer.__getslice__cCs<g}|D]}||j|q||j||<|jdS)zrU)r rirjrr[r+rrr rh?s z)RepeatedScalarFieldContainer.__setslice__cCs|j|=|jdSz+Deletes the item at the specified position.Nr?r>rUrrrr rdGsz(RepeatedScalarFieldContainer.__delitem__cCs|j||=|jdSz?Deletes the subset of items from between the specified indices.Nrprmrrr __delslice__Ls z)RepeatedScalarFieldContainer.__delslice__cCs.||kr dSt||jr$|j|jkS||jkS)/Compares the current instance with another one.T)rrQr?r rrr r"Qs   z#RepeatedScalarFieldContainer.__eq__)ra)r$r%r&rLr'rArRrWrYr\r_r,rkrnrhrdrrr" __classcell__rrrPr rMs   rMcseZdZdZdgZfddZddZddZd d Zd d Z d dZ ddZ dddZ ddZ ddZddZddZZS)RepeatedCompositeFieldContainerzBSimple, list-like container for holding repeated composite fields._message_descriptorcstt||||_dS)a Note that we pass in a descriptor instead of the generated directly, since at the time we construct a _RepeatedCompositeFieldContainer we haven't yet necessarily initialized the type that will be contained in the container. Args: message_listener: A MessageListener implementation. The RepeatedCompositeFieldContainer will call this object's Modified() method when it is modified. message_descriptor: A Descriptor instance describing the protocol type that should be present in this container. We'll use the _concrete_class field of this descriptor when the client calls add(). N)rOrurArv)r r@message_descriptorrPrr rAcsz(RepeatedCompositeFieldContainer.__init__cKs<|jjf|}||j|j||jjs8|j|S)z{Adds a new element at the end of the list and returns it. Keyword arguments may be used to initialize the element. )rv_concrete_class _SetListenerr>r?rRrTrU)r rK new_elementrrr addus    z#RepeatedCompositeFieldContainer.addcCsB|j}||j|||j||jjs>|jdS)z+Appends one element by copying the message.N) rvrxryr>CopyFromr?rRrTrU)r r+rzrrr rRs     z&RepeatedCompositeFieldContainer.appendcCsD|j}||j|||j|||jjs@|jdS)z6Inserts the item at the specified position by copying.N) rvrxryr>r|r?rWrTrU)r r r+rzrrr rWs    z&RepeatedCompositeFieldContainer.insertcCsN|jj}|j}|j}|D](}|}||||||q|dS)z|Extends by appending the given sequence of elements of the same type as this one, copying each individual message. N)rvrxr>r?ryr\rRrU)r rZZ message_classZlistenerrmessagerzrrr rYs   z&RepeatedCompositeFieldContainer.extendcCs||jdS)zvAppends the contents of another repeated field of the same type to this one, copying each individual message. N)rYr?r rrr r\sz)RepeatedCompositeFieldContainer.MergeFromcCs|j||jdSr]r^r`rrr r_s z&RepeatedCompositeFieldContainer.removeracCs|j|}|||Srbrcr/rrr r,s  z#RepeatedCompositeFieldContainer.popcCs|j||SrlrBrmrrr rnsz,RepeatedCompositeFieldContainer.__getslice__cCs|j|=|jdSrorprrrr rdsz+RepeatedCompositeFieldContainer.__delitem__cCs|j||=|jdSrqrprmrrr rrs z,RepeatedCompositeFieldContainer.__delslice__cCs,||kr dSt||js td|j|jkS)rsTzSCan only compare repeated composite fields against other repeated composite fields.)rrQr5r?r rrr r"s  z&RepeatedCompositeFieldContainer.__eq__)ra)r$r%r&rLr'rAr{rRrWrYr\r_r,rnrdrrr"rtrrrPr ru\s     ruc@seZdZdZdddddgZddZd d Zd d Zd"ddZddZ ddZ ddZ ddZ ddZ ddZddZddZd d!Zd S)# ScalarMapzGSimple, type-checked, dict-like container for holding repeated scalars. _key_checker_value_checkerr?r>_entry_descriptorcCs"||_||_||_||_i|_dSa Args: message_listener: A MessageListener implementation. The ScalarMap will call this object's Modified() method when it is modified. key_checker: A type_checkers.ValueChecker instance to run on keys inserted into this container. value_checker: A type_checkers.ValueChecker instance to run on values inserted into this container. entry_descriptor: The MessageDescriptor of a map entry: key and value. N)r>rrrr?)r r@ key_checkerZ value_checkerentry_descriptorrrr rAs zScalarMap.__init__cCsJz |j|WStk rD|j|}|j}||j|<|YSXdSr)r?rrrSrZ DefaultValue)r r valrrr rCs    zScalarMap.__getitem__cCs|j|||jkSrrrSr?r itemrrr rs zScalarMap.__contains__NcCs||kr||S|SdSrrrrrr r sz ScalarMap.getcCs0|j|}|j|}||j|<|jdSr)rrSrr?r>rU)r r r+Z checked_keyZ checked_valuerrr rks   zScalarMap.__setitem__cCs|j|=|jdSrrprrrr rdszScalarMap.__delitem__cCs t|jSrrDrrrr rEszScalarMap.__len__cCs t|jSrrr?rrrr __iter__ szScalarMap.__iter__cCs t|jSrrFrrrr rH szScalarMap.__repr__cCs|j|j|jdSr)r?r:r>rUr rrr r\szScalarMap.MergeFromcCs|j}||_d|d<dSrr?copyr originalrrr InvalidateIteratorss zScalarMap.InvalidateIteratorscCs|j|jdSrr?r1r>rUrrrr r1s zScalarMap.clearcCs|jjSrrrxrrrr GetEntryClass szScalarMap.GetEntryClass)N)r$r%r&rLr'rArCrr rkrdrErrHr\rr1rrrrr r~s"  r~c@seZdZdZdddddgZddZd d Zd d Zd$ddZddZ ddZ ddZ ddZ ddZ ddZddZddZd d!Zd"d#Zd S)% MessageMapzESimple, type-checked, dict-like container for with submessage values.rr?r>rvrcCs"||_||_||_||_i|_dSr)r>rvrrr?)r r@rwrrrrr rA,s zMessageMap.__init__cCs`|j|}z |j|WStk rZ|j}||j||j|<|j|YSXdSr) rrSr?rrvrxryr>rU)r r rzrrr rC?s      zMessageMap.__getitem__cCs||S)aaget_or_create() is an alias for getitem (ie. map[key]). Args: key: The key to get or create in the map. This is useful in cases where you want to be explicit that the call is mutating the map. This can avoid lint errors for statements like this that otherwise would appear to be pointless statements: msg.my_map[key] rrrrr get_or_createKs zMessageMap.get_or_createNcCs||kr||S|SdSrrrrrr r \szMessageMap.getcCs|j|}||jkSrrrrrr rbs zMessageMap.__contains__cCs tddS)Nz5May not set values directly, call my_map[key].foo = 5)rgr/rrr rkfszMessageMap.__setitem__cCs"|j|}|j|=|jdSr)rrSr?r>rUrrrr rdis zMessageMap.__delitem__cCs t|jSrrDrrrr rEnszMessageMap.__len__cCs t|jSrrrrrr rqszMessageMap.__iter__cCs t|jSrrFrrrr rHtszMessageMap.__repr__cCs.|D]$}||kr||=||||qdSr)r|)r r!r rrr r\wszMessageMap.MergeFromcCs|j}||_d|d<dSrrrrrr rs zMessageMap.InvalidateIteratorscCs|j|jdSrrrrrr r1s zMessageMap.clearcCs|jjSrrrrrr rszMessageMap.GetEntryClass)N)r$r%r&rLr'rArCrr rrkrdrErrHr\rr1rrrrr r$s&   rc@s2eZdZdZdddgZddZddZd d Zd S) _UnknownFieldzA parsed unknown field. _field_number _wire_type_datacCs||_||_||_dSrrrr)r field_number wire_typedatarrr rAsz_UnknownField.__init__cCs |j|jkSr)rr rrr __lt__sz_UnknownField.__lt__cCs0||kr dS|j|jko.|j|jko.|j|jkSNTrr rrr r"s   z_UnknownField.__eq__N)r$r%r&rLr'rArr"rrrr rs  rc@s@eZdZddZddZeddZeddZed d Zd S) UnknownFieldRefcCs||_||_dSr)_parent_index)r parentindexrrr rAszUnknownFieldRef.__init__cCs*|jstd|jt|jkr&tddS)NzAUnknownField does not exist. The parent message might be cleared.)rrgrr4rrrr _check_validszUnknownFieldRef._check_validcCs||j|jjSr)rr _internal_getrrrrrr rszUnknownFieldRef.field_numbercCs||j|jjSr)rrrrrrrrr rszUnknownFieldRef.wire_typecCs||j|jjSr)rrrrrrrrr rszUnknownFieldRef.dataN) r$r%r&rArpropertyrrrrrrr rs  rc@s^eZdZdZdgZddZddZddZd d Zd d Z d dZ ddZ ddZ ddZ dS)UnknownFieldSetzUnknownField containerr?cCs g|_dSrrBrrrr rAszUnknownFieldSet.__init__cCsP|jdkrtdt|j}|dkr,||7}|dks<||krFtdjt||S)NBUnknownFields does not exist. The parent message might be cleared.rzindex %d out of range)r?rgr4 IndexErrorrr)r rsizerrr rCs   zUnknownFieldSet.__getitem__cCs |j|SrrB)r rrrr rszUnknownFieldSet._internal_getcCs|jdkrtdt|jS)Nr)r?rgr4rrrr rEs zUnknownFieldSet.__len__cCst|||}|j||Sr)rr?rR)r rrrZ unknown_fieldrrr _adds  zUnknownFieldSet._addccs"tt|D]}t||Vq dSr)ranger4r)r irrr rszUnknownFieldSet.__iter__cCs|dkr dS|j|jdSr)r?rYr rrr _extendszUnknownFieldSet._extendcCs>||kr dSt|j}|dkr$| S|t|j}||kSr)rr?rJsorted)r r!rZ other_valuesrrr r"s  zUnknownFieldSet.__eq__cCs,|jD]}t|jtr|jqd|_dSr)r?rrr_clearrVrrr rs   zUnknownFieldSet._clearN)r$r%r&rLr'rArCrrErrrr"rrrrr rs  r)rL __author__syscollections.abcabcr ImportError collections version_infor<rr)registerr=MutableSequencerMrur~rrrrrrrr s* 0< - nnZm"