
    %j#                        d dl Z d dlZd dlZd dlZdZe j                            e j                            d          d          Z	e j                            e	d          Z
e j                            e	d          ZddgZd	Zg d
Zd Zd Zd Zd Zd Zd Zd"d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!d Z"d  Z#d! Z$dS )$    Nzpglite.conf~z.pglitezdb.confpg_dataz-N_tempus_import55432)181716151413121110z9.6z9.5z9.4z9.3c                      t          |           N)RuntimeError)msgs    W/workspace/show-city-briefing-agent/.venv/lib/python3.11/site-packages/pglite/pglite.pydier      s    
s

    c                 h   t          j                     }|                    d           |                                 D ]\  }}|                    d||           |                    d           t	          t
          d          5 }|                    |           d d d            d S # 1 swxY w Y   d S )Nclusterenvironmentw)ConfigParseradd_sectionitemssetopenPGLITE_DB_CONFwrite)c_dictckv
configfiles        r   write_configr'      s    !##AMM)  1	iAMM-   	nc	"	" j	
                 s   B''B+.B+c                      t          j                     } |                     t                     t          |                     d                    S )Nr   )r   readr    dictr   r#   s    r   read_configr,   !   s<    !##AFF>	""###r   c                     t          t          j                  } dg}dt          j        v rC|                    t          j                            t          j        d         d                     |                    t          j                            t          j                            t                                         |D ]}t          j                            |t                    }t          j        
                    |          rHt          j                    }|                    |           |                    d          D ]
\  }}|| |<   | S )Nz/etcOSGEO4W_ROOTetcr   )r*   osenvironappendpathjoinabspathdirname__file__PGLITE_CONFisfiler   r)   r   )envpathspfr#   r$   r%   s          r   read_environementr>   &   s   
rz

CHE##RW\\"*^"<eDDEEE	LL!:!:;;<<<  GLLK((7>>! 	)++AFF1III..  1AJr   c                      t           j                            t                    oGt           j                            t
                    o#t           j                            t                    S )zCheck if db exists)r0   r3   isdirPGLITE_DB_DIRr9   r    PGLITE_DB_PGDATA r   r   check_clusterrD   6   s=    7==''nBGNN>,J,Jnrw}}]mOnOnnr   c                     t           j                            d          rDd t          D             } | d t          j        d                             d          D             z  } nvt           j                            d          rt           j        dz   g} nFt          j        	                    t          j        d         d	d
          g} | d t          D             z  } | D ]%}t          j        
                    |          r|c S &dS )z+Find the pg_ctl executable in common placeslinuxc                 8    g | ]}d                      |          S )z"/usr/lib/postgresql/{0}/bin/pg_ctl)format.0r%   s     r   
<listcomp>zfind_pg_ctl.<locals>.<listcomp>=   s'    UUUA5<<Q??UUUr   c                 N    g | ]"}t           j                            |d           #S )pg_ctl)r0   r3   r4   )rJ   r3   s     r   rK   zfind_pg_ctl.<locals>.<listcomp>>   s(    YYY4"',,tX..YYYr   PATH:freebsdz/bin/pg_ctlr.   bin
pg_ctl.exec           	      t    g | ]5}t           j                            t           j        d          d|dd          6S )ProgramFiles
PostgreSQLrQ   rR   )r0   r3   r4   r1   rI   s     r   rK   zfind_pg_ctl.<locals>.<listcomp>C   s7    vvvef"',,rz.9<ES_``vvvr   N)sysplatform
startswithPG_VERSIONSr0   r1   splitexec_prefixr3   r4   r9   )r;   r<   s     r   find_pg_ctlr\   :   s    
|w'' wUUUUUYY2:f;M;S;STW;X;XYYYY		 	 	+	+ w./',,rz.95,OOPvvjuvvvv  7>>! 	HHH	 4r   c                    t                      rdS | t                      pt          d          } t          j        t
          j                            t
          j                            |           d          dt          dg          
                                 t          }t          t
          j                            t          d          d          5 }|                    d                    |                     |                    d	                    t                               ddd           n# 1 swxY w Y   t!          | |d
           dS )z|
    Initialize a db directory
    @param pg_ctl_path the path to the pg_ctl executable. If None, it will be looked for
    NzCan't find pg_ctlinitdb-Dz-EUTF8zpostgresql.confazport={}
