ÿØÿà JFIF    ÿÛ „ ( %!1!%*+...983,7(-.- __pycache__/__init__.cpython-36.opt-2.pyc000064400000004264152343230650014112 0ustar003 \ @sdddgZddlZddlZddlZddlZGdddeZdddgZdaiZ ee fZydd l m Z Wne k r|dZ YnXdd dZd dZedkrx(ejddD]ZeeepdeqWdS)openwhichdberrorNc@s eZdZdS)rN)__name__ __module__ __qualname__rr$/usr/lib64/python3.6/dbm/__init__.pyr&szdbm.gnuzdbm.ndbmzdbm.dumb)ndbmrc Cstdkr`xFtD]>}yt|dgd}Wntk r:wYnXtsD|a|t|<qWts`tdtd|krpt|nd}|dkrd|ksd|krt}qtddn:|dkrtdd n$|tkrtdd j|nt|}|j|||S) Nr)fromlistzno dbm clone found; tried %sncrz#need 'c' or 'n' flag to open new dbzdb type could not be determinedz/db type is {0}, but the module is not available) _defaultmod_names __import__ ImportError_modulesrrformatr)fileflagmodenamemodresultrrr r5s.      c>Csy4tj|dd}|jtj|dd}|jdStk ry:tj|dd}|jtdk r|tj|}|jdSWntk rYnXYnXy`tj|dtj|dj}|dkrdStj|dd}z|jd dkrdSWd|jXWntk rYnXytj|d}Wntk r8dSX||jd }WdQRX|dd }t |d krrdSyt j d|\}Wnt j k rdSX|dkrdSyt j d|dd\}Wnt j k rdSXdS)Nz.pagrbz.dirzdbm.ndbmz.dbz.datrzdbm.dumb'"rz=lΚW͚WϚWzdbm.gnu)rr )r#r$r%) iorcloseOSErrorr osstatst_sizereadlenstructZunpackr)filenamefdsizeZs16smagicrrr ras`    __main__rZUNKNOWN)r r )__all__r'r*r/sys Exceptionrrrrr)Zdbmr rrrrargvr0printrrrr s$    ,Y__pycache__/gnu.cpython-36.pyc000064400000000305152343230650012174 0ustar003 \H@sdZddlTdS)z,Provide the _gdbm module as a dbm submodule.)*N)__doc__Z_gdbmrr/usr/lib64/python3.6/dbm/gnu.pys__pycache__/dumb.cpython-36.opt-2.pyc000064400000015414152343230650013301 0ustar003 \.@sPddlZddlZddlZddlZddgZdZe Z Gdddej Z d d dZ dS) Nerroropenic@seZdZeZeZd+ddZddZddZdd ZeZ d d Z d d Z ddZ ddZ ddZddZddZddZddZddZddZeZd d!Zd"d#ZeZd$d%Zd&d'Zd(d)Zd*S), _DatabaseccCsJ||_|dk|_|d|_|d|_|d|_d|_|j||jdS)Nrz.dirz.datz.bak)_mode _readonly_dirfile_datfile_bakfile_index_create_update)selfZ filebasenamemodeflagr /usr/lib64/python3.6/dbm/dumb.py__init__0s     z_Database.__init__cCs|dkrFx<|j|j|jfD](}ytj|Wqtk r@YqXqWytj|jddd}Wn^tk r|d krddl}|j dt dd tj|jd dd}|j |jWdQRXYn X|j dS) NnrzLatin-1)encodingrrzIThe database file is missing, the semantics of the 'c' flag will be used.) stacklevelw)rr) r r r _osremoveOSError_iorwarningswarnDeprecationWarning_chmodclose)rrfilenamefrrrrr Is   z_Database._createcCsi|_ytj|jddd}Wntk r:|j |_YnPXd|_|>x6|D].}|j}tj |\}}|j d}||j|<qNWWdQRXdS)NrzLatin-1)rF) r rrr rr _modifiedrstrip_astZ literal_evalencode)rr$linekeypos_and_siz_pairrrrr_s  z_Database._updatecCs|jdks|j rdSy|jj|jWntk r<YnXy|jj|j|jWntk rhYnX|jj |jdddF}|j |jx2|jj D]$\}}d|j d|f}|j |qWWdQRXdS)NrzLatin-1)rz%r, %r )r r%runlinkr rrenamer rrr!itemsdecodewrite)rr$r*r+entryrrr_commitqs z_Database._commitcCs|jdkrtddS)Nz"DBM object has already been closed)r r)rrrr _verify_opens z_Database._verify_openc Cs\t|tr|jd}|j|j|\}}tj|jd}|j||j |}WdQRX|S)Nzutf-8rb) isinstancestrr(r3r rrr seekread)rr*possizr$Zdatrrr __getitem__s   z_Database.__getitem__c Csrtj|jdR}|jddt|j}|tdtt}|jd|||}|j|WdQRX|t|fS)Nzrb+r) rrr r7inttell _BLOCKSIZEr0len)rvalr$r9Znposrrr_addvals  z_Database._addvalc Cs:tj|jd}|j||j|WdQRX|t|fS)Nzrb+)rrr r7r0rB)rr9rCr$rrr_setvals z_Database._setvalc CsP||j|<tj|jddd*}|j|j|jd|jd|fWdQRXdS)NazLatin-1)rz%r, %r )r rrr r!r0r/)rr*r+r$rrr_addkeys  z_Database._addkeycCs|jrddl}|jdtddt|tr4|jd}nt|ttfsJt dt|tr`|jd}nt|ttfsvt d|j d|_ ||j kr|j ||j|n^|j |\}}|td t}t|td t}||kr|j|||j |<n|j||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|jd}|jd|_|j |=|j dS)Nrz'The database is opened for reading onlyr<)rzutf-8T) rrrr r5r6r(r3r%r r2)rr*rrrr __delitem__s   z_Database.__delitem__c Cs.y t|jStk r(tddYnXdS)Nz"DBM object has already been closed)listr rJr)rrrrkeyss z_Database.keyscs jfddjjDS)Ncsg|]}||fqSrr).0r*)rrr sz#_Database.items..)r3r rN)rr)rrr.sz_Database.itemsc CsPt|tr|jd}y ||jkStk rJ|jdkrDtddnYnXdS)Nzutf-8z"DBM object has already been closed)r5r6r(r rJr)rr*rrr __contains__s     z_Database.__contains__c Cs.y t|jStk r(tddYnXdS)Nz"DBM object has already been closed)iterr rJr)rrrriterkeyss z_Database.iterkeysc Cs.y t|jStk r(tddYnXdS)Nz"DBM object has already been closed)rBr rJr)rrrr__len__s z_Database.__len__c Cs,z |jWdd|_|_|_|_XdS)N)r2r r r r )rrrrr"s z_Database.closecCs t|jdr|jj||jdS)Nchmod)hasattrrrUr)rfilerrrr!s z_Database._chmodcCs|S)Nr)rrrr __enter__!sz_Database.__enter__cGs |jdS)N)r")rargsrrr__exit__$sz_Database.__exit__N)r)__name__ __module__ __qualname__rrrr rr2syncr3r;rDrErGrKrLrNr.rQrS__iter__rTr"__del__r!rXrZrrrrr#s2   ' rrc Csfytjd}tj|Wntk r,Yn X||@}|d krXddl}|jdtddt|||d S) Nrrrrrz)Flag must be one of 'r', 'w', 'c', or 'n'r<)r)r)rrrr)rumaskAttributeErrorrrr r)rWrrZumrrrrr(s   )rra)Zastr'iorosr collections__all__rArrMutableMappingrrrrrrs__pycache__/ndbm.cpython-36.opt-2.pyc000064400000000210152343230650013256 0ustar003 \F@s ddlTdS))*N)Z_dbmrr /usr/lib64/python3.6/dbm/ndbm.pys__pycache__/ndbm.cpython-36.opt-1.pyc000064400000000304152343230650013261 0ustar003 \F@sdZddlTdS)z+Provide the _dbm module as a dbm submodule.)*N)__doc__Z_dbmrr /usr/lib64/python3.6/dbm/ndbm.pys__pycache__/dumb.cpython-36.pyc000064400000020027152343230650012335 0ustar003 \.@sTdZddlZddlZddlZddlZddgZdZ e Z Gdddej Z d d dZdS) aA dumb and slow but simple dbm clone. For database spam, spam.dir contains the index (a text file), spam.bak *may* contain a backup of the index (also a text file), while spam.dat contains the data (a binary file). XXX TO DO: - seems to contain a bug when updating... - reclaim free space (currently, space once occupied by deleted or expanded items is never reused) - support concurrent access (currently, if two processes take turns making updates, they can mess up the index) - support efficient access to large databases (currently, the whole index is read when the database is opened, and some updates rewrite the whole index) - support opening for read-only (flag = 'm') Nerroropenic@seZdZeZeZd+ddZddZddZdd ZeZ d d Z d d Z ddZ ddZ ddZddZddZddZddZddZddZeZd d!Zd"d#ZeZd$d%Zd&d'Zd(d)Zd*S), _DatabaseccCsJ||_|dk|_|d|_|d|_|d|_d|_|j||jdS)Nrz.dirz.datz.bak)_mode _readonly_dirfile_datfile_bakfile_index_create_update)selfZ filebasenamemodeflagr /usr/lib64/python3.6/dbm/dumb.py__init__0s     z_Database.__init__cCs|dkrFx<|j|j|jfD](}ytj|Wqtk r@YqXqWytj|jddd}Wn^tk r|d krddl}|j dt dd tj|jd dd}|j |jWdQRXYn X|j dS) NnrzLatin-1)encodingrrzIThe database file is missing, the semantics of the 'c' flag will be used.) stacklevelw)rr) r r r _osremoveOSError_iorwarningswarnDeprecationWarning_chmodclose)rrfilenamefrrrrr Is   z_Database._createcCsi|_ytj|jddd}Wntk r:|j |_YnPXd|_|>x6|D].}|j}tj |\}}|j d}||j|<qNWWdQRXdS)NrzLatin-1)rF) r rrr rr _modifiedrstrip_astZ literal_evalencode)rr$linekeypos_and_siz_pairrrrr_s  z_Database._updatecCs|jdks|j rdSy|jj|jWntk r<YnXy|jj|j|jWntk rhYnX|jj |jdddF}|j |jx2|jj D]$\}}d|j d|f}|j |qWWdQRXdS)NrzLatin-1)rz%r, %r )r r%runlinkr rrenamer rrr!itemsdecodewrite)rr$r*r+entryrrr_commitqs z_Database._commitcCs|jdkrtddS)Nz"DBM object has already been closed)r r)rrrr _verify_opens z_Database._verify_openc Cs\t|tr|jd}|j|j|\}}tj|jd}|j||j |}WdQRX|S)Nzutf-8rb) isinstancestrr(r3r rrr seekread)rr*possizr$Zdatrrr __getitem__s   z_Database.__getitem__c Csrtj|jdR}|jddt|j}|tdtt}|jd|||}|j|WdQRX|t|fS)Nzrb+r) rrr r7inttell _BLOCKSIZEr0len)rvalr$r9Znposrrr_addvals  z_Database._addvalc Cs:tj|jd}|j||j|WdQRX|t|fS)Nzrb+)rrr r7r0rB)rr9rCr$rrr_setvals z_Database._setvalc CsP||j|<tj|jddd*}|j|j|jd|jd|fWdQRXdS)NazLatin-1)rz%r, %r )r rrr r!r0r/)rr*r+r$rrr_addkeys  z_Database._addkeycCs|jrddl}|jdtddt|tr4|jd}nt|ttfsJt dt|tr`|jd}nt|ttfsvt d|j d|_ ||j kr|j ||j|n^|j |\}}|td t}t|td t}||kr|j|||j |<n|j||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|jd}|jd|_|j |=|j dS)Nrz'The database is opened for reading onlyr<)rzutf-8T) rrrr r5r6r(r3r%r r2)rr*rrrr __delitem__s   z_Database.__delitem__c Cs.y t|jStk r(tddYnXdS)Nz"DBM object has already been closed)listr rJr)rrrrkeyss z_Database.keyscs jfddjjDS)Ncsg|]}||fqSrr).0r*)rrr sz#_Database.items..)r3r rN)rr)rrr.sz_Database.itemsc CsPt|tr|jd}y ||jkStk rJ|jdkrDtddnYnXdS)Nzutf-8z"DBM object has already been closed)r5r6r(r rJr)rr*rrr __contains__s     z_Database.__contains__c Cs.y t|jStk r(tddYnXdS)Nz"DBM object has already been closed)iterr rJr)rrrriterkeyss z_Database.iterkeysc Cs.y t|jStk r(tddYnXdS)Nz"DBM object has already been closed)rBr rJr)rrrr__len__s z_Database.__len__c Cs,z |jWdd|_|_|_|_XdS)N)r2r r r r )rrrrr"s z_Database.closecCs t|jdr|jj||jdS)Nchmod)hasattrrrUr)rfilerrrr!s z_Database._chmodcCs|S)Nr)rrrr __enter__!sz_Database.__enter__cGs |jdS)N)r")rargsrrr__exit__$sz_Database.__exit__N)r)__name__ __module__ __qualname__rrrr rr2syncr3r;rDrErGrKrLrNr.rQrS__iter__rTr"__del__r!rXrZrrrrr#s2   ' rrc Csfytjd}tj|Wntk r,Yn X||@}|d krXddl}|jdtdd t|||d S) aEOpen the database file, filename, and return corresponding object. The flag argument, used to control how the database is opened in the other DBM implementations, supports only the semantics of 'c' and 'n' values. Other values will default to the semantics of 'c' value: the database will always opened for update and will be created if it does not exist. The optional mode argument is the UNIX mode of the file, used only when the database has to be created. It defaults to octal code 0o666 (and will be modified by the prevailing umask). rrrrrNz)Flag must be one of 'r', 'w', 'c', or 'n'r<)r)r)rrrr)rumaskAttributeErrorrrr r)rWrrZumrrrrr(s   )rra)__doc__Zastr'iorosr collections__all__rArrMutableMappingrrrrrrs__pycache__/dumb.cpython-36.opt-1.pyc000064400000020027152343230650013274 0ustar003 \.@sTdZddlZddlZddlZddlZddgZdZ e Z Gdddej Z d d dZdS) aA dumb and slow but simple dbm clone. For database spam, spam.dir contains the index (a text file), spam.bak *may* contain a backup of the index (also a text file), while spam.dat contains the data (a binary file). XXX TO DO: - seems to contain a bug when updating... - reclaim free space (currently, space once occupied by deleted or expanded items is never reused) - support concurrent access (currently, if two processes take turns making updates, they can mess up the index) - support efficient access to large databases (currently, the whole index is read when the database is opened, and some updates rewrite the whole index) - support opening for read-only (flag = 'm') Nerroropenic@seZdZeZeZd+ddZddZddZdd ZeZ d d Z d d Z ddZ ddZ ddZddZddZddZddZddZddZeZd d!Zd"d#ZeZd$d%Zd&d'Zd(d)Zd*S), _DatabaseccCsJ||_|dk|_|d|_|d|_|d|_d|_|j||jdS)Nrz.dirz.datz.bak)_mode _readonly_dirfile_datfile_bakfile_index_create_update)selfZ filebasenamemodeflagr /usr/lib64/python3.6/dbm/dumb.py__init__0s     z_Database.__init__cCs|dkrFx<|j|j|jfD](}ytj|Wqtk r@YqXqWytj|jddd}Wn^tk r|d krddl}|j dt dd tj|jd dd}|j |jWdQRXYn X|j dS) NnrzLatin-1)encodingrrzIThe database file is missing, the semantics of the 'c' flag will be used.) stacklevelw)rr) r r r _osremoveOSError_iorwarningswarnDeprecationWarning_chmodclose)rrfilenamefrrrrr Is   z_Database._createcCsi|_ytj|jddd}Wntk r:|j |_YnPXd|_|>x6|D].}|j}tj |\}}|j d}||j|<qNWWdQRXdS)NrzLatin-1)rF) r rrr rr _modifiedrstrip_astZ literal_evalencode)rr$linekeypos_and_siz_pairrrrr_s  z_Database._updatecCs|jdks|j rdSy|jj|jWntk r<YnXy|jj|j|jWntk rhYnX|jj |jdddF}|j |jx2|jj D]$\}}d|j d|f}|j |qWWdQRXdS)NrzLatin-1)rz%r, %r )r r%runlinkr rrenamer rrr!itemsdecodewrite)rr$r*r+entryrrr_commitqs z_Database._commitcCs|jdkrtddS)Nz"DBM object has already been closed)r r)rrrr _verify_opens z_Database._verify_openc Cs\t|tr|jd}|j|j|\}}tj|jd}|j||j |}WdQRX|S)Nzutf-8rb) isinstancestrr(r3r rrr seekread)rr*possizr$Zdatrrr __getitem__s   z_Database.__getitem__c Csrtj|jdR}|jddt|j}|tdtt}|jd|||}|j|WdQRX|t|fS)Nzrb+r) rrr r7inttell _BLOCKSIZEr0len)rvalr$r9Znposrrr_addvals  z_Database._addvalc Cs:tj|jd}|j||j|WdQRX|t|fS)Nzrb+)rrr r7r0rB)rr9rCr$rrr_setvals z_Database._setvalc CsP||j|<tj|jddd*}|j|j|jd|jd|fWdQRXdS)NazLatin-1)rz%r, %r )r rrr r!r0r/)rr*r+r$rrr_addkeys  z_Database._addkeycCs|jrddl}|jdtddt|tr4|jd}nt|ttfsJt dt|tr`|jd}nt|ttfsvt d|j d|_ ||j kr|j ||j|n^|j |\}}|td t}t|td t}||kr|j|||j |<n|j||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|jd}|jd|_|j |=|j dS)Nrz'The database is opened for reading onlyr<)rzutf-8T) rrrr r5r6r(r3r%r r2)rr*rrrr __delitem__s   z_Database.__delitem__c Cs.y t|jStk r(tddYnXdS)Nz"DBM object has already been closed)listr rJr)rrrrkeyss z_Database.keyscs jfddjjDS)Ncsg|]}||fqSrr).0r*)rrr sz#_Database.items..)r3r rN)rr)rrr.sz_Database.itemsc CsPt|tr|jd}y ||jkStk rJ|jdkrDtddnYnXdS)Nzutf-8z"DBM object has already been closed)r5r6r(r rJr)rr*rrr __contains__s     z_Database.__contains__c Cs.y t|jStk r(tddYnXdS)Nz"DBM object has already been closed)iterr rJr)rrrriterkeyss z_Database.iterkeysc Cs.y t|jStk r(tddYnXdS)Nz"DBM object has already been closed)rBr rJr)rrrr__len__s z_Database.__len__c Cs,z |jWdd|_|_|_|_XdS)N)r2r r r r )rrrrr"s z_Database.closecCs t|jdr|jj||jdS)Nchmod)hasattrrrUr)rfilerrrr!s z_Database._chmodcCs|S)Nr)rrrr __enter__!sz_Database.__enter__cGs |jdS)N)r")rargsrrr__exit__$sz_Database.__exit__N)r)__name__ __module__ __qualname__rrrr rr2syncr3r;rDrErGrKrLrNr.rQrS__iter__rTr"__del__r!rXrZrrrrr#s2   ' rrc Csfytjd}tj|Wntk r,Yn X||@}|d krXddl}|jdtdd t|||d S) aEOpen the database file, filename, and return corresponding object. The flag argument, used to control how the database is opened in the other DBM implementations, supports only the semantics of 'c' and 'n' values. Other values will default to the semantics of 'c' value: the database will always opened for update and will be created if it does not exist. The optional mode argument is the UNIX mode of the file, used only when the database has to be created. It defaults to octal code 0o666 (and will be modified by the prevailing umask). rrrrrNz)Flag must be one of 'r', 'w', 'c', or 'n'r<)r)r)rrrr)rumaskAttributeErrorrrr r)rWrrZumrrrrr(s   )rra)__doc__Zastr'iorosr collections__all__rArrMutableMappingrrrrrrs__pycache__/__init__.cpython-36.pyc000064400000010113152343230650013140 0ustar003 \ @sdZdddgZddlZddlZddlZddlZGdddeZddd gZda iZ ee fZydd l m Z Wnek rdZ YnXdd dZddZedkrx(ejddD]ZeeepdeqWdS)aNGeneric interface to all dbm clones. Use import dbm d = dbm.open(file, 'w', 0o666) The returned object is a dbm.gnu, dbm.ndbm or dbm.dumb object, dependent on the type of database being opened (determined by the whichdb function) in the case of an existing dbm. If the dbm does not exist and the create or new flag ('c' or 'n') was specified, the dbm type will be determined by the availability of the modules (tested in the above order). It has the following interface (key and data are strings): d[key] = data # store data at key (may override data at # existing key) data = d[key] # retrieve data at key (raise KeyError if no # such key) del d[key] # delete data stored at key (raises KeyError # if no such key) flag = key in d # true if the key exists list = d.keys() # return a list of all existing keys (slow!) Future versions may change the order in which implementations are tested for existence, and add interfaces to other dbm-like implementations. openwhichdberrorNc@s eZdZdS)rN)__name__ __module__ __qualname__rr$/usr/lib64/python3.6/dbm/__init__.pyr&szdbm.gnuzdbm.ndbmzdbm.dumb)ndbmrc Cstdkr`xFtD]>}yt|dgd}Wntk r:wYnXtsD|a|t|<qWts`tdtd|krpt|nd}|dkrd|ksd|krt}qtddn:|d krtdd n$|tkrtdd j|nt|}|j|||S) aOpen or create database at path given by *file*. Optional argument *flag* can be 'r' (default) for read-only access, 'w' for read-write access of an existing database, 'c' for read-write access to a new or existing database, and 'n' for read-write access to a new database. Note: 'r' and 'w' fail if the database doesn't exist; 'c' creates it only if it doesn't exist; and 'n' always creates a new database. Nr)fromlistzno dbm clone found; tried %sncrz#need 'c' or 'n' flag to open new dbzdb type could not be determinedz/db type is {0}, but the module is not available) _defaultmod_names __import__ ImportError_modulesrrformatr)fileflagmodenamemodresultrrr r5s.      c>Csy4tj|dd}|jtj|dd}|jdStk ry:tj|dd}|jtdk r|tj|}|jdSWntk rYnXYnXy`tj|dtj|dj}|dkrd Stj|dd}z|jd dkrd SWd|jXWntk rYnXytj|d}Wntk r8dSX||jd }WdQRX|dd}t |dkrrdSyt j d|\}Wnt j k rdSX|dkrdSyt j d|dd\}Wnt j k rdSXdS)auGuess which db package to use to open a db file. Return values: - None if the database file can't be read; - empty string if the file can be read but can't be recognized - the name of the dbm submodule (e.g. "ndbm" or "gnu") if recognized. Importing the given module may still fail, and opening the database using that module may still fail. z.pagrbz.dirzdbm.ndbmz.dbNz.datrzdbm.dumb'"rz=lΚW͚WϚWzdbm.gnu)rr )r#r$r%) iorcloseOSErrorr osstatst_sizereadlenstructZunpackr)filenamefdsizeZs16smagicrrr ras`    __main__rZUNKNOWN)r r )__doc____all__r'r*r/sys Exceptionrrrrr)Zdbmr rrrrargvr0printrrrr s&    ,Y__pycache__/__init__.cpython-36.opt-1.pyc000064400000010113152343230650014077 0ustar003 \ @sdZdddgZddlZddlZddlZddlZGdddeZddd gZda iZ ee fZydd l m Z Wnek rdZ YnXdd dZddZedkrx(ejddD]ZeeepdeqWdS)aNGeneric interface to all dbm clones. Use import dbm d = dbm.open(file, 'w', 0o666) The returned object is a dbm.gnu, dbm.ndbm or dbm.dumb object, dependent on the type of database being opened (determined by the whichdb function) in the case of an existing dbm. If the dbm does not exist and the create or new flag ('c' or 'n') was specified, the dbm type will be determined by the availability of the modules (tested in the above order). It has the following interface (key and data are strings): d[key] = data # store data at key (may override data at # existing key) data = d[key] # retrieve data at key (raise KeyError if no # such key) del d[key] # delete data stored at key (raises KeyError # if no such key) flag = key in d # true if the key exists list = d.keys() # return a list of all existing keys (slow!) Future versions may change the order in which implementations are tested for existence, and add interfaces to other dbm-like implementations. openwhichdberrorNc@s eZdZdS)rN)__name__ __module__ __qualname__rr$/usr/lib64/python3.6/dbm/__init__.pyr&szdbm.gnuzdbm.ndbmzdbm.dumb)ndbmrc Cstdkr`xFtD]>}yt|dgd}Wntk r:wYnXtsD|a|t|<qWts`tdtd|krpt|nd}|dkrd|ksd|krt}qtddn:|d krtdd n$|tkrtdd j|nt|}|j|||S) aOpen or create database at path given by *file*. Optional argument *flag* can be 'r' (default) for read-only access, 'w' for read-write access of an existing database, 'c' for read-write access to a new or existing database, and 'n' for read-write access to a new database. Note: 'r' and 'w' fail if the database doesn't exist; 'c' creates it only if it doesn't exist; and 'n' always creates a new database. Nr)fromlistzno dbm clone found; tried %sncrz#need 'c' or 'n' flag to open new dbzdb type could not be determinedz/db type is {0}, but the module is not available) _defaultmod_names __import__ ImportError_modulesrrformatr)fileflagmodenamemodresultrrr r5s.      c>Csy4tj|dd}|jtj|dd}|jdStk ry:tj|dd}|jtdk r|tj|}|jdSWntk rYnXYnXy`tj|dtj|dj}|dkrd Stj|dd}z|jd dkrd SWd|jXWntk rYnXytj|d}Wntk r8dSX||jd }WdQRX|dd}t |dkrrdSyt j d|\}Wnt j k rdSX|dkrdSyt j d|dd\}Wnt j k rdSXdS)auGuess which db package to use to open a db file. Return values: - None if the database file can't be read; - empty string if the file can be read but can't be recognized - the name of the dbm submodule (e.g. "ndbm" or "gnu") if recognized. Importing the given module may still fail, and opening the database using that module may still fail. z.pagrbz.dirzdbm.ndbmz.dbNz.datrzdbm.dumb'"rz=lΚW͚WϚWzdbm.gnu)rr )r#r$r%) iorcloseOSErrorr osstatst_sizereadlenstructZunpackr)filenamefdsizeZs16smagicrrr ras`    __main__rZUNKNOWN)r r )__doc____all__r'r*r/sys Exceptionrrrrr)Zdbmr rrrrargvr0printrrrr s&    ,Y__pycache__/ndbm.cpython-36.pyc000064400000000304152343230650012322 0ustar003 \F@sdZddlTdS)z+Provide the _dbm module as a dbm submodule.)*N)__doc__Z_dbmrr /usr/lib64/python3.6/dbm/ndbm.pys__pycache__/gnu.cpython-36.opt-2.pyc000064400000000210152343230650013127 0ustar003 \H@s ddlTdS))*N)Z_gdbmrr/usr/lib64/python3.6/dbm/gnu.pys__pycache__/gnu.cpython-36.opt-1.pyc000064400000000305152343230650013133 0ustar003 \H@sdZddlTdS)z,Provide the _gdbm module as a dbm submodule.)*N)__doc__Z_gdbmrr/usr/lib64/python3.6/dbm/gnu.pysgnu.py000064400000000110152343230650005702 0ustar00"""Provide the _gdbm module as a dbm submodule.""" from _gdbm import * dumb.py000064400000026512152343230650006056 0ustar00"""A dumb and slow but simple dbm clone. For database spam, spam.dir contains the index (a text file), spam.bak *may* contain a backup of the index (also a text file), while spam.dat contains the data (a binary file). XXX TO DO: - seems to contain a bug when updating... - reclaim free space (currently, space once occupied by deleted or expanded items is never reused) - support concurrent access (currently, if two processes take turns making updates, they can mess up the index) - support efficient access to large databases (currently, the whole index is read when the database is opened, and some updates rewrite the whole index) - support opening for read-only (flag = 'm') """ import ast as _ast import io as _io import os as _os import collections.abc __all__ = ["error", "open"] _BLOCKSIZE = 512 error = OSError class _Database(collections.abc.MutableMapping): # The on-disk directory and data files can remain in mutually # inconsistent states for an arbitrarily long time (see comments # at the end of __setitem__). This is only repaired when _commit() # gets called. One place _commit() gets called is from __del__(), # and if that occurs at program shutdown time, module globals may # already have gotten rebound to None. Since it's crucial that # _commit() finish successfully, we can't ignore shutdown races # here, and _commit() must not reference any globals. _os = _os # for _commit() _io = _io # for _commit() def __init__(self, filebasename, mode, flag='c'): filebasename = self._os.fsencode(filebasename) self._mode = mode self._readonly = (flag == 'r') # The directory file is a text file. Each line looks like # "%r, (%d, %d)\n" % (key, pos, siz) # where key is the string key, pos is the offset into the dat # file of the associated value's first byte, and siz is the number # of bytes in the associated value. self._dirfile = filebasename + b'.dir' # The data file is a binary file pointed into by the directory # file, and holds the values associated with keys. Each value # begins at a _BLOCKSIZE-aligned byte offset, and is a raw # binary 8-bit string value. self._datfile = filebasename + b'.dat' self._bakfile = filebasename + b'.bak' # The index is an in-memory dict, mirroring the directory file. self._index = None # maps keys to (pos, siz) pairs # Handle the creation self._create(flag) self._update(flag) def _create(self, flag): if flag == 'n': for filename in (self._datfile, self._bakfile, self._dirfile): try: _os.remove(filename) except OSError: pass # Mod by Jack: create data file if needed try: f = _io.open(self._datfile, 'r', encoding="Latin-1") except OSError: if flag not in ('c', 'n'): raise with _io.open(self._datfile, 'w', encoding="Latin-1") as f: self._chmod(self._datfile) else: f.close() # Read directory file into the in-memory index dict. def _update(self, flag): self._modified = False self._index = {} try: f = _io.open(self._dirfile, 'r', encoding="Latin-1") except OSError: if flag not in ('c', 'n'): raise self._modified = True else: with f: for line in f: line = line.rstrip() key, pos_and_siz_pair = _ast.literal_eval(line) key = key.encode('Latin-1') self._index[key] = pos_and_siz_pair # Write the index dict to the directory file. The original directory # file (if any) is renamed with a .bak extension first. If a .bak # file currently exists, it's deleted. def _commit(self): # CAUTION: It's vital that _commit() succeed, and _commit() can # be called from __del__(). Therefore we must never reference a # global in this routine. if self._index is None or not self._modified: return # nothing to do try: self._os.unlink(self._bakfile) except OSError: pass try: self._os.rename(self._dirfile, self._bakfile) except OSError: pass with self._io.open(self._dirfile, 'w', encoding="Latin-1") as f: self._chmod(self._dirfile) for key, pos_and_siz_pair in self._index.items(): # Use Latin-1 since it has no qualms with any value in any # position; UTF-8, though, does care sometimes. entry = "%r, %r\n" % (key.decode('Latin-1'), pos_and_siz_pair) f.write(entry) sync = _commit def _verify_open(self): if self._index is None: raise error('DBM object has already been closed') def __getitem__(self, key): if isinstance(key, str): key = key.encode('utf-8') self._verify_open() pos, siz = self._index[key] # may raise KeyError with _io.open(self._datfile, 'rb') as f: f.seek(pos) dat = f.read(siz) return dat # Append val to the data file, starting at a _BLOCKSIZE-aligned # offset. The data file is first padded with NUL bytes (if needed) # to get to an aligned offset. Return pair # (starting offset of val, len(val)) def _addval(self, val): with _io.open(self._datfile, 'rb+') as f: f.seek(0, 2) pos = int(f.tell()) npos = ((pos + _BLOCKSIZE - 1) // _BLOCKSIZE) * _BLOCKSIZE f.write(b'\0'*(npos-pos)) pos = npos f.write(val) return (pos, len(val)) # Write val to the data file, starting at offset pos. The caller # is responsible for ensuring that there's enough room starting at # pos to hold val, without overwriting some other value. Return # pair (pos, len(val)). def _setval(self, pos, val): with _io.open(self._datfile, 'rb+') as f: f.seek(pos) f.write(val) return (pos, len(val)) # key is a new key whose associated value starts in the data file # at offset pos and with length siz. Add an index record to # the in-memory index dict, and append one to the directory file. def _addkey(self, key, pos_and_siz_pair): self._index[key] = pos_and_siz_pair with _io.open(self._dirfile, 'a', encoding="Latin-1") as f: self._chmod(self._dirfile) f.write("%r, %r\n" % (key.decode("Latin-1"), pos_and_siz_pair)) def __setitem__(self, key, val): if self._readonly: raise error('The database is opened for reading only') if isinstance(key, str): key = key.encode('utf-8') elif not isinstance(key, (bytes, bytearray)): raise TypeError("keys must be bytes or strings") if isinstance(val, str): val = val.encode('utf-8') elif not isinstance(val, (bytes, bytearray)): raise TypeError("values must be bytes or strings") self._verify_open() self._modified = True if key not in self._index: self._addkey(key, self._addval(val)) else: # See whether the new value is small enough to fit in the # (padded) space currently occupied by the old value. pos, siz = self._index[key] oldblocks = (siz + _BLOCKSIZE - 1) // _BLOCKSIZE newblocks = (len(val) + _BLOCKSIZE - 1) // _BLOCKSIZE if newblocks <= oldblocks: self._index[key] = self._setval(pos, val) else: # The new value doesn't fit in the (padded) space used # by the old value. The blocks used by the old value are # forever lost. self._index[key] = self._addval(val) # Note that _index may be out of synch with the directory # file now: _setval() and _addval() don't update the directory # file. This also means that the on-disk directory and data # files are in a mutually inconsistent state, and they'll # remain that way until _commit() is called. Note that this # is a disaster (for the database) if the program crashes # (so that _commit() never gets called). def __delitem__(self, key): if self._readonly: raise error('The database is opened for reading only') if isinstance(key, str): key = key.encode('utf-8') self._verify_open() self._modified = True # The blocks used by the associated value are lost. del self._index[key] # XXX It's unclear why we do a _commit() here (the code always # XXX has, so I'm not changing it). __setitem__ doesn't try to # XXX keep the directory file in synch. Why should we? Or # XXX why shouldn't __setitem__? self._commit() def keys(self): try: return list(self._index) except TypeError: raise error('DBM object has already been closed') from None def items(self): self._verify_open() return [(key, self[key]) for key in self._index.keys()] def __contains__(self, key): if isinstance(key, str): key = key.encode('utf-8') try: return key in self._index except TypeError: if self._index is None: raise error('DBM object has already been closed') from None else: raise def iterkeys(self): try: return iter(self._index) except TypeError: raise error('DBM object has already been closed') from None __iter__ = iterkeys def __len__(self): try: return len(self._index) except TypeError: raise error('DBM object has already been closed') from None def close(self): try: self._commit() finally: self._index = self._datfile = self._dirfile = self._bakfile = None __del__ = close def _chmod(self, file): self._os.chmod(file, self._mode) def __enter__(self): return self def __exit__(self, *args): self.close() def open(file, flag='c', mode=0o666): """Open the database file, filename, and return corresponding object. The flag argument, used to control how the database is opened in the other DBM implementations, supports only the semantics of 'c' and 'n' values. Other values will default to the semantics of 'c' value: the database will always opened for update and will be created if it does not exist. The optional mode argument is the UNIX mode of the file, used only when the database has to be created. It defaults to octal code 0o666 (and will be modified by the prevailing umask). """ # Modify mode depending on the umask try: um = _os.umask(0) _os.umask(um) except AttributeError: pass else: # Turn off any bits that are set in the umask mode = mode & (~um) if flag not in ('r', 'w', 'c', 'n'): raise ValueError("Flag must be one of 'r', 'w', 'c', or 'n'") return _Database(file, mode, flag=flag) ndbm.py000064400000000106152343230650006036 0ustar00"""Provide the _dbm module as a dbm submodule.""" from _dbm import * __init__.py000064400000013372152343230650006666 0ustar00"""Generic interface to all dbm clones. Use import dbm d = dbm.open(file, 'w', 0o666) The returned object is a dbm.gnu, dbm.ndbm or dbm.dumb object, dependent on the type of database being opened (determined by the whichdb function) in the case of an existing dbm. If the dbm does not exist and the create or new flag ('c' or 'n') was specified, the dbm type will be determined by the availability of the modules (tested in the above order). It has the following interface (key and data are strings): d[key] = data # store data at key (may override data at # existing key) data = d[key] # retrieve data at key (raise KeyError if no # such key) del d[key] # delete data stored at key (raises KeyError # if no such key) flag = key in d # true if the key exists list = d.keys() # return a list of all existing keys (slow!) Future versions may change the order in which implementations are tested for existence, and add interfaces to other dbm-like implementations. """ __all__ = ['open', 'whichdb', 'error'] import io import os import struct import sys class error(Exception): pass _names = ['dbm.gnu', 'dbm.ndbm', 'dbm.dumb'] _defaultmod = None _modules = {} error = (error, OSError) try: from dbm import ndbm except ImportError: ndbm = None def open(file, flag='r', mode=0o666): """Open or create database at path given by *file*. Optional argument *flag* can be 'r' (default) for read-only access, 'w' for read-write access of an existing database, 'c' for read-write access to a new or existing database, and 'n' for read-write access to a new database. Note: 'r' and 'w' fail if the database doesn't exist; 'c' creates it only if it doesn't exist; and 'n' always creates a new database. """ global _defaultmod if _defaultmod is None: for name in _names: try: mod = __import__(name, fromlist=['open']) except ImportError: continue if not _defaultmod: _defaultmod = mod _modules[name] = mod if not _defaultmod: raise ImportError("no dbm clone found; tried %s" % _names) # guess the type of an existing database, if not creating a new one result = whichdb(file) if 'n' not in flag else None if result is None: # db doesn't exist or 'n' flag was specified to create a new db if 'c' in flag or 'n' in flag: # file doesn't exist and the new flag was used so use default type mod = _defaultmod else: raise error[0]("db file doesn't exist; " "use 'c' or 'n' flag to create a new db") elif result == "": # db type cannot be determined raise error[0]("db type could not be determined") elif result not in _modules: raise error[0]("db type is {0}, but the module is not " "available".format(result)) else: mod = _modules[result] return mod.open(file, flag, mode) def whichdb(filename): """Guess which db package to use to open a db file. Return values: - None if the database file can't be read; - empty string if the file can be read but can't be recognized - the name of the dbm submodule (e.g. "ndbm" or "gnu") if recognized. Importing the given module may still fail, and opening the database using that module may still fail. """ # Check for ndbm first -- this has a .pag and a .dir file filename = os.fsencode(filename) try: f = io.open(filename + b".pag", "rb") f.close() f = io.open(filename + b".dir", "rb") f.close() return "dbm.ndbm" except OSError: # some dbm emulations based on Berkeley DB generate a .db file # some do not, but they should be caught by the bsd checks try: f = io.open(filename + b".db", "rb") f.close() # guarantee we can actually open the file using dbm # kind of overkill, but since we are dealing with emulations # it seems like a prudent step if ndbm is not None: d = ndbm.open(filename) d.close() return "dbm.ndbm" except OSError: pass # Check for dumbdbm next -- this has a .dir and a .dat file try: # First check for presence of files os.stat(filename + b".dat") size = os.stat(filename + b".dir").st_size # dumbdbm files with no keys are empty if size == 0: return "dbm.dumb" f = io.open(filename + b".dir", "rb") try: if f.read(1) in (b"'", b'"'): return "dbm.dumb" finally: f.close() except OSError: pass # See if the file exists, return None if not try: f = io.open(filename, "rb") except OSError: return None with f: # Read the start of the file -- the magic number s16 = f.read(16) s = s16[0:4] # Return "" if not at least 4 bytes if len(s) != 4: return "" # Convert to 4-byte int in native byte order -- return "" if impossible try: (magic,) = struct.unpack("=l", s) except struct.error: return "" # Check for GNU dbm if magic in (0x13579ace, 0x13579acd, 0x13579acf): return "dbm.gnu" # Later versions of Berkeley db hash file have a 12-byte pad in # front of the file type try: (magic,) = struct.unpack("=l", s16[-4:]) except struct.error: return "" # Unknown return "" if __name__ == "__main__": for filename in sys.argv[1:]: print(whichdb(filename) or "UNKNOWN", filename) __pycache__/ndbm.cpython-312.opt-2.pyc000064400000000241152343453120013336 0ustar00 ֦iF ddly))*N)_dbm!/usr/lib64/python3.12/dbm/ndbm.pyrs 1r__pycache__/__init__.cpython-312.opt-1.pyc000064400000014135152343453120014163 0ustar00 ֦idZgdZddlZddlZddlZddlZGddeZgdZda iZ ee fZ ddl m Z d dZd Zed k(r(ej$d dD]Zeeexsd eyy#e$rdZ Y>wxYw)aNGeneric interface to all dbm clones. Use import dbm d = dbm.open(file, 'w', 0o666) The returned object is a dbm.gnu, dbm.ndbm or dbm.dumb object, dependent on the type of database being opened (determined by the whichdb function) in the case of an existing dbm. If the dbm does not exist and the create or new flag ('c' or 'n') was specified, the dbm type will be determined by the availability of the modules (tested in the above order). It has the following interface (key and data are strings): d[key] = data # store data at key (may override data at # existing key) data = d[key] # retrieve data at key (raise KeyError if no # such key) del d[key] # delete data stored at key (raises KeyError # if no such key) flag = key in d # true if the key exists list = d.keys() # return a list of all existing keys (slow!) Future versions may change the order in which implementations are tested for existence, and add interfaces to other dbm-like implementations. )openwhichdberrorNc eZdZy)rN)__name__ __module__ __qualname__%/usr/lib64/python3.12/dbm/__init__.pyrr&sr r)dbm.gnudbm.ndbmdbm.dumb)ndbmctCtD]"} t|dg}ts|a|t|<$tstdtzd|vr t |nd}|d|vsd|vrt}nOt dd|d k(rt dd |tvrt dd j|t|}|j|||S#t$rYwxYw) aOpen or create database at path given by *file*. Optional argument *flag* can be 'r' (default) for read-only access, 'w' for read-write access of an existing database, 'c' for read-write access to a new or existing database, and 'n' for read-write access to a new database. Note: 'r' and 'w' fail if the database doesn't exist; 'c' creates it only if it doesn't exist; and 'n' always creates a new database. Nr)fromlistzno dbm clone found; tried %sncrz=db file doesn't exist; use 'c' or 'n' flag to create a new dbzdb type could not be determinedz/db type is {0}, but the module is not available) _defaultmod_names __import__ ImportError_modulesrrformatr)fileflagmodenamemodresults r rr5sD  9!  HTN3 3v 88D$ %%5  sC CCctj|} tj|dzd}|j tj|dzd}|j y#t $rj tj|dzd}|j t 't j|}|j Yyn#t $rYnwxYwYnwxYw tj|dztj|dzj}|dk(ry tj|dzd} |jd d vr |j y |j n#|j wxYwn#t $rYnwxYw tj|d}n#t $rYywxYw|5|jd }dddn #1swYnxYwdd }t|d k7ry tjd|\}n#tj$rYywxYw|dvry tjd|dd\}y#tj$rYywxYw)auGuess which db package to use to open a db file. Return values: - None if the database file can't be read; - empty string if the file can be read but can't be recognized - the name of the dbm submodule (e.g. "ndbm" or "gnu") if recognized. Importing the given module may still fail, and opening the database using that module may still fail. s.pagrbs.dirrs.dbNs.datrr)'"rz=l)iΚWi͚WiϚWr )osfsencodeiorcloseOSErrorrstatst_sizereadlenstructunpackr)filenamefdsizes16smagics r rrbs5{{8$H GGHw& -  GGHw& -    6)40A GGIIIh' !    "  7"#wwx')*22 19 GGHw& - vvayL(! GGI) GGIAGGII     GGHd #  ffRj  AaA 1v{==q) << 44==s23x0  <<sAA** C4AC  C CCCCC!?F!F;E2F!F2FF FFF// F;:F;GG$<HH+*H+4II&%I&__main__r$UNKNOWN)ri)__doc____all__r,r*r3sys Exceptionrrrrr.dbmrrrrrargvr5printr r r rFs: '  I  -   *&ZWt zHHQRL gh,9h7!W DsA**A43A4__pycache__/dumb.cpython-312.pyc000064400000031230152343453120012407 0ustar00 ֦iJ-~dZddlZddlZddlZddlZddgZ dZ e Z GddejjZd dZy) aA dumb and slow but simple dbm clone. For database spam, spam.dir contains the index (a text file), spam.bak *may* contain a backup of the index (also a text file), while spam.dat contains the data (a binary file). XXX TO DO: - seems to contain a bug when updating... - reclaim free space (currently, space once occupied by deleted or expanded items is never reused) - support concurrent access (currently, if two processes take turns making updates, they can mess up the index) - support efficient access to large databases (currently, the whole index is read when the database is opened, and some updates rewrite the whole index) - support opening for read-only (flag = 'm') NerroropeniceZdZeZeZddZdZdZdZeZ dZ dZ dZ dZ d Zd Zd Zd Zd ZdZdZeZdZdZeZdZdZdZy) _Databasec|jj|}||_|dk(|_|dz|_|dz|_|dz|_d|_|j||j|y)Nrs.dirs.dats.bak) _osfsencode_mode _readonly_dirfile_datfile_bakfile_index_create_update)self filebasenamemodeflags !/usr/lib64/python3.12/dbm/dumb.py__init__z_Database.__init__0ssxx((6  #+%w. %w. $w.   T Tc|dk(r>|j|j|jfD]} tj| t j|jdd}|jy#t $rYZwxYw#t $r[|dvrt j|jdd5}|j|jdddYy#1swYYyxYwwxYw)NnrLatin-1encodingcrw) rrr r removeOSError_iorclose_chmod)rrfilenamefs rrz_Database._createJs 3;!]]DMM4==IJJx(J  i@A GGI  +:%$--yAQ DMM*BAA +s;A8"B8 BB0C+7CC+C' "C+'C+cjd|_i|_ tj|jdd}|5|D]J}|j }t j|\}}|jd}||j|<L dddy#1swYyxYw#t$r|dvrd|_YywxYw)NFrrrrT) _modifiedrr$rr rstrip_ast literal_evalencoder#)rrr(linekeypos_and_siz_pairs rrz_Database._update]s  8i@A D;;=D,0,=,=d,C)C)**Y/C'7DKK$   ":%!DN "s"BABBB21B2cf|j |jsy |jj|j |jj |j|j|jj|jdd5}|j|j|jjD]-\}}|jdd|d}|j|/ dddy#t $rYwxYw#t $rYwxYw#1swYyxYw)Nr!rr,  )rr*r unlinkrr#renamer r$rr&itemsdecodewrite)rr(r0r1entrys r_commitz_Database._commitqs ;; dnn   HHOODMM *  HHOODMM4== 9XX]]4==# ] Ba KK &)-):):)<%%'*jj&;=MN *=C B       C Bs0%D 0DA&D' DD D$#D$'D0c2|j tdyN"DBM object has already been closed)rrrs r _verify_openz_Database._verify_opens ;; <= = rc<t|tr|jd}|j|j|\}}t j |jd5}|j||j|}ddd|S#1swYSxYw)Nutf-8rb) isinstancestrr.r@rr$rrseekread)rr0possizr(dats r __getitem__z_Database.__getitem__s} c3 **W%C ;;s#S XXdmmT *a FF3K&&+C+ + s $#BBcdtj|jd5}|jddt |j }|t zdz t zt z}|jd||z z|}|j|dddt|fS#1swYxYw)Nrb+r) r$rrrFinttell _BLOCKSIZEr9len)rvalr(rHnposs r_addvalz_Database._addvals XXdmmU +q FF1aLaffh-C:%)j8JFD GGE48$ %C GGCL ,SX, +s A0B&&B/ctj|jd5}|j||j |ddd|t |fS#1swYxYw)NrM)r$rrrFr9rT)rrHrUr(s r_setvalz_Database._setvalsJ XXdmmU +q FF3K GGCL,SX, +s #AA"c||j|<tj|jdd5}|j |j|j |j dd|ddddy#1swYyxYw)Narrr3r4)rr$rr r&r9r8)rr0r1r(s r_addkeyz_Database._addkeys]+ C XXdmmS9 = KK & GG#**Y"79IJ K> = =s AA==Bc|jr tdt|tr|j d}n!t|t t fs tdt|tr|j d}n!t|t t fs td|jd|_ ||jvr"|j||j|y|j|\}}|tzdz tz}t|tzdz tz}||kr |j|||j|<y|j||j|<y)N'The database is opened for reading onlyrBzkeys must be bytes or stringszvalues must be bytes or stringsTrO)r rrDrEr.bytes bytearray TypeErrorr@r*rr\rWrSrTrY)rr0rUrHrI oldblocks newblockss r __setitem__z_Database.__setitem__s+ >>AB B c3 **W%CC%!34;< < c3 **W%CC%!34=> >  dkk ! LLdll3/ 0{{3'HCz)A-*>AB B c3 **W%C  KK  rc` t|jS#t$r tddwxYwr=)listrrarr?s rkeysz_Database.keys6 H $ $ H<=4 G H-c|j|jjDcgc] }|||f c}Scc}wN)r@rrjrfs rr7z_Database.itemss> ,0KK,<,<,>?,>Sd3i ,>???s>ct|tr|jd} ||jvS#t$r|j t ddwxYw)NrBr>)rDrEr.rrarrfs r __contains__z_Database.__contains__sX c3 **W%C $++% % {{"@AtK  s 1#Ac` t|jS#t$r tddwxYwr=)iterrrarr?s riterkeysz_Database.iterkeysrkrlc` t|jS#t$r tddwxYwr=)rTrrarr?s r__len__z_Database.__len__ s6 Ht{{# # H<=4 G Hrlc |jdx|_x|_x|_|_y#dx|_x|_x|_|_wxYwrn)r;rrr rr?s rr%z_Database.closesJ O LLNJN NDK N$- N$-$-$ NDK N$- N$-$-s /A cP|jj||jyrn)r chmodr )rfiles rr&z_Database._chmods tTZZ(rc|Srnr?s r __enter__z_Database.__enter__s rc$|jyrn)r%)rargss r__exit__z_Database.__exit__s  rN)r )__name__ __module__ __qualname__r r$rrrr;syncr@rKrWrYr\rdrgrjr7rprs__iter__rur%__del__r&r|rr{rrrr#s C C4&8(2 D>L 5J H @ H HH O G)rrc tjd}tj|||z}|dvr tdt |||S#t$rY(wxYw)aEOpen the database file, filename, and return corresponding object. The flag argument, used to control how the database is opened in the other DBM implementations, supports only the semantics of 'c' and 'n' values. Other values will default to the semantics of 'c' value: the database will always opened for update and will be created if it does not exist. The optional mode argument is the UNIX mode of the file, used only when the database has to be created. It defaults to octal code 0o666 (and will be modified by the prevailing umask). r)rr!r rz)Flag must be one of 'r', 'w', 'c', or 'n')r)r umaskAttributeError ValueErrorr)ryrrums rrr#sd  YYq\ " s| ''DEE T4d ++    s*A AA)r i)__doc__astr,ior$osr collections.abc collections__all__rSr#rabcMutableMappingrrr{rrrsJ. F   } ..}@,r__pycache__/dumb.cpython-312.opt-1.pyc000064400000031230152343453120013346 0ustar00 ֦iJ-~dZddlZddlZddlZddlZddgZ dZ e Z GddejjZd dZy) aA dumb and slow but simple dbm clone. For database spam, spam.dir contains the index (a text file), spam.bak *may* contain a backup of the index (also a text file), while spam.dat contains the data (a binary file). XXX TO DO: - seems to contain a bug when updating... - reclaim free space (currently, space once occupied by deleted or expanded items is never reused) - support concurrent access (currently, if two processes take turns making updates, they can mess up the index) - support efficient access to large databases (currently, the whole index is read when the database is opened, and some updates rewrite the whole index) - support opening for read-only (flag = 'm') NerroropeniceZdZeZeZddZdZdZdZeZ dZ dZ dZ dZ d Zd Zd Zd Zd ZdZdZeZdZdZeZdZdZdZy) _Databasec|jj|}||_|dk(|_|dz|_|dz|_|dz|_d|_|j||j|y)Nrs.dirs.dats.bak) _osfsencode_mode _readonly_dirfile_datfile_bakfile_index_create_update)self filebasenamemodeflags !/usr/lib64/python3.12/dbm/dumb.py__init__z_Database.__init__0ssxx((6  #+%w. %w. $w.   T Tc|dk(r>|j|j|jfD]} tj| t j|jdd}|jy#t $rYZwxYw#t $r[|dvrt j|jdd5}|j|jdddYy#1swYYyxYwwxYw)NnrLatin-1encodingcrw) rrr r removeOSError_iorclose_chmod)rrfilenamefs rrz_Database._createJs 3;!]]DMM4==IJJx(J  i@A GGI  +:%$--yAQ DMM*BAA +s;A8"B8 BB0C+7CC+C' "C+'C+cjd|_i|_ tj|jdd}|5|D]J}|j }t j|\}}|jd}||j|<L dddy#1swYyxYw#t$r|dvrd|_YywxYw)NFrrrrT) _modifiedrr$rr rstrip_ast literal_evalencoder#)rrr(linekeypos_and_siz_pairs rrz_Database._update]s  8i@A D;;=D,0,=,=d,C)C)**Y/C'7DKK$   ":%!DN "s"BABBB21B2cf|j |jsy |jj|j |jj |j|j|jj|jdd5}|j|j|jjD]-\}}|jdd|d}|j|/ dddy#t $rYwxYw#t $rYwxYw#1swYyxYw)Nr!rr,  )rr*r unlinkrr#renamer r$rr&itemsdecodewrite)rr(r0r1entrys r_commitz_Database._commitqs ;; dnn   HHOODMM *  HHOODMM4== 9XX]]4==# ] Ba KK &)-):):)<%%'*jj&;=MN *=C B       C Bs0%D 0DA&D' DD D$#D$'D0c2|j tdyN"DBM object has already been closed)rrrs r _verify_openz_Database._verify_opens ;; <= = rc<t|tr|jd}|j|j|\}}t j |jd5}|j||j|}ddd|S#1swYSxYw)Nutf-8rb) isinstancestrr.r@rr$rrseekread)rr0possizr(dats r __getitem__z_Database.__getitem__s} c3 **W%C ;;s#S XXdmmT *a FF3K&&+C+ + s $#BBcdtj|jd5}|jddt |j }|t zdz t zt z}|jd||z z|}|j|dddt|fS#1swYxYw)Nrb+r) r$rrrFinttell _BLOCKSIZEr9len)rvalr(rHnposs r_addvalz_Database._addvals XXdmmU +q FF1aLaffh-C:%)j8JFD GGE48$ %C GGCL ,SX, +s A0B&&B/ctj|jd5}|j||j |ddd|t |fS#1swYxYw)NrM)r$rrrFr9rT)rrHrUr(s r_setvalz_Database._setvalsJ XXdmmU +q FF3K GGCL,SX, +s #AA"c||j|<tj|jdd5}|j |j|j |j dd|ddddy#1swYyxYw)Narrr3r4)rr$rr r&r9r8)rr0r1r(s r_addkeyz_Database._addkeys]+ C XXdmmS9 = KK & GG#**Y"79IJ K> = =s AA==Bc|jr tdt|tr|j d}n!t|t t fs tdt|tr|j d}n!t|t t fs td|jd|_ ||jvr"|j||j|y|j|\}}|tzdz tz}t|tzdz tz}||kr |j|||j|<y|j||j|<y)N'The database is opened for reading onlyrBzkeys must be bytes or stringszvalues must be bytes or stringsTrO)r rrDrEr.bytes bytearray TypeErrorr@r*rr\rWrSrTrY)rr0rUrHrI oldblocks newblockss r __setitem__z_Database.__setitem__s+ >>AB B c3 **W%CC%!34;< < c3 **W%CC%!34=> >  dkk ! LLdll3/ 0{{3'HCz)A-*>AB B c3 **W%C  KK  rc` t|jS#t$r tddwxYwr=)listrrarr?s rkeysz_Database.keys6 H $ $ H<=4 G H-c|j|jjDcgc] }|||f c}Scc}wN)r@rrjrfs rr7z_Database.itemss> ,0KK,<,<,>?,>Sd3i ,>???s>ct|tr|jd} ||jvS#t$r|j t ddwxYw)NrBr>)rDrEr.rrarrfs r __contains__z_Database.__contains__sX c3 **W%C $++% % {{"@AtK  s 1#Ac` t|jS#t$r tddwxYwr=)iterrrarr?s riterkeysz_Database.iterkeysrkrlc` t|jS#t$r tddwxYwr=)rTrrarr?s r__len__z_Database.__len__ s6 Ht{{# # H<=4 G Hrlc |jdx|_x|_x|_|_y#dx|_x|_x|_|_wxYwrn)r;rrr rr?s rr%z_Database.closesJ O LLNJN NDK N$- N$-$-$ NDK N$- N$-$-s /A cP|jj||jyrn)r chmodr )rfiles rr&z_Database._chmods tTZZ(rc|Srnr?s r __enter__z_Database.__enter__s rc$|jyrn)r%)rargss r__exit__z_Database.__exit__s  rN)r )__name__ __module__ __qualname__r r$rrrr;syncr@rKrWrYr\rdrgrjr7rprs__iter__rur%__del__r&r|rr{rrrr#s C C4&8(2 D>L 5J H @ H HH O G)rrc tjd}tj|||z}|dvr tdt |||S#t$rY(wxYw)aEOpen the database file, filename, and return corresponding object. The flag argument, used to control how the database is opened in the other DBM implementations, supports only the semantics of 'c' and 'n' values. Other values will default to the semantics of 'c' value: the database will always opened for update and will be created if it does not exist. The optional mode argument is the UNIX mode of the file, used only when the database has to be created. It defaults to octal code 0o666 (and will be modified by the prevailing umask). r)rr!r rz)Flag must be one of 'r', 'w', 'c', or 'n')r)r umaskAttributeError ValueErrorr)ryrrums rrr#sd  YYq\ " s| ''DEE T4d ++    s*A AA)r i)__doc__astr,ior$osr collections.abc collections__all__rSr#rabcMutableMappingrrr{rrrsJ. F   } ..}@,r__pycache__/gnu.cpython-312.opt-1.pyc000064400000000332152343453120013207 0ustar00 ֦iHdZddly)z,Provide the _gdbm module as a dbm submodule.)*N)__doc___gdbm /usr/lib64/python3.12/dbm/gnu.pyr s 2r__pycache__/gnu.cpython-312.pyc000064400000000332152343453120012250 0ustar00 ֦iHdZddly)z,Provide the _gdbm module as a dbm submodule.)*N)__doc___gdbm /usr/lib64/python3.12/dbm/gnu.pyr s 2r__pycache__/dumb.cpython-312.opt-2.pyc000064400000026631152343453120013360 0ustar00 ֦iJ-| ddlZddlZddlZddlZddgZdZ e Z GddejjZddZy) NerroropeniceZdZeZeZddZdZdZdZeZ dZ dZ dZ dZ d Zd Zd Zd Zd ZdZdZeZdZdZeZdZdZdZy) _Databasec|jj|}||_|dk(|_|dz|_|dz|_|dz|_d|_|j||j|y)Nrs.dirs.dats.bak) _osfsencode_mode _readonly_dirfile_datfile_bakfile_index_create_update)self filebasenamemodeflags !/usr/lib64/python3.12/dbm/dumb.py__init__z_Database.__init__0ssxx((6  #+%w. %w. $w.   T Tc|dk(r>|j|j|jfD]} tj| t j|jdd}|jy#t $rYZwxYw#t $r[|dvrt j|jdd5}|j|jdddYy#1swYYyxYwwxYw)NnrLatin-1encodingcrw) rrr r removeOSError_iorclose_chmod)rrfilenamefs rrz_Database._createJs 3;!]]DMM4==IJJx(J  i@A GGI  +:%$--yAQ DMM*BAA +s;A8"B8 BB0C+7CC+C' "C+'C+cjd|_i|_ tj|jdd}|5|D]J}|j }t j|\}}|jd}||j|<L dddy#1swYyxYw#t$r|dvrd|_YywxYw)NFrrrrT) _modifiedrr$rr rstrip_ast literal_evalencoder#)rrr(linekeypos_and_siz_pairs rrz_Database._update]s  8i@A D;;=D,0,=,=d,C)C)**Y/C'7DKK$   ":%!DN "s"BABBB21B2cf|j |jsy |jj|j |jj |j|j|jj|jdd5}|j|j|jjD]-\}}|jdd|d}|j|/ dddy#t $rYwxYw#t $rYwxYw#1swYyxYw)Nr!rr,  )rr*r unlinkrr#renamer r$rr&itemsdecodewrite)rr(r0r1entrys r_commitz_Database._commitqs ;; dnn   HHOODMM *  HHOODMM4== 9XX]]4==# ] Ba KK &)-):):)<%%'*jj&;=MN *=C B       C Bs0%D 0DA&D' DD D$#D$'D0c2|j tdyN"DBM object has already been closed)rrrs r _verify_openz_Database._verify_opens ;; <= = rc<t|tr|jd}|j|j|\}}t j |jd5}|j||j|}ddd|S#1swYSxYw)Nutf-8rb) isinstancestrr.r@rr$rrseekread)rr0possizr(dats r __getitem__z_Database.__getitem__s} c3 **W%C ;;s#S XXdmmT *a FF3K&&+C+ + s $#BBcdtj|jd5}|jddt |j }|t zdz t zt z}|jd||z z|}|j|dddt|fS#1swYxYw)Nrb+r) r$rrrFinttell _BLOCKSIZEr9len)rvalr(rHnposs r_addvalz_Database._addvals XXdmmU +q FF1aLaffh-C:%)j8JFD GGE48$ %C GGCL ,SX, +s A0B&&B/ctj|jd5}|j||j |ddd|t |fS#1swYxYw)NrM)r$rrrFr9rT)rrHrUr(s r_setvalz_Database._setvalsJ XXdmmU +q FF3K GGCL,SX, +s #AA"c||j|<tj|jdd5}|j |j|j |j dd|ddddy#1swYyxYw)Narrr3r4)rr$rr r&r9r8)rr0r1r(s r_addkeyz_Database._addkeys]+ C XXdmmS9 = KK & GG#**Y"79IJ K> = =s AA==Bc|jr tdt|tr|j d}n!t|t t fs tdt|tr|j d}n!t|t t fs td|jd|_ ||jvr"|j||j|y|j|\}}|tzdz tz}t|tzdz tz}||kr |j|||j|<y|j||j|<y)N'The database is opened for reading onlyrBzkeys must be bytes or stringszvalues must be bytes or stringsTrO)r rrDrEr.bytes bytearray TypeErrorr@r*rr\rWrSrTrY)rr0rUrHrI oldblocks newblockss r __setitem__z_Database.__setitem__s+ >>AB B c3 **W%CC%!34;< < c3 **W%CC%!34=> >  dkk ! LLdll3/ 0{{3'HCz)A-*>AB B c3 **W%C  KK  rc` t|jS#t$r tddwxYwr=)listrrarr?s rkeysz_Database.keys6 H $ $ H<=4 G H-c|j|jjDcgc] }|||f c}Scc}wN)r@rrjrfs rr7z_Database.itemss> ,0KK,<,<,>?,>Sd3i ,>???s>ct|tr|jd} ||jvS#t$r|j t ddwxYw)NrBr>)rDrEr.rrarrfs r __contains__z_Database.__contains__sX c3 **W%C $++% % {{"@AtK  s 1#Ac` t|jS#t$r tddwxYwr=)iterrrarr?s riterkeysz_Database.iterkeysrkrlc` t|jS#t$r tddwxYwr=)rTrrarr?s r__len__z_Database.__len__ s6 Ht{{# # H<=4 G Hrlc |jdx|_x|_x|_|_y#dx|_x|_x|_|_wxYwrn)r;rrr rr?s rr%z_Database.closesJ O LLNJN NDK N$- N$-$-$ NDK N$- N$-$-s /A cP|jj||jyrn)r chmodr )rfiles rr&z_Database._chmods tTZZ(rc|Srnr?s r __enter__z_Database.__enter__s rc$|jyrn)r%)rargss r__exit__z_Database.__exit__s  rN)r )__name__ __module__ __qualname__r r$rrrr;syncr@rKrWrYr\rdrgrjr7rprs__iter__rur%__del__r&r|rr{rrrr#s C C4&8(2 D>L 5J H @ H HH O G)rrc tjd}tj|||z}|dvr tdt |||S#t$rY(wxYw)Nr)rr!r rz)Flag must be one of 'r', 'w', 'c', or 'n')r)r umaskAttributeError ValueErrorr)ryrrums rrr#si  YYq\ " s| ''DEE T4d ++    s*A AA)r i)astr,ior$osr collections.abc collections__all__rSr#rabcMutableMappingrrr{rrrsJ. F   } ..}@,r__pycache__/ndbm.cpython-312.opt-1.pyc000064400000000331152343453120013335 0ustar00 ֦iFdZddly)z+Provide the _dbm module as a dbm submodule.)*N)__doc___dbm!/usr/lib64/python3.12/dbm/ndbm.pyr s 1r__pycache__/__init__.cpython-312.opt-2.pyc000064400000010330152343453120014155 0ustar00 ֦i gdZddlZddlZddlZddlZGddeZgdZdaiZ ee fZ ddl m Z d dZdZed k(r(ej"d dD]Zeeexsd eyy#e $rdZ Y>wxYw) )openwhichdberrorNc eZdZy)rN)__name__ __module__ __qualname__%/usr/lib64/python3.12/dbm/__init__.pyrr&sr r)dbm.gnudbm.ndbmdbm.dumb)ndbmc tCtD]"} t|dg}ts|a|t|<$tstdtzd|vr t |nd}|d|vsd|vrt}nOt dd|dk(rt dd |tvrt dd j|t|}|j|||S#t$rYwxYw) Nr)fromlistzno dbm clone found; tried %sncrz=db file doesn't exist; use 'c' or 'n' flag to create a new dbzdb type could not be determinedz/db type is {0}, but the module is not available) _defaultmod_names __import__ ImportError_modulesrrformatr)fileflagmodenamemodresults r rr5s  D  9!  HTN3 3v 88D$ %%5  sC CCc tj|} tj|dzd}|j tj|dzd}|j y#t $rj tj|dzd}|j t 't j|}|j Yyn#t $rYnwxYwYnwxYw tj|dztj|dzj}|dk(rytj|dzd} |jd d vr |j y |j n#|j wxYwn#t $rYnwxYw tj|d}n#t $rYywxYw|5|jd }dddn #1swYnxYwdd }t|d k7ry tjd|\}n#tj$rYy wxYw|dvry tjd|dd\}y #tj$rYy wxYw)Ns.pagrbs.dirrs.dbs.datrr)'"rz=l)iΚWi͚WiϚWr )osfsencodeiorcloseOSErrorrstatst_sizereadlenstructunpackr)filenamefdsizes16smagics r rrbs: {{8$H GGHw& -  GGHw& -    6)40A GGIIIh' !    "  7"#wwx')*22 19 GGHw& - vvayL(! GGI) GGIAGGII     GGHd #  ffRj  AaA 1v{==q) << 44==s23x0  <<sAA++ C5AC  C CCCCC"?F "F <E3F "F 3FF FFF00 F<;F<GG%=HH,+H,5II'&I'__main__r$UNKNOWN)ri)__all__r,r*r3sys Exceptionrrrrr.dbmrrrrrargvr5printr r r rEs: '  I  -   *&ZWt zHHQRL gh,9h7!W DsA))A32A3__pycache__/ndbm.cpython-312.pyc000064400000000331152343453120012376 0ustar00 ֦iFdZddly)z+Provide the _dbm module as a dbm submodule.)*N)__doc___dbm!/usr/lib64/python3.12/dbm/ndbm.pyr s 1r__pycache__/gnu.cpython-312.opt-2.pyc000064400000000241152343453120013207 0ustar00 ֦iH ddly))*N)_gdbm /usr/lib64/python3.12/dbm/gnu.pyrs 2r__pycache__/__init__.cpython-312.pyc000064400000014135152343453120013224 0ustar00 ֦idZgdZddlZddlZddlZddlZGddeZgdZda iZ ee fZ ddl m Z d dZd Zed k(r(ej$d dD]Zeeexsd eyy#e$rdZ Y>wxYw)aNGeneric interface to all dbm clones. Use import dbm d = dbm.open(file, 'w', 0o666) The returned object is a dbm.gnu, dbm.ndbm or dbm.dumb object, dependent on the type of database being opened (determined by the whichdb function) in the case of an existing dbm. If the dbm does not exist and the create or new flag ('c' or 'n') was specified, the dbm type will be determined by the availability of the modules (tested in the above order). It has the following interface (key and data are strings): d[key] = data # store data at key (may override data at # existing key) data = d[key] # retrieve data at key (raise KeyError if no # such key) del d[key] # delete data stored at key (raises KeyError # if no such key) flag = key in d # true if the key exists list = d.keys() # return a list of all existing keys (slow!) Future versions may change the order in which implementations are tested for existence, and add interfaces to other dbm-like implementations. )openwhichdberrorNc eZdZy)rN)__name__ __module__ __qualname__%/usr/lib64/python3.12/dbm/__init__.pyrr&sr r)dbm.gnudbm.ndbmdbm.dumb)ndbmctCtD]"} t|dg}ts|a|t|<$tstdtzd|vr t |nd}|d|vsd|vrt}nOt dd|d k(rt dd |tvrt dd j|t|}|j|||S#t$rYwxYw) aOpen or create database at path given by *file*. Optional argument *flag* can be 'r' (default) for read-only access, 'w' for read-write access of an existing database, 'c' for read-write access to a new or existing database, and 'n' for read-write access to a new database. Note: 'r' and 'w' fail if the database doesn't exist; 'c' creates it only if it doesn't exist; and 'n' always creates a new database. Nr)fromlistzno dbm clone found; tried %sncrz=db file doesn't exist; use 'c' or 'n' flag to create a new dbzdb type could not be determinedz/db type is {0}, but the module is not available) _defaultmod_names __import__ ImportError_modulesrrformatr)fileflagmodenamemodresults r rr5sD  9!  HTN3 3v 88D$ %%5  sC CCctj|} tj|dzd}|j tj|dzd}|j y#t $rj tj|dzd}|j t 't j|}|j Yyn#t $rYnwxYwYnwxYw tj|dztj|dzj}|dk(ry tj|dzd} |jd d vr |j y |j n#|j wxYwn#t $rYnwxYw tj|d}n#t $rYywxYw|5|jd }dddn #1swYnxYwdd }t|d k7ry tjd|\}n#tj$rYywxYw|dvry tjd|dd\}y#tj$rYywxYw)auGuess which db package to use to open a db file. Return values: - None if the database file can't be read; - empty string if the file can be read but can't be recognized - the name of the dbm submodule (e.g. "ndbm" or "gnu") if recognized. Importing the given module may still fail, and opening the database using that module may still fail. s.pagrbs.dirrs.dbNs.datrr)'"rz=l)iΚWi͚WiϚWr )osfsencodeiorcloseOSErrorrstatst_sizereadlenstructunpackr)filenamefdsizes16smagics r rrbs5{{8$H GGHw& -  GGHw& -    6)40A GGIIIh' !    "  7"#wwx')*22 19 GGHw& - vvayL(! GGI) GGIAGGII     GGHd #  ffRj  AaA 1v{==q) << 44==s23x0  <<sAA** C4AC  C CCCCC!?F!F;E2F!F2FF FFF// F;:F;GG$<HH+*H+4II&%I&__main__r$UNKNOWN)ri)__doc____all__r,r*r3sys Exceptionrrrrr.dbmrrrrrargvr5printr r r rFs: '  I  -   *&ZWt zHHQRL gh,9h7!W DsA**A43A4