
    i*:                     
   d dl mZ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m	Z	 ddl
mZmZmZmZ ddlmZmZ ddlmZ ddlmZ dd	lmZmZmZmZmZmZmZmZmZ erd dlZ	 d d
l m!Z! erddl"m#Z# ere$Z% G d de&      Z'y#  Y xY w)    )print_functionunicode_literalsN)
itemgetter   )ANYWINPY2TYPE_CHECKINGunicode)LEELOO_DALLASVFS)bos)up2k_wark_from_hashlist)	HAVE_SQLITE3DaemonPebkacabsrealgen_filekeymin_exquoteps3decvjoin)Path)HttpSrvc                   P    e Zd Zd ZddZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)U2idxc                     |j                   | _        |j                  | _        |j                  | _        | j                  j                  | _        t        s| j                  d       y | j                  j                  r| j                  | _	        n| j                  | _	        d| _        d | _        i | _        t        j                  dd      j!                         | _        | j"                  j%                  d       d | _        d| _        d| _        y )Nz=your python does not have sqlite3; searching will be disabled z:memory:F)check_same_threadzcreate table a (b text)g        )loglog_funcasrvargs	srch_timetimeoutr   
srch_icase_open_db_icase_open_db_open_db_std	active_id
active_curcursqlite3connectcursormem_curexecutesh_curp_endp_dur)selfhsrvs     B/home/ubuntu/myenv/lib/python3.12/site-packages/copyparty/u2idx.py__init__zU2idx.__init__+   s    II	II	yy**HHTU99 //DM --DM zUKRRT78

    c                 *    | j                  d||       y )Nu2idx)r    )r4   msgcs      r6   r   z	U2idx.logF   s    gsA&r8   c                 6    d|d<   t        j                  |i |S )NFr   )r,   r-   )r4   r"   kwargss      r6   r(   zU2idx._open_db_stdI   s!    &+"#///r8   c                 R     | j                   |i |}|j                  ddd        |S )Ncasefoldr   c                 *    | r| j                         S | S N)r@   )xs    r6   <lambda>z&U2idx._open_db_icase.<locals>.<lambda>O   s    AAJJL 1 r8   )r(   create_function)r4   r"   r>   dbs       r6   r&   zU2idx._open_db_icaseM   s1    T//
:q*LM	r8   c                 p   t         sy | j                  j                         D ]?  }|j                  }	 |j	                          |j                          |j                          A | j                  | j                  fD ]1  }|s|j                  }|j                          |j                          3 y #  Y sxY wrB   )r   r+   values
connection	interruptcloser/   r1   )r4   r+   rF   s      r6   shutdownzU2idx.shutdownR   s    88??$ 	CB IIKHHJ	 LL$++. 	C^^		
		s   B11B5c           	          t         sg S |d   }|d   }t        | j                  j                  ||      }d}|dd |g}	 | j	                  ||||ddd      d	   S #  t        d
t                     xY w)zsearch by up2k hashlistsizehashzsubstr(w,1,16) = ? and w = ?N   FTi r     )r   r   r"   warksalt	run_queryr   r   )	r4   unamevolsbodyfsizefhashwarkuquvs	            r6   fsearchzU2idx.fsearchf   s     IVV&tyy'9'95%H+Sb	4 	(>>%r2udEJ1MM	(fh''s   A A.c                 4   | j                   r| j                   S t        r| j                  j                  sy t	        j
                  | j                  j                  dd      }|j                         }|j                  d      j                          || _         |S )N   F)r$   r   zpragma table_info("sh"))
