
    i-                     L   d dl Z d dlZd dlZd dlmZmZ d dlmZmZmZm	Z	m
Z
 d dlmZ dZdZddd	Z G d
 d          Z G d d          Z G d d          Zedk    r e            Ze                                Z edej        rdnd dej        rdnd            ej        r}dZ ede            e                    e          Z ed           er<eD ]7Z edej         dej         ddej!         dej"         dej#        d 
           8dS  ed!           dS dS dS )"    N)datetime	timedelta)ListOptionalDictAnyTuple)RequestExceptionz5https://api.oplab.com.br/v3/domain/users/authenticatez.https://api.oplab.com.br/v3/market/instrumentszjrussi@gmail.com	jkiller77)emailpasswordc                       e Zd ZdZd ZdS )TApiResponsez#Simula o record de resposta da API.c                 >    d| _         d| _        d| _        d| _        d S )NF )SuccessErrorMessageContentNeedsReAuthenticationselfs    $/home/jrussi/acompanhamento/Oplab.py__init__zTApiResponse.__init__   s&    "!#+0"""    N)__name__
__module____qualname____doc__r    r   r   r   r      s)        --1 1 1 1 1r   r   c                       e Zd ZdZd Zd ZdS )TOplabStockDatauP   Simula o record de dados de cotação (simplificado para o uso em Estrutura.py).c                     d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d S )Nr           r   ativo)SymbolStrike
VencimentoTipo	AtivoBase
ValorAtivoSigmaBidAskCloseDueDater   s    r   r   zTOplabStockData.__init__   sS       	 !$

r   c                 Z    d| j          d| j         d| j         d| j         d| j        ddS )NzTOplabStockData(Symbol='z
', Strike=z, Vencimento=z, Tipo='z	', Sigma=.2f))r%   r&   r'   r(   r+   r   s    r   __repr__zTOplabStockData.__repr__,   sx     Z$+  Z  Z  Z  Z[_[j  Z  Ztxt}  Z  Z  IM  IS  Z  Z  Z  Z  	Zr   N)r   r   r   r   r   r3   r   r   r   r!   r!      s=        ZZ  Z Z Z Z Zr   r!   c                       e Zd Zd ZddZd Z	 ddededeeee	f                  d	e
d
edefdZde
fdZd Zdedee         fdZdS )TOpLabc                 L    d| _         d| _        d| _        d| _        d | _        d S )Nr   F     )TokenInitializedFMaxRetriesFRetryDelayMsFLastAuthAttemptr   s    r   r   zTOpLab.__init__3   s/    
!& !"&48r   returnc                     | S Nr   r   s    r   CreatezTOpLab.CreateA   s    r   c                     d S r@   r   r   s    r   DestroyzTOpLab.DestroyE   s    r   Turlmethoddataresponse_objauthenticatedc                    dddd}|r| j         r
| j         |d<   t          | j                  D ]/}	 |dk    rt          j        ||d          }n-|dk    rt          j        |||d	          }nd
| d|_         dS |j        |_        |j	        dk    |_
        |j	        dk    |_        |j
        r dS |j	        dk    r
d|_         dS d|j	         d|j         |_        || j        dz
  k     r%|j	        dvrt          j        | j        dz             # t           $ r?}	d|	 |_        || j        dz
  k     rt          j        | j        dz             Y d}	~	)d}	~	ww xY wdS )u=   Executa a requisição HTTP com headers e lógica de retries.zsMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36zapplication/json)z
User-AgentAcceptzContent-TypezAccess-TokenGET   )headerstimeoutPOST)rM   jsonrN   u   Método u    não suportado.F   i  Tu"   Token expirado ou inválido (401).z
Erro HTTP z: r7   )i  i  i  r8   u   Erro de Conexão: N)r9   ranger;   requestsgetpostr   textr   status_coder   r   reasontimesleepr<   r
   )
r   rD   rE   rF   rG   rH   rM   attemptresponsees
             r   _ProtectedRequestzTOpLab._ProtectedRequestI   s    P(.
 
  	1TZ 	1&*jGN# T-.. 	: 	:G:U??'|C"MMMHHv%%'}S'VXYYYHH0S60S0S0SL- 55'/}$'/';s'B$5=5IS5P2'  44'3..0TL- 55 -c9M,b,bQYQ`,b,b)T-111h6JRa6a6aJt1D8999# : : :,D,D,D)T-111Jt1D8999:
 us+   AD=3D3DA
D
E4EEauth_responsec                    t          j                    | _        t          }|                     t
          d||d          r	 t          j        |j                  }|	                    d          }|r|| _
        d| _        d|_        n2d| _
        d| _        d|_        |	                    dd          }||_        n*# t          j        $ r
 d	|_        Y nw xY wd| _
        d| _        t          d
