o ?Og-@sT ddlZddlZddlZddlZddgZdZ 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/python310/lib64/python3.10/dbm/dumb.py__init__0s     z_Database.__init__c Cs|dkr|j|j|jfD]}zt|Wq tyYq wz tj|jddd}Wn0tyZ|dvr6tj|jddd}||jWdYdS1sRwYYdSw| dS)NnrLatin-1encodingrrw) r r r _osremoveOSError_ior_chmodclose)rrfilenamefrrrr Is"  & z_Database._createcCsd|_i|_z tj|jddd}Wnty#|dvrd|_YdSw|#|D]}|}t|\}}| d}||j|<q)WddS1sLwYdS)NFrrrrT) _modifiedr rrr rrstrip_astZ literal_evalencode)rrr"linekeypos_and_siz_pairrrrr\s"    "z_Database._updatecCs|jdus|js dSz |j|jWn tyYnwz |j|j|jWn ty1Ynw|jj |jddd'}| |j|j D]\}}d| d|f}| |qHWddS1sfwYdS)Nrrr%r, %r )r r#runlinkr rrenamer rrritemsdecodewrite)rr"r(r)entryrrr_commitps&    "z_Database._commitcCs|jdur tddSN"DBM object has already been closed)r rrrrr _verify_opens z_Database._verify_opencCsrt|tr |d}||j|\}}t|jd}||| |}Wd|S1s2wY|S)Nutf-8rb) isinstancestrr&r5r rrr seekread)rr(possizr"Zdatrrr __getitem__s     z_Database.__getitem__cCst|jd.}|ddt|}|tdtt}|d|||}||Wdn1s8wY|t|fS)Nrb+r) rrr r:inttell _BLOCKSIZEr/len)rvalr"r<Znposrrr_addvals    z_Database._addvalcCsNt|jd}||||Wdn1swY|t|fS)Nr?)rrr r:r/rF)rr<rGr"rrr_setvals    z_Database._setvalcCsf||j|<tj|jddd}||j|d|d|fWddS1s,wYdS)Narrr*)r rrr rr/r.)rr(r)r"rrr_addkeys  "z_Database._addkeycCs|jrtdt|tr|d}n t|ttfstdt|tr(|d}n t|ttfs3td|d|_ ||j vrJ| || |dS|j |\}}|t dt }t|t dt }||krr||||j |<dS| ||j |<dS)N'The database is opened for reading onlyr6zkeys must be bytes or stringszvalues must be bytes or stringsTrA)rrr8r9r&bytes bytearray TypeErrorr5r#r rKrHrErFrI)rr(rGr<r=Z oldblocksZ newblocksrrr __setitem__s(     z_Database.__setitem__cCsD|jrtdt|tr|d}|d|_|j|=|dS)NrLr6T) rrr8r9r&r5r#r r1rr(rrr __delitem__s   z_Database.__delitem__cC&zt|jWStytddwr2)listr rOrr4rrrkeys    z_Database.keyscs fddjDS)Ncsg|]}||fqSrr).0r(r4rr sz#_Database.items..)r5r rUr4rr4rr-sz_Database.itemscCsFt|tr |d}z||jvWSty"|jdur!tddw)Nr6r3)r8r9r&r rOrrQrrr __contains__s      z_Database.__contains__cCrSr2)iterr rOrr4rrriterkeysrVz_Database.iterkeyscCrSr2)rFr rOrr4rrr__len__ rVz_Database.__len__c CsBz|Wd|_|_|_|_dSd|_|_|_|_wN)r1r r r r r4rrrr s 6z_Database.closecCs|j||jdSr])rchmodr)rfilerrrrsz_Database._chmodcCs|Sr]rr4rrr __enter__sz_Database.__enter__cGs |dSr])r )rargsrrr__exit__s z_Database.__exit__N)r)__name__ __module__ __qualname__rrrr rr1syncr5r>rHrIrKrPrRrUr-rYr[__iter__r\r __del__rr`rbrrrrr#s4   %  rrcCsV z td}t|Wn tyYnw||@}|dvr$tdt|||dS)Nr)rrrrz)Flag must be one of 'r', 'w', 'c', or 'n')r)rumaskAttributeError ValueErrorr)r_rrZumrrrr"s   )rri)astr%iorosrZcollections.abc collections__all__rErrabcMutableMappingrrrrrrs