1
1
# pylint: skip-file
2
2
"""Utilities for writing code that runs on Python 2 and 3"""
3
3
4
- # Copyright (c) 2010-2015 Benjamin Peterson
4
+ # Copyright (c) 2010-2017 Benjamin Peterson
5
5
#
6
6
# Permission is hereby granted, free of charge, to any person obtaining a copy
7
7
# of this software and associated documentation files (the "Software"), to deal
21
21
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
22
# SOFTWARE.
23
23
24
+ """Utilities for writing code that runs on Python 2 and 3"""
25
+
24
26
from __future__ import absolute_import
25
27
26
28
import functools
30
32
import types
31
33
32
34
__author__ = "Benjamin Peterson <[email protected] >"
33
- __version__ = "1.10 .0"
35
+ __version__ = "1.11 .0"
34
36
35
37
36
38
# Useful for very coarse version differentiation.
@@ -71,7 +73,9 @@ def __len__(self):
71
73
# 64-bit
72
74
MAXSIZE = int ((1 << 63 ) - 1 )
73
75
74
- # Don't del it here, cause with gc disabled this "leaks" to garbage
76
+ # Don't del it here, cause with gc disabled this "leaks" to garbage.
77
+ # Note: This is a kafka-python customization, details at:
78
+ # https://github.com/dpkp/kafka-python/pull/979#discussion_r100403389
75
79
# del X
76
80
77
81
@@ -244,6 +248,7 @@ class _MovedItems(_LazyModule):
244
248
MovedAttribute ("map" , "itertools" , "builtins" , "imap" , "map" ),
245
249
MovedAttribute ("getcwd" , "os" , "os" , "getcwdu" , "getcwd" ),
246
250
MovedAttribute ("getcwdb" , "os" , "os" , "getcwd" , "getcwdb" ),
251
+ MovedAttribute ("getoutput" , "commands" , "subprocess" ),
247
252
MovedAttribute ("range" , "__builtin__" , "builtins" , "xrange" , "range" ),
248
253
MovedAttribute ("reload_module" , "__builtin__" , "importlib" if PY34 else "imp" , "reload" ),
249
254
MovedAttribute ("reduce" , "__builtin__" , "functools" ),
@@ -265,10 +270,11 @@ class _MovedItems(_LazyModule):
265
270
MovedModule ("html_entities" , "htmlentitydefs" , "html.entities" ),
266
271
MovedModule ("html_parser" , "HTMLParser" , "html.parser" ),
267
272
MovedModule ("http_client" , "httplib" , "http.client" ),
273
+ MovedModule ("email_mime_base" , "email.MIMEBase" , "email.mime.base" ),
274
+ MovedModule ("email_mime_image" , "email.MIMEImage" , "email.mime.image" ),
268
275
MovedModule ("email_mime_multipart" , "email.MIMEMultipart" , "email.mime.multipart" ),
269
276
MovedModule ("email_mime_nonmultipart" , "email.MIMENonMultipart" , "email.mime.nonmultipart" ),
270
277
MovedModule ("email_mime_text" , "email.MIMEText" , "email.mime.text" ),
271
- MovedModule ("email_mime_base" , "email.MIMEBase" , "email.mime.base" ),
272
278
MovedModule ("BaseHTTPServer" , "BaseHTTPServer" , "http.server" ),
273
279
MovedModule ("CGIHTTPServer" , "CGIHTTPServer" , "http.server" ),
274
280
MovedModule ("SimpleHTTPServer" , "SimpleHTTPServer" , "http.server" ),
@@ -340,10 +346,12 @@ class Module_six_moves_urllib_parse(_LazyModule):
340
346
MovedAttribute ("quote_plus" , "urllib" , "urllib.parse" ),
341
347
MovedAttribute ("unquote" , "urllib" , "urllib.parse" ),
342
348
MovedAttribute ("unquote_plus" , "urllib" , "urllib.parse" ),
349
+ MovedAttribute ("unquote_to_bytes" , "urllib" , "urllib.parse" , "unquote" , "unquote_to_bytes" ),
343
350
MovedAttribute ("urlencode" , "urllib" , "urllib.parse" ),
344
351
MovedAttribute ("splitquery" , "urllib" , "urllib.parse" ),
345
352
MovedAttribute ("splittag" , "urllib" , "urllib.parse" ),
346
353
MovedAttribute ("splituser" , "urllib" , "urllib.parse" ),
354
+ MovedAttribute ("splitvalue" , "urllib" , "urllib.parse" ),
347
355
MovedAttribute ("uses_fragment" , "urlparse" , "urllib.parse" ),
348
356
MovedAttribute ("uses_netloc" , "urlparse" , "urllib.parse" ),
349
357
MovedAttribute ("uses_params" , "urlparse" , "urllib.parse" ),
@@ -419,6 +427,8 @@ class Module_six_moves_urllib_request(_LazyModule):
419
427
MovedAttribute ("URLopener" , "urllib" , "urllib.request" ),
420
428
MovedAttribute ("FancyURLopener" , "urllib" , "urllib.request" ),
421
429
MovedAttribute ("proxy_bypass" , "urllib" , "urllib.request" ),
430
+ MovedAttribute ("parse_http_list" , "urllib2" , "urllib.request" ),
431
+ MovedAttribute ("parse_keqv_list" , "urllib2" , "urllib.request" ),
422
432
]
423
433
for attr in _urllib_request_moved_attributes :
424
434
setattr (Module_six_moves_urllib_request , attr .name , attr )
@@ -682,11 +692,15 @@ def assertRegex(self, *args, **kwargs):
682
692
exec_ = getattr (moves .builtins , "exec" )
683
693
684
694
def reraise (tp , value , tb = None ):
685
- if value is None :
686
- value = tp ()
687
- if value .__traceback__ is not tb :
688
- raise value .with_traceback (tb )
689
- raise value
695
+ try :
696
+ if value is None :
697
+ value = tp ()
698
+ if value .__traceback__ is not tb :
699
+ raise value .with_traceback (tb )
700
+ raise value
701
+ finally :
702
+ value = None
703
+ tb = None
690
704
691
705
else :
692
706
def exec_ (_code_ , _globs_ = None , _locs_ = None ):
@@ -702,19 +716,28 @@ def exec_(_code_, _globs_=None, _locs_=None):
702
716
exec ("""exec _code_ in _globs_, _locs_""" )
703
717
704
718
exec_ ("""def reraise(tp, value, tb=None):
705
- raise tp, value, tb
719
+ try:
720
+ raise tp, value, tb
721
+ finally:
722
+ tb = None
706
723
""" )
707
724
708
725
709
726
if sys .version_info [:2 ] == (3 , 2 ):
710
727
exec_ ("""def raise_from(value, from_value):
711
- if from_value is None:
712
- raise value
713
- raise value from from_value
728
+ try:
729
+ if from_value is None:
730
+ raise value
731
+ raise value from from_value
732
+ finally:
733
+ value = None
714
734
""" )
715
735
elif sys .version_info [:2 ] > (3 , 2 ):
716
736
exec_ ("""def raise_from(value, from_value):
717
- raise value from from_value
737
+ try:
738
+ raise value from from_value
739
+ finally:
740
+ value = None
718
741
""" )
719
742
else :
720
743
def raise_from (value , from_value ):
@@ -805,10 +828,14 @@ def with_metaclass(meta, *bases):
805
828
# This requires a bit of explanation: the basic idea is to make a dummy
806
829
# metaclass for one level of class instantiation that replaces itself with
807
830
# the actual metaclass.
808
- class metaclass (meta ):
831
+ class metaclass (type ):
809
832
810
833
def __new__ (cls , name , this_bases , d ):
811
834
return meta (name , bases , d )
835
+
836
+ @classmethod
837
+ def __prepare__ (cls , name , this_bases ):
838
+ return meta .__prepare__ (name , bases )
812
839
return type .__new__ (metaclass , 'temporary_class' , (), {})
813
840
814
841
0 commit comments