o
    <c4                     @   s   d dl Z d dlZd dlZd dlZd dlm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 d dlm  mZ e
jje G dd deZG dd deZdd	 Zd
d Zedkreee j dS dS )    N)BytesIO)InsecureRequestWarningc                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'S )(InsarDatabaseControllerc                 C   s(   || _ || _|| _|| _d | _d | _d S N)usernamepasswordhostdbconcursor)selfr   r   r   r	    r   W/home/exouser/operations/rsmas_insar/tools/insarmaps_scripts/add_attribute_insarmaps.py__init__   s   
z InsarDatabaseController.__init__c              
   C   s|   zt d| j d | j d | j d | _| j | _W d S  ty= } ztd t| t	
  W Y d }~d S d }~ww )Nzdbname='pgis' user='z' host='z' password=''zError While Connecting)psycopg2connectr   r   r   r
   r   	Exceptionprintsysexit)r   er   r   r   r   #   s&   zInsarDatabaseController.connectc                 C   s   | j   d | _ d | _d S r   )r
   closer   r   r   r   r   r   -   s   

zInsarDatabaseController.closec                 C   s0   | j | | j  | j jdkr| j  S d S Nr   )r   executer
   commitZrowcountfetchall)r   queryr   r   r   run_raw_query2   s
   