r1   r   r"   shrr,   r-   shr_dbr.   r0   fetchall)r4   rF   r+   s      r6   get_shrzU2idx.get_shry   sn    ;;;;499== __TYY--qERiik-.779
r8   c                    | j                   j                  |j                        }|r|S t        rd|j                  vry |j                  }| j
                  j                  j                  j                  |      }|s| j                  d|       y t        j                  j                  |d      }t        j                  j                  |      sy d }t        rt        j                  j                  |dz         sd}	 dj                  t!        |      j#                               }| j%                  |dd	      j'                         }|j)                  d
      j+                          | j                  d|       |s5| j%                  |d      j'                         }| j                  d|       || j                   |<   |S #  | j                  dj                  |t-                            d }Y wxY w)Ne2dzno dbpath for zup2k.dbz-walr   z{}?mode=ro&nolock=1r^   T)r$   urizpragma table_info("up")zro: zcould not open read-only: {}
{})r$   zopened )r+   getrealpathr   flagsr!   vfsdbpathsr   ospathjoinr   existsr   formatr   as_urir'   r.   r0   fetchoner   )r4   vnr+   ptophistpathdb_pathre   s          r6   get_curzU2idx.get_cur   s   hhll2;;'JuBHH4 {{99==((,,T2HH412'',,x3xxw'#((//'F*:;C+224=3G3G3IJmmCm=DDF56??AW./  ---3::<CHHG-.
;BB3QRs   >A=G -G2c           	      	   t         sg g dfS | j                  j                  }d}d}g }d}	d}
d}d}d}d}g d}g d}t        j                  d      }t        j                  d      }t        j                  d      }	 |j                         }|snd}||z   D ]2  }|j                  |      s||v }
|t        |      d	 }d}|rd
}||z  } n |rT|j                  d      rl|dd	 j                  dd      \  }}|j                  d      r2|j                  dd      \  }}|d	d dz   |z   }|j                  d      r2|j                         }n*|dz   j                  dd      \  }}|j                  dd      }|
rd}
|dk(  rd}d}n|dk(  rd}d}n|dk(  rd}d}n|dk(  rd}|j                  d       |rid|d}nb|dk(  rd}|rYd|d}nR|dk(  rd}d}nH|d k(  s|j                  |      r#d}	d!}|d k(  rd"}nd#j                  |      }d$|z   }nt        d%d&|      ||dz   z  }d}d}|rcd}t        j                  d'd|      j                         }d(D ]6  }	 t!        j"                  t%        j&                  t)        |      |            } n n|rd}t+        t-        |      d)z  d)z        }nr|r@d}|j                  d*      }t        |      d+kD  r|d	d+ }t        |      d+k  r<t        d%d,      |j                  d*      rd-}|dd	 }|j                  d*      rd.}|d	d }|rd|v r	 t/        |      j1                         }|d/j                  ||      z  }|j                  |       d}
|r||z  }d}|j5                  |      }t/        |      }|r|j5                  |      s&|j7                          |j                  |j3                                |d	|j9                          }|j;                         \  }}|d0v r|d1j                  |      z  }n|d2j                  ||      z  }	 | j=                  |||||	d|      S #  Y xY w#  t/        |      j3                         }Y %xY w# t>        $ r}t        d3tA        |            d	}~ww xY w)4zsearch by query paramsFr   T)()zand zor znot )===z!=>z>=<z<=zlike z^\.?[a-z_-]+$z (mt\.v) ([=<!>]+) \? \) $z[a-zA-Z]Nz= "r   \ z\"rN   zup.szdatezup.mtup_atzup.atrl   ztrim(?||up.rd,'/')
rdz	casefold(ry   namezup.fnwzsubstr(up.w,1,16)tagsz) zmt.vz+mt.k = '{}' and mt.vz-exists(select 1 from mt where mt.w = mtw and i  zinvalid key z	[tzTZ, ]+)z%Y-%m-%d %H:%M:%Sz%Y-%m-%d %H:%Mz%Y-%m-%d %Hz%Y-%m-%dz%Y-%mz%Yi   *rP   zw/filehash must be 16+ charsz'%'||z||'%'z {}?{} )r{   rz   z {} like ? ) z lower({}) {} ? ) rQ   )!r   r"   r%   recompilestrip
startswithlensplitendswithreplaceappendmatchro   r   subcalendartimegmtimestrptimestrintfloatr
   r@   lowersearchpopstartgroupsrS   	Exceptionrepr) r4   rT   rU   rZ   limicaseqvvahave_mtis_keyis_sizeis_dateis_wark	field_endkw_keykw_valptn_mtptn_lcptn_lcvokkwv2vqheadtailfmtmzsfieldoperexs                                    r6   r   zU2idx.search   s    r5= 		$$	2A,-9:**[)BBvo ==$6\FCGIBB!GA }}S!12S!,2jj&XXc1-FB#2r)A jj& XXZc((a02IIeS);A"G&[A"G'\A"G&[,AIIf%./1&[A./1#X+A"G&[FLLO"G $IF{#4;;A>G"LA !!&=>>QWDDFF<a0668 C$OODMM#a&#,FG a4$./GGCLq6B;#2Aq6B; &DEE <<$"D!"A::c?"D#2A)+
++-A !!$--AIIaLFY	 a ABGNN2.FFHIIbhhj!+AGGIA((*KE4{"_++E22)00==a d	(>>%q"gtSIIo4+
((*A8  	(d2h''	(s0   2P>&Q 'Q' >QQ$'	R
0RR
c                    | j                   j                  }|r[d}	dj                  |D 
cg c]  }
d|
j                  d|
j                    c}
      }| j                  |	t        |      |fz  d       g }dj                  t        j                         t        j                         j                        | _        t        | j                  d| j                  |f       |r|sd}g }n|rd	|z   }nd
