U
    ‚ï_d
1  ã                   @   s”  d dl Z d dlmZmZmZmZmZmZ d dlm	Z	m
Z
mZmZ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 ddlmZmZ d d	lm Z m!Z! d d
l"m"Z" d dl#Z#d dl$m%Z% d dlmZ d dl&Z&d dl'Z'd dl(Z(dd„ Z)dd„ Z*e +d¡dd„ ƒZ,e +d¡dd„ ƒZ-ejj.dd„ ƒZ/e 0d¡dd„ ƒZ1e 0d¡dd„ ƒZ2e 0d¡dd„ ƒZ3e 0d¡d d!„ ƒZ4ej0d"d#d$gd%d&d'„ ƒZ5ej0d(d$gd%d)d*„ ƒZ6ej0d+d$gd%d,d-„ ƒZ7e 0d.¡d/d0„ ƒZ8e 0d1¡d2d3„ ƒZ9e 0d4¡d5d6„ ƒZ:e 0d7¡d8d9„ ƒZ;ej0d:d#d$gd%d;d<„ ƒZ<ej0d=d#d$gd%d>d?„ ƒZ=e 0d@¡dAdB„ ƒZ>e 0dC¡e	dDdE„ ƒƒZ?e 0dF¡dGdH„ ƒZ@ej0dId$gd%dJdK„ ƒZAdS )Lé    N)ÚrequestÚrender_templateÚmake_responseÚredirectÚsessionÚflash)Úlogin_requiredÚlogout_userÚ
login_userÚcurrent_userÚlogin_manager)Údatetime)Úcurrent_appé   )	ÚdbÚUsersÚnotesÚ	lists_tblÚcow_listÚbreeder_tag_cow_detailsÚhc_cow_detailsÚ
ip_addressÚopen_ai_haro)Ú	LoginFormÚCowDataEntryForm)Úcheck_password_hashÚgenerate_password_hash)Úslugify)Úsecure_filenamec                  C   s$   t  ¡ } tjj| d ¡ }|j}|S )N©Úid)r   Úget_idr   ÚqueryÚ	filter_byÚfirstZadmin)Z	curr_userZuser_recordÚis_admin© r&   ú./var/www/hillfarmhub.com/application/routes.pyr%      s    r%   c              	   C   sR   z| j | j| dW S  tk
rL   | t| j| ddƒt| jddƒ   Y S X dS )zúReturn a date that's `years` years after the date (or datetime)
    object `d`. Return the same calendar date (month and day) in the
    destination year, if it exists, otherwise use the following day
    (thus changing February 29 to March 1).

    )Úyearr   N)Úreplacer(   Ú
ValueErrorÚdate)ÚdZyearsr&   r&   r'   Ú	add_years   s    r-   Úreformat_datec                 C   s   t  | d¡} |  d¡S )Nú%Y-%m-%dz%d-%m-%Y)r   ÚstrptimeÚstrftime)Z	this_dater&   r&   r'   r.   $   s    Úleft_of_overviewc                 C   s    t | ƒdkr| dd… d } | S )Né–   r   z...)Úlen)Zoverviewr&   r&   r'   r2   )   s    c                 C   s   | dk	rt j | ¡S dS )z.Check if user is logged-in on every page load.N)r   r"   Úgetr   r&   r&   r'   Ú	load_user0   s    r6   z/logipc                  C   s>   t j} t ¡ }| d¡}t| |d}tj |¡ tj 	¡  | S )Nr/   )r   Údt_stamp)
r   Úremote_addrr   Útodayr1   r   r   r   ÚaddÚcommit)Zthis_ip_addressZ	logged_onZnew_ip_addressr&   r&   r'   Úlogip7   s    
þ
r<   z/showipsc                  C   s   t j ¡ } td| dS )Nzshowips.html)Zip_addys)r   r"   Úallr   )Zip_addressesr&   r&   r'   ÚshowipsJ   s    
r>   ú/c               
   C   s¤   t j d¡} | d krdS |  ¡ rœtjj| d ¡ }tjj| d ¡ }t	jj| d 
