
    ^Aj$                       d dl mZ d dlZ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
 d dlmZmZ d dlmZ d dlmZmZ h dZd	d
hZddhZ ed           G d d                      Z ed           G d d                      Z G d de          Zd=dZd>dZd?dZd@dZdAdZdBd'ZdCd+Z dDd-Z!dEd2Z"dFd5Z#dGd9Z$dHd;Z%dId<Z&dS )J    )annotationsN)asdict	dataclass)datetimetimezone)DecimalInvalidOperation)Path)AnyMapping>   tokenapikeysecretapi_keypasswordwebhook_secretlongshortentryexitT)frozenc                  d    e Zd ZU ded<   ded<   ded<   ded<   dZded	<   d
Zded<   ddZddZdS )TradingViewWebhookConfigr
   runtime_dirstrr   set[str]allowed_strategiesallowed_coinszsignals/signal_journal.jsonljournal_relative_pathz%signals/rejected_signal_journal.jsonlrejected_journal_relative_pathreturnc                     | j         | j        z  S N)r   r   selfs    M/home/agent/projects/CryptoTradingBot/Crypto_Agent/src/signals/tradingview.pyjournal_pathz%TradingViewWebhookConfig.journal_path   s    $"<<<    c                     | j         | j        z  S r#   )r   r    r$   s    r&   rejected_journal_pathz.TradingViewWebhookConfig.rejected_journal_path   s    $"EEEr(   N)r!   r
   )__name__
