a
    Mh                     @   sh   d dl Z d dlmZmZ d dlZd dlmZmZmZ dd Zdd Z	dd	 Z
d
d Zdd Zdd ZdS )    N)datetime	timedelta)
InstrumentKPIKPIValuec                 C   s&   t td|  d }t| S )Nz\d+i  )intresearchgroupr   utcfromtimestampdate)Zdotnet_date_str	timestamp r   8/var/www/html/stock_analysis/app/utils/datastream_api.pyparse_dotnet_date   s    r   c                 C   sj   d}ddi}t d t d t | t d t | tj|||d}t d t |j t |  | S )	NzMhttps://product.datastream.com/DSWSClient/V1/DSService.svc/rest/GetDataBundlezContent-Typezapplication/jsonz9=============== Request to DataStream API ===============zRequest Body:zRequest Headers:)jsonheadersz4=============== Response Status Code ===============)printrequestspoststatus_coder   )tokenZrequest_bodyurlr   responser   r   r   fetch_kpi_data
   s    
r   c                 C   s  g }|}| dkrd||krb| | |jd d d d }t|j|dtdd }| jdd}qn| dkr||kr| | t|jd dd }qln|| dkr||kr| | |jd	krt|jd dd }qt|j|jd d }qn$||kr| | |tdd7 }q|S )
NQ      \   )days)dayYM   )appendmonthr   yearr   r   replace)freq
start_dateend_dateresultcurrentr%   r   r   r   generate_date_range   s,    





r-   c                 C   sh   | sg S t | } g }| d  }}| dd  D ](}|| jdkrP|||f |}|}q,|||f |S )Nr   r   r   )sortedr   r$   )datesrangesstartprevr   r   r   r   find_continuous_ranges3   s    r3   c              
   C   sJ  |d d }dd |d D }|d d d d d }d	d |d
 D d }|  tj|d }|d D ]}|d }|d d d }	|d d d}
|  tj|d }|st|d}| | |   | | t	||	D ]X\}}t
|sq|  tj|j|j||d }|st|j|j||||
d}| | qqj|   d S )NDataResponsesr   c                 S   s   g | ]}t |qS r   )r   ).0dr   r   r   
<listcomp>F       z&store_kpi_response.<locals>.<listcomp>DatesDataTypeValuesSymbolValuesSymbolc                 S   s    g | ]}|d  dkr|d qS )ZKey	FrequencyValuer   )r5   rr   r   r   r7   H   r8   ZAdditionalResponses)symbolDataTyper>   Currency)code)instrument_idkpi_id	frequencyr   )rD   rE   rF   r   valuecurrency)queryr   	filter_byfirstgetr   addcommitrefreshzip
is_numericr   id)dbZresponse_jsondatar/   r@   rF   
instrumententrykpi_codevaluesrH   kpir   rG   existingrecordr   r   r   store_kpi_responseD   sF    




r\   c              	   C   s,   zt |  W dS  ttfy&   Y dS 0 d S )NTF)float
ValueError	TypeError)valr   r   r   rQ   m   s
    rQ   )r   r   r   r   app.db.modelsr   r   r   r   r   r-   r3   r\   rQ   r   r   r   r   <module>   s   )