B $j@sRddlZddlZddlZddlZddgZdZ e Z Gdddej j Zd d dZdS) Nerroropenic@seZdZeZeZd+ddZddZddZdd ZeZ d d Z d d Z ddZ ddZ ddZddZddZddZddZddZddZeZd d!Zd"d#ZeZd$d%Zd&d'Zd(d)Zd*S), _DatabaseccCsL||_|dk|_|d|_|d|_|d|_d|_||||dS)Nrz.dirz.datz.bak)_mode _readonly_dirfile_datfile_bakfile_index_create_update)selfZ filebasenamemodeflagr+/opt/alt/python37/lib/python3.7/dbm/dumb.py__init__0s     z_Database.__init__c Cs|dkrFx<|j|j|jfD](}yt|Wqtk r@YqXqWytj|jddd}Wn^tk r|dkrddl}|j dt dd tj|jd dd}| |jWdQRXYn X| dS) NnrzLatin-1)encoding)rrrzIThe database file is missing, the semantics of the 'c' flag will be used.) stacklevelw) r r r _osremoveOSError_iorwarningswarnDeprecationWarning_chmodclose)rrfilenamefrrrrr Is   z_Database._createc Csi|_ytj|jddd}Wn>tk rZ|j |_|dkrVddl}|jdt ddYnPXd |_|>x6|D].}| }t |\}}| d}||j|<qnWWdQRXdS) NrzLatin-1)r)rrrzFThe index file is missing, the semantics of the 'c' flag will be used.r)rF)r rrr rr _modifiedrrr rstrip_astZ literal_evalencode)rrr$rlinekeypos_and_siz_pairrrrr_s    z_Database._updatec Cs|jdks|jsdSy|j|jWntk r:YnXy|j|j|jWntk rfYnX|jj |jdddF}| |jx2|j D]$\}}d| d|f}| |qWWdQRXdS)NrzLatin-1)rz%r, %r )r r%runlinkr rrenamer rrr!itemsdecodewrite)rr$r*r+entryrrr_commitvs z_Database._commitcCs|jdkrtddS)Nz"DBM object has already been closed)r r)rrrr _verify_opens z_Database._verify_openc Cs\t|tr|d}||j|\}}t|jd}||| |}WdQRX|S)Nzutf-8rb) isinstancestrr(r3r rrr seekread)rr*possizr$Zdatrrr __getitem__s   z_Database.__getitem__c Csrt|jdR}|ddt|}|tdtt}|d|||}||WdQRX|t|fS)Nzrb+r) rrr r7inttell _BLOCKSIZEr0len)rvalr$r9Znposrrr_addvals  z_Database._addvalc Cs:t|jd}||||WdQRX|t|fS)Nzrb+)rrr r7r0rB)rr9rCr$rrr_setvals z_Database._setvalc CsP||j|<tj|jddd*}||j|d|d|fWdQRXdS)NazLatin-1)rz%r, %r )r rrr r!r0r/)rr*r+r$rrr_addkeys  z_Database._addkeycCs|jrddl}|jdtddt|tr4|d}nt|ttfsJt dt|tr`|d}nt|ttfsvt d| d|_ ||j kr| |||n^|j |\}}|td t}t|td t}||kr||||j |<n|||j |<dS) Nrz'The database is opened for reading onlyr<)rzutf-8zkeys must be bytes or stringszvalues must be bytes or stringsTr=)rrrr r5r6r(bytes bytearray TypeErrorr3r%r rGrDrArBrE)rr*rCrr9r:Z oldblocksZ newblocksrrr __setitem__s,      z_Database.__setitem__cCsT|jrddl}|jdtddt|tr2|d}|d|_|j |=| dS)Nrz'The database is opened for reading onlyr<)rzutf-8T) rrrr r5r6r(r3r%r r2)rr*rrrr __delitem__s   z_Database.__delitem__cCs.y t|jStk r(tddYnXdS)Nz"DBM object has already been closed)listr rJr)rrrrkeyss z_Database.keyscs fddjDS)Ncsg|]}||fqSrr).0r*)rrr sz#_Database.items..)r3r rN)rr)rrr.sz_Database.itemscCsPt|tr|d}y ||jkStk rJ|jdkrDtddnYnXdS)Nzutf-8z"DBM object has already been closed)r5r6r(r rJr)rr*rrr __contains__s     z_Database.__contains__cCs.y t|jStk r(tddYnXdS)Nz"DBM object has already been closed)iterr rJr)rrrriterkeys s z_Database.iterkeyscCs.y t|jStk r(tddYnXdS)Nz"DBM object has already been closed)rBr rJr)rrrr__len__s z_Database.__len__c Cs,z |Wdd|_|_|_|_XdS)N)r2r r r r )rrrrr"s z_Database.closecCs t|jdr|j||jdS)Nchmod)hasattrrrUr)rfilerrrr!"s z_Database._chmodcCs|S)Nr)rrrr __enter__&sz_Database.__enter__cGs |dS)N)r")rargsrrr__exit__)sz_Database.__exit__N)r)__name__ __module__ __qualname__rrrr rr2syncr3r;rDrErGrKrLrNr.rQrS__iter__rTr"__del__r!rXrZrrrrr#s2   ' rrcCsfytd}t|Wntk r,Yn X||@}|dkrXddl}|jdtddt|||dS)Nr)rrrrz)Flag must be one of 'r', 'w', 'c', or 'n'r<)r)r)rumaskAttributeErrorrrr r)rWrrZumrrrrr-s   )rra)Zastr'iorosrZcollections.abc collections__all__rArrabcMutableMappingrrrrrrs