
    hj/(                        S SK r S SKrS SKrSSKJr  SSK7  \(       a  SSKJr  S=r=r=r	r
\R                  (       d  \R                  (       a   S SKJr  O7\R&                  (       a   S S
KJr  O\R*                  (       a   S SK	r	O S SKJ
r
   " S S5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rS rg! \ a9    \R!                  S5        \R"                  " \R$                   S	35        S SKJr   Nxf = f! \ a9    \R!                  S5        \R"                  " \R$                   S35        S S
KJr   Nf = f! \ a7    \R!                  S5        \R"                  " \R$                   S35        S SK	r	 Nf = f! \ a:    \R!                  S5        \R"                  " \R$                   S35        S SKJ
r
   GN=f = f)    N   )run_as_module   )*)Var)Redisz Installing 'redis' for database.z  -m pip install -q redis hiredis)MongoClientz"Installing 'pymongo' for database.z -m pip install -q pymongo[srv]z#Installing 'pyscopg2' for database.z" -m pip install -q psycopg2-binary)DatabasezUsing local file as database.z -m pip install -q localdb.jsonc                   b    \ rS rSrS rS rS rS r\S 5       r	S r
S rSS
 jrSS jrS rSrg	)_BaseDatabase4   c                     0 U l         g N_cache)selfargskwargss      0/root/TeamUltroid/pyUltroid/startup/_database.py__init___BaseDatabase.__init__5   s	        c                     XR                   ;   a  U R                   U   $ U R                  U5      nU R                   R                  X05        U$ r   )r   	_get_dataupdater   keyvalues      r   get_key_BaseDatabase.get_key8   sB    ++;;s##s#C<(r   c                     U R                   R                  5         U R                  5        H.  nU R                   R                  XR	                  U5      05        M0     g r   )r   clearkeysr   r   r   r   s     r   re_cache_BaseDatabase.re_cache?   s@    99;CKK\\#%678 r   c                     g)Nr    r   s    r   ping_BaseDatabase.pingD   s    r   c                     g)Nr   r(   r)   s    r   usage_BaseDatabase.usageG   s    r   c                     / $ r   r(   r)   s    r   r#   _BaseDatabase.keysK   s    	r   c                 ^    XR                   ;   a  U R                   U	 U R                  U5        gNT)r   deleter$   s     r   del_key_BaseDatabase.del_keyN   s'    ++C Cr   Nc                     U(       a  U R                  [        U5      5      nU(       a.  [        U[        5      (       a   [        R                  " U5      nU$ U$ ! [
         a     U$ f = fr   )getstr
isinstanceastliteral_evalBaseException)r   r   datas      r   r   _BaseDatabase._get_dataT   s_    88CH%DJtS))''- t ! s   A 
A'&A'c                     U R                  US9nX R                  U'   U(       a  g U R                  [        U5      [        U5      5      $ )N)r=   )r   r   setr8   )r   r   r   
cache_onlys       r   set_key_BaseDatabase.set_key^   s=    E* CxxC#e*--r   c                 z    U R                  U5      nU(       a#  U R                  U5        U R                  X#5        gg)Nr   r   )r   r4   rB   )r   key1key2_s       r   rename_BaseDatabase.renamee   s1    LLLLLL!r   r   )NN)F)__name__
__module____qualname____firstlineno__r   r   r%   r*   propertyr-   r#   r4   r   rB   rH   __static_attributes__r(   r   r   r   r   4   sC    9
  .r   r   c                   v   ^  \ rS rSrSU 4S jjrS r\S 5       r\S 5       rS r	S r
S rS	 rS
 rS rSrU =r$ )MongoDBn   c                 h   > [        USS9U l        U R                  U   U l        [        TU ]  5         g )Ni  )serverSelectionTimeoutMS)r	   dBdbsuperr   )r   r   dbname	__class__s      r   r   MongoDB.__init__o   s+    cDA''&/r   c                 <    S[        U R                  5       5       S3$ )Nz<Ultroid.MonGoDB
 -total_keys: 
