
    .j                       d dl mZ d dlZd dlmZmZ d dlZd dlmZ d dl	Z	d dl
mZmZ d dlmZ  e	j        d          Z ed	           G d
 d                      Z ed	           G d d                      Z ed	           G d d                      Zd4dZd5d6dZd5ddd7dZd5ddd8dZd5d9d!Zd:d"Zd;d&Zd5d<d)Zd5d=d+Zdd,d>d.Zd5d?d2Zed3k    r e  e                      dS )@    )annotationsN)asdict	dataclass)Path)AnyLiteral)CopyResearchPathsz^0x[a-fA-F0-9]{40}$T)frozenc                  R    e Zd ZU ded<   dZded<   dZded<   dZded	<   dZded
<   dS )WatchlistEntrystraddress labelmanualsourceTboolenablednotesN__name__
__module____qualname____annotations__r   r   r   r        L/home/agent/projects/CryptoTradingBot/Crypto_Agent/src/ctb_copy/watchlist.pyr   r      sU         LLLEOOOOFGEOOOOOOr   r   c                  R    e Zd ZU ded<   dZded<   dZded<   dZded	<   dZded
<   dS )VaultWatchlistEntryr   vault_addressr   r   r   r   Tr   r   r   Nr   r   r   r   r   r      sX         EOOOOFGEOOOOOOr   r   c                  2    e Zd ZU ded<   ded<   dZded<   dS )WatchlistValidationr   okztuple[str, ...]errorsr   warningsN)r   r   r   r   r%   r   r   r   r"   r"   !   s8         HHH "H""""""r   r"   returndict[str, Any]c                     dg g dS )N   )versionwalletsvaultsr   r   r   r   default_watchlistr-   (   s    R2666r   runtime_dirstr | Path | Noner   c                n    t          | rt          |           nt                      j                  j        S N)r	   r   rootwatchlist_file)r.   s    r   watchlist_pathr4   ,   s/    +[T+...CTCVCVC[\\kkr   F)	overwritepathr5   r   c               "   | rt          |           nt                      }|j                            dd           |                                r|s|S |                    t          j        t                      dd          dz   d           |S )NTparentsexist_ok   indent	sort_keys
utf-8encoding)	r   r4   parentmkdirexists
write_textjsondumpsr-   )r6   r5   targets      r   init_watchlistrJ   0   s    5T$ZZZ^%5%5F
Mt444}} y 
dj!2!4!4Q$OOORVVahiiiMr   )create_if_missingrK   c               D   | rt          |           nt                      }|                                s |rt          |           nt	                      S t          j        |                    d                    }t          |t                    st          d          |S )Nr@   rA   z#watchlist payload must be an object)r   r4   rE   rJ   r-   rG   loads	read_text
isinstancedict
ValueError)r6   rK   rI   payloads       r   load_watchlistrS   9   s    5T$ZZZ^%5%5F==?? ' 	'6""""$&&&j))7);;<<Ggt$$ @>???Nr   rR   c                Z   t          |           }|j        s*t          dd                    |j                  z             |rt          |          nt                      }|j                            dd           |	                    t          j        | dd          dz   d	           |S )
Nzinvalid watchlist: z; Tr8   r;   r<   r?   r@   rA   )validate_watchlistr#   rQ   joinr$   r   r4   rC   rD   rF   rG   rH   )rR   r6   
validationrI   s       r   save_watchlistrX   F   s    #G,,J= O.:;L1M1MMNNN5T$ZZZ^%5%5F
Mt444
djdCCCdJU\]]]Mr   c                   g }g }|                      d          dk    r|                    d           dD ]C}t          |                      |g           t                    s|                    | d           Dt	          |                      dg                     D ]\  }}t          |t
                    s|                    d| d           4t          |                     d	d
                    }t                              |          s|                    d| d           t          |                     dd          t                    s|                    d| d           t	          |                      dg                     D ]\  }}t          |t
                    s|                    d| d           4t          |                     dd
                    }t                              |          s|                    d| d           t          |                     dd          t                    s|                    d| d           t          | t          |          t          |                    S )Nr*   r)   version_must_be_1)r+   r,   _must_be_listr+   zwallets[z]_must_be_objectr   r   z].address_invalidr   Tz].enabled_must_be_boolr,   zvaults[r    z].vault_address_invalid)r#   r$   r%   )getappendrO   list	enumeraterP   r   
