o 7]hF#@sddlZddlZddlmZddlmZmZmZmZddl m Z Gddde j e j e je je jZeejZeded ZGd d d eZGd d d eZGdddeZGdddeZGdddeZdS)N)Optional)collinelineno_collapse_string_to_ranges)pyparsing_unicodec@s eZdZdS)ExceptionWordUnicodeN)__name__ __module__ __qualname__r r B/usr/lib/python3/dist-packages/pip/_vendor/pyparsing/exceptions.pyr sr z([z ]{1,16})|.c@seZdZdZ   d"dededeefddZed#d d Z e d d Z e defddZ e defddZe defddZe defddZdefddZddZd$dddedefddZd#defd d!ZeZdS)%ParseBaseExceptionz7base exception class for all parsing runtime exceptionsrNpstrlocmsgcCsD||_|dur||_d|_n||_||_||_|_|||f|_dS)N)rrrparser_element parserElementargs)selfrrrelemr r r__init__s zParseBaseException.__init__c Cszddl}ddlm}|durt}g}t|tr+||j|d|j dd|d t |j ||dkr|j |j|d}t}t|| dD]h\}}|d} | jd d} t| |r| jjd vrjqOt| |vrqqO|t| t | } |d | j| j | n&| durt | } |d | j| j n| j} | jd vrqO|d | j|d8}|snqOd|S)a Method to take an exception and translate the Python internal traceback into a list of the pyparsing expressions that caused the exception to be raised. Parameters: - exc - exception raised during parsing (need not be a ParseException, in support of Python exceptions that might be raised in a parse action) - depth (default=16) - number of levels back in the stack trace to list expression and function names; if None, the full stack trace names will be listed; if 0, only the failing input line, marker, and exception string will be shown Returns a multi-line string listing the ParserElements and/or function names in the exception's stack trace. rNr) ParserElement ^z{}: {})contextr) parseImpl _parseNoCachez {}.{} - {}z{}.{})wrapperzz{} )inspectcorersysgetrecursionlimit isinstancerappendrcolumnformattyper getinnerframes __traceback__set enumeratef_localsgetf_codeco_nameidaddr join) excdepthr#rretcallersseenifffrmf_self self_typecoder r rexplain_exception)sN         z$ParseBaseException.explain_exceptioncCs||j|j|j|jS)z internal factory method to simplify creating one type of ParseException from another - avoids having __init__ signature conflicts among subclasses )rrrr)clsper r r_from_exceptionksz"ParseBaseException._from_exceptionreturncCt|j|jS)zG Return the line of text where the exception occurred. )rrrrr r rrszParseBaseException.linecCrG)zV Return the 1-based line number of text where the exception occurred. )rrrrHr r rrzrIzParseBaseException.linenocCrGz] Return the 1-based column on the line of text where the exception occurred. rrrrHr r rrrIzParseBaseException.colcCrGrJrKrHr r rr)rIzParseBaseException.columncCs|jr4|jt|jkrd}n(t|j|j}|dur |d}n |j|j|jd}d|dd}nd}d|j||j|j |j S) Nz, found end of textrrz , found %rz\\\rz%{}{} (at char {}), (line:{}, col:{})) rrlen_exception_word_extractormatchgroupreplacer*rrr))rfoundstr found_matchfoundr r r__str__s zParseBaseException.__str__cCst|SN)strrHr r r__repr__szParseBaseException.__repr__z>!<) markerString marker_stringcCsL|dur|n|}|j}|jd}|r"d|d||||df}|S)z Extracts the exception line from the input string, and marks the location of the exception with a special symbol. Nrr)rr)r6strip)rrZrYline_str line_columnr r rmark_input_lines z"ParseBaseException.mark_input_linecCs |||S)a  Method to translate the Python internal traceback into a list of the pyparsing expressions that caused the exception to be raised. Parameters: - depth (default=16) - number of levels back in the stack trace to list expression and function names; if None, the full stack trace names will be listed; if 0, only the failing input line, marker, and exception string will be shown Returns a multi-line string listing the ParserElements and/or function names in the exception's stack trace. Example:: expr = pp.Word(pp.nums) * 3 try: expr.parse_string("123 456 A789") except pp.ParseException as pe: print(pe.explain(depth=0)) prints:: 123 456 A789 ^ ParseException: Expected W:(0-9), found 'A' (at char 8), (line:1, col:9) Note: the diagnostic output will include string representations of the expressions that failed to parse. These representations will be more helpful if you use `set_name` to give identifiable names to your expressions. Otherwise they will use the default string forms, which may be cryptic to read. Note: pyparsing's default truncation of exception tracebacks may also truncate the stack of expressions that are displayed in the ``explain`` output. To get the full listing of parser expressions, you may have to set ``ParserElement.verbose_stacktrace = True`` )rB)rr8r r rexplains %zParseBaseException.explain)rNN)rrV)r r r __doc__rWintrr staticmethodrB classmethodrEpropertyrrrr)rUrXr^r_ markInputliner r r rrs:  A 'rc@eZdZdZdS)ParseExceptionaq Exception thrown when a parse expression doesn't match the input string Example:: try: Word(nums).set_name("integer").parse_string("ABC") except ParseException as pe: print(pe) print("column: {}".format(pe.column)) prints:: Expected integer (at char 0), (line:1, col:1) column: 1 Nr r r r`r r r rrgrgc@rf)ParseFatalExceptionzu User-throwable exception thrown when inconsistent parse content is found; stops all parsing immediately Nrhr r r rrjrirjc@rf)ParseSyntaxExceptionz Just like :class:`ParseFatalException`, but thrown internally when an :class:`ErrorStop` ('-' operator) indicates that parsing is to stop immediately because an unbacktrackable syntax error has been found. Nrhr r r rrkrirkc@s&eZdZdZddZdefddZdS)RecursiveGrammarExceptionz Exception thrown by :class:`ParserElement.validate` if the grammar could be left-recursive; parser may need to enable left recursion using :class:`ParserElement.enable_left_recursion` cCs ||_dSrV)parseElementTrace)rparseElementListr r rrs z"RecursiveGrammarException.__init__rFcCs d|jS)NzRecursiveGrammarException: {})r*rmrHr r rrU s z!RecursiveGrammarException.__str__N)r r r r`rrWrUr r r rrlsrl)rer%typingrutilrrrrunicoderppuLatin1LatinALatinBGreekCyrillicr alphanums_extract_alphanumscompilerN Exceptionrrgrjrkrlr r r rs  " J