z%InsarDatabaseController.run_raw_queryc                 C   s   d}| j | | j  S )NzSELECT * FROM area)r   r   r   )r   sqlr   r   r   get_all_datasets;   s   
z(InsarDatabaseController.get_all_datasetsc                 C   s"   |   }|D ]}t|d  qd S r   )r!   r   )r   Zdatasetsdr   r   r   list_dataset_namesA   s   z*InsarDatabaseController.list_dataset_namesc                 C   s2   d| d }| j | | j  }|r|d S dS )Nz.SELECT id from area WHERE area.unavco_name = 'r   r   r   r   fetchone)r   datasetr    idr   r   r   get_dataset_idF   s   
z&InsarDatabaseController.get_dataset_idc                 C   s"   d}| j ||f | j  d S )NzJSELECT exists(SELECT * FROM information_schema.tables WHERE table_name=%s)r   r%   )r   tabler    r   r   r   table_existsP   s   z$InsarDatabaseController.table_existsc                 C   <   |  |}dt| d | d }| j| | j d S )NzHSELECT exists(SELECT attributekey FROM extra_attributes WHERE area_id =  AND attributekey = '');r   r)   strr   r   r&   r   r'   attributekey
dataset_idr    r   r   r   attribute_exists_for_datasetW      
z4InsarDatabaseController.attribute_exists_for_datasetc                 C   r,   )NzGSELECT exists(SELECT attributekey FROM plot_attributes WHERE area_id = r-   r.   r   r/   r1   r   r   r   !plot_attribute_exists_for_dataset`   r5   z9InsarDatabaseController.plot_attribute_exists_for_datasetc                 C   z   |  |}d}d }d}| j| | j  | ||s&d}t|||f}n	d}|t||f}| j|| | j  d S )N zlCREATE TABLE IF NOT EXISTS extra_attributes (area_id integer, attributekey varchar, attributevalue varchar);z1INSERT INTO extra_attributes VALUES (%s, %s, %s);zXUPDATE extra_attributes SET attributevalue = %s WHERE area_id = %s AND attributekey = %s)r)   r   r   r
   r   r4   r0   )r   r'   r2   Zattributevaluer3   r    prepared_valuesr   r   r   add_attributei      

z%InsarDatabaseController.add_attributec                 C   r7   )Nr8   zhCREATE TABLE IF NOT EXISTS plot_attributes (area_id integer, attributekey varchar, attributevalue json);z0INSERT INTO plot_attributes VALUES (%s, %s, %s);zWUPDATE plot_attributes SET attributevalue = %s WHERE area_id = %s AND attributekey = %s)r)   r   r   r
   r   r6   r0   )r   r'   r2   ZplotAttributeJSONr3   r    r9   r   r   r   add_plot_attribute|   r;   z*InsarDatabaseController.add_plot_attributec              
   C   s   d }|rd| d | d | d }n
d| d | d }z| j | | j  W d S  tyD } ztt| W Y d }~d S d }~ww )NzCREATE INDEX "z" ON "z" (z);zCREATE INDEX ON "r   r   r
   r   r   r   r0   )r   r*   Zon
index_namer    r   r   r   r   index_table_on   s   z&InsarDatabaseController.index_table_onc              
   C   sh   d }d| d | d }z| j | | j  W d S  ty3 } ztt| W Y d }~d S d }~ww )Nz	CLUSTER "z	" USING "z";r=   )r   r*   r>   r    r   r   r   r   cluster_table_using   s   z+InsarDatabaseController.cluster_table_usingc                 C   s&   d| d }| j | | j  d S )NzDROP TABLE IF EXISTS ""r   r   r
   r   )r   Z
table_namer    r   r   r   remove_point_table_if_there   s   z3InsarDatabaseController.remove_point_table_if_therec                 C   sF   d}|d7 }|d7 }|d7 }|d7 }|d7 }| j | | j  d S )Nz CREATE TABLE IF NOT EXISTS area z,(unavco_name varchar, project_name varchar, z7longitude double precision, latitude double precision, z4country varchar, region varchar, numchunks integer, z:attributekeys varchar[100], attributevalues varchar[100], z?stringdates varchar[200], decimaldates double precision[200] );rB   )r   msgr   r   r   create_area_table_if_not_exists   s   z7InsarDatabaseController.create_area_table_if_not_existsc                 C   s:   d}|||||||||	|
|f}| j || | j  d S )NzDINSERT INTO area VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)rB   )r   areaproject_namemid_longmid_latcountryregion	chunk_numattribute_keysattribute_valuesstring_dates_sqldecimal_dates_sqlr   ZpreparedValuesr   r   r   insert_dataset_into_area_table   s   z6InsarDatabaseController.insert_dataset_into_area_tablec              
   C   s   |  |}|dkrtd| t|}| | z+|  |}d| }| j| d| }| j| d| }| j| | j  W d S  tyQ } z|d }~ww )Nr$   z5Dataset %s is not on insarmaps, so couldn't remove itzDELETE from area WHERE id = z-DELETE from extra_attributes WHERE area_id = z,DELETE from plot_attributes WHERE area_id = )r)   r   r0   rC   r   r   r
   r   )r   unavco_namer3   Zdataset_id_strr    r   r   r   r   remove_dataset   s(   


z&InsarDatabaseController.remove_datasetc                 C   s   t jd| j d dd S )Nhttps://z
/diskSpaceFverify)requestsgetr   jsonr   r   r   r   get_disk_space   s   z&InsarDatabaseController.get_disk_spaceN)__name__
__module____qualname__r   r   r   r   r!   r#   r)   r+   r4   r6   r:   r<   r?   r@   rC   rE   rQ   rS   rZ   r   r   r   r   r      s(    
	
		r   c                       s<   e Zd Z fddZdd Zdd Zdd Zd	d
 Z  ZS )InsarDatasetControllerc                    s6   t t| |||| t | _t | _|| _|| _d S r   )superr^   r   r   
bodyOutputheadersOutputserverUsernameserverPassword)r   r   r   r   r	   rb   rc   	__class__r   r   r      s
   
zInsarDatasetController.__init__c                 C   s|   t  }||j| jj ||j| jj |t jd |t j	d |t j
d | jdkr<tjd| j ddj| _|S )Nr8   r   zinsarmaps.miami.edurT   FrU   )pycurlZCurlsetoptWRITEFUNCTIONr`   writeZHEADERFUNCTIONra   Z
COOKIEFILEZSSL_VERIFYPEERZSSL_VERIFYHOSTr   rW   rX   url)r   curlr   r   r   
setup_curl   s   
z!InsarDatasetController.setup_curlc                 C   s`   |   }||jd tjd|fd|fg}||j| | jd }||j| |	  |S )N   Zemailr   z/auth/login)
rl   rg   ZPOSTurllibparse	urlencodeZ
POSTFIELDSr   URLperform)r   r   r   rk   ZloginParamsZloginURLr   r   r   
curl_login   s   
z!InsarDatasetController.curl_loginc                 C   s   |  | j| j}||jd|fd|j|ffg | jd }||j| t }||j	|j
 |  |tj}|dkrEtd|  d S |dkrQtj
d d S |dkr]tj
d	 d S tj
d
t| d  t| d d S )Ntitlefilez/WebServices/uploadMbtiles   zSuccessfully uploaded .  zJServer redirected us... Please check username and password, and try again
-  zAServer redirected us... Please check host address, and try again
z The server responded with code: 
zUTF-8)rs   rb   rc   rg   HTTPPOSTZ	FORM_FILEr   rq   r   rh   ri   rr   getinforf   	HTTP_CODEr   r   stderrr0   getvaluedecode)r   fileNamerk   Z	uploadURLbufferresponseCoder   r   r   upload_mbtiles  s     
z%InsarDatasetController.upload_mbtilesc                 C   s   |  | j| j}||jd|fg | jd }||j| |  |t	j
}|dkr4tjd d S |dkr@tjd d S d S )Nr   z/WebServices/deleteMbtilesrw   zIServer redirected us... Please check username and password, and try againrx   z@Server redirected us... Please check host address, and try again)rs   rb   rc   rg   rz   r   rq   rr   r{   rf   r|   r   r}   ri   )r   r   rk   Z	deleteURLr   r   r   r   remove_mbtiles  s   
z%InsarDatasetController.remove_mbtiles)	r[   r\   r]   r   rl   rs   r   r   __classcell__r   r   rd   r   r^      s    r^   c                  C   s   d} t jdd}|d}|jddddd	 |jd
dddd	 |jddddd	 |jd| ddd |jddddd	 |jddddd	 |S )Nzinsarmaps.rsmas.miami.eduz'Edit attributes of an insarmaps dataset)descriptionzrequired argumentsz-fz--folderz3folder of the dataset to look for add_Attribute.txtT)helprequiredz-uz--userz#username for the insarmaps databasez-pz
--passwordz#password for the insarmaps databasez--hostz&postgres DB URL for insarmaps database)defaultr   r   z-dz--dbzpostgres databasez-Uz--unavco_namezUNAVCO name of this dataset)argparseArgumentParseradd_argument_groupadd_argument)dbHostparserr   r   r   r   build_parser*  s   
r   c                 C   s   t  }| }|j}|j}|j}|j}|j}|d dkr |d7 }|j}|d }	t	|	}
t
||||}|  |
D ]%}td| d |
|   |dkrU||||
|  q9||||
|  q9|ddd	 |  d S )
Nr$   /zadd_Attribute.txtzSetting attribute z to plotAttributesZextra_attributesarea_idZarea_id_idx)r   
parse_argsuserr   r   r	   ZfolderrR   readfileZread_templater   r   r   r<   r:   r?   r   )argvr   	parseArgsr   r   r   r	   Zworking_dirrR   Zattributes_file
attributesdbControllerkeyr   r   r   main7  s*   
r   __main__)r   r   r   rf   ior   urllib.requestrn   urllib.parseurllib.errorrW   Z$requests.packages.urllib3.exceptionsr   Zmintpy.utils.readfileutilsr   ZpackagesZurllib3Zdisable_warningsobjectr   r^   r   r   r[   r   r   r   r   r   <module>   s&    FK