o
    GEdVK                     @   sH  d dl Z 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Zd dlZd dlmZ d dlZd dlmZ d dlZd dlmZ d dlZd dlZd dlmZmZ eed	Zed
ZedZedZedZ edZ!e Z"G dd deZ#G dd deZ$dgZ%e"j&ee%dg ddgd dZ'ej(j)e!ee edZ*e*+ Z,dZ-dZ.dZ/e"ddd Z0e"dd?d e1fd!d"Z2d#e3d$e1fd%d&Z4d$e1fd'd(Z5e"d)d?d*e1fd+d,Z6d#e3d$e1fd-d.Z7e"8d/d0e#fd1dZ#e"d2d@d3e1d e1d4e1fd5d6Z9e"8d7d8e$fd9d:Z:e;d;kr"ej<d<d=e3ed> dS dS )A    N)FastAPI)CORSMiddleware)Optional)	BaseModel)request)perf_counter)ConfigRepositoryEnvz../.env
Flask_PORTDB_NameDB_UserDB_PasswordHOSTc                   @   s   e Zd ZU eed< dS )UpdateStocksqueryN)__name__
__module____qualname__str__annotations__ r   r   ;/home/ubuntu/projects/investor-integration/flaskAPI/main.pyr      s   
 r   c                   @   s   e Zd ZU eed< eed< eed< eed< eed< eed< eed< eed< eed	< eed
< eed< eed< eed< eed< eed< eed< eed< eed< eed< eed< eed< eed< dS )StocksInstrumentIdentifierExchange	orderType	tradeTypetradeStatusLastTradeTimeLastTradePriceActualBuyPriceActualSellPriceSelectedBuyPriceSelectedSellPriceStopLossPriceTargetPrice	candle_IDchart_IDindicator_ID	others_IDimage_Locationanalysis_IDUserID
BoughtTimeSoldTimeN)r   r   r   r   r   floatr   r   r   r   r   #   s.   
 r   *T)GETPUTPOSTDELETEUPDATE)allow_originsallow_credentialsallow_methodsallow_headers	stockdata)hostuserpassworddatabasez"https://nimblerest.lisuns.com:4532z$4e9766d5-6f38-4364-99e7-d74d98c7590dzlit_datapipeline.z
/flask-apic                      s
   ddiS )Nhiworldr   r   r   r   r   	read_rootU   s   rA   z/flask-api/GetMasterStocks
instrumentc              
      s   t |  z9tdt dt}| d ur!tdt d|  dt}g }t | td| D ]}||d |  q.d|iW S  tyU } zt | W Y d }~d S d }~ww )Nselect * from z+masterStocks order by InstrumentIdentifier z+masterStocks where InstrumentIdentifier = 'z'order by InstrumentIdentifierr   r   instruments)	printpdread_sql_querydataBaseNameconnrange__len__append	Exception)rB   stocksmyjsonsindexexr   r   r   GetMasterStocksZ   s,   
rR   fromTimeinstrumentDatac              
   C   s\   zt  }tdt d| dt}t  }|W S  ty- } zt| W Y d }~d S d }~ww )Nzselect count(*) from z(stockdata where InstrumentIdentifier = 'z' and tradeStatus != 'closed'r   rF   rG   rH   rI   rM   rE   )rS   rT   startrN   stoprQ   r   r   r   GetLiveStocksCountq      rX   c              
   C   s\   zt  }tdt d|  dt}t  }|W S  ty- } zt| W Y d }~d S d }~ww )NrC   z1all_stocks_details where InstrumentIdentifier = ''rU   )rT   rV   rN   rW   rQ   r   r   r   GetStocksRealTimeDB   rY   r[   z/flask-api/getWeeklyStocksweekNamec           	      C   sJ  zt  }d}| d urd|  d}tdt d| t}g }td| D ]a}|d | |d | tjt	|d | d	 
