
    \j*                        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y)zCLI interface for pytokens.    )annotationsN)Iterable
NamedTuplec                      e Zd ZdZdZdZdZy)ValidationStatusz'Status of validation for a single file.SUCCESSSKIPFAILUREN)__name__
__module____qualname____doc__r   r	   r
        6/root/env/lib/python3.12/site-packages/pytokens/cli.pyr   r      s    1GDGr   r   c                  J    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   y	)
CLIArgsstrfilepathboolvalidateissue_128233_handlingjsonstrictquietNr   r   r   __annotations__r   r   r   r   r      s!    MN
JLKr   r   c           	     @   t        j                         }|j                  d       |j                  ddd       |j                  dd       |j                  d	dd
       |j                  ddd       |j                  ddd       |j                  | t	                     }|j
                  rd|_        t        j                  j                  |j                        rt        |j                        }d}n|j                  g}d}g }d}t        |      D ]7  }t        |d      5 }	 t        j                  |j                         \  }	}
dj1                  |
      |j3                         z   }ddd       |j$                  rit%        |	||j4                  |j                        }|j
                  r|j)                  ||j.                  d       |t*        j6                  k(  s|dz  }j9                  	      }t;        j                  ||j4                        D ]0  }||j<                  |j>                   }t'        tA        |      |       2 : |j
                  r,|j$                  r t'        t        jB                  |d             |jD                  r|dkD  ryy# t"        $ rk |j$                  r]|j                  st'        ddd       |j
                  r,|j)                  |t*        j,                  j.                  d       Y ddd        w xY w# 1 sw Y   xY w) 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   )argvparserargsfilesr,   validation_resultsfailure_countr   fileencoding
read_bytessourcer+   
source_strtokentoken_sources                   r   clirW   "   s   $$&F

#
$  
 \:
0  
 @  
 2  
 TWY7D yy
	ww}}T]]#%dmm4/1M5M 21(D! 	8T'/'?'?'N$*" XXj)DIIK7F'	8* ==&*&@&@jjF yy"))$,"(,, )111"  x0J!**&*&@&@ 1  *%*;*;eooNd<(%01[21h yyT]]djj+A67{{}q(m  ==::2$Gyy*11,4*:*?*?*E*E 	8 	8" 	8 	8s1   &L("J
"LA'LLLLL	c                  ,    e Zd ZU ded<   ded<   ded<   y)
TokenTupler   typeztuple[int, int]startr)   Nr   r   r   r   rY   rY      s    
I	r   rY   TF)r,   r   c                  t        j                  d       t        |      dk(  s|dd dk7  r|dz   }|j                  d      D cg c]  }|dz   	 }}|j	                  d       t        j                  |      }t        j                  |j                        }	t        |	       	 |	D 
cg c]>  }
t        t        j                  |
j                     |
j                  |
j                        @ }}
|d   g}t'        |d
d d
      D ]J  \  }}
|d   }|
}|j                  |j                  cxk(  rdk(  r>n n;|j)                          t        |j                  |j                  |j                        }|d
z   t        |      k  r||d
z      }|j                  dk(  r|j                  dk(  s\|j                  dk(  r|j                  dk(  rz|j                  d   |j                  d   k(  r[|j                  d
   |j                  d
   kD  r<|j	                  t        |j                  |j                  |j                               :|j	                  |       M |j+                  |      }d t-        j                  ||      D        }t/        ||d      D ]X  \  }}||k7  }|s|r|st!        d|       t!        d|       |s,|st!        d|        t!        ddd	       t"        j0                  c S  |st!        ddd	       t"        j2                  S c c}w c c}
w # t        j                  $ r# |st!        ddd	       t"        j$                  cY S w xY w)zValidate the source code.ignorer   N   
r&   r'   Tr(   r-   )r[   FSTRING_MIDDLEOPFSTRING_ENDc              3    K   | ]|  }|j                   t        j                  j                  k7  rSt	        |j                   j                         |j                  |j                  f|j                  |j                  f       ~ y wN)
rZ   rE   	TokenType
whitespacerY   to_python_token
start_line	start_colend_lineend_col).0rU   s     r   	<genexpr>zvalidate.<locals>.<genexpr>   sk      
  ::++666 	JJ&&(u/^^U]]+	

s   BBr.   )r   EXPECTEDz---- GOTz	Filepath:z[1;31mF[0mz[1;32m.[0m)warningssimplefilterlensplitr@   ioBytesIOr;   r=   nextrY   tok_namerZ   r[   r)   
TokenErrorr?   r   r	   	enumeratepoprD   rE   zipr
   r   )r   rS   rQ   r   r,   r   linesourcelinessource_filebuiltin_tokensrU   expected_tokens_unprocessedexpected_tokensindex
last_tokencurrent_token
next_tokensource_string
our_tokensbuiltin_token	our_tokenmismatchs                         r   r   r      s8    (# 6{a6"#;%/% -3LL,?@D4%<@K@u**V$K&&{';';<N% ('
 x((4ekk599M'
# '
 3156O!"=ab"AK '.u$R(
D4DD!&""  !!M 19s677 5UQY?J##'77JOOt<S!&&*::"=8$$Q'=+<+<Q+??$$Q'-*;*;A*>>&&%**%++"(( }-O'.R MM(+M
 &&1F

J %(D$Q , y I-wj-0j),k8,*$?#+++, "$7###s A'
  %&Bd;$$$%s+   L#L 'AL*L L 3MMc                    t               }t        j                  | d      D ]N  \  }}}|D ]C  }|j                  d      s|j	                  t        j
                  j                  ||             E P |S )z9Recursively find all Python files in the given directory.F)followlinksz.py)setr5   walkendswithaddr6   rB   )	directorypython_filesroot_rM   rP   s         r   r8   r8      si    5L'')? ;a 	;D}}U#  dD!9:	;; r   rd   )rJ   zlist[str] | Nonereturnint)r   r   rS   bytesrQ   r   r   r   r,   r   r   r   r   r   )r   r   r   zIterable[str])r   
__future__r   r1   enumrs   r   os.pathr5   r;   typingr   r   ro   rE   Enumr   r   rW   rY   r   r8   r   r   r   <module>r      s    ! "   	    '  tyy  cL  j$j$j$ j$
  j$ j$ j$ j$Zr   