
    T>qj                     F   d Z ddlZddlZddlmc mZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ  ej                  d      Z G d d	e      Z G d
 d      Zedk(  rJ ej*                           edd      Z eej1                                ej3                  d      Z ee       yy)z'Access to account statement webservice.    N)suppress)urlopen)util)DynamicObjectzib_insync.flexreportc                       e Zd Zy)	FlexErrorN)__name__
__module____qualname__     S/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/ib_insync/flexreport.pyr   r      s    r   r   c                   z    e Zd ZU dZeed<   ej                  ed<   ddZd Z	dde
defd	Zdde
fd
Zd Zd Zd Zy)
FlexReportz
    To obtain a token:

    * Login to web portal
    * Go to Settings
    * Click on "Configure Flex Web Service"
    * Generate token
    datarootNc                 Z    |r|r| j                  ||       y|r| j                  |       yy)z
        Download a report by giving a valid ``token`` and ``queryId``,
        or load from file by giving a valid ``path``.
        N)downloadload)selftokenqueryIdpaths       r   __init__zFlexReport.__init__    s*    
 WMM%)IIdO r   c                 V    t        d | j                  j                         D              S )z=Get the set of topics that can be extracted from this report.c              3   N   K   | ]  }|j                   s|j                    y w)N)attribtag).0nodes     r   	<genexpr>z$FlexReport.topics.<locals>.<genexpr>,   s     HDKK488Hs   %%)setr   iter)r   s    r   topicszFlexReport.topics*   s    H		(8HHHr   topicreturnc                 ~   t        |t        fi       }| j                  j                  |      D cg c]  } |di |j                   }}|r_|D ]Z  }|j
                  }|j                         D ]9  \  }}	t        t              5  t        |	      ||<   t        |	      ||<   ddd       ; \ |S c c}w # 1 sw Y   NxY w)z
        Extract items of given topic and return as list of objects.

        The topic is a string like TradeConfirm, ChangeInDividendAccrual,
        Order, etc.
        Nr   )typer   r   r#   r   __dict__itemsr   
ValueErrorfloatint)
r   r%   parseNumbersclsr    resultsobjdkvs
             r   extractzFlexReport.extract.   s     5=*B/26))..2GH$3%%HH &LLGGI &DAq!*- &$Qx!"1v!& &&&  I
& &s   B.B33B<c                 L    t        j                  | j                  ||            S )z<Same as extract but return the result as a pandas DataFrame.)r   dfr5   )r   r%   r.   s      r   r7   zFlexReport.df@   s    wwt||E<899r   c                    d| d| d}t        |      }|j                         }t        j                  |      }|j	                  d      }|g|j
                  dk(  rX|j	                  d      }|J |j
                  }|j	                  d      }|J |j
                  }	t        j                  d	       nR|j	                  d
      }||j
                  nd}
|j	                  d      }||j
                  nd}t        |
 d|       	 t        j                  d       |	 d| d| }t        |      }|j                         | _        t        j                  | j                        | _        | j                  d   j                  dk(  rM| j                  d   j
                  }|r'|j                  d      rt        j                  d       t        |      	 t        j                  d       y)z8Download report for the given ``token`` and ``queryId``.z[https://gdcdyn.interactivebrokers.com/Universal/servlet/FlexStatementService.SendRequest?t=z&q=z&v=3StatusNSuccessReferenceCodeUrlzStatement is being prepared...	ErrorCode ErrorMessagez:    z?q=z&t=r   codez Statement generation in progresszstill working...zStatement retrieved.)r   readet
fromstringfindtext_loggerinfor   timesleepr   r   r   
startswith)r   r   r   urlrespr   r   elemrA   baseUrl	errorCodeerrorMsgmsgs                r   r   zFlexReport.downloadD   s   s7)4) 	 s|yy{}}T"yy"		Y 699_-D###99D99U#D###iiGLL9:99[)D%)%5		2I99^,D$($4tyy"HykH:677JJqMISc%1C3<D		DIdii0DIyy|6)iil''3>>*LMLL!34#C.(+,r   c                     t        |d      5 }|j                         | _        t        j                  | j                        | _        ddd       y# 1 sw Y   yxY w)zLoad report from XML file.rbN)openrB   r   rC   rD   r   r   r   fs      r   r   zFlexReport.loadn   sD    $ 	1DIdii0DI	1 	1 	1s   :AAc                 |    t        |d      5 }|j                  | j                         ddd       y# 1 sw Y   yxY w)zSave report to XML file.wbN)rU   writer   rV   s      r   savezFlexReport.savet   s3    $ 	GGDII	 	 	s   2;)NNN)T)r	   r
   r   __doc__bytes__annotations__rC   Elementr   r$   strlistr5   r7   r   r   r[   r   r   r   r   r      sR     K
**IS  $: :(-T1r   r   __main__945692423458902392892687272555Trade)r\   loggingrI   xml.etree.ElementTreeetreeElementTreerC   
contextlibr   urllib.requestr   	ib_insyncr   ib_insync.objectsr   	getLoggerrG   	Exceptionr   r   r	   logToConsolereportprintr$   r5   tradesr   r   r   <module>rt      s    -   " "  "  +
'

2
3		 	d dN zD2H=F	&--/^^G$F	&M r   