From ac42c232ce4f9c7f5eb13525c2103683b075f20e Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Tue, 21 Jan 2020 12:48:59 +0530 Subject: [PATCH 01/10] Update CacheControl to 0.12.6 --- src/pip/_vendor/cachecontrol/__init__.py | 2 +- src/pip/_vendor/cachecontrol/adapter.py | 2 +- src/pip/_vendor/cachecontrol/controller.py | 11 ++++++++++- src/pip/_vendor/cachecontrol/serialize.py | 4 +++- src/pip/_vendor/cachecontrol/wrapper.py | 2 +- src/pip/_vendor/vendor.txt | 2 +- 6 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/pip/_vendor/cachecontrol/__init__.py b/src/pip/_vendor/cachecontrol/__init__.py index 8fdee66ff..a1bbbbe3b 100644 --- a/src/pip/_vendor/cachecontrol/__init__.py +++ b/src/pip/_vendor/cachecontrol/__init__.py @@ -4,7 +4,7 @@ Make it easy to import from cachecontrol without long namespaces. """ __author__ = "Eric Larson" __email__ = "eric@ionrock.org" -__version__ = "0.12.5" +__version__ = "0.12.6" from .wrapper import CacheControl from .adapter import CacheControlAdapter diff --git a/src/pip/_vendor/cachecontrol/adapter.py b/src/pip/_vendor/cachecontrol/adapter.py index 780eb2883..815650e81 100644 --- a/src/pip/_vendor/cachecontrol/adapter.py +++ b/src/pip/_vendor/cachecontrol/adapter.py @@ -24,7 +24,7 @@ class CacheControlAdapter(HTTPAdapter): **kw ): super(CacheControlAdapter, self).__init__(*args, **kw) - self.cache = cache or DictCache() + self.cache = DictCache() if cache is None else cache self.heuristic = heuristic self.cacheable_methods = cacheable_methods or ("GET",) diff --git a/src/pip/_vendor/cachecontrol/controller.py b/src/pip/_vendor/cachecontrol/controller.py index 1b2b943cb..dafe55ca7 100644 --- a/src/pip/_vendor/cachecontrol/controller.py +++ b/src/pip/_vendor/cachecontrol/controller.py @@ -34,7 +34,7 @@ class CacheController(object): def __init__( self, cache=None, cache_etags=True, serializer=None, status_codes=None ): - self.cache = cache or DictCache() + self.cache = DictCache() if cache is None else cache self.cache_etags = cache_etags self.serializer = serializer or Serializer() self.cacheable_status_codes = status_codes or (200, 203, 300, 301) @@ -293,6 +293,15 @@ class CacheController(object): if no_store: return + # https://tools.ietf.org/html/rfc7234#section-4.1: + # A Vary header field-value of "*" always fails to match. + # Storing such a response leads to a deserialization warning + # during cache lookup and is not allowed to ever be served, + # so storing it can be avoided. + if "*" in response_headers.get("vary", ""): + logger.debug('Response header has "Vary: *"') + return + # If we've been given an etag, then keep the response if self.cache_etags and "etag" in response_headers: logger.debug("Caching due to etag") diff --git a/src/pip/_vendor/cachecontrol/serialize.py b/src/pip/_vendor/cachecontrol/serialize.py index ec43ff27a..3b6ec2de1 100644 --- a/src/pip/_vendor/cachecontrol/serialize.py +++ b/src/pip/_vendor/cachecontrol/serialize.py @@ -107,6 +107,8 @@ class Serializer(object): """ # Special case the '*' Vary value as it means we cannot actually # determine if the cached response is suitable for this request. + # This case is also handled in the controller code when creating + # a cache entry, but is left here for backwards compatibility. if "*" in cached.get("vary", {}): return @@ -179,7 +181,7 @@ class Serializer(object): def _loads_v4(self, request, data): try: - cached = msgpack.loads(data, encoding="utf-8") + cached = msgpack.loads(data, raw=False) except ValueError: return diff --git a/src/pip/_vendor/cachecontrol/wrapper.py b/src/pip/_vendor/cachecontrol/wrapper.py index 265bfc8bc..d8e6fc6a9 100644 --- a/src/pip/_vendor/cachecontrol/wrapper.py +++ b/src/pip/_vendor/cachecontrol/wrapper.py @@ -13,7 +13,7 @@ def CacheControl( cacheable_methods=None, ): - cache = cache or DictCache() + cache = DictCache() if cache is None else cache adapter_class = adapter_class or CacheControlAdapter adapter = adapter_class( cache, diff --git a/src/pip/_vendor/vendor.txt b/src/pip/_vendor/vendor.txt index d19ef2e51..9f19fb519 100644 --- a/src/pip/_vendor/vendor.txt +++ b/src/pip/_vendor/vendor.txt @@ -1,5 +1,5 @@ appdirs==1.4.3 -CacheControl==0.12.5 +CacheControl==0.12.6 colorama==0.4.1 contextlib2==0.6.0 distlib==0.2.9.post0 From 744d0ebbd4dbfdc8479deefaf2da730ee4dd42a0 Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Tue, 21 Jan 2020 13:10:01 +0530 Subject: [PATCH 02/10] Upgrade colorama to 0.4.3 --- src/pip/_vendor/colorama/__init__.py | 2 +- src/pip/_vendor/vendor.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pip/_vendor/colorama/__init__.py b/src/pip/_vendor/colorama/__init__.py index 2a3bf4714..34c263cc8 100644 --- a/src/pip/_vendor/colorama/__init__.py +++ b/src/pip/_vendor/colorama/__init__.py @@ -3,4 +3,4 @@ from .initialise import init, deinit, reinit, colorama_text from .ansi import Fore, Back, Style, Cursor from .ansitowin32 import AnsiToWin32 -__version__ = '0.4.1' +__version__ = '0.4.3' diff --git a/src/pip/_vendor/vendor.txt b/src/pip/_vendor/vendor.txt index 9f19fb519..21a2f5b48 100644 --- a/src/pip/_vendor/vendor.txt +++ b/src/pip/_vendor/vendor.txt @@ -1,6 +1,6 @@ appdirs==1.4.3 CacheControl==0.12.6 -colorama==0.4.1 +colorama==0.4.3 contextlib2==0.6.0 distlib==0.2.9.post0 distro==1.4.0 From dd07badf20c1a7e351d87816e3394a62539a7018 Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Tue, 21 Jan 2020 13:11:38 +0530 Subject: [PATCH 03/10] Upgrade distlib to 0.3.0 --- src/pip/_vendor/distlib/__init__.py | 2 +- .../_vendor/distlib/_backport/sysconfig.py | 8 +++--- src/pip/_vendor/distlib/database.py | 2 +- src/pip/_vendor/distlib/locators.py | 21 ++++++++++----- src/pip/_vendor/distlib/scripts.py | 25 +++++++++++++----- src/pip/_vendor/distlib/t32.exe | Bin 92672 -> 96768 bytes src/pip/_vendor/distlib/t64.exe | Bin 102912 -> 105984 bytes src/pip/_vendor/distlib/util.py | 5 ++-- src/pip/_vendor/distlib/w32.exe | Bin 89088 -> 90112 bytes src/pip/_vendor/distlib/w64.exe | Bin 99840 -> 99840 bytes src/pip/_vendor/distlib/wheel.py | 2 +- src/pip/_vendor/vendor.txt | 2 +- 12 files changed, 43 insertions(+), 24 deletions(-) diff --git a/src/pip/_vendor/distlib/__init__.py b/src/pip/_vendor/distlib/__init__.py index a2d70d475..e19aebdc4 100644 --- a/src/pip/_vendor/distlib/__init__.py +++ b/src/pip/_vendor/distlib/__init__.py @@ -6,7 +6,7 @@ # import logging -__version__ = '0.2.9.post0' +__version__ = '0.3.0' class DistlibException(Exception): pass diff --git a/src/pip/_vendor/distlib/_backport/sysconfig.py b/src/pip/_vendor/distlib/_backport/sysconfig.py index 1df3aba14..b470a373c 100644 --- a/src/pip/_vendor/distlib/_backport/sysconfig.py +++ b/src/pip/_vendor/distlib/_backport/sysconfig.py @@ -119,11 +119,9 @@ def _expand_globals(config): #_expand_globals(_SCHEMES) - # FIXME don't rely on sys.version here, its format is an implementation detail - # of CPython, use sys.version_info or sys.hexversion -_PY_VERSION = sys.version.split()[0] -_PY_VERSION_SHORT = sys.version[:3] -_PY_VERSION_SHORT_NO_DOT = _PY_VERSION[0] + _PY_VERSION[2] +_PY_VERSION = '%s.%s.%s' % sys.version_info[:3] +_PY_VERSION_SHORT = '%s.%s' % sys.version_info[:2] +_PY_VERSION_SHORT_NO_DOT = '%s%s' % sys.version_info[:2] _PREFIX = os.path.normpath(sys.prefix) _EXEC_PREFIX = os.path.normpath(sys.exec_prefix) _CONFIG_VARS = None diff --git a/src/pip/_vendor/distlib/database.py b/src/pip/_vendor/distlib/database.py index b13cdac92..c16c0c8d9 100644 --- a/src/pip/_vendor/distlib/database.py +++ b/src/pip/_vendor/distlib/database.py @@ -567,7 +567,7 @@ class InstalledDistribution(BaseInstalledDistribution): p = os.path.join(path, 'top_level.txt') if os.path.exists(p): with open(p, 'rb') as f: - data = f.read() + data = f.read().decode('utf-8') self.modules = data.splitlines() def __repr__(self): diff --git a/src/pip/_vendor/distlib/locators.py b/src/pip/_vendor/distlib/locators.py index a7ed9469d..12a1d0635 100644 --- a/src/pip/_vendor/distlib/locators.py +++ b/src/pip/_vendor/distlib/locators.py @@ -304,18 +304,25 @@ class Locator(object): def _get_digest(self, info): """ - Get a digest from a dictionary by looking at keys of the form - 'algo_digest'. + Get a digest from a dictionary by looking at a "digests" dictionary + or keys of the form 'algo_digest'. Returns a 2-tuple (algo, digest) if found, else None. Currently looks only for SHA256, then MD5. """ result = None - for algo in ('sha256', 'md5'): - key = '%s_digest' % algo - if key in info: - result = (algo, info[key]) - break + if 'digests' in info: + digests = info['digests'] + for algo in ('sha256', 'md5'): + if algo in digests: + result = (algo, digests[algo]) + break + if not result: + for algo in ('sha256', 'md5'): + key = '%s_digest' % algo + if key in info: + result = (algo, info[key]) + break return result def _update_version_data(self, result, info): diff --git a/src/pip/_vendor/distlib/scripts.py b/src/pip/_vendor/distlib/scripts.py index 5965e241d..518597418 100644 --- a/src/pip/_vendor/distlib/scripts.py +++ b/src/pip/_vendor/distlib/scripts.py @@ -172,8 +172,16 @@ class ScriptMaker(object): if sys.platform.startswith('java'): # pragma: no cover executable = self._fix_jython_executable(executable) - # Normalise case for Windows - executable = os.path.normcase(executable) + + # Normalise case for Windows - COMMENTED OUT + # executable = os.path.normcase(executable) + # N.B. The normalising operation above has been commented out: See + # issue #124. Although paths in Windows are generally case-insensitive, + # they aren't always. For example, a path containing a ẞ (which is a + # LATIN CAPITAL LETTER SHARP S - U+1E9E) is normcased to ß (which is a + # LATIN SMALL LETTER SHARP S' - U+00DF). The two are not considered by + # Windows as equivalent in path names. + # If the user didn't specify an executable, it may be necessary to # cater for executable paths with spaces (not uncommon on Windows) if enquote: @@ -285,9 +293,10 @@ class ScriptMaker(object): if '' in self.variants: scriptnames.add(name) if 'X' in self.variants: - scriptnames.add('%s%s' % (name, sys.version[0])) + scriptnames.add('%s%s' % (name, sys.version_info[0])) if 'X.Y' in self.variants: - scriptnames.add('%s-%s' % (name, sys.version[:3])) + scriptnames.add('%s-%s.%s' % (name, sys.version_info[0], + sys.version_info[1])) if options and options.get('gui', False): ext = 'pyw' else: @@ -367,8 +376,12 @@ class ScriptMaker(object): # Issue 31: don't hardcode an absolute package name, but # determine it relative to the current package distlib_package = __name__.rsplit('.', 1)[0] - result = finder(distlib_package).find(name).bytes - return result + resource = finder(distlib_package).find(name) + if not resource: + msg = ('Unable to find resource %s in package %s' % (name, + distlib_package)) + raise ValueError(msg) + return resource.bytes # Public API follows diff --git a/src/pip/_vendor/distlib/t32.exe b/src/pip/_vendor/distlib/t32.exe index 5d5bce1f4a65f0bea9636a5a825646c520903df4..8932a18e4596952373a38c60b81b7116d4ef9ee8 100644 GIT binary patch delta 28024 zcmd_Te_YhX_CNmG1!UF5MFm9Umja5v_b2SKu&fD)2DXZVl%l56MwX_#W?gadE_B^i zN*gOHEeS1eKg}PhrG{dnrDbJBX+<}04R@{ZYDz`!_jzU)tb5<@&-eR%Jih;ZvGbZU zXU@!Pew;aT=FGgdnzLawSHjk3%Q`mXOmwY#{nUyRXP!&zhTERWN;`@8$Hl$V+C`Y1 z)*?bh+Up39?9im0MtI^(W7^|_t_<=UgJG@+r{B52PGw5}@n_4Iq#{|EnrOcNuMIRRgk0*Ey74Z2OA|z>U~BgNuiRI*~O;IhWArP$)s%JnE7|=ce$$-k~6iv7$`puP^AbsSbxVjhi6ZrtvlC2Gpdk z$uZV4>={4iI|6_reJrsRdB`e_{u;F29`RoWbD=c~B{6JzU+U~rVHbZsP@pJl??6fNcC!3l@q;OArMbT&ywKdd{6}AiC%=QZlM>hiz2aT}giw^1 zqyG|0?e?4rf#EOpI~Aq=Xa&X=DUJf)y=8W(FLmn`8@krUQ$;Ua@pe*4Pl_>!GGBL2 zuFvnZy&VZo>Q-O!ABsc`Zxrc_BF3^(UNISM#`u|!JJ0$;bXN> z4z)GP<48^S8nVGwb=Ci=4T%f+6^vv{XzDDHZ4a`QmskB9NVN0M0*MZh_(UM_N+5AD ze>0G{UL-z%#Asxd**_U*m0I#rXG;(+e{^04ds;DsYG!V6=1^~0rLqGw(WljKOy#Kg z^l3H>F$U5for=Wz+SE2sZGJ~;tbHfSF5}Ps>i4^kMH0oEmzrAAXh&!Jqm#i68al5C zSd~A3$5I*8je%%7qV~`cO6sqpD5ty}^vHnnIECSvhEee56kf7QZ>1|Iu(7>UWn0+v z-eczJk)?#s$581`)-_@7me_3|P2(9TrT#Cms(s<^W3iPOoPkve8=ufWD9qhsRAS#K zUK%bcuXMM_k%QR#5&MAt?5o~`ru>3t(-d$j+{fjWre4nPRr`8TdRs8Tq0lu|dU_$X zjE~1~mt1SLpF+7q{8iGdHQ&>;!KAnGM_6v3LE%yaHS=CJr_UfoA@CA@S2$bMXNcM^ z64bv?KPvGGs>g78kEQ!PvEn^GQMr+ktfkK=RkylE5BZ}*J09(u78!-{@TJx-mHYZr z?l+mC@37%eb){7pk1^=#N_P&azF`i9XYct=zuy(!dE{-%O{}OR;tFEc; z9OIn2(qVs!H z-)%{;r}smLY($4tVNroN%I5}}w5mHppO9KA+cSXGa*w0u?_MSz> z{G!ACd#RFT_H-3SrL=@=pwZmN)Fpg42LDw1i;y961g*qQ`Q_&Jk%O?#DD9DvsH8O! zqVD%pU(hvq=P1lyqam2GQT*csNotW|$WY)b64=UqLtT$U-FxyCNRHr7isV>KS>H)4 zc$FrzGnvMxt(yT9x5u%0MO zxojvk`2uRa5h?Ct@&8%n3-P(ZI^RKs1nNwdj$O55EU+UhVu~_;Opfr2sMYLrz0`Oi%dP~3jW|Yc1vVI zL;{Krc1%+odoFU>fU#MUq}ta(0|%XD;|W=8cz;W}4fU5wo%f^H@*`EXYiO**kPPBF z2t=@qPY1Jg{nxmtv63^Eud`sR68WduFz@`x!M`(!se8^5>TSll3!Cmn-z=ml-&yB( z4zE&Hn8NlLQR|2jz8+ z-Y+FjkeW}OI@QorN-8R<0%e5nmoSTbz0Aj}!@b8FDWxhD`qoOdYTQ;ptGF|xYJ-Q)=4;}Q4`R2+}Q6#aw9i&mIBmJM5T zeIAOxFV6e^=o3eN33DHboW>jSBx%i5rBs93`}(+#C&P5IqZ2FU1mq7^hPyMWI>y}; zY2%JO7{K0q<(k4k2Jqx7-A&2RIh5x{7STHMk!49a;*GIu<|+Lyzkl=*v_+IO9d$3C z(;UdVxP$eNN*6j=Kh z89IZe|vczC}893d7#t#@oq?0jYP3^yQbB$xRAxai_Pn?i_U4+GwVU8Ju(l zO~KnR=lYk3db|_N^Xm0cg7^fjKX4ZGC0XEMna#}7kBVdwk2k|{HbtuDMlUf zIPA;doG?YPaf3$4idpHPCGy!ttYy%xy}!5_eTc*^$>)w!gM=S^V;1}7?DW%Swo?!bX19cZ)@SEmbaHf>;6dDt#k4PK3Pg%zMq4Ln3 zFuJ#kweG)k=g-J5)cs1TNT64z?e{}pRGRV?&QM*`N#=?hICw0U*L|TAdb7Z)GVbc3=Wl7$X=RTp-HvV*pMC;aV;AZ?|vt_rEr zMqBh-YpnHb$lV+nMa2Lvm#KEG0fuK1ao7$7jW(E3o=`Lymmc>uR1lw8n8i zb_bByP98Ip?TXjQznQ_lkDsbuPowY=ED6$>3UohIOEg~$La>@DptKOB(^40Hl`Tq0 z>30$|(HBLqA}`QVf4x?eMMi)t$^kh>pfmhof?I?1u3E)`Z@6CIqdO- z@sS^39?PJ=7DYgN?3FAcski){3KpA`((epa?l?B- zRpFdxu*pf&BYv%rr23_@DtRgI^&{JnbW79>q&Jt*AMXp>2&}~h);D?MWVe=T+{sf> zwNhS)`rG&nR1W48>KEqz!0#L2Er^E->uclBU&M%2#!KbyN~J_==A34jN*z>zB*v4C zy+@<$=2D*1!A1^Eo%&G6ANuAZnk~lyWf?1UGXLA??uGn`bdoj{6=jd?kD~rcTcxWe z!&daBvu`Qf6j+Q_V*59=$dwNJ5Z$Gyisy4+=auu*X+c6HFA{{Aiy$D_f&0gZ9#&Kh z;Txdf%l*-g4y)9-nO4T97GfMO&^UauAjqZQcM%t#ihe-D6;-|YtwgAjaSheaeB1#8 zrf?F`8fZ8h?RePyhS>=GhFN&>ly|Kfxnt0%Dr+<>BZ-erh3W8y4llV(y8!LeJ<9dL~??r-2rEPtFBA zE7wIwsws#F6+uFqAcmb6L0YQ_#-2s6`H?UMSiJdCV;7>{{Ln@TacI6qCDH5JU@f$S z6(UWBe+`uAYV1NEwS;xx**jEfY6-gnOomA&R$otDEAlj~g)!l&I}g+!y_UMziZak` zkD-&xG4Y~nL9`#l#@HWS1Js>E3=+mr#_uH_JCz;qkHCUh1(x7?*vow}vLV*IyEEl2 zS@Eh_oC03T?`~&5qzxL;Dk4(@eGl2_>pmX2<~<44nQvHCxc#C?9^cMJ z51$ls_D+)QC`dES&SY>BQy*wOc+OwZm$ryXtYanS~jr zs(+W7zpa3^4j=AXG7b#b)7Nec5FrWrouz#JzaW|A!lv_v?!0PMx*bYeDgR!O3w#^A zo!A`t7E~E|42hFBLRf#Hufv#_YTt_0q&sWCE?S2kscRB6=RmxG|Nc*ukN6;TeEd$| z5WFP7N!AzWY~u+1ZEjen&EDz@Xonk9F1Q%Nj%$p9tOix%nv3aZ@gHm{Y}m@&zxf^E zB|IBipxnKk4Er0aJ4wgSMI{`A~7&yWG%h+X?>I;8x|I+`y zepL~(Q0vgs8;7xHM#d)6-U~14wZAh3#yPC7W}eke>Plf}M~)cPDZf>fV@V~SMIRZ7wUnr+^R3cjb3-7{vKJnU=s%$S8PKVC%+ z4c$rIM>@a%JM3!FkSb}qy)@ej*V5q^BuOlQGrfyb71O7|RTaheid9cJ=cq#J*$0>M zXY{1<&!9lz2U*33eG4ttlx*%0E0~H85OFKw^RUUH`7$9zx>lf6qH4~mC1v&5b+H&a zcdqmnIp3VgCH$onm;X33-hL&{wdUf=&_4>M@N#;cN*MayYFf$b>vv$?hTfs)p*DJMIVhf;;(10quZU-> zc!`6tHO_ThTiI_+lox)qpH6pBbz_9 zZt!F)2H#yzjYA7IA@J0R*42qt*NOJlbqYGQxBdIxv=2Yx=E;sJZXV*uaC3ztZFI9E z8ZlMf2_(DgiC@uvP~a|#gtqVONszT~1HMKu)j%ZMA49bF7Gi6E2xz7Imr>3!?v~KN zSa@AsoKB|2u>+=+6JR;tnL(JP<)HbP|d`_a| z;eRffQmN$rqGZtz?O~!!!v9z%#oPY{gMymhIoVO>?zB4!+?|UZusiQl)qQ}ZK&vER z?M-;V{kPcV929anNQX=Z#;v^(seyiqY=5E$Pj2@DhcD3Gnc+;Tbg!1{ow4rYp~39v ztzhUs2&*t zF2`y&pWuib-RyFdLpl_rn^kpRhk@Zpa*L2NDk&h}fqt;M4^avpiAyOa9;^>&ml3~iNX?|wFQcWOA5gq-aD z-RUkWg?haG5*BIqc8W^v-_wG9qn$RsbUv!zeuh{&m#QA=L=IJL8=mgYMXGg&1^o`y z!|gbQb9dh9xYylzk0agPxkOd>9MS?+u4$uJ zY8RjbgH3fPE4_6jX*gT(DFUdcSBp?bqUu+u1BKeK2HpW3CV2(n+7YRS>iPm0z2V-n zP{bNL&F_rE^7k-=I_ut{16ObM%%Qwv=Bx!Xoj|kTY*=t0~>P+um5|%Z`=YX-4 z-vdLS+*5aqeYhve)#~dLD1$ih9>Yc$A9$6gZauPiCv|!1HUbF_jeqYZL{x`GfA~eI zfq}I7_mV`_i(Dlz{9|DY`#<%c@gAZ%3`g#o@6jB|kr12{I3T3acKPAFFr)^V%gaU6 zsAaK`*Z_;*NbcdNF^_fj4-NvFGchouO4@rtKN5U=&6y7_Wd?VXt1B%SMM zi6@o*7BaTf5yz|%VE)r6L!qJ97lXA*J*(1FcM4oy!Rv0ChWPu4d$zRV***zO7$)RU z)fH3On1e@>9kJ9U?B@9?as#Kh{ykdc|FAQldfbQhvlsVex~Lf>JYKOJjXp$UIQkG#JrFU!e}~eU z>PrkL&8p;p*1U!P8;2o*HQQhA2(9zGzQS<`xV?uq(^J?B^`hf!^+No4Hhk%UURIQs zJH`jlQ0M&NUhx`VT$MUdxVQNhzVSbc|A+gKnBC61yuy;GJGXki_Yn2U4UK__f9K0+ zO1)4iWwx7n*c_NkNA^cYoF`79@p<~s?A!fgRDu$y+FhC8N<0wbqW1oGTi?F&pKWy? zItES{;QqaY@M|A~W4oZ0djlrSKFmQXj?Vwadmp2f$1AKb?}_%i&^j*1-aqJ8+WwQ@ zUvp^BZ&>A|_Wnqu2$lZ_yDFeLa0z2>1?>{v{*aua>tD25rHvM=bR3Y9Yn7G)Rsos; z?;))UNBxjZ+GK9Vq!#C^j~!{GBLnY|z`g<(F6vG?hE%obK4MG9_LkrA6Z^~9)B%Ab z6gnor9zyHR*<)m{k6kWr7{P{*OOmCsf^pfg*n@~$CNOd9IIKaNe?_Q2dTR%JYFx4W ztKqDD+-P~+ToyAvQGR+3%NU;`-!X^XHhx?Dx%a8|@Qm1KPnrG$y5mW*PC6TsN3tR6 zB)RnmmaUF8(OF6cTt0E|Z|n$EMYZO-lnQcqDIb4^c6oH*;+bUk8U*6J0M>0CtX@5) zm2l=5Bki8Q^mkvj`}*(B0e@t987#hY?(1F7 z0p9!$uQiksnNpL2{fJtVAxmd>XmrtgM6Fb{r6{*PpW_IN+W(p+T8=(CuE~#jGX?D` zz5tK%T_@GpCD*@hO=n5kc;wI47UEf_y?Z!SOjS37^v4N*&lrF7p6I10`%>zqq<^tk z-94^gH}v-w*mD9MVdLSa(Gi{sdx}tVMxvK78XzEqmWbzdSCB zh0EQGy0B#mZPb$(OjI-)MW}4dMyP9o|JdCbRvlUCEt(iv=~3pVgKYKT5SKj5IWn}g zI^vmM^M^#eladR!#7ZjS5M8So}!v3q^Gml z`r)^TaV_DoMC8+W_x$jMx)-&h=E4=I)B zH<}RR-vNbL<9+ZfVmav;A;%EYCVDfy^RY6B=o^&84}r0~yneNbX>Jz|B`1a6psyjiyCu?JtZ=rJ@?|HPCNozyirt$TJ8(UT)C+Kv z@K`wnw1Xzz=FHUSH$lS0F&nxFaaV-$3P2dOvtRjvAhs|No1H^F z;t0cAN{%yI*5Iff_3002jWRy`IIGSYKORkVM6L0!AB9i}AB8i#jE}8WCNk~hWD7(Z8 zr!TRI%mE>73`&!#_6Qn4qRC!2N0k%5*FeGy(^SZ7uzG=UZVXf}AfJta>WM=6cR0{M zA20Ccka*jhW|EkQw}0k8(+GJ<%uY(WAuk|;dkD$O7}%ZxSz)uYGv#ZKvB$FY@|O46 zd)ZTC)32f&A<1Bmw#On0=|9`SG&w_M9jqj0MBGDP`u(LmWeyEPKk*EKDk|j{Z)F>E zbS_ecj=}cz2>GK05N{OJ2fiYIG?B{r^eH$;SP3VueI6dX0a{30gql%WW`Ff@P)?)F z{j-pEcs3q5Pca`~uJVSX7&+!|%)6_VSOB+*fm(}l z0(%hur`}f2oHKRj9Cp8P~|n%7uH^4Nx8AT*NIr$`b*53 zJ5pY&Wq0Kcm$!e(SnkRZP1miksI2bJm}NgwJ-wmt90RGx(c2{x{xqhwjx5N<`4Eox zWUAV5P^&`tI3hp-A&xaLdyw!WD!b--7oMux3^3Wd{OIDS5a|E4Xi*t|`Xkn09q4)! zko=%el$B&Zg)BJvT<{Ss2XwzxscW*)AD@1X#{8^WlB}pl_KH!Z zyakc^(0me5?}^dxSA~4|i~Sf182x#Pjqk?lCH(fzL-vCp9;S-mtabPpk$|$D+x>e( zp|wC9&_ml`k4%4HOan>rpqQ%P(}W88@Yc(*du+kAhUcRn_9h#Ve(!ZHFE-IT^(dj0KL!IAYfu?TjU@3WH zh-+HjFshF~`g{j_Aa6+O`oqxMo#jw)BTQlYQTY`~=!c6aq5eUR?lptR4&)gI{cmYu z`KhCJmP4_1q6L2E7*oE|@qZ|)B!7fUc`LD#FbMw0{{uhj6GG-<2bN6dq2OU-q&;~6 z=APp-=wrH&fWwUqs45-ORE5m-RJWOP=(0`q4DU5@USf*h2_rao2BWfN@JN{E;$S<( z4?EBwwJKfk^_-w^G+$8YoaKQx!A$2V;|pTty3g3;g6!VU;s_lF!;9vzhYRKn%|Oh? zKb!~Jwbt?>P2|3%L(wR^mFk)PDN{{K7>^pM>fM-1qU8F}ohGBB!i(zf)fhQcggE7@g`8elpdzsWnK$JYoL2|sLT;j=Kr{iPsIfbc=pTP#}#X?w~m4M zo)?^Ry}cl}y@}HqV)K7|BmKLI+k(5Ze1%{C4i)Q{?;Uh(OJqgUWdIKD3#?fo*Ew+7=|k*Vkk5VXeP?ADb|F zVEk~D)?C$xj|}z>4oq;QP+CtfXGCpZ^y6@9fGO}-glV9 z{n+8seTQ=XGceqDu!;K)za3-0P8p(nFPNIfk9^36-aIhkWe|e*8*cfKO}M#4-qFDx zzj>6a`-JP%wECh{#po06Z&V>ihMeqsq`dvsJLzt8kQ&}i%>z{&|4hR@NZdzE!Oql^ zkMk~N`HsKhO4J9~R<=kW!thfj(|N~u=%^i5M+Dy^l7=D4_ic&p+zy!|hGi6~)2E>O z#fgza$t?n>)1nBR0P>Ga5KHJx>}Rv8*uzERA>rk7 zMX4;*c5k2CFxTD5xR3fibJ^mGz`HDoYe4kG@<9j!t>kZFdr8fl3a_U3IMizy^ehgw zYLLMj4qf|Dks4kv8LpRI0V^_pahmdWvR{g8W#BXRF7#FI}q zy7(oySiG&!QXOzqC31_%p(ObzIL+2gi<3XGi0zp6y!=WBvrXTlyn>m4KIy4{@Rt#xuHJBhjVm2AlDayM*9D1HHwuUV>ifvsj9wN! z%R|(erN$}TNE4jXyB?j_U67p{6}m+f}?h|g`F=QJnDAjX+||l zc-TTxfI_k{v(fx${*qu9lX+?jODaoMJ^)JKeqdq?yQOTfrB5yy7D`_Wgq1D{DR??b z{xPMyI#P1HWpXN)_v32HHLTpD@Luxms*0Hf4Ih|xY-`!j-e@egBJEcfvUkgD?EF*1 z~h$V*#~7~S@PDw?1?!uWe>9-<~$f7JgRM|fQ{cZhSgLolYcduU8(q5 zp7uTaWUfYzBY4HU3G&!+?B;o+ee;s!$>Vl!npY*0UmL|jZ@&*^uDX4@>```P zdo0UZ5G!w*#AYlQB{%%clAa&MUR;nQfBiQ0-hy%R!IRi;3&zNO1#INPaiOy@5!h`D z6XaW-VGk^v=5lWqe!icaR_Vv(Rw>Z|{~q83;A6mG&?m33{_(i_@tGKAG6`_s2g`F% zQ{n1cF|Jof(hw@K!RUni3Ok7Q2_($4Fp~jl)I8Sj>7ne(D}&-DWAS(AE97pAzuc*E=Z-=PbG^-6bBLwAN}jsO zug)C$5c-f$!5SPm%ob8*Ml>i@U+rUWzq)+L&faKa;C$IDyt;Qa^;W%6t3K0v0xN!P zsQex8?xnBA$>r}JVC!DLi1EFDmo9X}P-?}8Ki4tbwltmr_p{H6`;o&yU8 z0qp?8U#-#vz~2C?k;crGi3`rY+|vd30Y!)SUG3jta?`ShPKx8ZZg9-(;b;a&+1tcy z{(40;fA|KE259>uNTy?(;tu}mdUmjKLBDB5q%UyC*BQ^{FSD_C7;X;SZ&%fA0JHc+ zF^=zlsi!u#0S(lq7U|w%CH&K0!xs0uOwPy^QM~>JtNJDO${i0!E!1M`33Ip0+p7%z zFPk?<-@$IN$H-s*h}~fyDwm4bL-yhQEDuAneLk3eUIQP;4%;=Z5im!v@W2O2R}!)K zgpuSgqI9gk27HZx_u{}ir@Vfp%rOj~67nmsG>{<#vt>dlzWAEC6*5S>H|Jz`b7;MO zHP|KRJAP3Ff2JO(X;hlzPJzFIZa~V=EL~IiZF4KeG{e<|7xR^ZjZkq-^+NYP@V6cK zmV}&b(b6UM)SY8oeew3drX&KyE}F(Ib8o9?#_bj^4W*t|`o8PAy@HFt&b)v=aM&7X z!FFGlIeTBNp`MlDCfIekGybYI4~9yWoKFF3l?-TrgX%Yas%Pe7)5whU6U)Y z=#uh)#=sVJ!$b@b83lh*6XnODCvf8Iz@6mtXoAou&@kdcWTgGX05thB=sj9v8zQtm zdJy)gtahqp-MN(tGq!qS#jG9{t&1Xx@G8B!)SQsz{_bLzJa_mwP<>`Yq^xa+`Rjf zyYghh@8S&OA3_B|p6Ie9J~G6-i6vW!Bs)9DA)8dn*Yw9b>m9vhbhz&PS5@ewGJXUG z4($p(IV8I1r}qLSl=yU|+=dJ_ByqDy;_%HV12=fdBa>T-&Hl`IjB}X~xk>QPgj}wH zz@6}mI`CW%2^>{Na*y~gfrGr!8~I?tMd+X9ZSywv)7|Crfs@&kd%l&AD`exB43+mS zWYd>S84bxrdvAFw_&wF($Sm?~tWAhA)9xe`u9pV7Jc|9imbEO&lOKPVMJ!ECrJJ7~ zaSIfiCEBs#-c`?ieq~8Ov}Z0IE>~P))k_oPneVdAOOwZGA4H>ZPZghL3MtR;^3i9S zgp(YJB1-p5krSlDc(BNO2e=)p4JwC9_s6p>BL_^ZxW_*{@$qzF{Wx7FRr&O2fU z-iy;*Z!hl|>?@A^8s?3949=EtXA%st5zeuZ%gN(SUJUbZ&cXbvEo`APWn2#SC;>eg zSLv>9jdKq4w%{P#pTR#ODFkz~<0zbo5-3sM?%wO{EgSfgo>C(F9(A0;&1@umrDq?m zh?So^&3r4S4Z62GSyej)ofKf1t!E|ojgi0lG+T3DynNI*?AiNb<&od81NSA$??_{x z-!}}k?7D9#o{1}sc$Te9lNWWc)hiQS@el%xN6*IKg{RPvUicyg&HN?ItE?v#ihWdl zo-DK``8p~TYryPoZ-6O@-hKZDQ(%NVq5ZrViJ8CRds6!2>z;%@hxdaIAf=DeyT1c; z#^M9If#O5JfxIsg0^;=AlWg4m^W>(d*!ufZRCxJ~H}5g9qxV;Y2}7GDJ@DjU#Xx-7 zE$(qPV5lUU`yze#O!oDM54_aJ*Z@@q^Zooy?7_bbmpkugul_~X&kAbr+9xso^p_QB zL~=%YrzySDm8NO<6n(!8r8SpKd#eM+jjyjj*h8y^xgeDEae<02d%Rm~lVi262^t&D zI%wJdJNT4DqunQDx|61`c&Jo-2#qs(R_}S3J@}GA{*U|Ep_dlO zVb~0N*&y%BSUCd3)+1HK36AH&}hp_(^~P|x2IVLab0LL+}kgxS0iq5GKC?^Bh)QWI)UXY1$v6myMc;2pP|@Xk+7f8 z83Ju3bh1Ft6KWA?8=*RZULZ7Gpd6@+CkXr^kp~F$ETQ27?I5&k3H87gLN5ullhE%3 z+C}I&fl5#;{ER?D34KSP3PRrmD(bAH*vldzlF)`FE-E{U@W%x?mQb%i;|Z-1XfmNr zfu<5#CD3$2=L&QTp)&-kCUmku^@LgkY9v%A&}>4}1!|R{|9OJI^N2h^poN5n0~M7n zqS!C@P(^Ko{wUBHgnlc~S%kI83gDaXh*!b)@TaawLK0tx~w+1PH2~gDLFnf@4r=YCRn+=NvrIeQu<y+GLCR+V zN~$?*c98N;fMPUORw9Ma7-7vQqc=D))CP z^Yx0k&aig78n=R5LeN>xs3Yxi_di11zbKZCyu96?`k1tft$r{jG3s?J{i*elyR6cB zgc}iEpNfYK;CP+wdT@jsoaY`)r9k$#_%sQea3fqp`USvwz*)d4z%jrBjFE85LeYX`?{MIvI9uzn}-vw*H$%(6B~zIivB zyEdHy&sudFap3JX1hWA10CvDqz)C<3fbC{qtu2fSyyRsN_5h9nT6eQ7Pbo`&XreM5 z<`BP73*XPo2Dap(Fb5<_)r6+3Iy;EZ_f?Hq7)>5NLIy6*aig35|I-qWDRdz)5|X-$2Lq zbfp64^nBe=dEIE%w|oo~d{PmDA-FSFn)mM-2Nq&mhQ@yl)X`u)MN5M^Ln zo+IvOd`7><5?bp2tg#klqbB5|?B4lRh2n5{rYMK58U@CZ@(X5c!^5g#XH^Vq#xBr-(H&8^@mLvRIWLnJ4S+tQil1@c=9g-8Qef`pcGXgMd5c|6p6SKV`g_h zk`h)sA7&Wqmpn*$50<@vZW`cX`yVNg$GaX~Z&H4|Ln&q!|%crkq@2(%73giuX$SClu$Ks_AV?^n1Yj#Qz3@7yEs3 zdfRv=Vlm~oz4Z^i8R6ly}DtHTw{AmQi=39W0itzS=R0tp1^^*E{y0_5y zsLohMsmT)0zLDYUzre$q0Pd@KMw|(%=;96CFnTgdY?Dj*I$Yml{n#LR(i{vb#e+;7I+94G%3LM7A+GbUYzx8^@FHrF7#6d20uAZ7idpb>lqw%PB1D zvC(o@3cKU6FNs+2cq;|TPrOeVI-VF$v7wuyo%j?1@doR8KpgZ1o z{^4BVXpr~0R1m_V0?c%D`QPhMnn|fV4dlt!v)t7Py+73h5gArh}Z9+*DnM; z`1*ld-jj_+tO0fYgJW_4|JKn{fd_&5zPNFOhnaaf;0^GGW2@T>TV0vs{SrPa5-)=q zvfvQ)D#$X2ri7ovRY&r+sv+RentcOuN{4&61bYF_@(Z}@#XWchE){zee6fQ(oGK1N zpb1_o73U)vvG!MB_hE-_@jLs`$%xAP-p*V;{S`L*>0#KTxt^XmbPu|lJC=)+k>7*o zZHo{M%BNyE`}yfK#eML%|JQk2<>uS}bYxP05CsH|OcZov^6lmnx$48+iY>A7r0Orl z%zUWsC-9UzhI#AH0IA=59#6jH?=1J(WO?!5+5Be@i=()EB;i8G-$AWx+@8RP`Kz$#2>DO=S zvxUFu5u`i2pWkT^SIjhT zro`)MDG2w(_tG`p=8NI87j-w5FI>cyzL`7*R`c=_Fa4s9_Y&Ih$BPSrI%l}E)qaOs zlz8yXL|33hx3U+mwECj?r&yhWy5%dNaQF%r_6>`Od|ztF=DzCSs`;`lQ` z9(NB99}d*_NuZ?x_hKPA8{6=ECkpiEX>X`P-1*@&&<$Y556p-=ZsN9E_eHlJ6A@Q| zDilrwF7iCHo;AD`L-*Payfub=#`SqdI{CFj>gb2RZbwaMD4 z4?uU~LkMr^AuM!j4<;r)K|H#16LEg$UX9-?9U^XD)fdnkQT<~FQ!=U2R}0V|LvRE@ zwQwJ|`rO{?RK`Oa3h4OadAF-VIary$q%z}P4V*VORT6Vtsfl=`clh~0)@YuxtfL# zAkvXe`L$NsH6I@xwph#dHI0rs{vc}Dfz~>^U^UTibhNBtSDP#m-U_N*3@x?eD%gZ0 zgXPO7u-Qk3OrnCY$Hmjxhi72LXcUy=&XwXvJaE6mp~FvmjOT0iAdSv3`O~{e3Ez(& zN)d=-Di5h(hmRzWud72#8tG68Ill0yO@ZHe8CVs{t3*RdENwO zIXWWUvI|*5nr%D_jC3+)zV5gcTLs!J3=5`}@rO%T{n3#lXF~uWXDWB`6+iEq-QDeF z{B?9a2GD?U%htY= zD1Y+bY{xreA>yCD^SZ@Y-Xj9%W|2tKuSG=6hUxFYPhSSrS@6!AZ38v4`_9{7-ZhKe ze`1LI>sjpa6M5;&a#6)5`~U*3vsDVb=Q`W3M=%0tGp@7U{%r5x z$Lnm-C1klyf$y5c-ptn4L0(L)tJWS?#`XiDvhoUNmZvk3#pY{+obZB?0-8nl^ z^mQC>l4r4jB5tNT5vQ~YJIwKqO025v^vS`NL%5<8{N?XZ4aOc&&nCMa@LhLrAon2OG0MQW+Bs#)agj;{Z?Jk5igxE<+ZNFNj zAqbZuq#aW-LR>47+J3Q0NeE*RCL`S0X{Bo*qot;+aF>Cw72*8|YY{$x(2lSR;XH(X zgx0IOE6#n;$0*I09Dv0rWs$TD|CRufr8}j2@LY@(C$I%D*C;g$v@~fswP^Rq?=odG zQIIqf4D+Si!Mq5`4iu1#49gIsqKURt6uSWUa{Nn1k;}yk?f^al1ujN>M6ht+tnT|; zcDH_?6OuG+g4Cgc4-0RZUXoWb{c_Xu`>MtkuIZdHBjYXUO{Vu{QzweQ^(OQJ&fu&K z8-~WP^}g7UO+&2A>q`iEG(Hf{8XgGOj0l9Uj0%JY#ssEWonL0CViSEbaMR;K!4aKFz=Z_vIiWfecf z$yeS+WyvSrPGzW0FR+Sg)8oknR`!T*u-vvta75iJg553={A)e&%X6N^yW)EJwxZmv zg!Y{WXXZix{@C0f28R^C5vbL>`$WFI%_4aCn5c5oMJyQnr@kkG_3p0!=br}B zsnlrTi|M2z_&1v-PlqJ!fhy|$+YDOaCG`0J-<1{oz5m}UD;9U@Xk>+~V9Bz(=R1lQ zEnhzWjzwj=zqmBK*Y0_pQ)GRb;P|A!rh?slI+GN#)W=52uDc33 zKsq295DQQOBtYjCt8@{-0T%#mfb)P>z*)cZRUjgP zpa!rQun;gCFauC@c@bI;P;8)B=_Q zW&>sbiU3AHB%te(^@+DbWYO%5yznOaGWU;v|L@~Zj0%wr)6(%;_umfL1WDa%g0wSy zf<)g5(`TBPsp9YDkN{rO2dk2W)%+T|uPH>9EO+6ur=$i@<`=<~9L8uV>G{)r19S8L z0d!};kGP5dFNGQvOE&-Cf>Ck>|MbX^iVXi7P)ljd=>-V)J<&_{54r1hnZ&WQUVuQ* zU&lh3MCYa5@z_e(4_I2e<4yPA3%0Nu@pK2$({9AiJc)SZjrhtJ!H=@L^S8ZX+2V)ECs()Jd9=nh6?()~>x@`<_;*i`R|RmFVW` zmgu(Y-qan}eXYBwlk1c88Tw-VQoU3Eg#KmyN&R>FpYq>fY%QV&;a)w${gYNy(*-lTp`eM0@4x{qd{CR0nRjO{%e*hMI&)3t-!j)_ zJ_@;fKJ#Ga(ad)01cuucpwf-dSl`s{F|W$(^Dklm8~Tec!6A!lmNT{-)5{+Xk+47Ma$CR>(Zyq>jOu=p%e?xfslxvO$F z=I+Y$G!JW@((Klp)qJT5 z)%MrMXj8R*?J(U~olWE{yx1|zd`>LWZ^@7f5Rel<8jPY zZ)S(_nlUUZK5JLjw^{b=#GLe;^Etkp+fli^+^M-g=ECNc3Q?Ic>I(IP>Nd^&+IU@- zZXSM{@B`hybpDK=Gd-qLrcTq~tl!NuE#;Oum`#f;cUtbY-0QMDZ`p16*z$uV3GI_= zuo*x>8g;xzkLfgDzunN5k&<~!=DnG>n%*&=G@mwqX#T|fx%o@;H)bXJ=^7-u(Xz|( zGy11b?vUK!xi{sm&V4zzJ@+!{f%VuEAm|HWt5iR%zEiVAb5#4GwzqDeZUz+EojTV8 zx;kCHq0~@eSSUp2oZ%b8?}oIDdokJ8VY2PY*q8BThLjnRIXH7DgvXFsky(lA3^6@z z>XkJ(%a}DKYfjdZtk<$W$l8{3Jjb6i+)`k%S?;i`v%F@RO_kV+9Ss7z`fjyLy+!@H zdY^iXW`kynCR#h*r8PpyZq~k`{Y?9d_9mTIm#x1^U#Op@U!Z@?5R#FYc}J#XJY$?< zx*M;%loMi!wv4ctEORaQTHKb$EH79NSl+XIY5B<_%N>}TmYYd0+$o9O&ztIt>QGHz zXu4QUye1hcYKf*^vr)52vstqhN@|DZWsPg6=2wlR4b>{NO6@XjwRV&CS?xCM4(-d@ z)7op=kvg?buQTehbyi)Tu25H`dtA3!w^g@Iw?j8k|A4+mU#DmKP5LeR=k&Yu-{`;B z|D?|_m<>+D1BNw*2MzUxM-5vIvWz|%kr|sZUO-X$UzX0+5&DT( zw!#fB8crB~G`OZiMXb-*VR|-8oxME!St!XyQjce_<3*rC=MB;f(Ijb7G$S;lHP52U z-qC!kNzzV&7^Ubkbdz+8buVC5{7Cn2UB3QqD5U40NxSd@gJGhf$gmFU-xmhIL7Ab? zsLZ%0L4ncFkpFrGEuZt|E8xlE@`k7PZT)sXdK)}gGfEQNWHImP_GIW0RY`_Al# zv)ARY9F-*oqy3EKqGfNc)P`*rDt1zRMm=5oBnImh?VH-qwL5ih=-$#DK{aCZv~8j3 zxKLx)EY>X5I5ahyTFpUCljfM^l;y1DJoL#$%N0wPB{cVmrunj%#S3#6lia{Qp+n?# zx$ASKNSQPXc)Ge!ZC9^V@4%|b)e23jCLNl^u2~D|IRVYmq3P1ZLWXB)7h+l4s%_G? zX(g;*$wFl2L5pvN8feo=P%~rnC@}d6%k8q(EXfjTQCO6gNK2F@))H??wxn8&mTZgF ql4mKj6k!6*u*|Z|w%9F;ElVv9%Sy{COO2)0vevS1+5*|iUjG;5p}WZd delta 25283 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 W8H)=RS1fK=yuGlWv7c$80XqQBh9l$v delta 27635 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 diff --git a/src/pip/_vendor/distlib/util.py b/src/pip/_vendor/distlib/util.py index e851146c0..01324eae4 100644 --- a/src/pip/_vendor/distlib/util.py +++ b/src/pip/_vendor/distlib/util.py @@ -703,7 +703,7 @@ class ExportEntry(object): ENTRY_RE = re.compile(r'''(?P(\w|[-.+])+) \s*=\s*(?P(\w+)([:\.]\w+)*) - \s*(\[\s*(?P\w+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])? + \s*(\[\s*(?P[\w-]+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])? ''', re.VERBOSE) def get_export_entry(specification): @@ -1438,7 +1438,8 @@ if ssl: ca_certs=self.ca_certs) else: # pragma: no cover context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) - context.options |= ssl.OP_NO_SSLv2 + if hasattr(ssl, 'OP_NO_SSLv2'): + context.options |= ssl.OP_NO_SSLv2 if self.cert_file: context.load_cert_chain(self.cert_file, self.key_file) kwargs = {} diff --git a/src/pip/_vendor/distlib/w32.exe b/src/pip/_vendor/distlib/w32.exe index 4df77001a222c84ff3fef542618b3f45f4c1eb9e..e6439e9e45897365d5ac6a85a46864c158a225fd 100644 GIT binary patch delta 17543 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 diff --git a/src/pip/_vendor/distlib/w64.exe b/src/pip/_vendor/distlib/w64.exe index 63ce483d1e462373fe16015c70ec52bbbd816c11..46139dbf9400b7bc0b64e6756ce17b4eb5fd7436 100644 GIT binary patch delta 25576 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 Ai~s-t delta 25342 zcmeIadsJ1`_cy%Hh9lR*LEvx)4>v{eg5U*23=DOnsN@wdDT)`olOB{zg*s5u_9(h6 zEH7VED@!v|OT1(lDyXP(6xM=o) zE|xFnSBLnsMx7&Hc!53EwbgZFA^cF?;k~c$Z|T<92RYbtoFM9NvPS!;^bdw0Vl({u zl;dPmbRDJCB5~7T9VZl(=XMl|u2}{OHq&JY2;ynkWKS~1`lXtHi^6>C2FEporP=f+ z*njLhB?!gi!yScUOSt=J!Fty$>MLVVocLG}@5f$C6Hlhu`aU%tsYw-2N@Kh@E={aL zU6vqG|DPCkQ9rC-7*%F7t>}wfw!v}zVt+|1o*E|wx^i5ySY1?(G)IUS*B+Jfp2@Nx zLdKR7&c|MmB7>-%gX1JmHnUYwuny5QC3#7>?ub3cC|SIcDxOIZPe@mN*@vw{Cxt9S zjx0Gf>L0=GN&Q|nJna`-E?$v}1J$Ba#EMk$ ziXfhqX8Dr*SwXB(nuVsKp#z_=NQdA-Tb3%dP;%5WR3vpba-7m2v0tOof!K1pes_ha zCKPSbicS+xplCE#dgP;Y9pyPaVXGZXyxSAD-65!VMS$9f=aL_`NbY}(Dlu4Mt?`|s z($%N3Jj6CWN*!+d|^e*HeCa}3~1f?2R*lG6}qlVIzV)t60o4C$GEo#TqijfI66 zjBhYzT*Fe#tv{7#8xfu@*wVr?Bu_L_5Gg7mD%MJS*f)-mzW1+D-dz7!%yLS2CR%*% zZ|HL?COevRdCcS#!+&v&r8;#m`~^v|7P79g=_D&~YCAAARmT;bv^d6IkWHhIT1IsX z)?<+sq*3ld@se=gk%Db@c!BWxU917ruYc$dC5b&I6!*&!#J^)N#GaH*1Fx}%PGP+1 z8Vhg^Z1tZe)W3!$ItS;A-y@IBv=$t(N}BpumSZnaZ*o#>eY2(9G>$v)P?qJ&l<=Hv zR4tnhDj7y%5UZs3N!4toMQY|qWIpg0gk{q^s!$aP<*GvSRUtbPdY}m9K&Y!=8(BkA z>8jKmRqDsTsbIs$U>>9%SN7Y<0cF$6-!m7N-ua(jRazYh=`^tt*%u;1ia4HzenfZ% zR$xkT(BuI+d(=P+Dz|3Fu4rt8A9izx739V{wLrUm7|xmwr4ldxGeHD?suC8wP>9z zekXNAWd~@GP_Uh{!tzaDBNMVni6n15!E5raB>xZAFhnIm{Bc@Jd|Qj3alZ@kZ>fA| z!CJv1AuRW{mQbxESRALN6o*kFE$s16WLaI!Z&L@A24XLuWp(n=i?Te;`a)=K`)SsM zP*v(3NTCDNrcWOsxw$B7B~R@`KMz47xeQx?(tixG!ME#S%Jq(tYZ7vyJ=E(6YHftt zC_gHx!3d6Vf0g9UP8!C0-1gS=zo?`Y>CBbySWmY$ZP#FvkA0Y8o90MU;FMv%n6f4Idum4Zp5b%k{{MtP$K@vO3o z7n5*S6D7UN<{1NYLzrmv^Ufo2C_o0*7j;)@Y#Vma80fuFOKSV?qKVWeGOAcjD;Wv1MXJ z4$`nlB_@=tGGtSiD=gpLJ773Zy+FDBQ3k3VEFKd?r6(iVZuel_ckG<|xcndWl+#r4 zmm&j!B;z|Lpi$rciPja*4v$O2DH)w+GhBs4nph!-7qKAHu+c@P6;BB_OQ|l%i6v45 z-LA$OjFeu(MvfKw{5Nfyu?_9i5KJ(<;;G|uTMI{zx=(v_RCbkf`9CX!qbJ?#2m7$E zTX#3Og<*f;ydf;D4`p)eh|KUdR70&$oD!Z+x?+${g_4XfWE#G~+UT4cD(zQTlnuR6 zmu(ta*Bhmkl*E=dw80tPk48W_2=50_kxkf`q{RWO(4(u{Aml$p*^7OpDR@pslcy~)^kATM?_VS^%mPTuu(4yn#v=ZC6yjs?N3aFGpokjXbBL+7v06>ikM+Gi8)F2UD!#VnT9hkgtR3!HjpLxzTz+_Ldfy$kh{=#^o9z(+p>3e^w zgx0Kdu7woD6Ad2HIY>zdTbQxs?7M1rHrYR^`+R4#Blb9~Dz0Db!@(lX&p!n5DmBep zN=A<6#eBvOt8yN+QR>o*UGeYYzbPIYSymky^n&yo5)YvtwCaEIW9EQFeybmw7|@Sj z7tcNli04E6*v){bpmi88wAKTi62$MQ{db%&pS2CHWTdwb{6g28T?`K2WB+M0htKw5Zss=px#O&hIoj}nS4)P@UTn7c zgx^`u7S1@3)+)JvEDgq4HYmhjcaBX93FEhRWn#!+KGKtYAM%pUiFFK()m>(pp;7z? z(aaV)Dn7`grI1fsD}^-pOS55-mr#QoU>2%->3y(hgvN)*(dIR=f^CoJ>-H(unD~z! zE)l1tPy4Z^h*-B*ljvBhRED59g~hkso!u%K%@V|*RbH4_@xHOpifMsimK!U?2h9Z2 zk}E|GB(>LXLrl6Y(3HIDBzY@D?r7v4PI+O=4HAkTTKbb=^uquu6dSz@G{X`rof*Jh zYUj(h8Ng<>dr5blecdkI(+HU~9Hs|()R-z(OUv#vb7UV~FE%mqa=`4qRKjVoN#dz? z^kG7xvXr}|vZ3uweADl2TKjjyH{b@Ad}#1kh}aTWogtelKIko=#Xk00Lsub7|J500 z?$9ki4~r4H7ivwM)EXO1u3icS=KumHl|dcVg*2f-mL)%&N2+KKP4p4g;{kUPwY7-G zlIZtPyb@_!Z)HrJ4?v8Q7XC)IfA!aBQn5ZL5o0C{<@!_PsyiYnxL9KVoz?wqAcUo^ zgESVDo0EEirC74km#6~j?*N4jB{|zb<`>l_wnn0f$0lyZG*RN-dq_NiKMnq3ll5@; zZWM#<3Mn6gSuGv9$7V$Z^VXqEj0$Xf6s?d=VbnfRzY{&A^B@B!3~fu9%B4-3vxA+9 z>cY=X7ps#`40Ub1fliChd%}_Ta;9!}K zdB;`e5LQLvr;y@uoz*dWhT+9QfP{lomtruSI>c%_9_TRyW-4b1M(%!~BwuBkEp7+Z zmYhMQV2gw7la=dbs(3lo?i}uim7UtRk`AH?j6Ljh-*~=><0@3+Le&2f#~yYL$v+Ci zQ0h2X8Jl+^(RHX#xGmigYFiw%jS`J&VxE@hP=>9NYgib25~f2IN)(E{bb|HUXu*2a zQIJntoG=`NAl&e)GBKuckm+X=>{7+5G@GewTOC$Rxp1^eZ@t+jmA%^~A<>HEQIJ^W zLVeUr|4@CR;X*q!2KVIpIrUHkwbis;+YDv6R0s)I=l2n8`rc2NTXcumOl%{@gR^{% ziUm}G`x=@9TS$;2Y-KR1nzMgz{o8A)r}e12)S1nS_V*n}iMSftOzo9IPtEU+LO*-V zHb!^saLy6+SdT`d5HHA4R)g{2d|xB-*YBZ3+dxWuw4ePM9mWUy@Ad7vUgtgsvdLw3 zijG{A7L8yPFQ<$)v(Y4dk`&b4TXS%658xQ{O(J%xp2vI~(tRk}LxrjSNS~o;N z#9I+@&_qT^Y+&pQ?yn7}C1@u z786u}3!Ok0gz@1?0!}yqa~3_Z0ylMo!IgFI9u_P70SWSi6xBgCS!@#j5U*PQmZ2tt z`(sL`gy&!u(!wpV7m~}?q92%7v3sCj`@K}phmO!F+8UCuM?)E<#UHTp?s0st57^`G z-Fp@9p>-)X$)-i1s2D*uO#z9HxfjW~uGS|qcCgb@HV$Dyv{4g;*lOwM4{Sz{?miv9 zz(Vy=7b+<#G~su!*eh>&vh)IbA3?0g=*)%Hkt|+Kr4!{3*|h2l_H&PHzS9FXxTi3! z9j1~NoD-Dpg}<<>>;-GNI~7);+>0Fkl^)id?xmz_%lNAFGiJKE4Ecdph8L`pQ%Jyq zyZwMY>Di98jSJ-;Z(;-ECi6)T*seIUaT!KOu(?(V#juk7cC#PiMh`0c69*MkBuXf{ zX9=*r=BTrn1QGko{?BO$&PXnGY#a5)f>Ne~A$(Rt}&P0;1Gl1*=Y z&hq2ix%a0eyOU6WDhyBD=j^Na(Dnh?QaM<DvVQMJU~eo4XMPDBSJr8BNB!u z)x-ay*~tq*HYBClBF;NNLNuHL)UQCjV4YQ2m4F7^<0HOO*+YV919*w7c;`Kwpiq!*&{FI^>t7$neq>!lNFEJKZzsj+M|_Nf}n zQDYm_Se_bNsl>zrO>y+nQkAip7&iTmZvhEas9-Ai-x$Efj{6S0s>~(HzxDLrsiA35 zNXWF3I$mWxk~+G)-GrmjAGt#wu{lX$`8BoF(iWq+*<&#EG8V%xa9d$aGI3IVp^QoX zb}~q2{Dzrmk}ZNVrmDq}n?RM(+Ol*N4Fe#d3~Xm)04o@dWUMe(I#*0F;AsO}rentB z@IXH$a~1N-rmsInYO($Z4tK!kZQ0P|9_D$M)b+RsT-kKqZoBb~gmN7Tgq zO5%?VeC##p^NVbF-~LWJDv`~WxUG_X-?xjCRgEoCV(zgx4Zp#@gATjMrduB}zZbvY zFYIO2FDCF2yO~o;KYrBDEIp-d{*MD`+~BCl#ja%=Vkeye16zo}n&|v9M;?svNO)bQ zvHzX9?cYpQ&TTdEwC4tv_oxfkTp@NV_){~ z8IwcViuF1>v>IB}9*D_99Kh&;)hl>HvZ=#bAU~5;LF40?9@PHUy5_@Str2lJ3 zhvAD0yKIs-qaaLjCu`y=UdPyge17q5<|RxD>T-ixL>5VoazNY{Q|+n!c+PNXGg~9r z`1nCAB()RokqYo+S*d3J2Z0r(ZsGN(So?w9`3ZMe=D@D;QT15Ted+EQ&?vj)dSh`* zzo6{qwXc^xJ4=gP&qGiseha1_67>%xc4}ZKpLUl0HZU~!5=5*Kx1J%*`s7(|M5X>a z&`>QbIAIg(JSaGLXA8r76Rd+v)+bMMy#x_guu6T&Gd6QjJda!Lhl4us|J-Kh2c`H- z-$-g+#gHC7wwDnVNam?FFF?MgB8NHSno%~73lKX?Xp~q23jBMmzspEQ^x%%gIM6u z5pB{ikd3kyEbFBX!o^COBry`1r1b-6ibN`a zjskCMJeeF{{7b^1N{|60z4tG^t&&}SDKvkE$`X+LO#wzjh&m^YRC(!CD5Cw(W2}lMKw!M~dq!krx)4xpO@dFwy9&nRVbDgaY zXs=$nb%HG&=F6Wx!Age(^E*zk{lk*^wZE{(!=m{$H(AHwUHMhF*u>#M{Ndwl+3;9C z_5|BId;q`jEPFcqQ`b8`wHP*w*q#xO4ZqyPwZPV2hx2H)zz&RTZ{7utH7?Xx^cI>T zZAPrvw_%x73Ialc!1z&dFN{)!a$}`5P$|XchW7A1M4oWK4)82DNa_J@C0;XtPP<6$ zl?XZGrLSP2!e_}srm9USXy$b6o5?<2Jc?!05rfG)}6oWr^ecOus$Ev1wfgrG(EnO>Dw*qsnz`*7y!ipTow1 z-11tsY5dGy8G$$~RIhM=WJHqY{|#42NA#?|PLH`AEW}>GQ0t@xsdTy+8cSK#*IVS6HSeRtfT}0r!dJmS5^|V}n3JWix zLVURn>+Pkr>}KZi@Wn++g>G>4K$a|lchPoKZ!ENdKrPvfotl&rIzI*1OR`YFy0Zq} z!T6E27VievX5M#e*!amqvIg!$RZpHJ8&j@}6%Au#(_e4U8L7_=kS1QBQF1~Nl0_jg zK3sh=Ha2V1oLqbHM#GnA>#Inr?+7LydHG9&5W}E{KhOHbd1lB;PJDQtOle#z&wx-% ztv`bDVy_jQG%m-H!6hVKfbD9ut_GbZ-cA!Ar5=5zPqQUf{?5d#4nC`p5&5%~{G>w- zqha`-Vbxio-FmbXDh*P^FnUN#$i#3~pjniTyvFBZ8){hSlt{z(HPjkKBd6D}(Np5w z-T|lClOIyUHcs&g+F(Xyr_;o5aZM=sgO=Mv%W)y$$pTktWDPq%rEh%D>lo||w8=KJ z3g*rcFS2wV!Wbqaz>!?wvv_D|vEGYpWIgACcAY6UJif=$rgq^k-(yRs`tZB&v3I8? zbbJfvm{OL2l6aIvrbxDE8V9~$TTXfL9Lnx;u_^T)`)6v3haDwYD;*OqE?M5tN(}n* zE*m~A%6(4(>4&ACko7xlCU@D&X`T7%e0F477(eeW`*~WNpKTd(;z0)O5QC{2L9v&g z<+ESQyS8(2*CkeFlD&>%A>Z2)STunI$0bTV&2LgL4FIBvl# zLA;SB{+@dDAIyLE&3D+`!~VKzb|yQdM~{|F(jc`Qb*g)zVVLRwsk>IX;kn@Zr&--$ zUsj$QZLE2W=@W;$)1!bY$&JamIZiKuhsd(=EN@}AFh`g~C9&6%t>Irkf zXv1LQ8P3nJpd1?5xrN@&Vuf-$(ciwqeqY!(cq`gHQ1to<#=t(L$QAWD_^V!%rdP9} zizXW$!AQ__t?(o}vM7uX*vWogG|Ocf+73NwC%tr%jmaDDmwyeXFWm<5JnVK=OD0Pd zJDazK53FYMUk&Hq%wy|b?d~x&PnqRjwPP0CX1vl^0 zm^IAFVLY+udz!6XoWS4Q&(1IQ53N5%8gN=Ff+>_%9PvG(X~pd-^?JB7$q2ynFZCd_ zXOXYDdrvtID;!4Ac*seyYM%5{Y{+Y7enKA0d99yk8>}U~SORMt-a51mGtYL<2=Z6n zdK0q##;PnE4mPRW7>wqXpPBrcIlUM>Ww3A^l$MY{LWLz5!Z}3KB`#p0GDz5S>vJ*H zwRBTM`nF-TTiif>!qLC=$=09o1lctGXEtw%4?p=hTfU@oz6Tmj`gZ47i@ssGlDRH{+H?XX?+X%Ddj8xJ7f$>OMoTK%o&e9X(d!y>kS$sI5+7B` z&LQ@*g*7Y<<4>L1>%Qz;ozF1%pI}sl;dI30g_AeRraxTB>hs(4?`JTtg1(*3z+FNz zn-o7m(DdV&HtbQ?asz1N*@wj5iFn$Mr(~z4pP02E-2c`w6a#%IN0ELIFG%1l>6E;U z9WCgjo5_AJ@C!UfLf~a@LDklXeTZV(+Tm%&uZ=AH_0HY{zfqMT1}T!CDiv{zWxt-! zA0Nf)U%v)>g`Idq?0Es39yM?)nMAh4Uuv4~thfb=S5D}^JCAhPG(Lwa3@V~6vN*Br zw`{q!*lpHP2+OBq%ke(fxTCC1VK@HOd2D3iNIqsB+gTVN`Dm`97kKINtn}69+)*GX<Tv`Ic{Mn z^<*Tq%l01$H`tVfpjBttH*b#VwEZQjUMZ~$j6n->gs3^-?l?D_a%|FaIGttv-pcIs z`~S?b_KZ>oa`gQ#IhLGZ7v6dyf9qjvc(#dl>aKVhx5}kcg{(iZhCe}9;UH~Pl*qO5 zVY08);x3KeL56~CX(d;}p%`v`;>?cmXZN`nKz^bad4e%DgXxL}EbHSh$+@B^Q|bRqE3uY5w=jePthh>|U0> z(rmtTOPL;Hp$T#+%jaa&uf&iv7xUFERyUV7u$;w#${RO+fDuln&hk2Fs(LML&ZLA3$)c1d{*fluOZ(93*lTzx!1Eg<JK zEMzz|aR4nwf}$KJakMK5iz$KBWfe)=OoAeD7AD~lG)gvYCc%6Xn5PQ3w+MWs2o#V2 zr4LopYj7T7BS8TxmGsQ!^e#wG!(LFVFG2zhUMT7-R>fsgT(g`5l~b(GfDmqkqJHQR zE=GAfOWz+XJY^d|*%K-)lhYDzSa3w5?ldK{p%bNujk2ltI5xI4)o}D{l00YWCYyd8 z%XXJ~wcD<7JY~~yTzsh&bo0e4Uuc*|*C$#dO!x}6PK zC-DBCuyyMOxt)Qb(Y(UPY-jh^OBdSh-gEWaY%bk@D)zwPQ4I(@8J{%IG*`M!6@GCNy z|N8!XN(P&}zBfPQ1lznmkl*k&JF>nTzh^Xiu)a^XJ)@!Pjc_D4z8?R>56U5z@D@t9 z4Smk&0ET!1dw`=5dq$F8XA?GcWNS8f@R@J1k2b91-(1U*HpcNgN3g{k2LwjJL{J(> z&y?WY`=ZiLYuwW1?1zmV_{+zc)24u4+z8rrEGE3kpP2%`r+86$N9+}_@u=|M4T>p3 z{W$ywL$l9Fjrpj*51(DcHf^%x&n-l4;vjcvs!I4u<5j{e4OfXsX`o6(OUVl1BE_qW zBq>@Y1gV`$q)Wjnks+B>B2#iziEPPECE}#VR;A7y>Ap2zq4Fe2VTlD;Rnm2p#toa3 zYE-&}=wm9qj_5L#-c0mPmEKPDW|fAEnv>S5bQ#ghRl1z$B`RG-bbgK+fkDDaQ&hT^ z=nR#vBRWl`C8Cp5x{>H^D&0hMq)L;?ECs4Gp4M@ayGkqmI(wBS@1E532K8LbH&f)U z8c|$;bt>r>rP4J-JF4_%qMyF5 z^uAVytE1GYM(QZx7nPQXu2tzqqN`Q9iRf~b=CEx``&8PI=n`mE^&LP@W zrSpi!vmToJ0?_%=g90V8oDw9JE+P85O0OfjMx{3seN3gd6J4g#yNTYZ(q%+%CYs(} z!GmLR%uZ8Y2c~ylL?^rsz3~I(HJQbb!V7DI@B*%ZsjO_JkU{R?6sw$3DklS+Z&Xf- z%7I(c@TJO$DPZYa&G{*6%t=i*BfXc(d8DrLNN}Q6&MlP#N2#H$%DJd=;=l=1IY(7a z5;z_z=W~@Kfa9ogHmaO#aJ=(XmZ-9Fz;abNud19paCnt7UEwIZ4VZszR)%Ak%A{=v zOi5)Xs>~9Vc}-p#q?Rho^na$m1bc@~i{Gj?~0~5DJ@sBs`E!*}5&tE*ach<*Y zI=)9SE7|^HSl8EJN!G5D<$kb7iu-M*>sm*t5)AF+8nKQ&+}=KFV+Ou@DEg2ZfUDSg zI=O77ruT6tN;qMOgp1V@mX=ixKcyvu4g4g8e<_2_`6Slh{=A@#rR=j$7PZ;!s)Lzj zY`_O1r-ZDdcyXgVHLF~(tLkt3s?e#1z4+x z@5-I$bh=e+!mbeBAhOqYdGcHedv{lo&cIkEe(#}l3 z`(6Ile7147nU~YqH@g$~VRQCA-QA8i*jBdm(|;w4-WzThABY~3<=a|%X(gMqw@p+^ z5{~qg@Hk?^iukOLa^8_wX%uod;O3}#m11|Y9eW4I)Y{ZL_HLl&Ra%2#!!3VdLgFD@ z&lb%6FJ7g6JK$CFW=Z?(`MLnse_u#kYD-ROf?AlM`j*nDad0jLO8vD;f}e}-Si%0Y zucxc`XP6oo6?idj3HxbZr}jrz$Z|-W^gckF(sm%}Mt-yvnO9HJ#Gi4M|L9W|_hnX6 z@~7lJvad^inBw4AU@Y8A3wa+?>`pvG8!w2<%Sj1rdLKx}kMSBPy4IzNu14e93fVNg z54-lIA0OR^J^V77|LPMK`PGqL&wA4ZwvMdQAv)>+K4uc|#*>*!xr+0W-m0PJry2B= zE|Utw=L)i^e{W{q-;*!e&c^JA{hq*gpTto!;Cpm+Oo=)no5sW`bM0b>SGrOXp5>P{ILfBLo-FiGcmFYOHcziK7bKoa zl>IH^{em++*eizu`71ryszat;X-KNiLjska4okhAQk(rzWqgw?F3AN;Ie%ke3`C?G zFpw%a%rPfDC}KYz3gCxNW={?!$E-zy)r`|Y5gQyKDVP9Xc9vk=HHx?Bsx^haoy@&RiPAP9fS#1&buyxV}v^%^hQZxrbu zHzWt|TUM>m>gW@_w0jSmb0nw-Z!9z@C7qMrRK&Hsul_sl?B{tY>&uiiGAdS+hqvII z)K-(nyMX5;zyB)lyoZ$^>CCTb!y1ny@vd80%r_%@&S*npM{fn-xqsONYTWqn96_8N zo`=y$N*+IP0^Sf54W{|z-4v`Rbwa$M<{ftAn;HBMS*(3|9&hc+ww5RIH3jUa@>Krs zXx8ay1ixo8+jO)Cd;6#dpRJO;X9U`pJ;BX${EQAd{-e2U`OE=f8#AF%Da)ES_A+&2 zj|D^91=G!tT2AYz`eFvX*$V9qiAg=H*%?s9vlCRFS)uRv#i5`G!BDkn7X#T;^)oN%P?r_z&+NB$AA z9^z~%mrY&UvoksIj;$adn;IjT+bcniSLadWbR>&?CB(kqG|I?$nD@_OZN6>WZWcKv#FW2q=M2Q_WDVZZ<@qgoe+ML18g@rGi$mGUZ(ZE>;?!L* zL&(A#yPfuyu#dlu;Ac%{XTOa!A0(%QnDP$}3|BjP?Bp$lJufP5KJ%^!kMvMWlLoM)q zS(n7Ra=Cc9B`wzd;ASHY->OiKdsG{6A?&f766<=vnf8z{3>9vb#zCU%uaNa~mrWU= zti!QLb1T#=h~HX&(w_BRAdd%*;xu=>3mM@X%H|)73f_x`!=2{&(Vg%d~;ievGN@K+nN9Ph(_WMlh|o6TN$EJ$7u+(FAN3xq6sT_VQ@{VKMv zvFgXz*n{KK`5$uF%O~PHzdN^ii0e0E0O)yM5ilWf;|h%QQk=T@%2o5Nzq^7RJJF;6 z5i{-Zxp3z13q~ImXFe{wCMh0e;X$28OOfiH8I0$P*fTw)zvnd9CA~QZ9`ux?oj8ig zsgR|-NRKxci^`Y5=L<)}IjIC`DAtTV1fnyMDI%WYoe(e6C#m#mvut|Sh8?S%XmC=B zRa{K(&Sue7fw~$txT=l&KCGA&@tq_eq$<*s@&(n1SIfxdL$885NkK!{ zfvT83-64*LgUtq;-h?<*A(aL(MLPE(jj3J$Qxdn)EWi4ybZ{#XmK;exo3%gLJ<)l$ zBD4dmlXBq=O6;=TcPi0`xn}j#iCdp5Lhouqn^d8<=CSoBWB74f*twI@e8@beJJnuy zfkmC_7qELSx!fH|Jzu2?Q1WXH^HFf=Tqd4+iTB;jemoVF6alf6c2_y&j+%6 zghwV=i>>gy|rv+C-AsD7v)S|yvRe4(FJ(!J@>OS^{4Qpe_m&((xW z)0xMa?*6xsuD(%#{U|Zj_&I#>_-bG3bcjtl(}6!z%xq`+^0#W)`7>Sv&()%EI!zM= z@dqIaqSuTok7AJU;+hX8>Ki)uZKL5Z!v~~zo6H4O(PLU@TUW`sr6x(9#=4yCJMNpS zbR5fA;p^1GmIX9ila5aVH%_1HBCQ8i$r)%8@L&qB5#sR!Q)){@ZE50h)I%T6O+>6= zot3K=7(G~nhwL*X_Jh~ys=LA?5xe-!KOR3TTkjh|v>doBG`S7+Y zto^xQzI7o>J$J_6dn#40tgWq6WVwu}24_+KM;?o=84?Hn6x+qtEEabDmGo*8X`aQ?x-^nA7RACW zBoEpLn756x$pL1UwP~@jC_v#q#CuCnMT4R!%CjR_W74QBGzNRR@^#*1_RIO+US)9G z3)a7%<+@6#SPRg#kEXG17uxZ2Ozh1CIL=7zY;u`T3LC;S0$f ztz&4ao8Jk_Rb#k3tM3GT@&oB$E++c4l==f}e=&ydex1F1F}%|i*aQE&cY=&?wEwqv zf;L}dyDoO*zq-b*U+gVx!_80mtc+fNhTcn_FVf^Fi?*|18>LgesIHP8yrfjE7x0AA zSG^WIUxU)O6Ite^=-IWMls7gHVnC8ouz_O3yyt;2DAspIJ77);Fr}<_u|pYx6b4?} zcBR3>Lm!i8YegioLXKDtQjU0A`MVZ>@uqim(n#bq)4xv;2d7J&$FS9xJ>9Ke7oaZA z;-cer(JKYq<5st4zTVdh9$Z^zu(smp=E2vCb8GA_&K-|9iWKw(hL^&T`GSl zQ;||qHfORAu9)o8rP6y;B0Ke+v&-^jq#s_Vr1hiOjqgJE-kFTQ67APvi8_~f!ht8p z4=cQsk7p^h7Y1m)GQ5w$Gus}nP zc4`5#X4@4X0_iOv9BLZcs6w`&47>)9{#v-)s1*hJR@2hP*M>UfM?Y1C$&R64%@Z|FH*@;sXmMIg^fPO5oTkdJ z{IM#J9Z30QYH@67%FkVkdus9Bf2;C1e(9IbC20(p6w0r$Nfm&_qx=fAcz_mn*W%<` zpkMhTRUS64^2^iWZM69AhibZ6izjLE5G9V+Nzxyv0(qK1v=)C=i@R&_#ag`aPgVY@ z7MHZRti`ML{(URoxVQYTWL?VgI4+yyh{PB*uU zn7yDK8}Vp7YkcIl_vj-}JNF;W-2&t1|Ji@z+aD#K%{VfS{qi`okFFKZwTj`>TYEZk zo>N>o&u%W9=P+Z9q1+`$=#H1RQFBZX$BjhTeM4==SkQBoI9vS0zqiiWo^$TjigS)> zmD4)VnG2j^+cpEk^iFlh@hnIQz*+bLOeO=+;Ji&e+X?GsdXRr9Ag=3O+(`tV0C9 z)?TeRuPKh47v#KRp0}lS7pNRUi=3Y`=XcD7^Rqa!gr^3j4b=UJXpTFK5L!p2q3xh= z{44&yYeQ5F$8|?&F5AhV=M3F^ID^iMqicP0|2$)12O}ibsi<@1Iagh4PG@#y^Zx1Q z(JVKrH{SI~uR_T;K4rwgoKgk4I3A5+&P47 ztqrY7%`L8+-xR1i%Jv&(YV@pWT~6{eu`#(&B!t&B`M=?KT!r`-H%lk$bR9xlw{FF? zM!wcDv`08+HrF#0SG5HQvwkW)q0Zeu z(wV$2I9Sy*XU=(ktCl_E@0A=ExC&P2&C)%*t}T?m^m`3?J6#Wo_p;NqDgA=id6gF1 z=>j^_Tveejtxb-c2^*Rzrdh+EH^)~W?jnNeCsIo^P8n1;3@Qe;8wPg1sqWu%cm5p5H6cW6 z@_C^B&f^?v&i{XyyN@B$fG|sy({ZIMbUNQsvtH*{dQ+$KE}f{?jdpZ_-Z^u|`K3qn zy5L^a;%Ky3)m7-|2q*LuJ&y6Jqb=Vr!h!R#bi*bS%lYV{IhS;`mpQu94y|;3dQkon z+ys;@y)Vc4;@{Xb|5lP+(ugh5{G4|dyv={C4)OlK#`XU-uJiwYHm+e_{J$`+OXoZ3 zYWI(K)@{?XM*iSe?z+tmgG-od>-~R%FvTbBAL6U~$-Xo_Nas6n1dm%N+L*3knudag zNgBp!7_FgMLw61B`O-Z>x*_c^>D2OSG_2OJO2cvucbA3)>wG5tqD9wgh}}eK4*vU> zf_WO|Xqc&Cx`u*=DH_IUXx7lZ^mSBIx;qclhvuD*EE{eD)rgb;e@1Y`zwfihjVTd< z=p^7Mjm`n?)o6N>a2vrLG7>PP4UT!x^w0b*YV;*wRtOpm{s!Q;2vp`Vpe~f-?t12< zG7$X`C_w<$YxG?pACA-74>G_F2-E|@VG-(Rgb3-woV%b2Ck%(8LIE>@jR@NV zP$qEdD0Bw=Y+(NkJd5zbD}nG4aXARo>dj*?_qgwn_67nMAW)Ajzj;#g5Lkmiy&*h|o7D!$Q~?_o za@=*$goTT=5d}`oLmK$mz>RPn(Fkn@Ml8ns)BHt(_yvI!knrQzILrf-5qJZEDysvA zEKv)EJCEzF(S)wcR6QUpLZEWUIbMd*rKL;w*6Zpfwj8+Z4J=FW3*Nx`w^-FJmattR zmKhSFfx8e^fZh#^EmG-jzylh67)WocY=aEpZwQA$Hv-qKM2A2V&Rm6&13eqK34!*H zYM^Tgbq4#t8N>+2ab|y=f;P}JPrHE`YtaMn2{Yg2xQ?I+Zz0gANWlH2DqRL_LZG~a z-@XqI3gnLg$F9dzf*ub%xB;C6eHhp)e0=#A7IEpcLc6OptFE*%NCWt4XEF$ zR%Qm)Ae2MC4*2mlC@JW2VD5)V1DyvvfUQfxiye?~JN+0`Lz6 z3H%4Z?6Ybk2o2}Z0r2C1N#`+@(0oFl3y=ftdm$e~ga|E(a^P#

