a
     9-eo                     @   sp   d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	m
Z
 G dd deZdd Zd	d
 Zdd Zdd ZdS )    )exitN)	Printable)LogLevelTraderRunModeDataProviderName
MarketNameTimeGeneratorTypec                   @   s   e Zd Zdd ZdS )Inputc                 C   s   d S N )selfr   r   G:\My Drive\STUDY\EPAT\09 TBP - Trading & Back-testing Platforms\TBP04 - Backtesting & Live Trading\IB IBridgePy API\IBridgePy_Win_Anaconda37_64\Config\configTools.py__init__   s    zInput.__init__N)__name__
__module____qualname__r   r   r   r   r   r	   
   s   r	   c              	   C   s   g d}| D ]}t | | tsVt | | tsVt | | tsVt | | tsVt | | trd|vr||vrttd|| | t| | f   td td t	  qdS )z
    This function does not work yet. The problem is that user can write any arbitrary variables in RUN_ME/TEST_ME.
    Not good solution check the validity of user inputs yet.
    :param globalsV:
    :return:
    )accountCode
repBarFreq	startTimeendTimefileNamebacktestfreqcustomSpotTimeListhandle_data
initializebefore_trading_starthistIngestionPlanlogLevelrunModedataProviderName
marketNametimeGeneratorType__z`::validate_user_manual_input: EXIT, cannot handle input=%s value=%s type=%s from RUN_ME/TEST_ME.z)Hint: 1. Check the spelling of the input.z\Hint: 2. Add the input into settings.py instead of manually adding values in RUN_ME/TEST_ME.N)

isinstancestrintlistdicttupleprintr   typer   )globalsVZacceptedValuesitemr   r   r   validate_user_manual_input   s    F"r.   c                 C   s   t | }t| |S r
   )_get_user_input"_set_default_values_for_user_input)r,   	userInputr   r   r   %get_user_input_and_set_default_values!   s    r2   c                 C   s@   t | dsdd | _t | ds(dd | _t | ds<dd | _d S )Nr   c                 S   s   d S r
   r   xyr   r   r   <lambda>*       z4_set_default_values_for_user_input.<locals>.<lambda>r   c                 S   s   d S r
   r   r3   r   r   r   r6   ,   r7   r   c                 S   s   d S r
   r   r3   r   r   r   r6   .   r7   )hasattrr   r   r   )r1   r   r   r   r0   (   s    




r0   c                 C   s,  t  }dD ]}|| v r
ttd  t  q
dD ]}|| v r.t||| |  q.dD ]}|| v rP|dkr~t||t | | d |dkrt||t | | d |dkrt||t | | d |d	krt||t	 | | d |d
krt||t
 | | d |dkrPt||t| |  qP|S )a*  
    Get singleTrader's input and store them in an Input object.
    by setting an attribute and a value.
    For example,
    user_input.accountCode = 'testAccountCode'
    user_input.repBarFreq = 60
    :param globalsV: a dictionary, input by the build-in globals()
    :return: Input object
    )r   zP::_get_user_input: EXIT, it should be timeGeneratorType, input=TimeGeneratorType)r   r   r   r   r   r   r   r   r   r   r   r   __file__)r   r   r    r!   r"   showTimeZoner   zconfigTools::_get_user_inputr   r    r!   r"   r:   )r	   r*   r   r   setattrr   getr   r   r   r   pytztimezone)r,   
user_inputr-   r   r   r   r/   1   s.    

r/   )sysr   r=   BasicPyLib.Printabler   IBridgePy.constantsr   r   r   r   r   r	   r.   r2   r0   r/   r   r   r   r   <module>   s   	