U
    52zhr                     @   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 d dlZd dlmZ ejejdZdd	 Zd
d Ze	dgdd Ze	dgdd Ze	dgdd ZdS )    N)settings)JsonResponse)require_http_methods)DevelopmentApplication)EXTRACT_STRUCTURED_DATA_PROMPT)Zapi_keyc                 C   s,   zt |  W S  tk
r&   Y d S X d S )N)pdZto_datetimedate	Exception)Zdate_str r
   7/home/esfera/Desktop/Shao project/shao/shaoApp/views.py
parse_date   s    r   c              
   C   sn   t j| d}z2tjjjdd|dgdd}t|jd j	j
W S  tk
rh } zi  W Y S d }~X Y nX d S )N)descriptionzgpt-4o-2024-05-13user)rolecontentg?)modelmessagesZtemperaturer   )r   formatclientZchatZcompletionscreatejsonloadschoicesmessager   r	   )r   promptresponseer
   r
   r   extract_structured_data   s    
r   GETc              
   C   s  zt jtjd}t jtjd}t jtjd}t jtjd}t|}t|}tj||gdd}||jdd }|j	dd}	|	j
|dd	 |j
|dd	 td
| tjd | tjd t|dW S  tk
r }
 z"tddt|
 idd W Y S d}
~
X Y nX dS )z6
    Merges two CSV files and removes duplicates.
    z cumulative_applicationtables.csvzhistorical_scrape.csvmerged_output.csvzduplicate_entries.csvT)Zignore_indexF)ZkeepindexzMerge completed successfully)r   Zoutput_fileZduplicates_fileZnum_duplicateserrorzMerge failed:   statusN)ospathjoinr   
MEDIA_ROOTr   read_csvconcatZ
duplicatedZdrop_duplicatesto_csvr   build_absolute_uri	MEDIA_URLlenr	   str)requestZfile1Zfile2Zmerged_fileZdup_fileZdf1Zdf2Zcombined_dfZduplicate_rowsZ	unique_dfr   r
   r
   r   mergeCsvFilesView&   s(    


r2   c           
   
   C   s   zt jtjd}t jtjd}t jtjd}t|}t|}dddddd	g}|| }tj||dd
d}|j|dd |d 	 
 }td| tjd t|dW S  tk
r }	 z"tddt|	 idd W Y S d}	~	X Y nX dS )zE
    Enriches merged CSV data using determined application data.
    r   z%cumulative_applicationsdetermined.csvzenriched_merged_output.csvapplication_iddecisionlodgement_datedetermined_datecostcouncil_nameleft)onhowFr    z!Enrichment completed successfully)r   Zenriched_fileZnum_records_enrichedr"   zEnrichment failed: r#   r$   N)r&   r'   r(   r   r)   r   r*   merger,   Znotnasumr   r-   r.   intr	   r0   )
r1   Zmerged_pathZdetermined_pathZenriched_output_pathZ	merged_dfZdetermined_dfcolsZenriched_dfZenriched_countr   r
   r
   r   enrichMergedFileViewF   s$    


r@   c                 C   sV  zt jtjd}t j|s2tddiddW S t|}d\}}|	 D ]\}}t
|dd}tjj|d	 |d
|dt|dt|d|d|d|d|d|d|d|d|ddd\}}	|	r|d7 }qL|d7 }qLtd||dW S  tk
rP }
 z"tddt|
 idd W Y S d}
~
X Y nX dS )z6
    Imports enriched CSV data into the database.
    r   r"   zmerged_output.csv not found.i  r$   )r   r   r    r3   application_urlr4   r5   r6   r7   r8   development_typenumber_of_dwellingsnumber_of_storeysnumber_of_placesZnumber_of_unitsZnumber_of_lots)rB   r4   r5   r6   r7   r8   rC   rD   rE   rF   number_of_apartmentsnumber_of_subdivisions)r3   defaults   zData import completed using GPT)r   createdupdatedzData import failed: r#   N)r&   r'   r(   r   r)   existsr   r   r*   Ziterrowsr   getr   objectsupdate_or_creater   r	   r0   )r1   	file_pathdfrK   rL   _rowZ
structuredobjZ
is_createdr   r
   r
   r   importEnrichedDataViewf   sD    




rV   )r&   r   Zpandasr   django.confr   django.httpr   Zdjango.views.decorators.httpr   ZshaoApp.modelsr   ZopenaiZshaoApp.promptsr   ZOpenAIOPENAI_API_KEYr   r   r   r2   r@   rV   r
   r
   r
   r   <module>   s"   