?2_03RWcwc~mP zs{nzPUmb8-tx9JDx$iLrkS9Ega2<3FP)4AU;I5&;*P(Ra6V?)qP7-$g0UK6661st? z_z{JY5HS9Rx+(PrEv7_25ja&8h$=vapX2^A2AA`qW2QR5Si z)A)q>3$+O0T8$>$qtS$CH2MPYo<gn>U(tnFn*aa+ diff --git a/src/pip/_vendor/distlib/wheel.py b/src/pip/_vendor/distlib/wheel.py index 0c8efad9a..bd179383a 100644 --- a/src/pip/_vendor/distlib/wheel.py +++ b/src/pip/_vendor/distlib/wheel.py @@ -684,7 +684,7 @@ class Wheel(object): if cache is None: # Use native string to avoid issues on 2.x: see Python #20140. base = os.path.join(get_cache_base(), str('dylib-cache'), - sys.version[:3]) + '%s.%s' % sys.version_info[:2]) cache = Cache(base) return cache diff --git a/src/pip/_vendor/vendor.txt b/src/pip/_vendor/vendor.txt index 21a2f5b48..a35cd8412 100644 --- a/src/pip/_vendor/vendor.txt +++ b/src/pip/_vendor/vendor.txt @@ -2,7 +2,7 @@ appdirs==1.4.3 CacheControl==0.12.6 colorama==0.4.3 contextlib2==0.6.0 -distlib==0.2.9.post0 +distlib==0.3.0 distro==1.4.0 html5lib==1.0.1 ipaddress==1.0.22 # Only needed on 2.6 and 2.7 From 9bce54e54a3bbf495c3f18060b6ea7427b14599d Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Tue, 21 Jan 2020 13:13:27 +0530 Subject: [PATCH 04/10] Upgrade ipaddress to 1.0.23 --- src/pip/_vendor/ipaddress.py | 5 +++-- src/pip/_vendor/vendor.txt | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/pip/_vendor/ipaddress.py b/src/pip/_vendor/ipaddress.py index f2d076684..3e6f9e499 100644 --- a/src/pip/_vendor/ipaddress.py +++ b/src/pip/_vendor/ipaddress.py @@ -14,7 +14,7 @@ from __future__ import unicode_literals import itertools import struct -__version__ = '1.0.22' +__version__ = '1.0.23' # Compatibility functions _compat_int_types = (int,) @@ -1103,7 +1103,8 @@ class _BaseNetwork(_IPAddressBase): try: # Always false if one is v4 and the other is v6. if a._version != b._version: - raise TypeError("%s and %s are not of the same version" (a, b)) + raise TypeError( + "%s and %s are not of the same version" % (a, b)) return (b.network_address <= a.network_address and b.broadcast_address >= a.broadcast_address) except AttributeError: diff --git a/src/pip/_vendor/vendor.txt b/src/pip/_vendor/vendor.txt index a35cd8412..b7da8b6eb 100644 --- a/src/pip/_vendor/vendor.txt +++ b/src/pip/_vendor/vendor.txt @@ -5,7 +5,7 @@ contextlib2==0.6.0 distlib==0.3.0 distro==1.4.0 html5lib==1.0.1 -ipaddress==1.0.22 # Only needed on 2.6 and 2.7 +ipaddress==1.0.23 # Only needed on 2.6 and 2.7 msgpack==0.6.2 packaging==20.0 pep517==0.7.0 From 7770dc204e49e82b6f7aa2c0ebc69dfa175376d4 Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Tue, 21 Jan 2020 13:16:34 +0530 Subject: [PATCH 05/10] Upgrade pyparsing to 2.4.6 --- src/pip/_vendor/pyparsing.py | 280 +++++++++++++++++++++++++++++------ src/pip/_vendor/vendor.txt | 2 +- 2 files changed, 239 insertions(+), 43 deletions(-) diff --git a/src/pip/_vendor/pyparsing.py b/src/pip/_vendor/pyparsing.py index dc1594d9d..c461d6eca 100644 --- a/src/pip/_vendor/pyparsing.py +++ b/src/pip/_vendor/pyparsing.py @@ -95,8 +95,8 @@ classes inherit from. Use the docstrings for examples of how to: namespace class """ -__version__ = "2.4.2" -__versionTime__ = "29 Jul 2019 02:58 UTC" +__version__ = "2.4.6" +__versionTime__ = "24 Dec 2019 04:27 UTC" __author__ = "Paul McGuire " import string @@ -114,6 +114,7 @@ from datetime import datetime from operator import itemgetter import itertools from functools import wraps +from contextlib import contextmanager try: # Python 3 @@ -184,8 +185,15 @@ __diag__.warn_ungrouped_named_tokens_in_collection = False __diag__.warn_name_set_on_empty_Forward = False __diag__.warn_on_multiple_string_args_to_oneof = False __diag__.enable_debug_on_named_expressions = False +__diag__._all_names = [nm for nm in vars(__diag__) if nm.startswith("enable_") or nm.startswith("warn_")] + +def _enable_all_warnings(): + __diag__.warn_multiple_tokens_in_named_alternation = True + __diag__.warn_ungrouped_named_tokens_in_collection = True + __diag__.warn_name_set_on_empty_Forward = True + __diag__.warn_on_multiple_string_args_to_oneof = True +__diag__.enable_all_warnings = _enable_all_warnings -# ~ sys.stderr.write("testing pyparsing module, version %s, %s\n" % (__version__, __versionTime__)) __all__ = ['__version__', '__versionTime__', '__author__', '__compat__', '__diag__', 'And', 'CaselessKeyword', 'CaselessLiteral', 'CharsNotIn', 'Combine', 'Dict', 'Each', 'Empty', @@ -206,7 +214,7 @@ __all__ = ['__version__', '__versionTime__', '__author__', '__compat__', '__diag 'stringStart', 'traceParseAction', 'unicodeString', 'upcaseTokens', 'withAttribute', 'indentedBlock', 'originalTextFor', 'ungroup', 'infixNotation', 'locatedExpr', 'withClass', 'CloseMatch', 'tokenMap', 'pyparsing_common', 'pyparsing_unicode', 'unicode_set', - 'conditionAsParseAction', + 'conditionAsParseAction', 're', ] system_version = tuple(sys.version_info)[:3] @@ -2561,15 +2569,13 @@ class ParserElement(object): raise exc def __eq__(self, other): - if isinstance(other, ParserElement): - if PY_3: - self is other or super(ParserElement, self).__eq__(other) - else: - return self is other or vars(self) == vars(other) + if self is other: + return True elif isinstance(other, basestring): return self.matches(other) - else: - return super(ParserElement, self) == other + elif isinstance(other, ParserElement): + return vars(self) == vars(other) + return False def __ne__(self, other): return not (self == other) @@ -3252,14 +3258,23 @@ class Regex(Token): If the given regex contains named groups (defined using ``(?P...)``), these will be preserved as named parse results. + If instead of the Python stdlib re module you wish to use a different RE module + (such as the `regex` module), you can replace it by either building your + Regex object with a compiled RE that was compiled using regex: + Example:: realnum = Regex(r"[+-]?\d+\.\d*") date = Regex(r'(?P\d{4})-(?P\d\d?)-(?P\d\d?)') # ref: https://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression roman = Regex(r"M{0,4}(CM|CD|D?{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})") + + # use regex module instead of stdlib re module to construct a Regex using + # a compiled regular expression + import regex + parser = pp.Regex(regex.compile(r'[0-9]')) + """ - compiledREtype = type(re.compile("[A-Z]")) def __init__(self, pattern, flags=0, asGroupList=False, asMatch=False): """The parameters ``pattern`` and ``flags`` are passed to the ``re.compile()`` function as-is. See the Python @@ -3284,13 +3299,13 @@ class Regex(Token): SyntaxWarning, stacklevel=2) raise - elif isinstance(pattern, Regex.compiledREtype): + elif hasattr(pattern, 'pattern') and hasattr(pattern, 'match'): self.re = pattern - self.pattern = self.reString = str(pattern) + self.pattern = self.reString = pattern.pattern self.flags = flags else: - raise ValueError("Regex may only be constructed with a string or a compiled RE object") + raise TypeError("Regex may only be constructed with a string or a compiled RE object") self.re_match = self.re.match @@ -3617,24 +3632,24 @@ class White(Token): '\n': '', '\r': '', '\f': '', - 'u\00A0': '', - 'u\1680': '', - 'u\180E': '', - 'u\2000': '', - 'u\2001': '', - 'u\2002': '', - 'u\2003': '', - 'u\2004': '', - 'u\2005': '', - 'u\2006': '', - 'u\2007': '', - 'u\2008': '', - 'u\2009': '', - 'u\200A': '', - 'u\200B': '', - 'u\202F': '', - 'u\205F': '', - 'u\3000': '', + u'\u00A0': '', + u'\u1680': '', + u'\u180E': '', + u'\u2000': '', + u'\u2001': '', + u'\u2002': '', + u'\u2003': '', + u'\u2004': '', + u'\u2005': '', + u'\u2006': '', + u'\u2007': '', + u'\u2008': '', + u'\u2009': '', + u'\u200A': '', + u'\u200B': '', + u'\u202F': '', + u'\u205F': '', + u'\u3000': '', } def __init__(self, ws=" \t\r\n", min=1, max=0, exact=0): super(White, self).__init__() @@ -4566,6 +4581,7 @@ class PrecededBy(ParseElementEnhance): self.retreat = retreat self.errmsg = "not preceded by " + str(expr) self.skipWhitespace = False + self.parseAction.append(lambda s, l, t: t.__delitem__(slice(None, None))) def parseImpl(self, instring, loc=0, doActions=True): if self.exact: @@ -4576,19 +4592,18 @@ class PrecededBy(ParseElementEnhance): else: # retreat specified a maximum lookbehind window, iterate test_expr = self.expr + StringEnd() - instring_slice = instring[:loc] + instring_slice = instring[max(0, loc - self.retreat):loc] last_expr = ParseException(instring, loc, self.errmsg) - for offset in range(1, min(loc, self.retreat + 1)): + for offset in range(1, min(loc, self.retreat + 1)+1): try: - _, ret = test_expr._parse(instring_slice, loc - offset) + # print('trying', offset, instring_slice, repr(instring_slice[loc - offset:])) + _, ret = test_expr._parse(instring_slice, len(instring_slice) - offset) except ParseBaseException as pbe: last_expr = pbe else: break else: raise last_expr - # return empty list of tokens, but preserve any defined results names - del ret[:] return loc, ret @@ -6051,7 +6066,7 @@ def infixNotation(baseExpr, opList, lpar=Suppress('('), rpar=Suppress(')')): matchExpr = _FB(lastExpr + lastExpr) + Group(lastExpr + OneOrMore(lastExpr)) elif arity == 3: matchExpr = (_FB(lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr) - + Group(lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr)) + + Group(lastExpr + OneOrMore(opExpr1 + lastExpr + opExpr2 + lastExpr))) else: raise ValueError("operator must be unary (1), binary (2), or ternary (3)") elif rightLeftAssoc == opAssoc.RIGHT: @@ -6305,18 +6320,18 @@ def indentedBlock(blockStatementExpr, indentStack, indent=True): if curCol < indentStack[-1]: indentStack.pop() - NL = OneOrMore(LineEnd().setWhitespaceChars("\t ").suppress()) + NL = OneOrMore(LineEnd().setWhitespaceChars("\t ").suppress(), stopOn=StringEnd()) INDENT = (Empty() + Empty().setParseAction(checkSubIndent)).setName('INDENT') PEER = Empty().setParseAction(checkPeerIndent).setName('') UNDENT = Empty().setParseAction(checkUnindent).setName('UNINDENT') if indent: smExpr = Group(Optional(NL) + INDENT - + OneOrMore(PEER + Group(blockStatementExpr) + Optional(NL)) + + OneOrMore(PEER + Group(blockStatementExpr) + Optional(NL), stopOn=StringEnd()) + UNDENT) else: smExpr = Group(Optional(NL) - + OneOrMore(PEER + Group(blockStatementExpr) + Optional(NL)) + + OneOrMore(PEER + Group(blockStatementExpr) + Optional(NL), stopOn=StringEnd()) + UNDENT) smExpr.setFailAction(lambda a, b, c, d: reset_stack()) blockStatementExpr.ignore(_bslash + LineEnd()) @@ -6822,6 +6837,187 @@ if PY_3: setattr(pyparsing_unicode, u"देवनागरी", pyparsing_unicode.Devanagari) +class pyparsing_test: + """ + namespace class for classes useful in writing unit tests + """ + + class reset_pyparsing_context: + """ + Context manager to be used when writing unit tests that modify pyparsing config values: + - packrat parsing + - default whitespace characters. + - default keyword characters + - literal string auto-conversion class + - __diag__ settings + + Example: + with reset_pyparsing_context(): + # test that literals used to construct a grammar are automatically suppressed + ParserElement.inlineLiteralsUsing(Suppress) + + term = Word(alphas) | Word(nums) + group = Group('(' + term[...] + ')') + + # assert that the '()' characters are not included in the parsed tokens + self.assertParseAndCheckLisst(group, "(abc 123 def)", ['abc', '123', 'def']) + + # after exiting context manager, literals are converted to Literal expressions again + """ + + def __init__(self): + self._save_context = {} + + def save(self): + self._save_context["default_whitespace"] = ParserElement.DEFAULT_WHITE_CHARS + self._save_context["default_keyword_chars"] = Keyword.DEFAULT_KEYWORD_CHARS + self._save_context[ + "literal_string_class" + ] = ParserElement._literalStringClass + self._save_context["packrat_enabled"] = ParserElement._packratEnabled + self._save_context["packrat_parse"] = ParserElement._parse + self._save_context["__diag__"] = { + name: getattr(__diag__, name) for name in __diag__._all_names + } + self._save_context["__compat__"] = { + "collect_all_And_tokens": __compat__.collect_all_And_tokens + } + return self + + def restore(self): + # reset pyparsing global state + if ( + ParserElement.DEFAULT_WHITE_CHARS + != self._save_context["default_whitespace"] + ): + ParserElement.setDefaultWhitespaceChars( + self._save_context["default_whitespace"] + ) + Keyword.DEFAULT_KEYWORD_CHARS = self._save_context["default_keyword_chars"] + ParserElement.inlineLiteralsUsing( + self._save_context["literal_string_class"] + ) + for name, value in self._save_context["__diag__"].items(): + setattr(__diag__, name, value) + ParserElement._packratEnabled = self._save_context["packrat_enabled"] + ParserElement._parse = self._save_context["packrat_parse"] + __compat__.collect_all_And_tokens = self._save_context["__compat__"] + + def __enter__(self): + return self.save() + + def __exit__(self, *args): + return self.restore() + + class TestParseResultsAsserts: + """ + A mixin class to add parse results assertion methods to normal unittest.TestCase classes. + """ + def assertParseResultsEquals( + self, result, expected_list=None, expected_dict=None, msg=None + ): + """ + Unit test assertion to compare a ParseResults object with an optional expected_list, + and compare any defined results names with an optional expected_dict. + """ + if expected_list is not None: + self.assertEqual(expected_list, result.asList(), msg=msg) + if expected_dict is not None: + self.assertEqual(expected_dict, result.asDict(), msg=msg) + + def assertParseAndCheckList( + self, expr, test_string, expected_list, msg=None, verbose=True + ): + """ + Convenience wrapper assert to test a parser element and input string, and assert that + the resulting ParseResults.asList() is equal to the expected_list. + """ + result = expr.parseString(test_string, parseAll=True) + if verbose: + print(result.dump()) + self.assertParseResultsEquals(result, expected_list=expected_list, msg=msg) + + def assertParseAndCheckDict( + self, expr, test_string, expected_dict, msg=None, verbose=True + ): + """ + Convenience wrapper assert to test a parser element and input string, and assert that + the resulting ParseResults.asDict() is equal to the expected_dict. + """ + result = expr.parseString(test_string, parseAll=True) + if verbose: + print(result.dump()) + self.assertParseResultsEquals(result, expected_dict=expected_dict, msg=msg) + + def assertRunTestResults( + self, run_tests_report, expected_parse_results=None, msg=None + ): + """ + Unit test assertion to evaluate output of ParserElement.runTests(). If a list of + list-dict tuples is given as the expected_parse_results argument, then these are zipped + with the report tuples returned by runTests and evaluated using assertParseResultsEquals. + Finally, asserts that the overall runTests() success value is True. + + :param run_tests_report: tuple(bool, [tuple(str, ParseResults or Exception)]) returned from runTests + :param expected_parse_results (optional): [tuple(str, list, dict, Exception)] + """ + run_test_success, run_test_results = run_tests_report + + if expected_parse_results is not None: + merged = [ + (rpt[0], rpt[1], expected) + for rpt, expected in zip(run_test_results, expected_parse_results) + ] + for test_string, result, expected in merged: + # expected should be a tuple containing a list and/or a dict or an exception, + # and optional failure message string + # an empty tuple will skip any result validation + fail_msg = next( + (exp for exp in expected if isinstance(exp, str)), None + ) + expected_exception = next( + ( + exp + for exp in expected + if isinstance(exp, type) and issubclass(exp, Exception) + ), + None, + ) + if expected_exception is not None: + with self.assertRaises( + expected_exception=expected_exception, msg=fail_msg or msg + ): + if isinstance(result, Exception): + raise result + else: + expected_list = next( + (exp for exp in expected if isinstance(exp, list)), None + ) + expected_dict = next( + (exp for exp in expected if isinstance(exp, dict)), None + ) + if (expected_list, expected_dict) != (None, None): + self.assertParseResultsEquals( + result, + expected_list=expected_list, + expected_dict=expected_dict, + msg=fail_msg or msg, + ) + else: + # warning here maybe? + print("no validation for {!r}".format(test_string)) + + # do this last, in case some specific test results can be reported instead + self.assertTrue( + run_test_success, msg=msg if msg is not None else "failed runTests" + ) + + @contextmanager + def assertRaisesParseException(self, exc_type=ParseException, msg=None): + with self.assertRaises(exc_type, msg=msg): + yield + + if __name__ == "__main__": selectToken = CaselessLiteral("select") diff --git a/src/pip/_vendor/vendor.txt b/src/pip/_vendor/vendor.txt index b7da8b6eb..39cb1cf31 100644 --- a/src/pip/_vendor/vendor.txt +++ b/src/pip/_vendor/vendor.txt @@ -10,7 +10,7 @@ msgpack==0.6.2 packaging==20.0 pep517==0.7.0 progress==1.5 -pyparsing==2.4.2 +pyparsing==2.4.6 pytoml==0.1.21 requests==2.22.0 certifi==2019.9.11 From 022f0e265bf530dbef4a9584be88f9aabcbee850 Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Tue, 21 Jan 2020 13:18:25 +0530 Subject: [PATCH 06/10] Upgrade certifi to 2019.11.28 --- src/pip/_vendor/certifi/__init__.py | 2 +- src/pip/_vendor/certifi/cacert.pem | 44 +++++++++++++++++++++++++++++ src/pip/_vendor/vendor.txt | 2 +- 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/pip/_vendor/certifi/__init__.py b/src/pip/_vendor/certifi/__init__.py index 8e358e4c8..0d59a0563 100644 --- a/src/pip/_vendor/certifi/__init__.py +++ b/src/pip/_vendor/certifi/__init__.py @@ -1,3 +1,3 @@ from .core import where -__version__ = "2019.09.11" +__version__ = "2019.11.28" diff --git a/src/pip/_vendor/certifi/cacert.pem b/src/pip/_vendor/certifi/cacert.pem index 70fa91f61..a4758ef3a 100644 --- a/src/pip/_vendor/certifi/cacert.pem +++ b/src/pip/_vendor/certifi/cacert.pem @@ -4556,3 +4556,47 @@ L5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB60PZ2Pierc+xYw5F9KBa LJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fqdBb9HxEG mpv0 -----END CERTIFICATE----- + +# Issuer: CN=Entrust Root Certification Authority - G4 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2015 Entrust, Inc. - for authorized use only +# Subject: CN=Entrust Root Certification Authority - G4 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2015 Entrust, Inc. - for authorized use only +# Label: "Entrust Root Certification Authority - G4" +# Serial: 289383649854506086828220374796556676440 +# MD5 Fingerprint: 89:53:f1:83:23:b7:7c:8e:05:f1:8c:71:38:4e:1f:88 +# SHA1 Fingerprint: 14:88:4e:86:26:37:b0:26:af:59:62:5c:40:77:ec:35:29:ba:96:01 +# SHA256 Fingerprint: db:35:17:d1:f6:73:2a:2d:5a:b9:7c:53:3e:c7:07:79:ee:32:70:a6:2f:b4:ac:42:38:37:24:60:e6:f0:1e:88 +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAw +gb4xCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQL +Ex9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykg +MjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMjAw +BgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEc0 +MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYTAlVT +MRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1 +c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJ +bmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3Qg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEc0MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3DumSXbcr3DbVZwbPLqGgZ +2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV3imz/f3E +T+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j +5pds8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAM +C1rlLAHGVK/XqsEQe9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73T +DtTUXm6Hnmo9RR3RXRv06QqsYJn7ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNX +wbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5XxNMhIWNlUpEbsZmOeX7m640A +2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV7rtNOzK+mndm +nqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8 +dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwl +N4y6mACXi0mWHv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNj +c0kCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9nMA0GCSqGSIb3DQEBCwUAA4ICAQAS +5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4QjbRaZIxowLByQzTS +Gwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht7LGr +hFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/ +B7NTeLUKYvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uI +AeV8KEsD+UmDfLJ/fOPtjqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbw +H5Lk6rWS02FREAutp9lfx1/cH6NcjKF+m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+ +b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKWRGhXxNUzzxkvFMSUHHuk +2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjAJOgc47Ol +IQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk +5F6G+TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuY +n/PIjhs4ViFqUZPTkcpG2om3PVODLAgfi49T3f+sHw== +-----END CERTIFICATE----- diff --git a/src/pip/_vendor/vendor.txt b/src/pip/_vendor/vendor.txt index 39cb1cf31..8a5e74808 100644 --- a/src/pip/_vendor/vendor.txt +++ b/src/pip/_vendor/vendor.txt @@ -13,7 +13,7 @@ progress==1.5 pyparsing==2.4.6 pytoml==0.1.21 requests==2.22.0 - certifi==2019.9.11 + certifi==2019.11.28 chardet==3.0.4 idna==2.8 urllib3==1.25.6 From 501e00cec4978ae332761f27df945f95f982a384 Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Tue, 21 Jan 2020 13:19:56 +0530 Subject: [PATCH 07/10] Upgrade urllib3 to 1.25.7 --- src/pip/_vendor/urllib3/__init__.py | 2 +- src/pip/_vendor/urllib3/connection.py | 4 ++-- src/pip/_vendor/urllib3/connectionpool.py | 14 +++++------ .../urllib3/contrib/_appengine_environ.py | 24 +++++++++++-------- .../contrib/_securetransport/bindings.py | 1 + src/pip/_vendor/urllib3/contrib/appengine.py | 7 ------ src/pip/_vendor/urllib3/contrib/ntlmpool.py | 4 +--- .../urllib3/contrib/securetransport.py | 19 ++++----------- src/pip/_vendor/urllib3/exceptions.py | 2 +- .../ssl_match_hostname/_implementation.py | 6 ++--- src/pip/_vendor/urllib3/util/connection.py | 2 +- src/pip/_vendor/urllib3/util/request.py | 4 ++-- src/pip/_vendor/urllib3/util/timeout.py | 2 +- src/pip/_vendor/urllib3/util/url.py | 7 ++---- src/pip/_vendor/vendor.txt | 2 +- 15 files changed, 40 insertions(+), 60 deletions(-) diff --git a/src/pip/_vendor/urllib3/__init__.py b/src/pip/_vendor/urllib3/__init__.py index 8f5a21f34..96474d368 100644 --- a/src/pip/_vendor/urllib3/__init__.py +++ b/src/pip/_vendor/urllib3/__init__.py @@ -22,7 +22,7 @@ from logging import NullHandler __author__ = "Andrey Petrov (andrey.petrov@shazow.net)" __license__ = "MIT" -__version__ = "1.25.6" +__version__ = "1.25.7" __all__ = ( "HTTPConnectionPool", diff --git a/src/pip/_vendor/urllib3/connection.py b/src/pip/_vendor/urllib3/connection.py index 3eeb1af58..f5c946adf 100644 --- a/src/pip/_vendor/urllib3/connection.py +++ b/src/pip/_vendor/urllib3/connection.py @@ -412,7 +412,7 @@ class VerifiedHTTPSConnection(HTTPSConnection): ( "Certificate for {0} has no `subjectAltName`, falling back to check for a " "`commonName` for now. This feature is being removed by major browsers and " - "deprecated by RFC 2818. (See https://github.com/shazow/urllib3/issues/497 " + "deprecated by RFC 2818. (See https://github.com/urllib3/urllib3/issues/497 " "for details.)".format(hostname) ), SubjectAltNameWarning, @@ -430,7 +430,7 @@ def _match_hostname(cert, asserted_hostname): match_hostname(cert, asserted_hostname) except CertificateError as e: log.warning( - "Certificate did not match expected hostname: %s. " "Certificate: %s", + "Certificate did not match expected hostname: %s. Certificate: %s", asserted_hostname, cert, ) diff --git a/src/pip/_vendor/urllib3/connectionpool.py b/src/pip/_vendor/urllib3/connectionpool.py index e73fa57a4..31696460f 100644 --- a/src/pip/_vendor/urllib3/connectionpool.py +++ b/src/pip/_vendor/urllib3/connectionpool.py @@ -257,7 +257,7 @@ class HTTPConnectionPool(ConnectionPool, RequestMethods): if self.block: raise EmptyPoolError( self, - "Pool reached maximum size and no more " "connections are allowed.", + "Pool reached maximum size and no more connections are allowed.", ) pass # Oh well, we'll create a new connection then @@ -626,7 +626,7 @@ class HTTPConnectionPool(ConnectionPool, RequestMethods): # # See issue #651 [1] for details. # - # [1] + # [1] release_this_conn = release_conn # Merge the proxy headers. Only do this in HTTP. We have to copy the @@ -742,10 +742,7 @@ class HTTPConnectionPool(ConnectionPool, RequestMethods): if not conn: # Try again log.warning( - "Retrying (%r) after connection " "broken by '%r': %s", - retries, - err, - url, + "Retrying (%r) after connection broken by '%r': %s", retries, err, url ) return self.urlopen( method, @@ -758,6 +755,7 @@ class HTTPConnectionPool(ConnectionPool, RequestMethods): timeout=timeout, pool_timeout=pool_timeout, release_conn=release_conn, + chunked=chunked, body_pos=body_pos, **response_kw ) @@ -809,6 +807,7 @@ class HTTPConnectionPool(ConnectionPool, RequestMethods): timeout=timeout, pool_timeout=pool_timeout, release_conn=release_conn, + chunked=chunked, body_pos=body_pos, **response_kw ) @@ -842,6 +841,7 @@ class HTTPConnectionPool(ConnectionPool, RequestMethods): timeout=timeout, pool_timeout=pool_timeout, release_conn=release_conn, + chunked=chunked, body_pos=body_pos, **response_kw ) @@ -961,7 +961,7 @@ class HTTPSConnectionPool(HTTPConnectionPool): if not self.ConnectionCls or self.ConnectionCls is DummyConnection: raise SSLError( - "Can't connect to HTTPS URL because the SSL " "module is not available." + "Can't connect to HTTPS URL because the SSL module is not available." ) actual_host = self.host diff --git a/src/pip/_vendor/urllib3/contrib/_appengine_environ.py b/src/pip/_vendor/urllib3/contrib/_appengine_environ.py index c909010bf..119efaeeb 100644 --- a/src/pip/_vendor/urllib3/contrib/_appengine_environ.py +++ b/src/pip/_vendor/urllib3/contrib/_appengine_environ.py @@ -6,27 +6,31 @@ import os def is_appengine(): - return is_local_appengine() or is_prod_appengine() or is_prod_appengine_mvms() + return "APPENGINE_RUNTIME" in os.environ def is_appengine_sandbox(): - return is_appengine() and not is_prod_appengine_mvms() + """Reports if the app is running in the first generation sandbox. + + The second generation runtimes are technically still in a sandbox, but it + is much less restrictive, so generally you shouldn't need to check for it. + see https://cloud.google.com/appengine/docs/standard/runtimes + """ + return is_appengine() and os.environ["APPENGINE_RUNTIME"] == "python27" def is_local_appengine(): - return ( - "APPENGINE_RUNTIME" in os.environ - and "Development/" in os.environ["SERVER_SOFTWARE"] + return is_appengine() and os.environ.get("SERVER_SOFTWARE", "").startswith( + "Development/" ) def is_prod_appengine(): - return ( - "APPENGINE_RUNTIME" in os.environ - and "Google App Engine/" in os.environ["SERVER_SOFTWARE"] - and not is_prod_appengine_mvms() + return is_appengine() and os.environ.get("SERVER_SOFTWARE", "").startswith( + "Google App Engine/" ) def is_prod_appengine_mvms(): - return os.environ.get("GAE_VM", False) == "true" + """Deprecated.""" + return False diff --git a/src/pip/_vendor/urllib3/contrib/_securetransport/bindings.py b/src/pip/_vendor/urllib3/contrib/_securetransport/bindings.py index b46e1e3b5..d9b673331 100644 --- a/src/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +++ b/src/pip/_vendor/urllib3/contrib/_securetransport/bindings.py @@ -415,6 +415,7 @@ class SecurityConst(object): kTLSProtocol1 = 4 kTLSProtocol11 = 7 kTLSProtocol12 = 8 + # SecureTransport does not support TLS 1.3 even if there's a constant for it kTLSProtocol13 = 10 kTLSProtocolMaxSupported = 999 diff --git a/src/pip/_vendor/urllib3/contrib/appengine.py b/src/pip/_vendor/urllib3/contrib/appengine.py index 886b3a7bc..d09d2be64 100644 --- a/src/pip/_vendor/urllib3/contrib/appengine.py +++ b/src/pip/_vendor/urllib3/contrib/appengine.py @@ -108,13 +108,6 @@ class AppEngineManager(RequestMethods): "URLFetch is not available in this environment." ) - if is_prod_appengine_mvms(): - raise AppEnginePlatformError( - "Use normal urllib3.PoolManager instead of AppEngineManager" - "on Managed VMs, as using URLFetch is not necessary in " - "this environment." - ) - warnings.warn( "urllib3 is using URLFetch on Google App Engine sandbox instead " "of sockets. To use sockets directly instead of URLFetch see " diff --git a/src/pip/_vendor/urllib3/contrib/ntlmpool.py b/src/pip/_vendor/urllib3/contrib/ntlmpool.py index 9c96be29d..1fd242a6e 100644 --- a/src/pip/_vendor/urllib3/contrib/ntlmpool.py +++ b/src/pip/_vendor/urllib3/contrib/ntlmpool.py @@ -96,9 +96,7 @@ class NTLMConnectionPool(HTTPSConnectionPool): log.debug("Response data: %s [...]", res.read()[:100]) if res.status != 200: if res.status == 401: - raise Exception( - "Server rejected request: wrong " "username or password" - ) + raise Exception("Server rejected request: wrong username or password") raise Exception("Wrong server response: %s %s" % (res.status, res.reason)) res.fp = None diff --git a/src/pip/_vendor/urllib3/contrib/securetransport.py b/src/pip/_vendor/urllib3/contrib/securetransport.py index 24e6b5c4d..87d844afa 100644 --- a/src/pip/_vendor/urllib3/contrib/securetransport.py +++ b/src/pip/_vendor/urllib3/contrib/securetransport.py @@ -144,13 +144,10 @@ CIPHER_SUITES = [ ] # Basically this is simple: for PROTOCOL_SSLv23 we turn it into a low of -# TLSv1 and a high of TLSv1.3. For everything else, we pin to that version. -# TLSv1 to 1.2 are supported on macOS 10.8+ and TLSv1.3 is macOS 10.13+ +# TLSv1 and a high of TLSv1.2. For everything else, we pin to that version. +# TLSv1 to 1.2 are supported on macOS 10.8+ _protocol_to_min_max = { - util.PROTOCOL_TLS: ( - SecurityConst.kTLSProtocol1, - SecurityConst.kTLSProtocolMaxSupported, - ) + util.PROTOCOL_TLS: (SecurityConst.kTLSProtocol1, SecurityConst.kTLSProtocol12) } if hasattr(ssl, "PROTOCOL_SSLv2"): @@ -488,15 +485,7 @@ class WrappedSocket(object): result = Security.SSLSetProtocolVersionMin(self.context, min_version) _assert_no_error(result) - # TLS 1.3 isn't necessarily enabled by the OS - # so we have to detect when we error out and try - # setting TLS 1.3 if it's allowed. kTLSProtocolMaxSupported - # was added in macOS 10.13 along with kTLSProtocol13. result = Security.SSLSetProtocolVersionMax(self.context, max_version) - if result != 0 and max_version == SecurityConst.kTLSProtocolMaxSupported: - result = Security.SSLSetProtocolVersionMax( - self.context, SecurityConst.kTLSProtocol12 - ) _assert_no_error(result) # If there's a trust DB, we need to use it. We do that by telling @@ -707,7 +696,7 @@ class WrappedSocket(object): ) _assert_no_error(result) if protocol.value == SecurityConst.kTLSProtocol13: - return "TLSv1.3" + raise ssl.SSLError("SecureTransport does not support TLS 1.3") elif protocol.value == SecurityConst.kTLSProtocol12: return "TLSv1.2" elif protocol.value == SecurityConst.kTLSProtocol11: diff --git a/src/pip/_vendor/urllib3/exceptions.py b/src/pip/_vendor/urllib3/exceptions.py index 93d93fba7..0a74c79b5 100644 --- a/src/pip/_vendor/urllib3/exceptions.py +++ b/src/pip/_vendor/urllib3/exceptions.py @@ -222,7 +222,7 @@ class IncompleteRead(HTTPError, httplib_IncompleteRead): super(IncompleteRead, self).__init__(partial, expected) def __repr__(self): - return "IncompleteRead(%i bytes read, " "%i more expected)" % ( + return "IncompleteRead(%i bytes read, %i more expected)" % ( self.partial, self.expected, ) diff --git a/src/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py b/src/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py index 895432252..5831c2e01 100644 --- a/src/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py +++ b/src/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py @@ -153,10 +153,8 @@ def match_hostname(cert, hostname): "doesn't match either of %s" % (hostname, ", ".join(map(repr, dnsnames))) ) elif len(dnsnames) == 1: - raise CertificateError( - "hostname %r " "doesn't match %r" % (hostname, dnsnames[0]) - ) + raise CertificateError("hostname %r doesn't match %r" % (hostname, dnsnames[0])) else: raise CertificateError( - "no appropriate commonName or " "subjectAltName fields were found" + "no appropriate commonName or subjectAltName fields were found" ) diff --git a/src/pip/_vendor/urllib3/util/connection.py b/src/pip/_vendor/urllib3/util/connection.py index 0e1112628..86f0a3b00 100644 --- a/src/pip/_vendor/urllib3/util/connection.py +++ b/src/pip/_vendor/urllib3/util/connection.py @@ -121,7 +121,7 @@ def _has_ipv6(host): # has_ipv6 returns true if cPython was compiled with IPv6 support. # It does not tell us if the system has IPv6 support enabled. To # determine that we must bind to an IPv6 address. - # https://github.com/shazow/urllib3/pull/611 + # https://github.com/urllib3/urllib3/pull/611 # https://bugs.python.org/issue658327 try: sock = socket.socket(socket.AF_INET6) diff --git a/src/pip/_vendor/urllib3/util/request.py b/src/pip/_vendor/urllib3/util/request.py index 262a6d618..3b7bb54da 100644 --- a/src/pip/_vendor/urllib3/util/request.py +++ b/src/pip/_vendor/urllib3/util/request.py @@ -122,7 +122,7 @@ def rewind_body(body, body_pos): body_seek(body_pos) except (IOError, OSError): raise UnrewindableBodyError( - "An error occurred when rewinding request " "body for redirect/retry." + "An error occurred when rewinding request body for redirect/retry." ) elif body_pos is _FAILEDTELL: raise UnrewindableBodyError( @@ -131,5 +131,5 @@ def rewind_body(body, body_pos): ) else: raise ValueError( - "body_pos must be of type integer, " "instead it was %s." % type(body_pos) + "body_pos must be of type integer, instead it was %s." % type(body_pos) ) diff --git a/src/pip/_vendor/urllib3/util/timeout.py b/src/pip/_vendor/urllib3/util/timeout.py index c1dc1e971..988370055 100644 --- a/src/pip/_vendor/urllib3/util/timeout.py +++ b/src/pip/_vendor/urllib3/util/timeout.py @@ -203,7 +203,7 @@ class Timeout(object): """ if self._start_connect is None: raise TimeoutStateError( - "Can't get connect duration for timer " "that has not started." + "Can't get connect duration for timer that has not started." ) return current_time() - self._start_connect diff --git a/src/pip/_vendor/urllib3/util/url.py b/src/pip/_vendor/urllib3/util/url.py index 5fe37a72d..126006261 100644 --- a/src/pip/_vendor/urllib3/util/url.py +++ b/src/pip/_vendor/urllib3/util/url.py @@ -55,7 +55,7 @@ IPV6_PAT = "(?:" + "|".join([x % _subs for x in _variations]) + ")" ZONE_ID_PAT = "(?:%25|%)(?:[" + UNRESERVED_PAT + "]|%[a-fA-F0-9]{2})+" IPV6_ADDRZ_PAT = r"\[" + IPV6_PAT + r"(?:" + ZONE_ID_PAT + r")?\]" REG_NAME_PAT = r"(?:[^\[\]%:/?#]|%[a-fA-F0-9]{2})*" -TARGET_RE = re.compile(r"^(/[^?]*)(?:\?([^#]+))?(?:#(.*))?$") +TARGET_RE = re.compile(r"^(/[^?#]*)(?:\?([^#]*))?(?:#.*)?$") IPV4_RE = re.compile("^" + IPV4_PAT + "$") IPV6_RE = re.compile("^" + IPV6_PAT + "$") @@ -325,14 +325,11 @@ def _encode_target(target): if not target.startswith("/"): return target - path, query, fragment = TARGET_RE.match(target).groups() + path, query = TARGET_RE.match(target).groups() target = _encode_invalid_chars(path, PATH_CHARS) query = _encode_invalid_chars(query, QUERY_CHARS) - fragment = _encode_invalid_chars(fragment, FRAGMENT_CHARS) if query is not None: target += "?" + query - if fragment is not None: - target += "#" + target return target diff --git a/src/pip/_vendor/vendor.txt b/src/pip/_vendor/vendor.txt index 8a5e74808..23609c288 100644 --- a/src/pip/_vendor/vendor.txt +++ b/src/pip/_vendor/vendor.txt @@ -16,7 +16,7 @@ requests==2.22.0 certifi==2019.11.28 chardet==3.0.4 idna==2.8 - urllib3==1.25.6 + urllib3==1.25.7 retrying==1.3.3 setuptools==41.4.0 six==1.12.0 From 947fceb0f9ea9cca1fd716cdb95e145e3c171d44 Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Tue, 21 Jan 2020 13:26:58 +0530 Subject: [PATCH 08/10] Upgrade six to 1.14.0 --- src/pip/_vendor/six.LICENSE | 2 +- src/pip/_vendor/six.py | 70 ++++++++++++++++++++++++++----------- src/pip/_vendor/vendor.txt | 2 +- 3 files changed, 51 insertions(+), 23 deletions(-) diff --git a/src/pip/_vendor/six.LICENSE b/src/pip/_vendor/six.LICENSE index 365d10741..de6633112 100644 --- a/src/pip/_vendor/six.LICENSE +++ b/src/pip/_vendor/six.LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2010-2018 Benjamin Peterson +Copyright (c) 2010-2020 Benjamin Peterson Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/src/pip/_vendor/six.py b/src/pip/_vendor/six.py index 89b2188fd..5fe9f8e14 100644 --- a/src/pip/_vendor/six.py +++ b/src/pip/_vendor/six.py @@ -1,4 +1,4 @@ -# Copyright (c) 2010-2018 Benjamin Peterson +# Copyright (c) 2010-2020 Benjamin Peterson # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -29,7 +29,7 @@ import sys import types __author__ = "Benjamin Peterson " -__version__ = "1.12.0" +__version__ = "1.14.0" # Useful for very coarse version differentiation. @@ -255,9 +255,11 @@ _moved_attributes = [ MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), MovedModule("builtins", "__builtin__"), MovedModule("configparser", "ConfigParser"), + MovedModule("collections_abc", "collections", "collections.abc" if sys.version_info >= (3, 3) else "collections"), MovedModule("copyreg", "copy_reg"), MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), - MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"), + MovedModule("dbm_ndbm", "dbm", "dbm.ndbm"), + MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread" if sys.version_info < (3, 9) else "_thread"), MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), MovedModule("http_cookies", "Cookie", "http.cookies"), MovedModule("html_entities", "htmlentitydefs", "html.entities"), @@ -637,13 +639,16 @@ if PY3: import io StringIO = io.StringIO BytesIO = io.BytesIO + del io _assertCountEqual = "assertCountEqual" if sys.version_info[1] <= 1: _assertRaisesRegex = "assertRaisesRegexp" _assertRegex = "assertRegexpMatches" + _assertNotRegex = "assertNotRegexpMatches" else: _assertRaisesRegex = "assertRaisesRegex" _assertRegex = "assertRegex" + _assertNotRegex = "assertNotRegex" else: def b(s): return s @@ -665,6 +670,7 @@ else: _assertCountEqual = "assertItemsEqual" _assertRaisesRegex = "assertRaisesRegexp" _assertRegex = "assertRegexpMatches" + _assertNotRegex = "assertNotRegexpMatches" _add_doc(b, """Byte literal""") _add_doc(u, """Text literal""") @@ -681,6 +687,10 @@ def assertRegex(self, *args, **kwargs): return getattr(self, _assertRegex)(*args, **kwargs) +def assertNotRegex(self, *args, **kwargs): + return getattr(self, _assertNotRegex)(*args, **kwargs) + + if PY3: exec_ = getattr(moves.builtins, "exec") @@ -716,16 +726,7 @@ else: """) -if sys.version_info[:2] == (3, 2): - exec_("""def raise_from(value, from_value): - try: - if from_value is None: - raise value - raise value from from_value - finally: - value = None -""") -elif sys.version_info[:2] > (3, 2): +if sys.version_info[:2] > (3,): exec_("""def raise_from(value, from_value): try: raise value from from_value @@ -805,13 +806,33 @@ if sys.version_info[:2] < (3, 3): _add_doc(reraise, """Reraise an exception.""") if sys.version_info[0:2] < (3, 4): + # This does exactly the same what the :func:`py3:functools.update_wrapper` + # function does on Python versions after 3.2. It sets the ``__wrapped__`` + # attribute on ``wrapper`` object and it doesn't raise an error if any of + # the attributes mentioned in ``assigned`` and ``updated`` are missing on + # ``wrapped`` object. + def _update_wrapper(wrapper, wrapped, + assigned=functools.WRAPPER_ASSIGNMENTS, + updated=functools.WRAPPER_UPDATES): + for attr in assigned: + try: + value = getattr(wrapped, attr) + except AttributeError: + continue + else: + setattr(wrapper, attr, value) + for attr in updated: + getattr(wrapper, attr).update(getattr(wrapped, attr, {})) + wrapper.__wrapped__ = wrapped + return wrapper + _update_wrapper.__doc__ = functools.update_wrapper.__doc__ + def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, updated=functools.WRAPPER_UPDATES): - def wrapper(f): - f = functools.wraps(wrapped, assigned, updated)(f) - f.__wrapped__ = wrapped - return f - return wrapper + return functools.partial(_update_wrapper, wrapped=wrapped, + assigned=assigned, updated=updated) + wraps.__doc__ = functools.wraps.__doc__ + else: wraps = functools.wraps @@ -824,7 +845,15 @@ def with_metaclass(meta, *bases): class metaclass(type): def __new__(cls, name, this_bases, d): - return meta(name, bases, d) + if sys.version_info[:2] >= (3, 7): + # This version introduced PEP 560 that requires a bit + # of extra care (we mimic what is done by __build_class__). + resolved_bases = types.resolve_bases(bases) + if resolved_bases is not bases: + d['__orig_bases__'] = bases + else: + resolved_bases = bases + return meta(name, resolved_bases, d) @classmethod def __prepare__(cls, name, this_bases): @@ -908,10 +937,9 @@ def ensure_text(s, encoding='utf-8', errors='strict'): raise TypeError("not expecting type '%s'" % type(s)) - def python_2_unicode_compatible(klass): """ - A decorator that defines __unicode__ and __str__ methods under Python 2. + A class decorator that defines __unicode__ and __str__ methods under Python 2. Under Python 3 it does nothing. To support Python 2 and 3 with a single code base, define a __str__ method diff --git a/src/pip/_vendor/vendor.txt b/src/pip/_vendor/vendor.txt index 23609c288..b7e0fbd67 100644 --- a/src/pip/_vendor/vendor.txt +++ b/src/pip/_vendor/vendor.txt @@ -19,5 +19,5 @@ requests==2.22.0 urllib3==1.25.7 retrying==1.3.3 setuptools==41.4.0 -six==1.12.0 +six==1.14.0 webencodings==0.5.1 From 11765917fbd7448a8b68c3f5226f98eb3b6f5c87 Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Tue, 21 Jan 2020 13:29:59 +0530 Subject: [PATCH 09/10] Add the required NEWS fragments --- news/CacheControl.vendor | 1 + news/certifi.vendor | 1 + news/colorama.vendor | 1 + news/distlib.vendor | 1 + news/ipaddress.vendor | 1 + news/pyparsing.vendor | 1 + news/six.vendor | 1 + news/urllib3.vendor | 1 + 8 files changed, 8 insertions(+) create mode 100644 news/CacheControl.vendor create mode 100644 news/certifi.vendor create mode 100644 news/colorama.vendor create mode 100644 news/distlib.vendor create mode 100644 news/ipaddress.vendor create mode 100644 news/pyparsing.vendor create mode 100644 news/six.vendor create mode 100644 news/urllib3.vendor diff --git a/news/CacheControl.vendor b/news/CacheControl.vendor new file mode 100644 index 000000000..2c8e09f3c --- /dev/null +++ b/news/CacheControl.vendor @@ -0,0 +1 @@ +Upgrade CacheControl to 0.12.5 diff --git a/news/certifi.vendor b/news/certifi.vendor new file mode 100644 index 000000000..66e84cb20 --- /dev/null +++ b/news/certifi.vendor @@ -0,0 +1 @@ +Upgrade certifi to 2019.9.11 diff --git a/news/colorama.vendor b/news/colorama.vendor new file mode 100644 index 000000000..1defb49f0 --- /dev/null +++ b/news/colorama.vendor @@ -0,0 +1 @@ +Upgrade colorama to 0.4.1 diff --git a/news/distlib.vendor b/news/distlib.vendor new file mode 100644 index 000000000..8b11e09a3 --- /dev/null +++ b/news/distlib.vendor @@ -0,0 +1 @@ +Upgrade distlib to 0.2.9.post0 diff --git a/news/ipaddress.vendor b/news/ipaddress.vendor new file mode 100644 index 000000000..902e589a9 --- /dev/null +++ b/news/ipaddress.vendor @@ -0,0 +1 @@ +Upgrade ipaddress to 1.0.22 diff --git a/news/pyparsing.vendor b/news/pyparsing.vendor new file mode 100644 index 000000000..90374a1ef --- /dev/null +++ b/news/pyparsing.vendor @@ -0,0 +1 @@ +Upgrade pyparsing to 2.4.2 diff --git a/news/six.vendor b/news/six.vendor new file mode 100644 index 000000000..3186ab0cf --- /dev/null +++ b/news/six.vendor @@ -0,0 +1 @@ +Upgrade six to 1.12.0 diff --git a/news/urllib3.vendor b/news/urllib3.vendor new file mode 100644 index 000000000..80b98b44e --- /dev/null +++ b/news/urllib3.vendor @@ -0,0 +1 @@ +Upgrade urllib3 to 1.25.6 From 7b2f0aa00d0b0614abfe3259cef6ff47cfeeac73 Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Tue, 21 Jan 2020 13:51:30 +0530 Subject: [PATCH 10/10] Upgrade pkg_resources (via setuptools) to 44.0.0 --- news/pkg_resources.vendor | 1 + src/pip/_vendor/pkg_resources/__init__.py | 7 ++++--- src/pip/_vendor/vendor.txt | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 news/pkg_resources.vendor diff --git a/news/pkg_resources.vendor b/news/pkg_resources.vendor new file mode 100644 index 000000000..7f1972b3b --- /dev/null +++ b/news/pkg_resources.vendor @@ -0,0 +1 @@ +Upgrade pkg_resources (via setuptools) to 44.0.0 diff --git a/src/pip/_vendor/pkg_resources/__init__.py b/src/pip/_vendor/pkg_resources/__init__.py index 363a6309e..a457ff27e 100644 --- a/src/pip/_vendor/pkg_resources/__init__.py +++ b/src/pip/_vendor/pkg_resources/__init__.py @@ -88,8 +88,8 @@ __import__('pip._vendor.packaging.markers') __metaclass__ = type -if (3, 0) < sys.version_info < (3, 4): - raise RuntimeError("Python 3.4 or later is required") +if (3, 0) < sys.version_info < (3, 5): + raise RuntimeError("Python 3.5 or later is required") if six.PY2: # Those builtin exceptions are only defined in Python 3 @@ -333,7 +333,7 @@ class UnknownExtra(ResolutionError): _provider_factories = {} -PY_MAJOR = sys.version[:3] +PY_MAJOR = '{}.{}'.format(*sys.version_info) EGG_DIST = 3 BINARY_DIST = 2 SOURCE_DIST = 1 @@ -3109,6 +3109,7 @@ class Requirement(packaging.requirements.Requirement): self.extras = tuple(map(safe_extra, self.extras)) self.hashCmp = ( self.key, + self.url, self.specifier, frozenset(self.extras), str(self.marker) if self.marker else None, diff --git a/src/pip/_vendor/vendor.txt b/src/pip/_vendor/vendor.txt index b7e0fbd67..eac6d96cc 100644 --- a/src/pip/_vendor/vendor.txt +++ b/src/pip/_vendor/vendor.txt @@ -18,6 +18,6 @@ requests==2.22.0 idna==2.8 urllib3==1.25.7 retrying==1.3.3 -setuptools==41.4.0 +setuptools==44.0.0 six==1.14.0 webencodings==0.5.1