zunix_socket_directories='{}'
)pg_ctl_pathport)rD   r\   r   
subprocessPopenr0   r3   r4   r6   rB   communicatePGLITE_DEFAULT_PORTr   r!   rH   rA   r'   )ra   rb   r=   s      r   init_clusterrg   J   sd   
   	!mm?s+>'?'?bgll27??;#?#?JJDRbdlmnnzz||| D	bgll+->??	E	E H	""4(()))	077FFGGGH H H H H H H H H H H H H H H
 d;;<<<<<s   AD66D:=D:c                  ~    t                      sdS t                       ddl} |                     t                     dS )zRemove a DB clusterNr   )rD   stop_clustershutilrmtreerA   )rj   s    r   reset_clusterrl   `   s=    ?? NNNMMM
MM-     r   c                  \   t                      rd S t                      } d}t          j        dk    rd}t	          d           t          j        | d         dddt          d	t          j	        
                    t          d
          g|t                                                                 d S )Nr   win32i   zStarting PostgreSQL ...ra   startz-wr_   z-lzpostgresql.log)creationflagsr:   )
is_startedr,   rV   rW   printrc   rd   rB   r0   r3   r4   rA   r>   re   )r#   flagss     r   start_clusterrt   i   s    || AE
|w'(((a&t=MtUWU\UaUabo  rB  VC  VC  D! ! !!,r   fastc                     t                      sdS t                      }t          d                    |                      t	          j        |d         ddt          d| g                                           dS )z2
    shutdown_mode = smart, fast or immediate
    NzShutting down in {} mode ...ra   stopr_   z-m)rq   r,   rr   rH   rc   rd   rB   re   )shutdown_moder#   s     r   ri   ri   v   ss     <<  	A	
(
/
/
>
>???a&6Fm\]]iikkkkkr   c                  T    t                      } d                    | d                   S )Nzhost=localhost port={}rb   )r,   rH   r+   s    r   cluster_paramsrz      s#    A#**1V9555r   c                     t                      } t          j        | d         ddt          gt          j        t          j        t          j        d                                          \  }}|                    d          dk    S )Nra   statusr_   Tstdoutstderrstdinuniversal_newlinesPID)r,   rc   rd   rB   PIPEre   find)r#   outerrs      r   rq   rq      so    A=!18TCS T'1'1&0o37	9 9 9 :E	 C
 88E??b  r   c                 $   t                       t                      }t          j        t          j                            t          j                            |d                   d          ddd|d         | g                                           d S )Nra   createdb-h	localhost-prb   	rt   r,   rc   rd   r0   r3   r4   r6   re   db_namer#   s     r   	create_dbr      s    OOOAbgll27??1]3C#D#DjQQSWYdfjlmntluw~  A  A  M  M  O  O  O  O  Or   c                 $   t                       t                      }t          j        t          j                            t          j                            |d                   d          ddd|d         | g                                           d S )Nra   dropdbr   r   r   rb   r   r   s     r   drop_dbr      s    OOOAbgll27??1]3C#D#DhOOQUWbdhjklrjsu|}~~  K  K  M  M  M  M  Mr   c                     t                       t                      } d}t          j        t          j                            t          j                            | d                   d          ddd| d         dd	|d
g	t          j        t          j        t          j        d          	                                \  }}d |
                    d          d d         D             S )Nz[select datname from pg_database where datname not in ('template0', 'template1', 'postgres')ra   psqlr   r   r   rb   z-tz-cpostgresTr}   c                 6    g | ]}|                                 S rC   )strip)rJ   xs     r   rK   zlist_db.<locals>.<listcomp>   s     444!AGGII444r   
)rt   r,   rc   rd   r0   r3   r4   r6   r   re   rZ   )r#   sqlr   r   s       r   list_dbr      s    OOOA
gCbgooa>N.O.OQW!X!XZ^`kmqstu{s|  C  EI  KN  PZ  ![)3'1&0o37	9 9 9 :E	 C
 54syyss34444r   c                    t                       t                      }dd l}|                                }t	          | d          5 t	          |d          5 }t          fdd          D ]*}|                    |                    |                     +|                    |                                           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   rbwbc                  .                          d          S Ni   r)   fis   r   <lambda>zdump_to_plain.<locals>.<lambda>   s    bggdmm r   r   )	rt   r,   zlibdecompressobjr   iterr!   
