o
    "Æi<  ã                   @   sx   d 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 ddl	m
Z
 ddlmZ ddlmZ e e¡ZG dd	„ d	ƒZdS )
u   
ç§Ÿæˆ·æ•°æ®å¯¼å…¥æœåŠ¡
é    N)ÚPath)ÚDictÚAny)ÚSession)Úsettings)ÚAppExceptionc                   @   sŠ   e Zd ZdZdefdd„Zdededee	e
f fdd	„Zdedee	e
f fd
d„Zdedee	e
f fdd„Zdedee	e
f fdd„ZdS )ÚTenantImportServiceu   ç§Ÿæˆ·æ•°æ®å¯¼å…¥æœåŠ¡Údbc                 C   s
   || _ d S )N)r	   )Úselfr	   © r   úS/lsinfo/ai/hellotax_ai/base_platform/app/services/platform/tenant_import_service.pyÚ__init__   s   
zTenantImportService.__init__Ú	tenant_idÚ
export_dirÚreturnc                 C   sö  ddl m} d|› }ddlm} |tjƒ}|jpd}|jpd}|j 	d¡}	|j
}
|j}| j |d|› ƒ¡ | j ¡  d	|i}dd
l}| d¡pJd}|d d }| ¡ rÓt|dƒ}| ¡ }W d
  ƒ n1 siw   Y  | d|¡}dd
l}|jdddd}| |¡ |j}W d
  ƒ n1 s“w   Y  z0|d|dt|ƒd|
d|	d|g}tj||ddd}|jdkr¾td|j› ƒ‚W dd
l}|  |¡ n
dd
l}|  |¡ w |d d }| ¡ r÷|d|dt|ƒd|
d|	dt|ƒg}tj||ddd}ddiS ) u   å¯¼å…¥ PostgreSQL æ•°æ®r   )ÚtextÚtenant_)ÚurlparseÚ	localhosti8  ú/zCREATE SCHEMA IF NOT EXISTS Ú
PGPASSWORDNÚpsqlz(/opt/homebrew/opt/postgresql@15/bin/psqlÚ
postgresqlztenant_1.sqlÚrÚtenant_1Úwz.sqlF)ÚmodeÚsuffixÚdeletez-hz-pz-Uz-dz-fT)ÚenvÚcapture_outputr   zPostgreSQL import failed: zpublic_tenant_data.sqlÚstatusÚsuccess)!Ú
sqlalchemyr   Úurllib.parser   r   ÚDATABASE_URLÚhostnameÚportÚpathÚlstripÚusernameÚpasswordr	   ÚexecuteÚcommitÚshutilÚwhichÚexistsÚopenÚreadÚreplaceÚtempfileÚNamedTemporaryFileÚwriteÚnameÚstrÚ
subprocessÚrunÚ
returncoder   ÚstderrÚosÚunlink)r
   r   r   r   Úschema_namer   ÚparsedÚdb_hostÚdb_portÚdb_nameÚdb_userÚdb_passwordr   r.   r   Úschema_fileÚfÚsql_contentr4   ÚtmpÚtmp_fileÚcmdÚresultr=   Úpublic_filer   r   r   Úimport_postgresql   sh   





ÿ
þú
ÿÿúz%TenantImportService.import_postgresqlc           	      C   s¼   ddl m} |d d }| ¡ sddiS |ƒ }t|ddd	}| ¡  d
¡}W d  ƒ n1 s0w   Y  | ¡ }|D ]}| ¡ rG| |¡ q<W d  ƒ ddiS 1 sUw   Y  ddiS )u   å¯¼å…¥ Neo4j æ•°æ®r   )ÚNeo4jClientÚneo4jzimport.cypherr!   Úskippedr   úutf-8©Úencodingz;
Nr"   )	Úapp.services.graph.neo4j_clientrO   r0   r1   r2   ÚsplitÚget_sessionÚstripr:   )	r
   r   rO   Úcypher_fileÚneo4j_clientrG   Ú
statementsÚsessionÚstmtr   r   r   Úimport_neo4j_   s$   ÿ

€þ
ÿûz TenantImportService.import_neo4jc                 C   sš   ddl m}m} |d d }| ¡ sddiS |jtjtjd |dƒ}t|d	d
d}t	 
|¡}W d  ƒ n1 s:w   Y  |rF| |¡ dt|ƒdœS )u   å¯¼å…¥ Milvus æ•°æ®r   )Ú
CollectionÚconnectionsÚmilvuszvectors.jsonr!   rQ   )Úhostr'   Údocument_vectorsr   rR   rS   Nr"   )r!   Úcount)Úpymilvusr_   r`   r0   Úconnectr   ÚMILVUS_HOSTÚMILVUS_PORTr1   ÚjsonÚloadÚinsertÚlen)r
   r   r_   r`   Úvectors_fileÚ
collectionrG   Úvectors_datar   r   r   Úimport_milvusr   s   ÿ
z!TenantImportService.import_milvusc                 C   sŽ   ddl m} |d }| ¡ sddiS |tjtjtjtjd}d}| d¡D ]}| 	¡ rAt
| |¡ƒ}|jtj|t
|ƒd |d	7 }q%d
|dœS )u   å¯¼å…¥ MinIO æ–‡ä»¶r   )ÚMinioServiceÚfilesr!   rQ   )ÚendpointÚ
access_keyÚ
secret_keyÚsecureÚ*)Úbucket_nameÚobject_nameÚ	file_pathé   r"   )r!   Úuploaded)Úapp.services.storage.miniorq   r0   r   ÚMINIO_ENDPOINTÚMINIO_ACCESS_KEYÚMINIO_SECRET_KEYÚMINIO_SECUREÚrglobÚis_filer8   Úrelative_toÚupload_fileÚMINIO_BUCKET)r
   r   rq   Ú	files_dirÚminior|   rz   ry   r   r   r   Úimport_files…   s,   üý€
z TenantImportService.import_filesN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Úintr   r   r8   r   rN   r^   rp   r‰   r   r   r   r   r      s    Hr   )r   ri   Úloggingr9   Úpathlibr   Útypingr   r   Úsqlalchemy.ormr   Ú
app.configr   Úapp.core.exceptionsr   Ú	getLoggerrŠ   Úloggerr   r   r   r   r   Ú<module>   s    
