
    Tj*                        d Z ddlmZ ddlZddl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ZddlZ G d dej                  Z G d d          Zd d!dZ G d de          Zdddd"dZd#dZdS )$zCLI interface for pytokens.    )annotationsN)Iterable
NamedTuplec                      e Zd ZdZdZdZdZdS )ValidationStatusz'Status of validation for a single file.SUCCESSSKIPFAILUREN)__name__
__module____qualname____doc__r   r	   r
        P/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/pytokens/cli.pyr   r      s#        11GDGGGr   r   c                  L    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   d	S )
CLIArgsstrfilepathboolvalidateissue_128233_handlingjsonstrictquietNr   r   r   __annotations__r   r   r   r   r      sI         MMMNNNJJJLLLKKKKKr   r   argvlist[str] | Nonereturnintc           	        t          j                    }|                    d           |                    ddd           |                    dd           |                    d	dd
           |                    ddd           |                    ddd           |                    | t	                                }|j        rd|_        t          j        	                    |j
                  rt          |j
                  }d}n
|j
        g}d}g }d}t          |          D ]}t          |d          5 }	 t          j        |j                  \  }	}
nj# t"          $ r] |j        rT|j        st'          ddd           |j        r'|                    |t*          j        j        d           Y ddd            w xY wd                    |
          |                                z   }ddd           n# 1 swxY w Y   |j        rZt%          |||	||j        |j                  }|j        r|                    ||j        d           |t*          j        k    r|dz  }>|                    |	          }t;          j        ||j                  D ]3}||j        |j                 }t'          tA          |          |           4|j        r*|j        r#t'          t          j!        |d                     |j"        r|dk    rdS dS ) zCLI interface.r   z--no-128233-handlingr   store_false)destactionz
--validate
store_true)r%   z--jsonz!Output validation results as JSON)r%   helpz--strictz1Exit with code 1 if any validation failures occurz--quietz#Suppress visual output (dots, S, F))	namespaceTFr   rb[1;33mS[0m endflush)r   statusNr   )verboser   r      r      )indent)#argparseArgumentParseradd_argument
parse_argsr   r   r   ospathisdirr   find_all_python_filessortedopentokenizedetect_encodingreadlineSyntaxErrorr   printappendr   r	   valuejoinreadr   r
   decodepytokensstart_index	end_indexreprdumpsr   )r   parserargsfilesr0   validation_resultsfailure_countr   fileencoding
read_bytessourcer/   
source_strtokentoken_sources                   r   clirZ   "   s    $&&F

###
$    
 \:::
0    
 @    
 2    
 TWYY77D y 
	w}}T]## %dm44/1M5MM 21 21(D!! 	8T'/'?'N'N$**   = : H2$GGGGy *11,4*:*?*E    	8 	8 	8 	8 	8 	8 	8"   XXj))DIIKK7F'	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8* = 	1&*&@j  F y "))$,"(,    )111"  x00J!*&*&@   1 1  *%*;eo*MNd<((%00001 y 8T] 8dj+A666777{ }q((q1s7   <G;>EG;AG3G; G-G;;G?	G?	c                  .    e Zd ZU ded<   ded<   ded<   dS )
TokenTupler   typeztuple[int, int]startr-   Nr   r   r   r   r\   r\      s3         IIIr   r\   TF)r0   r   r   r   rV   bytesrT   r   r   r0   r   c                  t          j        d           t          |          dk    s|dd         dk    r|dz   }d |                    d          D             }|                    d           t          j        |          }t          j        |j                  }t          |           	 d |D             }	n5# t          j
        $ r# |st          dd	d
           t          j        cY S w xY w|	d         g}
t          |	dd         d          D ]-\  }}|
d         }|}|j        |j        cxk    rdk    r7n n4|
                                 t#          |j        |j        |j                  }|dz   t          |	          k     r|	|dz            }|j        dk    r|j        dk    sN|j        dk    rx|j        dk    rm|j        d         |j        d         k    rQ|j        d         |j        d         k    r5|
                    t#          |j        |j        |j                             |
                    |           /|                    |          }d t+          j        ||          D             }t-          |
|d
          D ]e\  }}||k    }|s|r"|s t          d|           t          d|           |r2|s"t          d|            t          dd	d
           t          j        c S f|st          dd	d
           t          j        S )zValidate the source code.ignorer   N   
c                    g | ]}|d z   S )rc   r   ).0lines     r   
<listcomp>zvalidate.<locals>.<listcomp>   s    @@@D4%<@@@r   c                n    g | ]2}t          t          j        |j                 |j        |j                  3S r   )r\   r?   tok_namer]   r^   r-   re   rX   s     r   rg   zvalidate.<locals>.<listcomp>   sB     '
 '
 '
 x(4ek59MM'
 '
 '
r   r*   r+   Tr,   r1   )r^   FSTRING_MIDDLEOPFSTRING_ENDc              3     K   | ]^}|j         t          j        j        k    t	          |j                                         |j        |j        f|j        |j	        f          V  _d S N)
r]   rI   	TokenType
whitespacer\   to_python_token
start_line	start_colend_lineend_colrj   s     r   	<genexpr>zvalidate.<locals>.<genexpr>   s{       
 
  :+666 	J&&((u/^U]+	
 	
 7666
 
r   r2   )r   EXPECTEDz---- GOTz	Filepath:z[1;31mF[0mz[1;32m.[0m)warningssimplefilterlensplitrD   ioBytesIOr?   rA   next
TokenErrorrC   r   r	   	enumerater]   popr\   r^   r-   rH   rI   zipr
   r   )r   rV   rT   r   r0   r   sourcelinessource_filebuiltin_tokensexpected_tokens_unprocessedexpected_tokensindexrX   
last_tokencurrent_token
next_tokensource_string
our_tokensbuiltin_token	our_tokenmismatchs                        r   r   r      s    (### 6{{a6"##;%//% A@FLL,?,?@@@Ku*V$$K&{';<<N%'
 '
''
 '
 '
##  % % % 	<&Bd;;;;$$$$%
 3156O!"=abb"AKKK '. '.u$R(
DDDD4DDDDDD!!!&" ! M 19s67777 5UQY?J#'777JOt<S<S!&*:::"=88$Q'=+<Q+???$Q'-*;A*>>>&&%*%+"(    }----MM(++M
 
 &1F
 
 

 
 
J %(D$Q$Q$Q , , y I- 	-w 	- -j-000j),,, 	, @k8,,,*$????#++++		,  8"$7777##s   ,B9 9/C+*C+	directoryIterable[str]c                    t                      }t          j        | d          D ]S\  }}}|D ]J}|                    d          r3|                    t          j                            ||                     KT|S )z9Recursively find all Python files in the given directory.F)followlinksz.py)setr9   walkendswithaddr:   rF   )r   python_filesroot_rP   rS   s         r   r<   r<      s    55L')??? ; ;a 	; 	;D}}U## ;  dD!9!9:::	; r   ro   )r   r   r    r!   )r   r   rV   r_   rT   r   r   r   r0   r   r   r   r    r   )r   r   r    r   )r   
__future__r   r5   enumr}   r   os.pathr9   r?   typingr   r   ry   rI   Enumr   r   rZ   r\   r   r<   r   r   r   <module>r      se   ! ! " " " " " "   				    ' ' ' ' ' ' ' '      ty          c c c c cL        j$ j$ j$ j$ j$ j$Z     r   