Skip to content

Commit

Permalink
Upgrade pyparsing to 2.2.1
Browse files Browse the repository at this point in the history
  • Loading branch information
hugovk committed Sep 18, 2018
1 parent 52cf26e commit c14c28f
Showing 1 changed file with 36 additions and 14 deletions.
50 changes: 36 additions & 14 deletions src/pip/_vendor/pyparsing.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# module pyparsing.py
#
# Copyright (c) 2003-2016 Paul T. McGuire
# Copyright (c) 2003-2018 Paul T. McGuire
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
Expand All @@ -25,6 +25,7 @@
__doc__ = \
"""
pyparsing module - Classes and methods to define and execute parsing grammars
=============================================================================
The pyparsing module is an alternative approach to creating and executing simple grammars,
vs. the traditional lex/yacc approach, or the use of regular expressions. With pyparsing, you
Expand All @@ -36,7 +37,7 @@
(L{'+'<ParserElement.__add__>} operator gives L{And} expressions, strings are auto-converted to
L{Literal} expressions)::
from pip._vendor.pyparsing import Word, alphas
from pyparsing import Word, alphas
# define grammar of a greeting
greet = Word(alphas) + "," + Word(alphas) + "!"
Expand All @@ -58,10 +59,23 @@ class names, and the use of '+', '|' and '^' operators.
- extra or missing whitespace (the above program will also handle "Hello,World!", "Hello , World !", etc.)
- quoted strings
- embedded comments
Getting Started -
-----------------
Visit the classes L{ParserElement} and L{ParseResults} to see the base classes that most other pyparsing
classes inherit from. Use the docstrings for examples of how to:
- construct literal match expressions from L{Literal} and L{CaselessLiteral} classes
- construct character word-group expressions using the L{Word} class
- see how to create repetitive expressions using L{ZeroOrMore} and L{OneOrMore} classes
- use L{'+'<And>}, L{'|'<MatchFirst>}, L{'^'<Or>}, and L{'&'<Each>} operators to combine simple expressions into more complex ones
- associate names with your parsed results using L{ParserElement.setResultsName}
- find some helpful expression short-cuts like L{delimitedList} and L{oneOf}
- find more useful common expressions in the L{pyparsing_common} namespace class
"""

__version__ = "2.2.0"
__versionTime__ = "06 Mar 2017 02:06 UTC"
__version__ = "2.2.1"
__versionTime__ = "18 Sep 2018 00:49 UTC"
__author__ = "Paul McGuire <[email protected]>"

import string
Expand All @@ -82,6 +96,15 @@ class names, and the use of '+', '|' and '^' operators.
except ImportError:
from threading import RLock

try:
# Python 3
from collections.abc import Iterable
from collections.abc import MutableMapping
except ImportError:
# Python 2.7
from collections import Iterable
from collections import MutableMapping

try:
from collections import OrderedDict as _OrderedDict
except ImportError:
Expand Down Expand Up @@ -940,7 +963,7 @@ def __getnewargs__(self):
def __dir__(self):
return (dir(type(self)) + list(self.keys()))

collections.MutableMapping.register(ParseResults)
MutableMapping.register(ParseResults)

def col (loc,strg):
"""Returns current column within a string, counting newlines as line separators.
Expand Down Expand Up @@ -1025,11 +1048,11 @@ def extract_stack(limit=0):
# special handling for Python 3.5.0 - extra deep call stack by 1
offset = -3 if system_version == (3,5,0) else -2
frame_summary = traceback.extract_stack(limit=-offset+limit-1)[offset]
return [(frame_summary.filename, frame_summary.lineno)]
return [frame_summary[:2]]
def extract_tb(tb, limit=0):
frames = traceback.extract_tb(tb, limit=limit)
frame_summary = frames[-1]
return [(frame_summary.filename, frame_summary.lineno)]
return [frame_summary[:2]]
else:
extract_stack = traceback.extract_stack
extract_tb = traceback.extract_tb
Expand Down Expand Up @@ -1374,7 +1397,7 @@ def _parseNoCache( self, instring, loc, doActions=True, callPreParse=True ):
else:
preloc = loc
tokensStart = preloc
if self.mayIndexError or loc >= len(instring):
if self.mayIndexError or preloc >= len(instring):
try:
loc,tokens = self.parseImpl( instring, preloc, doActions )
except IndexError:
Expand Down Expand Up @@ -1408,7 +1431,6 @@ def _parseNoCache( self, instring, loc, doActions=True, callPreParse=True ):
self.resultsName,
asList=self.saveAsList and isinstance(tokens,(ParseResults,list)),
modal=self.modalResults )

if debugging:
#~ print ("Matched",self,"->",retTokens.asList())
if (self.debugActions[1] ):
Expand Down Expand Up @@ -1572,7 +1594,7 @@ def enablePackrat(cache_size_limit=128):
after importing pyparsing.
Example::
from pip._vendor import pyparsing
import pyparsing
pyparsing.ParserElement.enablePackrat()
"""
if not ParserElement._packratEnabled:
Expand Down Expand Up @@ -3242,7 +3264,7 @@ def __init__( self, exprs, savelist = False ):

if isinstance( exprs, basestring ):
self.exprs = [ ParserElement._literalStringClass( exprs ) ]
elif isinstance( exprs, collections.Iterable ):
elif isinstance( exprs, Iterable ):
exprs = list(exprs)
# if sequence of strings provided, wrap with Literal
if all(isinstance(expr, basestring) for expr in exprs):
Expand Down Expand Up @@ -4393,7 +4415,7 @@ def traceParseAction(f):
@traceParseAction
def remove_duplicate_chars(tokens):
return ''.join(sorted(set(''.join(tokens)))
return ''.join(sorted(set(''.join(tokens))))
wds = OneOrMore(wd).setParseAction(remove_duplicate_chars)
print(wds.parseString("slkdjs sld sldd sdlf sdljf"))
Expand Down Expand Up @@ -4583,7 +4605,7 @@ def oneOf( strs, caseless=False, useRegex=True ):
symbols = []
if isinstance(strs,basestring):
symbols = strs.split()
elif isinstance(strs, collections.Iterable):
elif isinstance(strs, Iterable):
symbols = list(strs)
else:
warnings.warn("Invalid argument to oneOf, expected string or iterable",
Expand Down Expand Up @@ -4734,7 +4756,7 @@ def locatedExpr(expr):
_escapedPunc = Word( _bslash, r"\[]-*.$+^?()~ ", exact=2 ).setParseAction(lambda s,l,t:t[0][1])
_escapedHexChar = Regex(r"\\0?[xX][0-9a-fA-F]+").setParseAction(lambda s,l,t:unichr(int(t[0].lstrip(r'\0x'),16)))
_escapedOctChar = Regex(r"\\0[0-7]+").setParseAction(lambda s,l,t:unichr(int(t[0][1:],8)))
_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | Word(printables, excludeChars=r'\]', exact=1) | Regex(r"\w", re.UNICODE)
_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | CharsNotIn(r'\]', exact=1)
_charRange = Group(_singleChar + Suppress("-") + _singleChar)
_reBracketExpr = Literal("[") + Optional("^").setResultsName("negate") + Group( OneOrMore( _charRange | _singleChar ) ).setResultsName("body") + "]"

Expand Down

0 comments on commit c14c28f

Please sign in to comment.