
    Xja                         d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ  ee          Z G d	 d
          ZdS )    N)datetime)Path)Any)Session)settings)AppException)
get_loggerc                       e Zd ZdefdZdededeee	f         fdZ
dedeeef         fdZdededeee	f         defd	Zd
S )TenantExportServicedbc                     || _         d S )N)r   )selfr   s     S/lsinfo/ai/hellotax_ai/base_platform/app/services/platform/tenant_export_service.py__init__zTenantExportService.__init__   s        	tenant_id
output_dirreturnc                    |                     dd           d| }ddlm}  |t          j                  }|j        pd}|j        pd}|j                            d          }|j	        }	|j
        }
|| d	z  }dd l}|                    d
          pd}|d|dt          |          d|	d|d|dddt          |          g}d|
i}t          j        ||dd          }|j        dk    rt#          d|j                   |dz  }|                    d          pd}d| dd| dd| dd| dd | d!g}t'          |d"          5 }|D ]\}|d|dt          |          d|	d|d#|g}t          j        ||dd          }|j        dk    r|                    |j        d$z              ]	 d d d            n# 1 swxY w Y   |                     |          }t          |          t          |          |d%S )&NT)parentsexist_oktenant_r   )urlparse	localhosti8  /z.sqlpg_dumpz+/opt/homebrew/opt/postgresql@15/bin/pg_dumpz-hz-pz-Uz-dz-nz
--no-ownerz--no-aclz-f
PGPASSWORD)envcapture_outputtextzPostgreSQL export failed: zpublic_tenant_data.sqlpsqlz(/opt/homebrew/opt/postgresql@15/bin/psqlz3COPY (SELECT * FROM public.users WHERE tenant_id = z) TO STDOUT;z9COPY (SELECT r.* FROM public.roles r WHERE r.tenant_id = z# OR r.tenant_id IS NULL) TO STDOUT;ziCOPY (SELECT ur.* FROM public.user_roles ur JOIN public.users u ON ur.user_id = u.id WHERE u.tenant_id = z>COPY (SELECT * FROM public.role_permissions WHERE tenant_id = z3COPY (SELECT * FROM public.casbin_rule WHERE v1 = 'z') TO STDOUT;wz-c
)schema_filepublic_filestats)mkdirurllib.parser   r   DATABASE_URLhostnameportpathlstripusernamepasswordshutilwhichstr
subprocessrun
returncoder   stderropenwritestdout_get_postgresql_stats)r   r   r   schema_namer   parseddb_hostdb_portdb_namedb_userdb_passwordr$   r0   r   cmdr   resultr%   r!   queriesfqueryr&   s                          r   export_postgresqlz%TenantExportService.export_postgresql   s   555+	++))))))(/00/0[+%+$$S))/o k#7#7#77,,y))Z-ZLL
" [)TMMM!!KFMKKLLL #;;||F##Q'QY)YYYv	vvv P  yB  P  P  PdYdddZ)ZZZ
 +s## 	2q  2 2LL $TPTUUU$))GGFMD0111!2	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2$ **955";//K@P@P[`aaas   A F22F69F6c                    ddl m} d| }| j                             |d| d                    }|                                }| j                             |d|                     }|                                }|pd|pddS )Nr   )r    r   zESELECT COUNT(*) FROM information_schema.tables WHERE table_schema = ''z4SELECT COUNT(*) FROM public.users WHERE tenant_id = )tablesusers)
sqlalchemyr    r   executescalar)r   r   r    r;   rC   table_count
user_counts          r   r:   z)TenantExportService._get_postgresql_statsW   s    ######+	++DfXcfff 
 

 mmooDS	SSTT
 
 ]]__
%*Z_1EEEr   export_resultsc                     |t          j                                                    d|d}|dz  }t          |d          5 }t	          j        ||dd           d d d            n# 1 swxY w Y   |S )Nz1.0)r   export_timeversionresultszmanifest.jsonr"      F)indentensure_ascii)r   utcnow	isoformatr7   jsondump)r   r   r   rQ   manifestmanifest_filerE   s          r   create_manifestz#TenantExportService.create_manifestg   s     ##?,,6688%	
 
 #_4-%% 	AIh!%@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As    A%%A),A)N)__name__
__module____qualname__r   r   intr   dictr2   r   rG   r:   r_    r   r   r   r      s        7    @b3 @bD @bT#s(^ @b @b @b @bDFs FtCH~ F F F F *.@DS#X	     r   r   )r[   r3   r   pathlibr   typingr   sqlalchemy.ormr   
app.configr   app.core.exceptionsr   common_loggingr	   r`   loggerr   re   r   r   <module>rm      s                           " " " " " "       , , , , , , % % % % % %	H		c c c c c c c c c cr   