ADDRESS_REmatchr   r"   tuple)rR   r$   r%   keyidxrowr   s          r   rU   rU   P   s   FH{{9"")***$ 1 1'++c2..55 	1MMS///000gkk)R8899 B BS#t$$ 	MM:S:::;;;cggi,,--(( 	=MM;S;;;<<<#'')T22D99 	BMM@S@@@AAAgkk(B7788 A AS#t$$ 	MM9C999:::cggor2233(( 	BMM@C@@@AAA#'')T22D99 	AMM?C???@@@f*U6]]US[__]]]]r   sectionLiteral['wallets', 'vaults']list[dict[str, Any]]c                P   g }|dk    rdnd}|                      |g           D ]}t          |t                    r|                     dd          dur0t          |                     |d                    }t                              |          r|                    |           |S )Nr+   r   r    r   Tr   )r\   rO   rP   r   r`   ra   r]   )rR   rf   rowsaddress_keyre   r   s         r   _valid_enabled_rowsrl   m   s    !#D&)33))K{{7B''  #t$$ 		4(@(@(L(Lcggk2..//G$$ 	KKKr   dict[str, Any] | Nonetuple[WatchlistEntry, ...]c                t    | | nt                      }t          d t          |d          D                       S )Nc              3  *  K   | ]}t          t          |d                    t          |                    dd                    t          |                    dd                    dt          |                    dd                              V  dS )	r   r   r   r   r   Tr   )r   r   r   r   r   N)r   r   r\   .0re   s     r   	<genexpr>z"enabled_wallets.<locals>.<genexpr>{   s        i  i  {~C	N(;(;3swwwXZG[G[C\C\ehilipipqy  |D  jE  jE  fF  fF  PT  \_  `c  `g  `g  ho  qs  `t  `t  \u  \u  v  v  v  i  i  i  i  i  ir   r+   rS   rb   rl   rR   r   s     r   enabled_walletsrv   y   sl    +WW1A1AF  i  i  BU  V\  ^g  Bh  Bh  i  i  i  i  i  ir   tuple[VaultWatchlistEntry, ...]c                t    | | nt                      }t          d t          |d          D                       S )Nc              3  *  K   | ]}t          t          |d                    t          |                    dd                    t          |                    dd                    dt          |                    dd                              V  dS )	r    r   r   r   r   Tr   )r    r   r   r   r   N)r   r   r\   rq   s     r   rs   z!enabled_vaults.<locals>.<genexpr>   s
       y  y  LO$3s?7K3L3LTWX[X_X_`gikXlXlTmTmvyz}  {B  {B  CK  MU  {V  {V  wW  wW  ae  mp  qt  qx  qx  y@  BD  qE  qE  mF  mF  G  G  G  y  y  y  y  y  yr   r,   rt   ru   s     r   enabled_vaultsrz   ~   sl    +WW1A1AF  y  y  Sf  gm  ow  Sx  Sx  y  y  y  y  y  yr   rE   rE   c                  t          |           }|j        rt          |           nd}|j        rt          |           nd}||j        t	          |j                  t          |          t          |          d |D             t          d |D                       t          d |D                       dt          | 
                    dg           t                    r#t          | 
                    dg                     ndt          | 
                    dg           t                    r#t          | 
                    dg                     ndd	S )
Nr   c                    g | ]	}|j         
S r   )r   rr   wallets     r   
<listcomp>z%watchlist_summary.<locals>.<listcomp>   s    ===6&,===r   c                    h | ]	}|j         
S r   )r   r~   s     r   	<setcomp>z$watchlist_summary.<locals>.<setcomp>   s    !F!F!FF&-!F!F!Fr   c              3  (   K   | ]}d |j         v V  dS )zread-only observation onlyN)r   r~   s     r   rs   z$watchlist_summary.<locals>.<genexpr>   s+      )m)m[a*F&,*V)m)m)m)m)m)mr   Fr+   r   r,   )watchlist_existsvalidation_okvalidation_errorsenabled_wallets_countenabled_vaults_countwallet_labelswallet_sourcesread_only_observation_onlycopy_permissionwallets_totalvaults_total)rU   r#   rv   rz   r^   r$   lensortedallrO   r\   )rR   rE   rW   r+   r,   s        r   watchlist_summaryr      s?   #G,,J*4-?og&&&RG(2=^G$$$2F"#!*"344!$W #F==W=== !F!Fg!F!F!FGG&))m)mel)m)m)m&m&m <Fw{{S\^`GaGacg<h<hoW[[B77888no:DW[[QY[]E^E^`d:e:elGKK"55666kl  r   argvlist[str] | Noneintc           
     ~   t          j        d          }|                    dt          t	                      j                             |                    ddd           |                    d	dd
           |                    |           }t          |j                  }|j	        rt          |           |j        s|j	        sft          |          }t          t          j        t          |          t!          ||                                          |ddd                     nt          |           dS )Nz5Manage the read-only copy-research runtime watchlist.)descriptionz--runtime-dir)defaultz--init
store_truez-Create an empty runtime watchlist if missing.)actionhelpz--showz$Print watchlist summary and payload.r{   )r6   summaryrR   r;   Tr<   r   )argparseArgumentParseradd_argumentr   r	   r2   
parse_argsr4   r.   initrJ   showrS   printrG   rH   r   rE   )r   parserargsr6   rR   s        r   mainr      sQ   $1hiiiF
5F5H5H5M1N1NOOO
<klll
<bcccT""D$*++Dy ty 	  &&dj#d))8I'Z^ZeZeZgZg8h8h8hu|}}  GH  TX  Y  Y  Y  	Z  	Z  	Z  	Zd1r   __main__)r&   r'   r1   )r.   r/   r&   r   )r6   r/   r5   r   r&   r   )r6   r/   rK   r   r&   r'   )rR   r'   r6   r/   r&   r   )rR   r'   r&   r"   )rR   r'   rf   rg   r&   rh   )rR   rm   r&   rn   )rR   rm   r&   rw   )rR   r'   rE   r   r&   r'   )r   r   r&   r   )!
__future__r   r   dataclassesr   r   rG   pathlibr   retypingr   r   src.ctb_copy.runtime_pathsr	   compiler`   r   r   r"   r-   r4   rJ   rS   rX   rU   rl   rv   rz   r   r   r   
SystemExitr   r   r   <module>r      s   " " " " " "  ) ) ) ) ) ) ) )        				         8 8 8 8 8 8RZ.//
 $        $        $# # # # # # # #7 7 7 7l l l l l      
PU 
 
 
 
 
 
    ^ ^ ^ ^:	 	 	 	i i i i i
y y y y y
 BG      &    " z
*TTVV

 r   