U
    Ob{h+                     @   s  d dl mZ d dlmZmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlm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mZ d dlm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"Z#e$e%Z&edddd Z'edgdd Z(edgdd Z)dd Z*edgdd Z+eddd,d d!Z,edgd"d# Z-d$d% Z.edgd&d' Z/edgd(d) Z0edgd*d+ Z1dS )-    )StrategyManager)HttpResponseJsonResponse)
NorenApiPy)BrokerAccountsScripts)BrokerAccount)get_userN)PubSub)Broker)shared_task)sleepstatus)Response)api_view)sendTradesbyEmail)datetime)getLogsT)bindc              
   C   sV   z"t  }|D ]}t|j qW dS  tk
rP } ztt| W 5 d }~X Y nX d S )NT)r	   startStrategyForUserdelayid	Exceptionprintstr)selfusersusere r    =/home/worker/MarketYantra/Yantra/yantra/trading/views/jobs.pyworkerStartStrategyForAll   s    r"   GETc              
   C   s   z`| j p| jp| j}|s.tdddtjdW S |dd }t| jj	|}td|
 dtjdW S  tk
r } z4tdt|  tdt|dtjd W Y S d }~X Y nX d S )Nerrorinvalid query paramr   messager   datesuccesszError Jobbing Trade )query_paramsdatar#   r   r   HTTP_400_BAD_REQUESTgetr   r   r   valuesHTTP_200_OKr   loggerr$   r   )requestqury_params	tradeDateZlogsr   r    r    r!   getJobbingTrades!   s    r4   POSTc              
   C   sr   z*t | jj tdd| jj itjdW S  tk
rl } z$tdd| jj itjd W Y S d }~X Y nX d S )Nr'   zStragey started r   zStragey start error for )	r   r   r   r   usernamer   r/   r   r,   r1   r   r    r    r!   startStrategy3   s
    r8   c              
   C   s   zt | }|rttj}t }|d| jd}td|  |jD ]6}dt	|jd}|
|| td| d|  qDtd W d	S W n< tk
r } ztd
t	|  W Y dS d }~X Y nX d S )NQOzTerminate: QID 	TERMINATE)typeZ	accountIdzTerminate: Published: QID z, data:    TzterminateUserProcess Error F)r   r   ZFINVASIAr
   Z
getQueueIdr   r0   debugr   r   publishr   r   )r   babrokerZpubsubZQueueIdaccr+   r   r    r    r!   terminateUserProcess>   s     


rC   c              
   C   s   zJt | jr*tdd| jj itjdW S tdd| jj itjdW S W nB tk
r } z$tdd| jj itjd W Y S d }~X Y nX d S )Nr'   zStrategy Terminated for r   zStragey Termination error for )rC   r   r   r6   r   r/   r,   r   r7   r    r    r!   terminateStrategyR   s    
"rD   c              
   C   s   zt |}|D ]}td|j  t| td|j  t|}td|j  |  td|j  td|j  |  td|j  qt	dW S  t
k
r } ztdt|  W 5 d }~X Y nX d S )Nzuser zstrategy master started z strategy master start: initiate zstrategy master end : initiate zstrategy master starting zstart strategy completedzstartStrategyForUser )r	   r0   r>   r6   rC   infor   Zinitiatestartr   r   r   )r   useridr   r   managerr   r    r    r!   r   ]   s     
r   c              
   C   s   | j dkrtdddtjdS | j}|i ks4|d kr:| j}|d}t|d}|r|rzt|}|	|}W q t
k
r } ztg tjd W Y S d }~X Y qX ntg tjdS |stg tjdS tt| tjdS d S )Nr#   r$   Invalid request methodr&   r   exchangerA   )methodr   r   r,   r+   r#   r-   intr   ZgetScriptByExchanger   r/   listr.   )r1   r+   rJ   rA   symbolsr   r    r    r!   
getSymbols{   s"    

&rO   c                 C   sB   z t | d}tt| W S  tk
r<   tdY nX dS )zw
    Converts a date string in MM-DD-YYYY format to a Unix timestamp (in seconds).
    Example input: '06-19-2024'
    z%d-%m-%Yz!Date must be in MM-DD-YYYY formatN)r   strptimerL   timemktime	timetuple
ValueError)Zdate_strdtr    r    r!   convert_to_timestamp   s
    rV   c                 C   s  z| j p| jp| j}|s0tdddtjdW S t| j}|j	 }|
|j ||j}|d}t|d}t|d}t|d}|d	}	|	d
krd}
n|	}
|jj|||||
d}|	d
krt|}tj|d dd|d< |d t|d< |d t|d< |d t|d< |d t|d< |d t|d< tj|d dd|d< tj|d dd|d< tj|d dd|d< tj|d dd|d< |jddd |ddd d!d"d#d$d$d$d"d%	 }g }| D ]\}}tt|  }d&|!d't||d d(|d d(|d d(|d d(|d d(tt|d tt|d tt|d tt|d d)}|"| q|}td*|dtj#dW S  t$k
r } z tdt|dtjd W Y S d }~X Y nX d S )+Nr$   r%   r&   r   rJ   tokenZ	startdateZenddateintervalZ1D<   )Z	starttimeendtimerX   rQ   z%d-%m-%Y %H:%M:%S)formatr   intointhintlintcintvwapintvcoerce)errorsvoiintoiT)ZinplaceDfirstmaxminlastmeansum)	r\   r]   r^   r_   r`   ra   rf   rd   re   ZOkz%d-%m-%Y 00:00:00z.2f)statrQ   Zssboer\   r]   r^   r_   r`   ra   rf   rd   re   r)   )%r*   r+   r#   r   r   r,   r   r   r   rh   Connectr   getBrokerObjectr-   r   rV   ConnectionObjectZget_time_price_seriespdZ	DataFrameZto_datetimeZastypefloatZ
to_numericZ	set_indexZresampleZaggZdropnaZiterrowsrL   rQ   rR   rS   strftimeappendr/   r   )r1   r2   r@   rB   boEXCHANGEZTOKENZ
START_DATEZEND_DATEINTERVALZINTRZtimedatadfgroupedresultindexrowtsrecordr   r    r    r!   getTimeSeriesData   s    



    







r   c              
   C   s.  | j dkrtdddtjdS t| j}t| jd}|j	j
|d }d |_|  td| j || td	| j ||}z`|jd
d}|rtd tdd|jj dtjdW S td tdddtjdW S W n@ tk
r( } z tdt|dtjd W Y S d }~X Y nX d S )Nr5   r$   rI   r&   r   r   )r   zTest connection startedzTest connection completedZNSEZ2885z&Test connection success {request.user}r)   zTest Connection Sucess for z0Test connection error {request.user} {e.args[0]}zTest Connection error)rK   r   r   r,   r   r   rL   r+   r-   r   filterrh   acccessTokensaver0   r>   ro   rp   rq   Z
get_quotesZAccountnickNamer/   r   r   )r1   r@   r   acrv   quoter   r    r    r!   testConnection   s(    




 
r   c                 C   sH   | j dkrtdddtjdS t| jjddd tdd	dtjdS d S )
Nr5   r$   rI   r&   r   Allz
2025-01-01r)   z
Email sent)rK   r   r   r,   r   r   r   r/   )r1   r    r    r!   temp  s    
r   )N)2Z"trading.Strategies.strategyManagerr   django.httpr   r   Z!trading.NorenRestApiPy.api_helperr   Ztrading.modelsr   r   Z-trading.Entities.BrokerAccounts.brokerAccountr   Zuserauth.viewsr	   ZpyotploggingZtrading.Redis.pubsubr
   Ztrading.Entities.Brokers.brokerr   celeryr   rQ   r   rest_frameworkr   Zrest_framework.responser   Zrest_framework.decoratorsr   trading.Strategies.jobbingr   r   r   Zpandasrr   	getLogger__name__r0   r"   r4   r8   rC   rD   r   rO   rV   r   r   r   r    r    r    r!   <module>   sP   

	






U
