o
    g?                     @   s   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Z ddl	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ d dl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 )    N)translate_text_by_google)GeoLocation)slugify   )CityCityTranslateCountryCountryTranslateDistrictIso31662LocationLocationTranslate
LondonAreaLondonZipState
LondonZonePostCodeState)Language)Qc                  C     t jjdd} t jjdd}tjjddd d D ]}z	|jj|d}W n   tjj|||j	|j
d}Y |d urz|j	}|j
}|j}| D ]}d }d }	d }
|d urYt||jd}|d urdt||jd}	|d ur|d	krg }z
tj|d
dd}W n ty } ztd| W Y d }~nd }~ww g }|D ]}|d ur|t||jd qd|}
z$z
tjj||d}W n
   t||d}Y ||_	|	|_
|
|_|  W qF ty } z
t| W Y d }~qFd }~ww d|_|  W q ty } z
t| W Y d }~qd }~ww qd S )NencodeF
translated
   language)countryr   nameslugto_language ,  break_long_wordsdescription )r   r   T)r   objectsexcludegetr   filter
translatesr	   creater   r    r'   r   r   textwrapwrap	Exceptionprintappendjoinsaver   )	languagesbase_languager   lr   r    r'   r   t_namet_slugt_descriptionlinesedesline	country_t rA   2/var/www/Entralon-Web-Backend/geo_location/cron.pytranslate_country   X    
$ 
" $ rC   c                  C   r   )Nr   r   Fr   r   r   )cityr   r   r    r!   r#   r$   r%   r'   r(   )r   rE   T)r   r)   r*   r+   r   r,   r-   r   r.   r   r    r'   r   r   r/   r0   r1   r2   r3   r4   r5   r   )r6   r7   rE   r8   r   r    r'   r   r9   r:   r;   r<   r=   r>   r?   city_trA   rA   rB   translate_city6   rD   rG   c                  C   s0  t jjddd d } t }| D ]}tj D ]}}zP||jj|jj	|j
}|d urRtjj||d\}}|j|_|j|_|  |j
dkrQ|j|_|j|_|  ntdtj d d|j d	|j d
 W q ty } ztdtj d d|j d	|j d| d	 W Y d }~qd }~ww qd S )NT)raw__isnullr   )locationr   r   on %Y/%m/%d %H:%M:%Sz location address for [:z] not found.	] error: .)r   r)   r,   r   r   allget_addresscoordinatesyxr   r   get_or_createaddressrawr5   r2   datetimenowstrftimer   idr1   )	locationsgeo_locationrI   r   gllt_r=   rA   rA   rB   get_location_raw_   s.   
