o
    jM                     @   s  U d Z ddlmZ ddlmZ ddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlmZ ddlmZ ddlZdZdaded	< dad
Zdd Zdd Zdd Zdd ZdefddZdd Z dd Z!dd Z"dd Z#dd Z$d d! Z%d"d# Z&d$d% Z'd&d' Z(d(d) Z)d*Z*d+d, Z+G d-d. d.e,Z-d/d0 Z.d1d2 Z/d3d4 Z0d5d6 Z1d7d8 Z2d9d: Z3d;d< Z4dFd>d?Z5d@dA Z6dGdBdCZ7e8dDkre7ej9dEd  dS dS )Ha8  
Basic tools for working with LMDB.

    copy: Consistent high speed backup an environment.
        %prog copy -e source.lmdb target.lmdb

    copyfd: Consistent high speed backup an environment to stdout.
        %prog copyfd -e source.lmdb > target.lmdb/data.mdb

    drop: Delete one or more sub-databases.
        %prog drop db1

    dump: Dump one or more databases to disk in 'cdbmake' format.
        Usage: dump [db1=file1.cdbmake db2=file2.cdbmake]

        If no databases are given, dumps the main database to 'main.cdbmake'.

    edit: Add/delete/replace values from a database.
        %prog edit --set key=value --set-file key=/path \
                   --add key=value --add-file key=/path/to/file \
                   --delete key

    get: Read one or more values from a database.
        %prog get [<key1> [<keyN> [..]]]

    readers: Display readers in the lock table
        %prog readers -e /path/to/db [-c]

        If -c is specified, clear stale readers.

    restore: Read one or more database from disk in 'cdbmake' format.
        %prog restore db1=file1.cdbmake db2=file2.cdbmake

        The special db name ":main:" may be used to indicate the main DB.

    rewrite: Re-create an environment using MDB_APPEND
        %prog rewrite -e src.lmdb -E dst.lmdb [<db1> [<dbN> ..]]

        If no databases are given, rewrites only the main database.

    shell: Open interactive console with ENV set to the open environment.

    stat: Print environment statistics.

    warm: Read environment into page cache sequentially.

    watch: Show live environment statistics
    )absolute_import)with_statementN)BytesIO)NoReturni   zlmdb.Environment | NoneENVzutf-8c                 C   s   t | tS )z%Given a str, return a bytes instance.)strencodeENCODING)s r   J/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/lmdb/tool.py	_to_bytesd      r   c                 C   s   | t jv o
t| dkS )zReturn ``True`` if the character `c` can be printed visibly and without
    adversely affecting printing position (e.g. newline).   )string	printableord)cr   r   r   isprinti   s   r   c                 C   sB  t | } t }td}d}t| D ]S\}}t|}|d s?|r2|td || |td |td|  td}|d sJ|td |td	t|f  |t|r_t|ntd
7 }q|dkr|d rd|d  }|td|  |td|d   |td || |td | 	t
S )zQReturn a vaguely /usr/bin/xxd formatted representation of the bytestring
    `s`. r   z  
z%07x:    z%02x.r      )bytesStringIOr   	enumeratechrwriter   r   getvaluedecoder	   )r
   siopridxchZneedr   r   r   xxdo   s2   

r'   c                  C   s  t  } d| _dtpd  | _| jdddd | jdd	d
d | jdddd | jdddddd | jddddd | jdddd | jddddd | jdd dd!d"d | jd#dd$d%d | d&}|jd'dd(d)d* | d+}|jd,d-d.d |jd/d-d0d |jd1d-d2d |jd3d-d0d |jd4d-d5d | d6}|jd7d8dd9d | d:}|jd;dd<d |jd=dd$d>d |jd?dd@dAd | S )BNzpython -mlmdbz%prog [options] <command>
r   z-ez--envzEnvironment file to open)helpz-dz--dbz Database to open (default: main)z-rz--readzOpen environment read-onlyz-Sz
--map_sizeint10z#Map size in megabytes (default: 10))typedefaultr(   z-sz--use-single-file
store_truez@The database was created as a single file and not a subdirectory)actionr(   z-Ez--target_envz$Target environment file for "dumpfd"z-xz--xxdzPrint values in xxd formatz-Mz	--max-dbs   zMaximum open DBs (default: 128)z--out-fd   z"copyfd" command target fdzOptions for "copy" commandz	--compactFz!Perform compaction while copying.)r.   r,   r(   zOptions for "edit" commandz--setappendzList of key=value pairs to set.z
--set-filez%List of key pairs to read from files.z--addzList of key=value pairs to add.z
--add-filez--deletez"List of key=value pairs to delete.zOptions for "readers" commandz-cz--cleanz"Clean stale readers? (default: no)zOptions for "watch" commandz--csvz(Generate CSV instead of terminal output.z
--intervalzInterval size (default: 1sec)z--window
   z!Average window size (default: 10))optparseOptionParserprog__doc__rstripusage
add_optionadd_option_group)parsergroupr   r   r   make_parser   sv   










