B
     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\02 Python 3.7 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   ddddddddd	d
dddddddg}x| D ]}t | | tsvt | | tsvt | | tsvt | | tsvt | | tr,d|kr,||kr,ttd|| | t| | f   td td t	  q,W 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 )N)_get_user_input"_set_default_values_for_user_input)r+   	userInputr
   r
   r   %get_user_input_and_set_default_values!   s    r1   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 )Nr
   )xyr
   r
   r   <lambda>*       z4_set_default_values_for_user_input.<locals>.<lambda>r   c             S   s   d S )Nr
   )r2   r3   r
   r
   r   r4   ,   r5   r   c             S   s   d S )Nr
   )r2   r3   r
   r
   r   r4   .   r5   )hasattrr   r   r   )r0   r
   r
   r   r/   (   s    




r/   c             C   s8  t  }x&dD ]}|| krttd  t  qW x$dD ]}|| kr4t||| |  q4W xdD ]}|| krZ|dkrt||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rZt||t| |  qZW |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!   r8   )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-   r1   r/   r.   r
   r
   r
   r   <module>   s   	