decompressflush)	dump_file
plain_textr#   r   zdfochunkr   s          @r   dump_to_plainr      s`   OOOAKKK					B	i		 !"*d## 	!r3333S99 / /u--....HHRXXZZ   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s7   C!A&C	=C!	C	C!C	C!!C%(C%c                    t                       t                      }t          j                            t          j                            |d                   d          ddd|d         d| dd	d
|g}|t          z  }t          j        |t          j	        t          j	        t          j	                  }|
                                 d S )Nra   pg_dumpr   r   r   rb   -d-O-x-fr~   r   r   )rt   r,   r0   r3   r4   r6   PGLITE_EXTRA_DUMP_OPTIONSrc   rd   r   wait)r   r   r#   r`   r<   s        r   export_db_plainr      s    OOOA	bgooa&677	C	CT;X\^_`f^gimovx|  C  EI  KT  	UA	""AZ_zXbXghhhAFFHHHHHr   c           	         t                       dd l}|                                }t                      }t          j                            t          j                            |d                   d          ddd|d         d| d	d
g	}|t          z  }t          j
        |t          j        t          j        t          j                  }|j                                         t          |d          5 }|j        D ]*}|                    |                    |                     +|                    |                                           d d d            n# 1 swxY w Y   |                                 d S )Nr   ra   r   r   r   r   rb   r   r   r   r   r   )rt   r   compressobjr,   r0   r3   r4   r6   r   rc   rd   r   r   closer   r~   r!   compressr   r   )	r   r   r   zcr#   r`   r<   r   lines	            r   	export_dbr      sx   OOOKKK					BA	bgooa&677	C	CT;X\^_`f^gimovx|  C  	DA	""AZ_zXbXghhhAGMMOOO	i		 "H 	( 	(DHHR[[&&''''
               FFHHHHHs   0AEEEc                    t                       |t                      v rt          d          t          |           t	                      }t          j        t          j        	                    t          j        
                    |d                   d          ddd|d         d|d	| g	                                           d S )
N*A database of the same name already existsra   r   r   r   r   rb   r   r   )rt   r   r   r   r,   rc   rd   r0   r3   r4   r6   re   )r   r   r#   s      r   import_db_plainr      s    OOO'))GHHHgAbgll27??1]3C#D#DfMMKqy$I' ( ((3r   c           	      \   t                       |t                      v rt          d          t          |           dd l}|                                }t                      }t          j        t          j
                            t          j
                            |d                   d          ddd|d         d	|gt          j        t          j        t          j        
          }t          | d          5 t          fdd          D ]/}|j                            |                    |                     0|j                            |                                           |j                                         d d d            n# 1 swxY w Y   |                                 d S )Nr   r   ra   r   r   r   r   rb   r   )r   r   r~   r   c                  .                          d          S r   r   r   s   r   r   zimport_db.<locals>.<lambda>   s    "''$-- r   r   )rt   r   r   r   r   r   r,   rc   rd   r0   r3   r4   r6   r   r   r   r   r!   r   r   r   r   )r   r   r   r   r#   r<   r   r   s          @r   	import_dbr      s   OOO'))GHHHgKKK					BA"',,rwq7G'H'H&QQSWYdfjlmntluw{  ~E  F  PZ  P_  hr  hw  @J  @O  	P  	P  	PA	i		 "////55 	0 	0EGMM"--..////	bhhjj!!!		              
 FFHHHHHs   8B	FFFc                 4   t                       t                      }t          j                            t          j                            |d                   d          ddd|d         g}|| z  }t          j        |          }|                                 d S )Nra   r   r   r   r   rb   )	rt   r,   r0   r3   r4   r6   rc   rd   r   )argsr#   r`   r<   s       r   r   r      sy    OOOA	bgooa&677	@	@$UY[\]c[deAIAAFFHHHHHr   c            	         t                      rt          d           t                      } |                                 D ]<\  }}t          d                    |                    dd          |                     =t          d                    t                                           t                      rt          d           d S t          d           d S t          d           d S )	NzDB      	Presentz{}	{}
    zparams    	{}StartedStoppedzDB       	Absent)rD   rr   r,   r   rH   ljustrz   rq   )r#   r$   r%   s      r   print_cluster_statusr      s     #!"""MMGGII 	7 	7DAq(//!''"S//1556666%%n&6&677888<< 	))!"""""r   r   )ru   )%r0   rV   configparserr   rc   r8   r3   r4   
expanduserrA   r    rB   r   rf   rY   r   r'   r,   r>   rD   r\   rg   rl   rt   ri   rz   rq   r   r   r   r   r   r   r   r   r   r   rC   r   r   <module>r      s   
			 



 # # # #     RW//44i@@mY777<<y99 !#34  ```    $ $ $
   o o o   = = = =,! ! !/ / /
l 
l 
l 
l6 6 6! ! !O O O
M M M
	5 	5 	5	! 	! 	!    6 6 6     # # # # #r   