o
    Bf	                     @   sH   d dl mZ  d dlZd dlmZ d dlZd dlZe jdddd ZdS )    )current_appN)BytesIOT)bindc              
      s  z$| d| d}t |}|  | }tfdd|d D d }|d u r.ddiW S | d| d| d	}d
ddddd}	t j||	d}
|
  |
 }d|vsXd|vr]ddiW S |d }|d }t }t }t }tj|||dT}|D ]
}||d d qy|D ]< |j	 fdd|D    d }d|v rd|v r|
|d |d  qd|v r||d  qd|v r||d  qW d    n1 sw   Y  |d |d |d t }t|d)}| d |  | d!|  | d"|  W d    n	1 sw   Y  |d | W S  t jy? } zdt|iW  Y d }~S d }~w tyW } zdt|iW  Y d }~S d }~ww )#Nz/rest/services/z/MapServer?f=jsonc                 3   s,    | ]}|d       kr|d V  qdS )nameidN)lower).0layer)
layer_name  /home/ubuntu/webapp/app/tasks.py	<genexpr>   s    z&download_layer_task.<locals>.<genexpr>layerserrorzLayer name not foundz/MapServer/z/queryz1=1*jsontrue4326)where	outFieldsfreturnGeometryoutSR)paramsfieldsfeaturesz#Invalid response from ArcGIS server)shpshxdbfr   Cc                    s   g | ]
} d  |d  qS )
attributesr   r   )r   field)featurer   r   
<listcomp>0   s    z'download_layer_task.<locals>.<listcomp>geometryxyringspathsr   wz.shpz.shxz.dbf)requestsgetraise_for_statusr   nextr   	shapefileWriterr!   recordpointpolylineseekzipfileZipFilewritestrreadgetvalueRequestExceptionstr	Exception)self
arcgis_urltop_layer_namer
   
layers_urllayers_responselayers_datalayer_id	query_urlr   responsedatar   r   shp_ioshx_iodbf_ior   r!   r$   zip_iozip_fileer   )r"   r
   r   download_layer_task   sx   







rM   )	celeryr   r*   ior   r.   r5   taskrM   r   r   r   r   <module>   s    