>lenr#   r)   s    r   __repr__MongoDB.__repr__t       1#diik2B1C3GGr   c                     g)NMongor(   r)   s    r   nameMongoDB.namew       r   c                 >    U R                   R                  S5      S   $ )NdbstatsdataSize)rV   commandr)   s    r   r-   MongoDB.usage{   s    wwy)*55r   c                 D    U R                   R                  5       (       a  gg r2   )rU   server_infor)   s    r   r*   MongoDB.ping   s    77   !r   c                 6    U R                   R                  5       $ r   )rV   list_collection_namesr)   s    r   r#   MongoDB.keys   s    ww,,..r   c                     XR                  5       ;   a-  U R                  U   R                  SU0S[        U5      05        gU R                  U   R	                  U[        U5      S.5        g)N_idr   )rs   r   T)r#   rV   replace_oner8   
insert_oner   s      r   r@   MongoDB.set   s\    ))+GGCL$$eS\GSZ3HI  GGCL##C#e*$EFr   c                 :    U R                   R                  U5        g r   )rV   drop_collectionr$   s     r   r3   MongoDB.delete   s    $r   c                 \    U R                   U   R                  SU05      =n(       a  US   $ g )Nrs   r   )rV   find_one)r   r   xs      r   r7   MongoDB.get   s3    %%ucl3313W: 4r   c                 n    U R                   R                  S5        U R                  R                  5         g)N	UltroidDBT)rU   drop_databaser   r"   r)   s    r   flushallMongoDB.flushall   s'    k*r   )rU   rV   )r   )rJ   rK   rL   rM   r   r_   rN   rd   r-   r*   r#   r@   r3   r7   r   rO   __classcell__rY   s   @r   rQ   rQ   n   sY    
H   6 6/% r   rQ   c                   f   ^  \ rS rSrU 4S jr\S 5       r\S 5       rS rS r	S r
S rS	 rS
rU =r$ )SqlDB   c                   > Xl         S U l        S U l         [        R                  " US9U l        SU R                  l        U R                  R                  5       U l        U R                  R                  S5        [        TU ]A  5         g ! [         at  n[        R                  U5        [        R                  S5        U R                  (       a  U R                  R                  5         [        R                  " 5          S nANS nAff = f)N)dsnT;CREATE TABLE IF NOT EXISTS Ultroid (ultroidCli varchar(70))zInvaid SQL Database)_url_connection_cursorpsycopg2connect
autocommitcursorexecute	ExceptionLOGS	exceptioninfoclosesysexitrW   r   )r   urlerrorrY   s      r   r   SqlDB.__init__   s    		'//C8D*.D'++224DLLL  M 	  	NN5!II+,  &&(HHJJ	s   A$B
 

DA*DDc                     g)NSQLr(   r)   s    r   rd   
SqlDB.name   s    r   c                     U R                   R                  S5        U R                   R                  5       n[        US   S   R	                  5       S   5      $ )Nz:SELECT pg_size_pretty(pg_relation_size('Ultroid')) AS sizer   )r   r   fetchallintsplit)r   r=   s     r   r-   SqlDB.usage   sL    H	
 ||$$&471:##%a())r   c                     U R                   R                  S5        U R                   R                  5       nUVs/ s H  o"S   PM	     sn$ s  snf )NzlSELECT column_name FROM information_schema.columns WHERE table_schema = 'public' AND table_name  = 'ultroid'r   )r   r   r   )r   r=   rG   s      r   r#   
SqlDB.keys   sE    z	
 ||$$&"#d!d###s   A