d
|d | tjt	|d | d	 
d
|d | |d | |d | |d | |d | |d | |d | |d | d}|| q%t  }|W S  ty } zt| |W  Y d }~S d }~ww )N zwhere weekName='rZ   rC   zweeklydata r   r   	orderDate  z%d %B, %Y %H:%M:%SExitDate
EntryPricetargetPrice	ExitPricer$   WeekNamer   r   )r   r^   orderDateFormatr`   ExitDateFormatr   rb   rc   ra   r$   rd   r   r   )r   rF   rG   rH   rI   rJ   rK   datetimefromtimestampintstrftimerL   rM   rE   )	r\   rV   weekNameTempweeklystocksrO   itemmyjsonrW   rQ   r   r   r   getWeeklyStocks   sH   










ro   c              
   C   sv   z#t | d } t dt d| d|  d}t }t|}t }|jW S  ty: } zt| W Y d }~d S d }~ww )Nr_   z/GetHistory/?accessKey=z#&exchange=NSE&instrumentIdentifier=z&periodicity=TICK&from=z
&xml=false)	ri   endpointapikeyr   requestsgetcontentrM   rE   )rS   rT   urlDatarV   resprW   rQ   r   r   r   GetStocksRealTime   s   
rw   z/flask-api/UpdateStocksr   c                    sn   t |  | D ]-}|d dD ]#}zt| t  W q ty3 } z
t | W Y d }~qd }~ww qd S )N   |)rE   splitmycursorexecuterI   commitrM   )r   quriesirQ   r   r   r   r      s   
z/flask-api/GetStocksuseridr   c                    s  t | zLd}| d ur | dkr |d|  d }d|  d} nd} tdt d| dt d|  d		t}|d ur_| dkrDd
| d} n| d| d } tdt d| dt d|  d	t}|d ur| dkrnd| d} n| d| d } tdt d| dt d|  d		t}t | g }tj }t|j|j|j	ddd}t|j|j|j	ddd}t
d| D ]}	t|d |	 }
d}d}d}d}d}t
d|
 D ]}t | |
d | }|
d | }|d |	 dkr|d |	 }|
d | |d |	  }d|   krdkrn n||  kr|krn n|d |	 dv rg|d |	 |
d | krg|
d | |d |	  }|
d | }d |
d | t d!|d" |	 |
d | }t| t  d#}|d |	 d$kr|d% |	 |
d | ks|d& |	 |
d | k rd'|d |	< |
d | |d( |	  }d)|
d | t d!|d" |	 |
d | }t| t  d#}|d |	 d*kr|d+ |	 }|d+ |	 |
d |  }d|   krdkrn q||  kr|krn q|d |	 d,krA|d+ |	 |
d | k rA|d+ |	 |
d |  }|
d | }d-|
d | t d!|d" |	 |
d | }t| t  d#}|d |	 d$kr|d% |	 |
d | k sd|d& |	 |
d | kr|d. |	 |
d |  }d/|
d | t d!|d" |	 |
d | }t| t  d#}q|du r|d |	 d'krd0|t d!|d" |	 |}t| t  tdt d| dt d1|d" |	  d2	t}|d3 |	 }d4}|dkrd5}i d|d d d6|d6 d d7|d8t|d9|d9 d d:|d: d d;|d<|d=dd>|d> d d?|d? d d@|d@ d d%|d% d d&|d& d dA|d" d d|d d d|d d }|| t | q|W S  tyk } zt | |W  Y d }~S d }~ww )BNz where tradeStatus != 'closed' r]   z and userid = 'rZ   z where userid = 'zselect (select count(*) FROM z
stockdata a0  ) as counts,InstrumentIdentifier,stockid,tradeType,Exchange,LastTradeTime,LastTradePrice,SelectedBuyPrice,SelectedSellPrice,ActualBuyPrice,ActualSellPrice,StopLossPrice,TargetPrice,tradeStatus,orderType,BoughtTime,SoldTime,candle_ID,chart_ID,indicator_ID,others_ID,image_Location,analysis_ID,UserID from z order by LastTradeTimez where InstrumentIdentifier ='z and InstrumentIdentifier ='z  order by LastTradeTimez where tradeStatus in ('z	', 'amo')z and tradeStatus in ('a1  ) as counts, InstrumentIdentifier,stockid,tradeType,Exchange,LastTradeTime,LastTradePrice,SelectedBuyPrice,SelectedSellPrice,ActualBuyPrice,ActualSellPrice,StopLossPrice,TargetPrice,tradeStatus,orderType,BoughtTime,SoldTime,candle_ID,chart_ID,indicator_ID,others_ID,image_Location,analysis_ID,UserID from       	   r   r   FLASTTRADEPRICELASTTRADETIMEr   Buyr"   rx      r   )openamozupdate {1} set tradeStatus='live',ActualBuyPrice ={0}, BoughtTime={3}, LastTradePrice={0}, LastTradeTime={3} where stockid = '{2}'r:   stockidTliver$   r%   closedr    zupdate {1} set tradeStatus='closed',ActualSellPrice ={0}, SoldTime={3}, LastTradePrice={0}, LastTradeTime={3} where stockid = '{2}'Sellr#   r   zupdate {1} set tradeStatus='live',ActualSellPrice ={0}, SoldTime={3}, LastTradePrice={0}, LastTradeTime={3} where stockid = '{2}'r!   zupdate {1} set tradeStatus='closed',ActualBuyPrice ={0}, BoughtTime={3}, LastTradePrice={0}, LastTradeTime={3} where stockid = '{2}'zJupdate {1} set LastTradePrice={0}, LastTradeTime={3} where stockid = '{2}'zstockdata where stockid='z' order by LastTradeTimecountszt-data profit losszt-data profit gainr   ra   liveStockCountr   r   
profitLosstargetColor
LoadedFromr-   r.   r   stockID)rE   rF   rG   rH   rI   rg   nowyearmonthdayrJ   rK   r[   
isoweekdayformatr{   r|   r}   r   rL   rM   )r   rB   r   countFilterrN   rO   mytimestamptargetEndTimetargetStartTimerP   realDatar   ra   foundLTPLTTitems
sqlupQueryupdatedStockr   r   rn   rQ   r   r   r   GetStocksNew   sr  
<






<









	


r   z/flask-api/SaveStocksstockc              
      s@  t | j tj }d|   krdkrn ndg dt d| j dtt  d| j	 dt
| j d| j dt
| j d	t
| j d	t
| j d	t
| j d	t
| j d	t
| j d	t
| j dt| j d| j d| j d| j d| j d| j d| j d| j d| j d| j d	| j d
}ndg dt d| j dtt  d| j	 dt
| j d| j dt
| j d	t
| j d	t
| j d	t
| j d	t
| j d	t
| j d	t
| j d| j d| j d| j d| j d| j d| j d| j d| j d| j d	| j d
}t d |d}zt !| t"#  | j| j	| j| jdW S  t$y } zt | |W  Y d }~S d }~ww )Nrx   r   r]   zinsert into aK  stockdata (InstrumentIdentifier, stockid, Exchange, LastTradeTime, tradeType,LastTradePrice, ActualBuyPrice, ActualSellPrice, SelectedBuyPrice, SelectedSellPrice, StopLossPrice,  TargetPrice, tradeStatus, orderType, candle_ID, chart_ID, indicator_ID, others_ID, image_Location,  analysis_ID, UserID, BoughtTime, SoldTime) Values ('z', 'z', z, 'z, )z
, 'amo', 'z4This is an AMO order as its outside market hours....z%Y - %m - %d  %H : %M : %S)r   r   r   r   )%rE   r   rg   r   r   joinrH   r   timer   r/   r   r   r   r    r!   r"   r#   r$   r%   r   r   r&   r'   r(   r)   r*   r+   r,   r-   r.   rj   r{   r|   rI   r}   rM   )r   r   sqlinsdatetime_strrQ   r   r   r   
SaveStocks|  s   


	


r   __main__zmain:appz0.0.0.0)r;   port)N)NNN)=rg   jsonr   pandasrF   fastapir   fastapi.middleware.corsr   typingr   uvicornmysql.connectormysqlpydanticr   rr   flaskr   asyncior   concurrent.futures
concurrentmultiprocessingdecoupler   r	   envrs   PORTr   USERPASSWORDr   appr   r   originsadd_middlewaredataTableName	connectorconnectrI   cursorr{   rp   rq   rH   rA   r   rR   ri   rX   r[   ro   rw   postr   r   r   runr   r   r   r   <module>   s    





# *
'