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