__module____qualname____annotations__r   r    r'   r*    r(   r&   r   r      s         KKK    !?????*Q"QQQQ= = = =F F F F F Fr(   r   c                      e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded<   d	ed
<   ded<   dZded<   dZded<   dZd	ed<   dZd	ed<   ddZdS )TradingViewSignalr   source	signal_idstrategy_idcoinsideaction	timeframe
str | Noneprice	timestamppaper_signalexecution_modeFboollive_order_allowedNreasonreceived_atr!   dict[str, Any]c                    t          |           }| j        p/t          j        t          j                                                  |d<   |S )NrA   )r   rA   r   nowr   utc	isoformat)r%   rows     r&   to_journal_rowz TradingViewSignal.to_journal_row2   s<    Tll!-Whl1K1K1U1U1W1WM
r(   )r!   rB   )	r+   r,   r-   r.   r=   r?   r@   rA   rH   r/   r(   r&   r1   r1   "   s         KKKNNNIIIIIIKKKNNNNNN(N(((($$$$$F"K""""     r(   r1   c                        e Zd Zd fdZ xZS )TradingViewSignalErrorr@   r   c                X    t                                          |           || _        d S r#   )super__init__r@   )r%   r@   	__class__s     r&   rM   zTradingViewSignalError.__init__9   s&       r(   )r@   r   )r+   r,   r-   rM   __classcell__)rN   s   @r&   rJ   rJ   8   s=                 r(   rJ   r!   r   c                 b    t          j        t          j                                                  S r#   )r   rD   r   rE   rF   r/   r(   r&   _nowrQ   >   s     <%%//111r(   valuer   c                H    t          | pd                                          S )N )r   strip)rR   s    r&   
_clean_strrV   B   s     u{!!###r(   symbolc                   t          |                                           }|                    dd          }|                    dd          }|                    dd          }|                    dd          }|                    dd          }dD ]1}|                    |          r|d t	          |                    } n2t          j        dd|          }|S )	NPERPrT   z.Pz-PERP/:)USDTUSDCUSDz	[^A-Z0-9])rV   upperreplaceendswithlenresub)rW   rawsuffixs      r&   normalize_symbolrg   F   s    
V


"
"
$
$C
++fb
!
!C
++dB

C
++gr
"
"C
++c2

C
++c2

C)  << 	nVn%CE	 &r3
'
'CJr(   c                    t          |           }|st          d          |                    d          r|d d         dz   }n|}	 t          j        |           n"# t
          $ r}t          d          |d }~ww xY w|S )Nmissing_timestampZz+00:00invalid_timestamp)rV   rJ   ra   r   fromisoformat
ValueError)rR   tsparse_valueexcs       r&   _validate_timestamprr   U   s    	E		B :$%8999	{{3 "g(C{++++ C C C$%899sBCIs   A 
A;&A66A;r9   c                    | t          |           dk    rd S 	 t          t          |                     }n"# t          $ r}t	          d          |d }~ww xY w|dk    rt	          d          t          |           S )NrT   invalid_pricer   )rV   r   r   r	   rJ   )rR   r:   rq   s      r&   _validate_priceru   d   s    }
5))R//t?E

## ? ? ?$_553>?zz$_555u::s   6 
A AApayloadMapping[str, Any]r5   strategyr6   r7   r;   c                   t          |                     d          p|                     d                    }|r|S d| d| d| d| d| dt          |                     d                     }t          j        |                    d                                                    d d         }d|                                 d	| S )
Nr3   idztradingview||r8   utf-8   ztv--)rV   gethashlibsha256encode	hexdigestlower)	rv   r5   rx   r6   r7   r;   explicitbasedigests	            r&   _make_signal_idr   p   s    '++k22Ggkk$6G6GHHH n(nnTnnDnn6nnInn
SZS^S^_jSkSkHlHlnnD^DKK0011;;==crcBF((((((r(   r   r   r   c               j   t          |                     d          pd                                          }|dk    rt          d          t          |                     d          p|                     d                    }|st          d          ||vrt          d          t	          t          |                     d          p|                     d	                              }|st          d
          ||vrt          d          t          |                     d                                                    }|t
          vrt          d          t          |                     d          p|                     d                                                    }|t          vrt          d          t          |                     d                    }|st          d          t          t          |                     d          p|                     d                              }	t          |                     d                    }
t          | |||||	          }t          |                     d                    pd }t          d|||||||
|	dd|t                                S )Nr2   tradingviewinvalid_sourcerx   r4   missing_strategystrategy_not_allowedrW   r5   missing_symbolcoin_not_allowedr6   invalid_sider7   signalinvalid_actionr8   missing_timeframer;   timer:   r@   r<   F)r2   r3   r4   r5   r6   r7   r8   r:   r;   r=   r?   r@   rA   )rV   r   r   rJ   rg   VALID_SIDESVALID_ACTIONSrr   ru   r   r1   rQ   )rv   r   r   r2   rx   r5   r6   r7   r8   r;   r:   r3   r@   s                r&   normalize_tradingview_payloadr   y   s    H-->??EEGGF$%5666'++j11OW[[5O5OPPH 9$%7888)))$%;<<<Jw{{8'<'<'SF@S@STTUUD 7$%5666=  $%7888gkk&))**0022D;$^444H--FX1F1FGGMMOOF]""$%56667;;{3344I :$%8999#Jw{{;/G/G/^7;;W]K^K^$_$_``IGKK0011ExvyQQIH--..6$F% FF   r(   rB   c                    i }|                                  D ]N\  }}t          |                                          }|t          v sd|v sd|v sd|v r<||t          |          <   O|S )Nr   r   r   )itemsr   r   SECRET_KEYS)rv   	sanitizedkeyrR   lowereds        r&   _sanitize_payloadr      s~     "Immoo $ $
Uc((..""k!!X%8%8Gw<N<NR\`gRgRg#	#c((r(   headersMapping[str, str]expected_secretr>   c                   |                     d          p|                     d          }|                      d          p|                      d          }t          |p|          }t          |          ot          j        ||          S )NzX-CTB-Webhook-Secretzx-ctb-webhook-secretr   r   )r   rV   r>   hmaccompare_digest)rv   r   r   header_secretpayload_secretsupplieds         r&   _authorizedr      sy    KK 677^7;;G];^;^M[[**Kgkk:J.K.KN-9>::H>>Ld1(OLLLr(   r'   r
   c                   |                                  st                      S t                      }|                     dd                                          D ]{}|                                s	 t          j        |          }n# t
          j        $ r Y >w xY wt          |	                    d                    }|r|
                    |           ||S )Nr|   r`   )encodingerrorsr3   )existsset	read_text
splitlinesrU   jsonloadsJSONDecodeErrorrV   r   add)r'   idslinerG   r3   s        r&   _read_existing_signal_idsr      s       uuEEC&&	&JJUUWW 	 	zz|| 		*T""CC# 	 	 	H	sww{3344	 	GGIJs   2BBBr   configraw_payloadc                ~   |                                 }|j                            dd           |                                 }t	          |          |d<   d|d<   d|d<   |                    dd	          5 }|                    t          j        |dd
          dz              d d d            n# 1 swxY w Y   |S )NTparentsexist_okraw_payload_sanitizedFmainnet_signed_actionorder_intent_createdar|   r   	sort_keysensure_ascii
)	r'   parentmkdirrH   r   openwriter   dumps)r   r   r   journalrG   fhs         r&   append_signal_journalr      s   !!##GN555



!
!C#4[#A#AC #(C "'C	cG	,	, M
C4eDDDtKLLLM M M M M M M M M M M M M M MNs   8.B22B69B6r@   c           
     f   |                                 }|j                            dd           t                      dd| dddt	          |          d}|                    dd          5 }|                    t          j        |dd	          d
z              d d d            n# 1 swxY w Y   |S )NTr   r   F)r;   r2   acceptedr@   r?   r   r   r   r   r|   r   r   r   )	r*   r   r   rQ   r   r   r   r   r   )r@   r   r   r   rG   r   s         r&   append_rejected_signal_journalr      s    **,,GN555VV#!& %!2;!?!?	 	C 
cG	,	, M
C4eDDDtKLLLM M M M M M M M M M M M M M MNs   ,.B&&B*-B*c                  dddd}t          | ||j                  si |ddiS 	 t          | |j        |j                  }n;# t
          $ r.}t          |j        ||            i |d|j        icY d }~S d }~ww xY w|j        t          |
                                          v r t          d||            i |d|j        d	S t          |||           }d
d|j        |j        |j        |j        |j        |j        dt#          |          d
S )NFr<   )r   r?   r=   r@   unauthorized)r   r   )r@   r   r   duplicate_signal)r@   r3   T!accepted_for_paper_signal_journal)
r   r@   r3   r5   r4   r6   r7   r=   r?   r'   )r   r   r   r   r   rJ   r   r@   r3   r   r'   r   r5   r4   r6   r7   r=   r   )rv   r   r   base_rejectr   rq   r   s          r&   handle_tradingview_payloadr      ss     %EUcddKw77 98+8x8885.%8 .
 
 

 " 5 5 5&cjU\]]]]4+4x444444445 4V5H5H5J5JKKKK&.@]deeee[+[);&JZ[[[[#FFG<<G5%)- /#G  s   A 
A;#A60A;6A;)r!   r   )rR   r   r!   r   )rW   r   r!   r   )rR   r   r!   r   )rR   r   r!   r9   )rv   rw   r5   r   rx   r   r6   r   r7   r   r;   r   r!   r   )rv   rw   r   r   r   r   r!   r1   )rv   rw   r!   rB   )rv   rw   r   r   r   r   r!   r>   )r'   r
   r!   r   )r   r1   r   r   r   rw   r!   r
   )r@   r   r   r   r   rw   r!   r
   )rv   rw   r   r   r   r   r!   rB   )'
__future__r   r   r   r   rc   dataclassesr   r   r   r   decimalr   r	   pathlibr
   typingr   r   r   r   r   r   r1   rn   rJ   rQ   rV   rg   rr   ru   r   r   r   r   r   r   r   r   r/   r(   r&   <module>r      s   " " " " " "    				 ) ) ) ) ) ) ) ) ' ' ' ' ' ' ' ' - - - - - - - -              TTTw&! $F F F F F F F F $       *    Z   2 2 2 2$ $ $ $      	 	 	 	) ) ) )5 5 5 5p   M M M M   "	 	 	 	   .$ $ $ $ $ $r(   