,L r`   c                  C   s.  t jjdddd d } | D ]}|j}|jd u r0|dd ur0|d|_t|ddd|_|jd u sD|j|dkrJ|dd urJ|d|_|j	d u s^|j	|dkrd|dd urd|d|_	|d	}|d urY|d
}t|dd}|d}d }|d urt
jt|dt|dB  }|d u rt
jj|||d}n|d ur| }t
jj|d }|d u rt
jj|||d}d }|d}	|	d urt|	dd}
tjt|
dt|
dB  }|d u rtjj|	|
d}d }|d}|d urt|dd}tjt|dt|dB  }|d u rtjj||d}|d ur<||_|d ur0||_|  |d ur<||_|  |d urD||_|d urL||_|d}|d urY||_|d}|d urf||_|d}|d urs||_|d}|d ur||_|d}|d ur||_d|_|  qd S )NFrH   	raw_check   r   Tallow_unicodetypeclassrU   r   country_code)r    )translates__slug)r   r    r   r   rE   )r   r    statepostcode
place_rankdisplay_nameaddresstypeplace_id)r   r)   r,   rV   r   r+   r   r    
point_typepoint_classr   r   firstr.   lowerr   r   r   r5   rE   rj   zip_coderankrm   address_typero   rb   )r[   rI   r]   address_dictcountry_namecountry_slugrh   r   rE   	city_name	city_slugrj   
state_name
state_slugrk   ru   rm   rv   ro   rA   rA   rB   set_location_datas   s   
((



 
 

 
















r~   c            
      C   s  t jjdddd d } | D ]z}|j}|jd u r/|dd ur/|d|_t|ddd|_|d}|d ur;||_|d}|d uru|d	}|d urP||_	|d
}|d ur]||_
n|d}|d uri||_
|d}|d uru||_|d}	|	d ur|	|_d|_|  qd S )NFra   rc   r   Trd   rm   rU   buildingstreetroadrk   ro   )r   r)   r,   rV   r   r+   r   r    rm   r   r   rt   ro   rb   r5   )
r[   rI   r]   rm   rw   r   r   r   rk   ro   rA   rA   rB   set_location_translate_data   s:   







r   c                  C   s  t jjddd} | D ]t}d|j d}zAtj|dd}|jdkr:| }|r9|D ]}|d	d
kr8||_|	  q(nt
dtj d d|j d|j d|j  W q
 ty~ } zt
dtj d d|j d|j d|  W Y d }~q
d }~ww d S )NTFdata__isnull
data_check-https://nominatim.openstreetmap.org/search?q=&format=json&polygon_geojson=1   timeout   rn   r   rJ   rK   z country data for [rL   ] status code: rM   )r   r)   r,   r   requestsr+   status_codejsondatar5   r2   rW   rX   rY   r   rZ   r1   )	countriesr   urlreqr   itemr=   rA   rA   rB   get_country_data   s(   
2<r   c            	      C   s   ddl m} m}m} tjjddd}|D ]S}|j}|d urgt	|d }| |}z(t
||r/nt
||r:||g}ntd|j||_d|_d |_|  W q tyf } z
t| W Y d }~qd }~ww qd S )Nr   GEOSGeometryPolygonMultiPolygonFr   geojsonz {} not acceptable for this modelT)django.contrib.gis.geosr   r   r   r   r)   r,   r   r   dumps
isinstance	TypeErrorformat	geom_typerQ   r   r5   r2   )	r   r   r   r   r   r   geom_strgeomr=   rA   rA   rB   set_country_coordinates   s2   


r   c               
   C   s  t jjdddd d } | D ]p}z	d|jj }W n   d}Y d|j | d}tj|d	d
}|jdkre| }|rd|D ]&}|ddv rc|dd urc|dd dv rct	|jd ||_
|  q=qt	dtj d d|j d|j d|j  qd S )NTFr   r   ,r#   r   r   r   r   r   rn   )rE   suburbr   rf   )r   r   okrJ   rK   z city data for [rL   r   )r   r)   r,   r   r    r   r+   r   r   r2   r   r5   rW   rX   rY   r   rZ   )citiesrE   rh   r   r   r   r   rA   rA   rB   get_city_data	  s"   
.4r   c            	      C   s   ddl m} m}m} tjjddd}|D ]R}t|j |j	}|d urft
|d }| |}z"t||r4nt||r?||g}nW q||_d|_d |_	|  W q tye } z
t| W Y d }~qd }~ww qd S )Nr   r   Fr   r   T)r   r   r   r   r   r)   r,   r2   r   r   r   r   r   rQ   r   r5   r   )	r   r   r   r   rE   r   r   r   r=   rA   rA   rB   set_city_coordinates  s0   


r   c                  C   s2  t jjddD ]C} | j}tjj| jd}|dkr|j| d q|dkr*|j| d q|dkr5|j| d	 q|d
kr@|j| d q|dkrJ|j| d qtj D ]}|jd urctjj|jdj|d qPt	j D ]}|jd ur|tjj|jdj|d qit
j D ]}|jd urtjj|jdj|d qtj D ]}|jd urtjj|jdj|d qtj D ]}|jd urtjj|jdj|d qtj D ]}|jd urtjj|jdj|d qtj D ]0}|jd urtjj|jdj|d ztjj|jd}tjj|jdj|d W q   Y qqd S )NF)coordinates__isnull)coordinates__intersectsr   )iso_3166_2_lvl_0r   )iso_3166_2_lvl_1   )iso_3166_2_lvl_2   )iso_3166_2_lvl_3   )iso_3166_2_lvl_4)r   )rE   )district)london_zip_state)london_area)london_zone)out_code)	post_code)r   r)   r,   levelr   rQ   updater   rO   r   r
   r   r   r   r   r+   r   )isoir[   objpsrA   rA   rB   location_info5  sR   """"""
r   )&rW   r   r   data_scraper.utilsr   geo_location.utilsr   django.utils.textr   modelsr   r   r   r	   r
   r   r   r   r   r   r   r   r   main.modelsr   django.db.modelsr   r/   rC   rG   r`   r~   r   r   r   r   r   r   rA   rA   rA   rB   <module>   s(    <))H!