|z   }| j                  dj                  ||             g }t               }t!        | j                   j"                        }||k\  r|}d}nd}i }|D ]  }|dk  r n|j                  }|j                  }|j$                  }| j'                  |      }|sD|j)                  d      xr ||j*                  j,                  v }|rdnd}|j)                  |      }|r5d}	| j                  |	|||j.                  fz  d       |j)                  d      }|| _        g }|D ]  }|dk(  r|dz   }|j3                  |        g }|j)                  d      }d|v rdnd}|j5                  |t7        |            }|D ]0  } | d d \  }!}"}#}$}%|$j9                  d      s|%j9                  d      rt;        |$|%      \  }$}%t=        t=        ||$      |%      }&|&|v r[|j?                  |&      rO|rLr'|j?                  |&      r| j                  d|&d       n#|sdd|&z   v rnd}	| j                  |	||&fz  d       tA        |&      }'|sd}(n	 tC        tD        jF                  j                  ||$|%            })tH        s|dk(  rdntK        jL                  |)      jN                  }*dtQ        || j                   jR                  |)|#|*      d | z   }(|dz  }|dk  r n|rd }	| j                  |	||'fz  d       t=        ||'      }| jT                  jV                  j)                  |tX        dd      \  }+},|+jZ                  xs |+}+|+j                  |k7  r/t]        d!|d"|d#|d$|+j                  d"|+j                  d%      |j_                  |'       |j3                  t!        |"      |#|'|(z   |!d d& d'       3 |D ]8  } | d(   }!| d(= i }-d)}.|j5                  |.|!f      D ]  \  }/}0d||/<   |0|-|/<    |-| d*<   : |ja                  |       |sd+}	| j                  |	|t        |      t        |      fz  d        |j3                  d       d| _        |r|jc                  te        d,      -       |tg        |ji                               |dk  xr | fS c c}
w #  Y xY w).NzRsearching across all %s volumes in which the user has 'r' (full read access):
  %sz
  /z =    z	{:.6f}_{}zu2idx-terminatorzselect * from upz1select up.*, substr(up.w,1,16) mtw from up where zselect up.* from up where zqs: {!r} {!r}TFr   dotsrchsrch_re_dotssrch_re_nodotz*searching in volume /%s (%s), excluding %s	srch_exclr   fkfkar^   r   z//zfiltered by srch_excl:    z/.z4database inconsistency in volume '/%s'; ignoring: %sr   z?k=zin volume '/%s': hit: %sz$database inconsistency! in volume '/z' (z), found file [z] which belongs to volume '/ry   rP   )tsszrpr   r   z-select k, v from mt where w = ? and +k != 'x'r   z-in volume '/%s': got %d hits, %d total so farr   )key)5r"   srch_dbgrm   vpathrg   r   r   ro   r   	threadingcurrent_threadidentr)   r   
terminatorsetr   	srch_hitsrh   rv   rf   axsudotpatternr*   r   r0   tupler   r   r   r   r   r   rk   rl   r   r   statst_inor   fk_saltr!   ri   r   dbvr   addextendsortr   listkeys)1r4   rT   rU   rZ   r[   r   r   r   dbgtrC   r   	done_flagretseen_rpsclampclampedtaglistvolvtoprs   rh   r+   dotsrexrex_cfgvuvr   sretr   fk_algr<   hitr   r   r   rdfnvpr   sufapinochk_vn_r   q2kr   s1                                                    r6   rS   zU2idx.run_query_  sf    ii  eA$OQAGGQZZ@OPBHHQ#d)R(!,	$++IIK11399
 	t 2T^^Y4OP#BBDrIB-2B''B/0EDII''(%<CGG n	=CQw99D<<DIIE,,s#C99Y'AESWW\\,AD#'_B99R=C@dD#++66: 99[1!DOC ;s
A

1	 D4B5.QaFBc
+A :T$'G!2r2r==&"--*="2r]FB5r?B/>::b>"w~~b'9 HHB%H!L!%$38*<  VA HHQ$^Q7BZC!$RWW\\$B%?@#)Vq[achhrl>Q>Q  +		))# r# C q72AHHQ$^Q/tRB $		 1 1"mT5 QIFA#ZZ16F||t+'#T2v||V__N 
 R 3r7"BH1Sb6RSu:Tx  	#HHD [[aT2 !EAr!%GAJ DG! #F	# JJt CdCIs3x88!<]n	=` 	HHD)H*D(#'*A'kAAg Px! s   #U><AVVc                     t        | j                        D ]  }t        j                  d       |s y  || j                  k(  r%| j
                  j                  j                          y y )Nr   )ranger$   r   sleepr)   r*   rI   rJ   )r4   
identifierr   r   s       r6   r   zU2idx.terminator  sT    t||$ 	AJJqM	
 'OO&&002 (r8   N)r   )__name__
__module____qualname__r7   r   r(   r&   rL   r\   rb   rv   r   rS   r    r8   r6   r   r   *   s?    6'0
((&'Rm(^`BD3r8   r   )(
__future__r   r   r   rk   r   r   r   operatorr   r7   r   r   r	   r
   authsrvr   r   r   up2kr   utilr   r   r   r   r   r   r   r   r   r,   pathlibr   httpsrvr   xranger   objectr   r  r8   r6   <module>r     sp    7  	 	    9 9 '  )
 
 
 	  E^3F ^3	s    A> >B