t	j ¡ ¡}tj tt¡ t¡j| dd}tƒ }td|| |||tj|dS d	S d S )
NÚ	cowNumberÚhi)Z
cow_number)Úcow_idr   )rB   Úhiddenz
index.html)Úherdcompanion_infor@   Úbreeder_tag_infoÚthis_cow_listsZ	cow_notesÚuser_logged_inÚformzopps that's not a cow number!)r   Úargsr5   Ú	isnumericr   r"   r#   r$   r   r   Úorder_byÚnote_log_dateÚdescr   r   r   r   Újoinr   r   r   Úis_authenticated)r@   rD   rE   Zthis_cow_notesrF   rH   r&   r&   r'   ÚindexP   s    rP   ú/listsc                  C   s   t j ¡ } td| tjdS )Nz
lists.html)Ú	all_listsrG   )r   r"   r=   r   r   rO   )rR   r&   r&   r'   Úlistsa   s    
rS   z/searchÚGETÚPOST)Úmethodsc                  C   s&   t jd } |  ¡ rtd|  ƒS dS d S )NZ	searchboxú/?cowNumber=rA   )r   rH   rJ   r   )Ú
this_queryr&   r&   r'   Úsearchf   s    
rY   z/addcowlistc                  C   s`   t jd } t jd }|  ¡ rX| ¡ rXt| |dd}tj |¡ tj ¡  tdt	|ƒ ƒS dS d S )NZaddcowÚ	this_listr   )rB   Úlist_idrC   ú/lists/zDlooks like some text was entered when it should have been a cow ID? )
r   rH   rJ   r   r   r   r:   r;   r   Ústr)rX   rZ   Znew_cow_listr&   r&   r'   Ú
addcowlistn   s    

ü
r^   z/addlistc                  C   s4   t jd } t| dd}tj |¡ tj ¡  tdƒS )NÚaddlistr   )Z	list_namerC   rQ   )r   rH   r   r   r   r:   r;   r   )rX   Únew_listr&   r&   r'   r_   ~   s    
ý
r_   z/lists/<int:list_id>c                 C   s4   t jj| d ¡ }tjj| dd}td||tjdS )Nr   r   )r[   rC   zthislist.html)rZ   Úthis_list_namerG   )r   r"   r#   r$   r   r   r   rO   )r[   ra   rZ   r&   r&   r'   rZ   Š   s    rZ   z/hideevent/<int:event_id>c                 C   s*   t jj| d ¡ }d|_tj ¡  tdƒS )Nr   r   ú
/dashboard)	r   r"   r#   r$   rC   r   r   r;   r   )Zevent_idrZ   r&   r&   r'   Ú
hide_event   s    
rc   z//removefromlist/<int:cow_list_id>-<int:list_id>c                 C   s2   t jj| d ¡ }d|_tj ¡  tdt	|ƒ ƒS )Nr   r   r\   )
r   r"   r#   r$   rC   r   r   r;   r   r]   )Zcow_list_idr[   rZ   r&   r&   r'   Úremove_from_list˜   s    
rd   z/notec                   C   s   dS )Nzhi -coming soonr&   r&   r&   r&   r'   Únote    s    re   z
/add-eventc               	   C   s„   t ƒ } | jj}t ¡ }| d¡}t| jj| jj|| jjd| j	jdd}t
j |¡ t
j ¡  |  ¡ rxtdƒ td| ƒS tdƒ d S )Nr/   r   r   )rB   rL   Ú
created_onÚ	note_typeÚuser_idÚ	note_textrC   zthrough form validationrW   zform validation failed soz)r   r@   Údatar   r9   r1   r   rL   rg   ri   r   r   r:   r;   Úvalidate_on_submitÚprintr   )rH   r@   rf   Z	new_eventr&   r&   r'   Ú	add_event¤   s&    
ù

rm   ú/loginc                  C   s¢   t ƒ } t| jjƒ t| jjƒ t|  ¡ ƒ |  ¡ r’tdƒ tjj| jjd 	¡ }|rŠt
|j| jjƒr€| jjtd< t|ƒ tdƒS tdƒS ntdƒS td| tjdS )Nzthrough form valiation)Úusernamero   rb   rn   z
login.html)rH   rG   )r   rl   ro   rj   Úpasswordrk   r   r"   r#   r$   r   r   r
   r   r   r   rO   )rH   Úuserr&   r&   r'   ÚloginÌ   s    
rr   rb   c                  C   s4   d} d}t jjdd t j ¡ ¡}td|tj| dS )Nr   Ú r   )rC   zdashboard.html)ÚeventsrG   Úuser_is_admin)	r   r"   r#   rK   rL   rM   r   r   rO   )ru   Zthis_late_availabilityrt   r&   r&   r'   Ú	dashboardä   s    rv   z/logoutc                   C   s   t ƒ  tdƒS )Nrn   )r	   r   r&   r&   r&   r'   Úlogoutö   s    rw   z	/harodatac                  C   s   t j ¡ } td| dS )Nzharodata.html©Zharo_data_records)r   r"   r=   r   rx   r&   r&   r'   Úshowmeü   s    
ry   z/haroc                  C   sÎ  t  ¡ } |  d¡} t ¡ }|d }tt|ƒƒ | d¡}dt_	d}d}d}d}|D ]h}t|ƒ tj
jd	d
| d dddddd}	|	d d d  ¡ }
t ||¡}t ||¡}|d krÂ| d¡}nd}|d krÚ| d¡}nd}t|ƒ d}tdt|
ƒ ¡  ƒ |
dks|
dkrd}nd}t|ƒ |dkrrtjjddddœd|dœgd}|d d d d }t|ƒ t|ƒ t| |||
|| dd¡d }tj |¡ tj ¡  ||	d d d  d! }qRtd"|||d#S )$Nr/   Údetailsz#-----------------------------------z3sk-CYSBlezcQ19S3pIAuXy5T3BlbkFJZSCTCxzPT2CzlyRMOOaJz3\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\bzSummary:(.*)z^Summary: .*?\n(.*)rs   ztext-davinci-003z—Decide whether the following query is related to camping, glamping or outdoor adventures, I need a True or False as an answer:

---------------------

zv
-----------------------------------

Is this query related to camping, glamping or outdoor adventures, True or False:gffffffæ?i   r   r   )ÚmodelÚpromptZtemperatureZ
max_tokensZtop_pZfrequency_penaltyZpresence_penaltyÚchoicesÚtextzDO WE WRITE:ÚTrueÚTRUEzgpt-3.5-turboÚsystemab  You are an expert copy writer. The user will provide queries from journalists which you will provide answers to based on their query and requirements. The user is called Mark, they are the owner of Somerset Yurts and an outdoor adventure, camping and glamping enthusiast they have a website at www.somersetyurts.co.uk. You need to write the response to the journalist as though you are Mark, the journalist shouldn't know the response is generated by OpenAI. If there are images requested you will response with a suitable prompt to generate the image with openai image generator at the bottom of the response.)ÚroleÚcontentrq   )r{   ÚmessagesÚmessagerƒ   Ú
z%0A)r7   Zquery_emailZquery_summaryZquery_responseZ
full_queryZresponse_to_submitz<br>z	haro.html)ÚjsonÚqueriesÚopenai_responses)r   r9   r1   r   Úget_jsonrl   r]   ÚsplitÚopenaiZapi_keyZ
CompletionÚcreateÚstripÚrerY   ÚgroupZChatCompletionr   r)   r   r   r:   r;   r   )rf   r‡   Zthe_query_emailrˆ   Zemail_patternZsummary_patternZtext_patternr‰   r"   ÚresponseZresponse_textÚemailZquery_titleZ
this_emailZnew_article_to_submitZdo_we_writeZarticle_writer2Znew_openai_responser&   r&   r'   Úprocess_request  sx    



ù	

þþ
ú

r“   )BÚosÚflaskr   r   r   r   r   r   Úflask_loginr   r	   r
   r   r   r   Údtr   ÚappZmodelsr   r   r   r   r   r   r   r   r   Zformsr   r   Zwerkzeug.securityr   r   r   ÚuuidZwerkzeug.utilsr   ZrequestsrŒ   r   r%   r-   Útemplate_filterr.   r2   Úuser_loaderr6   Úrouter<   r>   rP   rS   rY   r^   r_   rZ   rc   rd   re   rm   rr   rv   rw   ry   r“   r&   r&   r&   r'   Ú<module>   sr    ,














'