|j        rdn	d|j         z              dS )uM   Implementação mais direta da autenticação (replicando o fluxo do Delphi).rO   FrH   zaccess-tokenTr   messageu    Token de acesso não encontrado.u4   Falha ao parsear JSON da resposta de autenticação.zDoAuthenticate: SucessozFalha - N)r   nowr=   AUTH_PAYLOADr^   AUTH_URLrP   loadsr   rT   r9   r:   r   r   JSONDecodeErrorprint)r   r_   payloadrF   token	error_msgs         r   DoAuthenticatezTOpLab.DoAuthenticate{   s.    !) !!(FG]Z_!`` 	%dz-"78800 
;!&DJ'+D$,0M))!#DJ',D$,1M) $4V W WI1:M.' d d d-c***d DJ$D 1F$sIILsWdWqLsLstuuuuus    A8B9 9CCc                 L    t                      }|                     |           |S )u#   Método público de autenticação.)r   rm   )r   r\   s     r   AuthenticatezTOpLab.Authenticate   s$    >>H%%%r   symbolsc                    g }d}t            d| }	 | j        sH|sFt                      }|                     |           d}|j        st          d|j                    g S n| j        s|rt          d           g S t                      }|                     |dd|d          r	 t          j	        |j
                  }|D ]}t                      }	|                    d	d
          |	_        |                    dd          |	_        |                    dd          pd|	_        |                    dd          |	_        |                    dd          |	_        |                    dd          |	_        |                    dd
          |	_        |                    dd
                                                              dd          }
|
|	_        |                    dd
          }|dk    r7|                    dd
          |	_        |                    dd          |	_        n9|dk    r3|	j        |	_        |	j        |	_        |                    dd          |	_        |                    |	           |S # t          j        $ r% t          d|j
        dd          d           g cY S w xY w|j        r|st          d           d| _        d}nt          d | d!|j                    g S )"u   
        Simula o método CotarSymbolsPlus, lidando com autenticação e parsing JSON.
        Retorna uma lista de TOplabStockData.
        Fz	?tickers=Tu(   CotarSymbolsPlus: Falha autenticação: u(   CotarSymbolsPlus: Autenticação falhou.rK   Nra   symbolr   closer#   strikedays_to_maturityr   bidaskdue_datecategoryvistar$   typeOPTIONparent_symbol
spot_priceSTOCKstdv_1yz)CotarSymbolsPlus: Erro parse JSON. JSON: d   z...u>   CotarSymbolsPlus: Requer reautenticação. Tentando novamente.zCotarSymbolsPlus: Falha para z. Erro: )TARGET_URL_BASEr:   r   rm   r   ri   r   r^   rP   rg   r   r!   rT   r%   r.   r&   r'   r,   r-   r/   lowerreplacer(   r)   r*   r+   appendrh   r   )r   rp   
stock_dataauth_attempted
target_urlr_   api_response
json_arrayitem
stock_itemry   	item_types               r   CotarSymbolspluszTOpLab.CotarSymbolsplus   s=   
 -/
';;';;
A	# 	N 	 ,##M222!%$, a]E_aabbbI % . @AAA	 (>>L%%j%|[_%`` 2&7;z,BV7W7WJ !+ 6 6%4%6%6
 -1HHXr,B,B
)+/88GS+A+A
(,0HHXs,C,C,Js
)049KQ0O0O
-)-%)=)=
)-%)=)=
-1XXj"-E-E
* $(88J#;#;#A#A#C#C#K#KGU\#]#]*2
$(HHVR$8$8	$003788OR3P3PJ048HH\34O4OJ11&'113=3DJ04>NJ1/3xx	3/G/GJ,"))*5555 &%+   elFZ[_\_[_F`eeefffIII  5 n Z[[[',D$%)NNf'ff<KdffgggICA	s   %GI8 81J,+J,N)r>   r5   )T)r   r   r   r   rA   rC   strr   r   r   r   boolr^   rm   ro   r   r!   r   r   r   r   r5   r5   2   s       9 9 9     
 MQ0 0S 0# 0Xd3PS8n=U 0(40EI0UY0 0 0 0dvL v v v vB  J J_0E J J J J J Jr   r5   __main__u   
Autenticação: rc   Falhaz	. Token: SIMu   NÃOzPETR4,BOVAM130,BOVA11u   
Cotando símbolos: u%   
--- Dados de Cotação Recebidos ---zSymbol: z
, Strike: r1   z, Venc: z dias, AtivoBase: z	, Sigma: z.4fzNenhum dado recebido.)$rS   rP   rY   r   r   typingr   r   r   r   r	   requests.exceptionsr
   rf   r   re   r   r!   r5   r   oplabro   auth_resultri   r   r9   r:   symbols_to_quoter   quoted_datar   r%   r&   r'   r)   r+   r   r   r   <module>r      s      ( ( ( ( ( ( ( ( 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 CB
   1 1 1 1 1 1 1 1Z Z Z Z Z Z Z Z*z z z z z z z z| zFHHE $$&&K	E
yK,?LyyW
y
y`e`kWwW\W\qw
y
yzzz +28&688999,,-=>>6777 	+# _ _  ^  ^  ^  ^  ^  ^QUQ`  ^  ^tx  uC  ^  ^  NR  NX  ^  ^  ^  _  _  _  __ _ E)*****' + +r   