r=   returnc                 G   s&   |r| |; } t jd| f  td)Nzlmdb.tool: %s
r0   )sysstderrr    
SystemExit)fmtargsr   r   r   die   s   rD   c                 C   sn   | D ]+\}}| tdt|t|f  | | | td | | | td q| td d S )Nz+%d,%d:z->r   )r    r   len)cursorfpkeyvaluer   r   r   dump_cursor_to_fp   s   

rJ   c                 C   s   t d usJ i }| D ]/}|d\}}}|std| |dkr!d }||v r*td| t |r2t|nd |f||< q
|sEt d df|d< |S )N=z DB specification missing "=": %r:main:zDB specified twice: %rzmain.cdbmake)r   	partitionrD   open_dbr   )rC   db_mapargdbnameseppathr   r   r   db_map_from_args   s   

 rT   c                 C   sr   t d usJ t|dkrtd |d }tj|rtd| t|tdd td|f  t j	|| j
d d S )	Nr0   z,Please specify output directory (see --help)r   z#Output directory %r already exists.Z0755   zRunning copy to %r....)compact)r   rE   rD   osrS   existsmakedirsr)   printcopyrV   )optsrC   
output_dirr   r   r   cmd_copy   s   
r^   c                 C   sf   t d usJ |rtd zt| j W n ty*   t d }td| j| Y nw t | j d S )Nz0"copyfd" command takes no arguments (see --help)r0   zBad --out-fd %d: %s)	r   rD   rW   fstatZout_fdOSErrorr?   exc_infoZcopyfd)r\   rC   er   r   r   
cmd_copyfd   s   rc   c           	   
   C   s   t d usJ t|}t jdd<}| D ].\}\}}t|dt}td|f  |j|d}t|| W d    n1 s>w   Y  qW d    d S 1 sOw   Y  d S )NT)bufferswbzDumping to %r...db)	r   rT   beginitemsopenBUF_SIZErZ   rF   rJ   )	r\   rC   rO   txnrQ   rg   rS   rG   rF   r   r   r   cmd_dump  s   "rm   c                    s  |j }t|d  fdd}d}	 |d7 }|d}|dkr!	 |S |dkr*td| zt|d	d
}t|dd
}W n tyH   td| Y nw ||}	|ddkrXtd| ||}
t|	t|
 || krmtd| |ddkrxtd| | j|	|
|d q)Nr0   c                    s   d t | S )N    )joiniter)rR   read1r   r   <lambda>  s    z(restore_cursor_from_fp.<locals>.<lambda>r   T   
   +z$bad or missing plus, line/record #%d   ,r2      :z&bad or missing length, line/record #%dr   s   ->z)bad or missing separator, line/record #%dz"short key or data, line/record #%dz bad line ending, line/record #%drf   )read	functoolspartialrD   r)   
ValueErrorrE   put)rl   rG   rg   rx   Z
read_untilZrec_nrplusZklendlenrH   datar   rq   r   restore_cursor_from_fp  s8   



r   c              	   C   s   t d usJ |std tt jtt|}t|D ]2\}}|| }|dkr)td td|f  t jdd}|| W d    n1 sFw   Y  qd S )Nz3Must specify at least one sub-database (see --help)rL   zCannot drop main DBzDropping DB %r...Tr    )	r   rD   maprN   r   r   rZ   rh   Zdrop)r\   rC   dbsr%   rg   namerl   r   r   r   cmd_drop2  s   r   c                 C   s4   t d usJ | jrtdt  f  tt   d S )NzCleaned %d stale entries.)r   cleanrZ   Zreader_checkreadersr\   rC   r   r   r   cmd_readersA  s   r   c           	   
   C   s   t d usJ t|}t jddd?}| D ]1\}\}}t|dt}td|f  t|||}td||f  W d    n1 sBw   Y  qW d    d S 1 sSw   Y  d S )NT)rd   r    rbzRestoring from %r...zLoaded %d keys from %r)r   rT   rh   ri   rj   rk   rZ   r   )	r\   rC   rO   rl   rQ   rg   rS   rG   countr   r   r   cmd_restoreH  s   "r   c                    s    fddt dt D S )Nc                    s    g | ]} |  |d    qS )r0   r   ).0iZhstr   r   