c                 $    U R                   R                  SU S35        U R                   R                  5       nU(       d  g [        U5      S:  a  U H  nUS   (       d  M  US   s  $    g g ! [        R                  R                   a     g f = f)NzSELECT z FROM Ultroidr   r   )r   r   r   errorsUndefinedColumnr   r^   )r   variabler=   is       r   r7   	SqlDB.get   s    	LL  78*M!BC ||$$&t9>Q44Q4K   .. 		s   A. .BBc                     U R                   R                  SU 35        U R                  R                  X05        U R                   R                  SU S35        U R                   R                  SU S3[        U5      45        g! [        R                  R                  [        R                  R
                  4 a     N[         a  n[        R                  U5         S nANS nAff = f)Nz*ALTER TABLE Ultroid DROP COLUMN IF EXISTS zALTER TABLE Ultroid ADD z TEXTzINSERT INTO Ultroid (z) values (%s)T)r   r   r   r   r   SyntaxErrorr<   r   r   r   r   r8   )r   r   r   ers       r   r@   	SqlDB.set   s    	LL  #McU!ST
 	C<(7uEBC4SEG#e*W //1L1LM 	 	NN2	s   B 8C( 	C(	C##C(c                      U R                   R                  SU 35        g! [        R                  R                   a     gf = f)Nz ALTER TABLE Ultroid DROP COLUMN FT)r   r   r   r   r   r$   s     r   r3   SqlDB.delete   sD    	LL  #CC5!IJ  .. 		s   ! AAc                     U R                   R                  5         U R                  R                  S5        U R                  R                  S5        g)NzDROP TABLE Ultroidr   T)r   r"   r   r   r)   s    r   r   SqlDB.flushall   s?    12I	
 r   )r   r   r   )rJ   rK   rL   rM   r   rN   rd   r-   r#   r7   r@   r3   r   rO   r   r   s   @r   r   r      sN    &   * *$ 
 r   r   c                   P   ^  \ rS rSrS\4U 4S jjr\S 5       r\S 5       rSr	U =r
$ )RedisDB    c                   > U(       ag  SU;   aa  UR                  S5      nUS   n[        US   5      nUR                  S5      (       a&  UR                  S5        SS Kn	U	R
                  " 5         O4U(       a  U(       d&  UR                  S5        SS Kn	U	R
                  " 5         XS'   X7S'   X'S	'   UR                  5       S
:X  a  U(       d  Su  pp[        R                   H5  nUR                  S5      (       d  M  UR                  S5      (       d  M3  Un
M7     U
(       a%  U
R                  SSS9S   R                  S5      S   nU(       ar  [        R                  R                  SU S35      US'   [        R                  R                  SU S35      US	'   [        R                  R                  SU S35      US'   [        S0 UD6U l        U R                  R                  U l        U R                  R                  U l
        U R                  R                  U l        U R                  R                  U l        [         TU ]E  5         g )N:r   httpz+Your REDIS_URI should not start with http !zPort Number not foundhostpasswordportqovery)r   r   r   r   QOVERY_REDIS__HOSTrG   r   )maxsplitr   _PORT	_PASSWORDr(   )r   r   
startswithr   r   r   lowerosenvironendswithr7   r   rV   r@   r#   r3   rW   r   )r   r   r   r   platformloggerr   r   spli_r   varhash_vars_rY   s                r   r   RedisDB.__init__   s    C4KJJsOE8DuRy>Dv&&JK
TLL01HHJv%zv>>x')7&C##O449P9PC $ 		#	215;;C@C!#-we0L!Mv!#-we0L!Mv%'ZZ^^mE7)4T%Uz"/&/77;;77;;GGLL	ggnnr   c                     g)Nr   r(   r)   s    r   rd   RedisDB.name$  rf   r   c                 H   ^  [        U 4S jT R                  5       5       5      $ )Nc              3   Z   >#    U  H   nTR                   R                  U5      v   M"     g 7fr   )rV   memory_usage).0r|   r   s     r   	<genexpr> RedisDB.usage.<locals>.<genexpr>*  s#     @Kq477''**Ks   (+)sumr#   r)   s   `r   r-   RedisDB.usage(  s    @DIIK@@@r   )rV   r3   r7   r#   r@   )rJ   rK   rL   rM   r   r   rN   rd   r-   rO   r   r   s   @r   r   r      s;     ,\   A Ar   r   c                   D   ^  \ rS rSrU 4S jr\S 5       rS rS rSr	U =r
$ )LocalDBi0  c                    > [        S5      U l        U R                  R                  U l        U R                  R                  U l        U R                  R                  U l        [
        TU ]  5         g )Nultroid)r
   rV   r7   r@   r3   rW   r   )r   rY   s    r   r   LocalDB.__init__1  sG    9%77;;77;;ggnnr   c                     g)Nr   r(   r)   s    r   rd   LocalDB.name8  s    r   c                      U R                   R                  5       n[        U[        5      (       a  [	        UR                  5       5      $  [	        U R                  R                  5       5      $ ! [         a     N/f = fr   )rV   	_raw_datar9   dictlistr#   r   r   )r   raws     r   r#   LocalDB.keys<  sj    	''##%C#t$$CHHJ'' % DKK$$&''  		s   AA. .
A;:A;c                 <    S[        U R                  5       5       S3$ )Nz<Ultroid.LocalDB
 -total_keys: r\   r]   r)   s    r   r_   LocalDB.__repr__E  ra   r   )rV   r3   r7   r@   )rJ   rK   rL   rM   r   rN   rd   r#   r_   rO   r   r   s   @r   r   r   0  s-      (H Hr   r   c            
      4   Sn SSK Jn   [        (       ag  [        [        R
                  =(       d    [        R                  [        R                  =(       d    [        R                  [        R                  USSSS9$ [        (       a  [        [        R                  5      $ [        (       a  [        [        R                  5      $ [         R#                  S5        [%        5       $ ! [&         a  n[         R)                  U5         S nAOS nAff = f[+        5         g )NFr   )	HOSTED_ONT   )r   r   r   r   decode_responsessocket_timeoutretry_on_timeoutzxNo DB requirement fullfilled!
Please install redis, mongo or sql dependencies...
Till then using local file as database.)r   r   r   r   r   	REDIS_URI	REDISHOSTREDIS_PASSWORDREDISPASSWORD	REDISPORTr	   rQ   	MONGO_URIr   r   DATABASE_URLr   criticalr   r<   r   r   )_err   errs      r   r   r   I  s    
C5]]3cmm++@s/@/@]]"!% !%  [3==))X))**MM M 9 sFs*   A1C# <#C#  #C# C# #
D-DD)r:   r   r   r   r   configsr   r   r	   r   r
   r   r   redisImportErrorr   r   system
executabler   pymongor   localdbr   rQ   r   r   r   r   r(   r   r   <module>r     s    	 
   -1 0 0 0h==CMM 
 	]]('
 	%$7 7t)m )hMM Mf5Am 5AvHm H2e	   		45
		S^^$$DEF   (		67
		S^^$$CDE'(  		78
		S^^$$FGH  %		12
		S^^$$CDE$$%sH   C )D
 E F <DD
<E	E	:F	F	<GG