<listcomp>T  s     zdelta.<locals>.<listcomp>r0   )rangerE   r   r   r   r   deltaS  s   r   z
/sys/blockc                    s   t jtsd S t | }d|jd? |jd@ f   fdd}t tD ].}t jt|}||}|r7|  S t |D ]}t j||}||}|rQ|    S q<q$d S )Nz%s:%srU      c                    sx   t j| d}t j|r:t|}|   kr(t j| dW  d    S W d    d S 1 s3w   Y  d S d S )Ndevstat)rW   rS   ro   rX   rj   rx   strip)ZrootpathdpathrG   Zdevsr   r   maybe`  s   
"z_find_diskstat.<locals>.maybe)rW   rS   rX   	SYS_BLOCKr   st_devlistdirro   )rS   str   r   ZbasepathstatpathZ	base2pathr   r   r   _find_diskstatZ  s$   
r   c                   @   s2   e Zd ZU dZeed< eed< dd Zdd ZdS )	DiskStatter)ZreadsZreads_mergedsectors_readZread_msZwritesZwrites_mergedsectors_writtenZwrite_msZio_countZio_msZtotal_msr   r   c                 C   s   t || _|   d S N)rj   rG   refresh)selfrS   r   r   r   __init__  s   
zDiskStatter.__init__c                    s:    j d t  fddt j   D  d S )Nr   c                 3   s&    | ]\}} j | t|fV  qd S r   )FIELDSr)   )r   r   r
   r   r   r   	<genexpr>  s    z&DiskStatter.refresh.<locals>.<genexpr>)rG   seekvarsupdater   rx   splitr   r   r   r   r     s   zDiskStatter.refreshN)__name__
__module____qualname__r   r)   __annotations__r   r   r   r   r   r   r   s  s   
 r   c                    s  t d usJ i  i fdd} fdd}ddfddfddfd	dfdd
fddfdd|fddfddfddfdd|fddfddfddfdd|fddfdd fddfdd|fdd||fdd fddfdd| fd dfg}d tt  }|rt||dd!|fd"dfdd#|fd$dfg7 }d%}d&d' |D }jrtjtjtjd(}|	d)d' |D  d%}	z	 t 
 t   rڈ  g }
t|D ]\}\}}}||  }|
| t|| t|||< qjr|	|
 nK|tks|	td+  s5t|D ]\}\}}}tj||| d,  qtjd- t}t|
D ]\}}tj||| d,  q9tjd- tj |	d,7 }	q tyg   Y d S w ).Nc                    s   t   fdd}|S )Nc                     sX       tjkr  tdkrdS ttttd  } | j S )Nr0   r   )r1   rE   windowpopleftsumr   floatinterval)n)funchistoryr\   r   r   
windowfunc  s   
z-cmd_watch.<locals>.window.<locals>.windowfunc)collectionsdeque)r   r   )r\   )r   r   r   r     s   zcmd_watch.<locals>.windowc                      s    d d  d S )N	last_pgnopsize      0Ar   r   )infor   r   r   rs     s    zcmd_watch.<locals>.<lambda>z%dZDepthc                          d S )Ndepthr   r   r   r   r   rs         ZBranchc                      r   )NZbranch_pagesr   r   r   r   r   rs     r   ZLeafc                      r   NZ
leaf_pagesr   r   r   r   r   rs     r   z%+dzLeaf/sc                      r   r   r   r   r   r   r   rs     r   ZOflowc                      r   NZoverflow_pagesr   r   r   r   r   rs     r   zOflow/sc                      r   r   r   r   r   r   r   rs     r   ZRecsc                      r   Nentriesr   r   r   r   r   rs     r   zRecs/sc                      r   r   r   r   r   r   r   rs     r   ZRdrsc                      r   )NZnum_readersr   r   r   r   r   rs     r   z%.2fZEnvMbz%+.2fzEnvMb/sZTxsc                      r   NZ
last_txnidr   r   r   r   r   rs     r   zTxs/sc                      r   r   r   r   r   r   r   rs     r   zSctRd/sc                          j S r   )r   r   statterr   r   rs         zSctWr/sc                      r   r   )r   r   r   r   r   rs     r   r   c                 S   s   g | ]	\}}}t |qS r   )rE   r   _headr   r   r   r     s    zcmd_watch.<locals>.<listcomp>)quotingc                 S   s   g | ]\}}}|qS r   r   r   r   r   r   r     s    Tr   r0   r   )r   r   rS   r   csvwriterr?   stdout	QUOTE_ALLwriterowr   r   r   r   r1   maxrE   _TERM_WIDTH_TERM_HEIGHTr    rjusttimesleepr   KeyboardInterrupt)r\   rC   r   Zenvmbcolsr   Z
term_widthwidthsr   Zcntvalsr   rB   r   r   valr   )r   r\   r   r   r   	cmd_watch  sx   

r   c           	      C   s   t d usJ t  }t  }d}|d |d  }tdtd| }t }| jr1t| jd|}n	t| jd d|}|	 |k rK|
| |	 |k s@td|d	 d
t |  f  d S )Ni   r   r   B r   z	/data.mdbzWarmed %.2fmb in %dmsr   i  )r   r   r   arrayr   r   use_single_filerj   envtellreadintorZ   )	r\   rC   r   r   bufsizeZlast_offsetbuft0rG   r   r   r   cmd_warm  s    

r   c              
   C   sr  t d usJ | jstd t  }tj| j|d d | jddddd}g }|D ] }|dkr/d n|}t t|}|t|}|	|||f q'|sX|	dt d |d f |D ]O\}}}t
d|f  |j|dd	4}	t j|dd
}
|
 D ]\}}|	jt|t|dd qzW d    n1 sw   Y  W d    n1 sw   Y  qZt
d |d |  d S )Nz,Must specify target environment path with -Emap_sizer   FT)r   max_dbssyncZwritemapZ	map_asyncZmetasyncrL   zWriting %r...)rg   r    )rg   rd   )r1   z	Syncing..)r   
target_envrD   r   lmdbrj   r   rN   r   r1   rZ   rh   rF   r|   r   r   close)r\   rC   Zsrc_infor   r   rP   r   Zsrc_dbZdst_dbZwtxnZrtxnrH   rI   r   r   r   cmd_rewrite  s@   

r   c                 C   s   t d usJ t|dk}t jdtd:}|D ].}|t|}|d u r+td|f  q|r4td|f  | jr>tt| qtt| qW d    d S 1 sPw   Y  d S )Nr0   T)rd   rg   z%r: missingz%r:)	r   rE   rh   DBgetr   rZ   r'   r   )r\   rC   Zprint_headerrl   rP   rI   r   r   r   cmd_get  s   "r   c           
   
   C   s  t d usJ |rtd t jdd}|jtd}| jpg D ]}t|td\}}}|j||dd q| j	p9g D ]}t|td\}}}||| q:| j
pSg D ]}|j
t|td qT| jpdg D ]-}t|td\}}}t|d}	|j||	 dd W d    n1 sw   Y  qe| jpg D ]+}t|td\}}}t|d}	|||	  W d    n1 sw   Y  qW d    d S 1 sw   Y  d S )	Nz;Edit command only takes options, not arguments (see --help)Tr   rf   rK   F)	overwriter   )r   rD   rh   rF   r   addr   rM   r|   setdeleteZadd_filerj   rx   Zset_file)
r\   rC   rl   rF   elemrH   r   rI   rS   rG   r   r   r   cmd_edit+  s6   "r   c                 C   s$   dd l }dd l}|t   d S )Nr   )codereadlineZInteractiveConsoleglobalsZinteract)r\   rC   r   r   r   r   r   	cmd_shellH  s   r  c                 C   s,   t d usJ tt   tt   d S r   )r   pprintr   r   r   r   r   r   cmd_statN  s   r  P      c                 C   sX   z dd l }dd l}|tj |jd}td|\}}||fW S  t	y+   |  Y S w )Nr   s   1234hh)
fcntltermiosioctlr?   r   fileno
TIOCGWINSZstructunpack	Exception)r,   r	  r
  r
   heightwidthr   r   r   _get_term_widthT  s   
r  c                  G   s   t  \aad S r   )r  r   r   )rC   r   r   r   _on_sigwinch_  r   r  c                 C   s   t  }|| \}}|std |jstd tj|j|jd |j |jd|j	dkda
|jr7t
t|jattdrCttjt t  t d|d	  }|s[td
|d	 f  |||dd   d S )Nz%Please specify a command (see --help)z"Please specify environment (--env)i   FREAD)r   subdirr   createreadonlySIGWINCHZcmd_r   zNo such command: %rr0   )r=   
parse_argsrD   r   r   rj   r   r   r   rx   r   rg   rN   r   r   hasattrsignalr  r  r  r   )argvr;   r\   rC   r   r   r   r   maind  s$   
r  __main__r0   )r  r   ):r6   
__future__r   r   r   r   r   ry   r3   rW   r  r  r   r  r?   r   ior   r   typingr   r   rk   r   r   r   r	   r   r   r'   r=   rD   rJ   rT   r^   rc   rm   r   r   r   r   r   r   r   objectr   r   r   r   r   r   r  r  r  r  r  r   r  r   r   r   r   <module>   sj   1!1
%T"

