1Changelog for six 2================= 3 4This file lists the changes in each six version. 5 61.17.0 7------ 8 9- Pull request #388: Remove `URLopener` and `FancyURLopener` classes from 10 `urllib.request` when running on Python 3.14 or greater. 11 12- Pull request #365, issue #283: `six.moves.UserDict` now points to 13 `UserDict.IterableUserDict` instead of `UserDict.UserDict` on Python 2. 14 151.16.0 16------ 17 18- Pull request #343, issue #341, pull request #349: Port _SixMetaPathImporter to 19 Python 3.10. 20 211.15.0 22------ 23 24- Pull request #331: Optimize `six.ensure_str` and `six.ensure_binary`. 25 261.14.0 27------ 28 29- Issue #288, pull request #289: Add `six.assertNotRegex`. 30 31- Issue #317: `six.moves._dummy_thread` now points to the `_thread` module on 32 Python 3.9+. Python 3.7 and later requires threading and deprecated the 33 `_dummy_thread` module. 34 35- Issue #308, pull request #314: Remove support for Python 2.6 and Python 3.2. 36 37- Issue #250, issue #165, pull request #251: `six.wraps` now ignores missing 38 attributes. This follows the Python 3.2+ standard library behavior. 39 401.13.0 41------ 42 43- Issue #298, pull request #299: Add `six.moves.dbm_ndbm`. 44 45- Issue #155: Add `six.moves.collections_abc`, which aliases the `collections` 46 module on Python 2-3.2 and the `collections.abc` on Python 3.3 and greater. 47 48- Pull request #304: Re-add distutils fallback in `setup.py`. 49 50- Pull request #305: On Python 3.7, `with_metaclass` supports classes using PEP 51 560 features. 52 531.12.0 54------ 55 56- Issue #259, pull request #260: `six.add_metaclass` now preserves 57 `__qualname__` from the original class. 58 59- Pull request #204: Add `six.ensure_binary`, `six.ensure_text`, and 60 `six.ensure_str`. 61 621.11.0 63------ 64 65- Pull request #178: `with_metaclass` now properly proxies `__prepare__` to the 66 underlying metaclass. 67 68- Pull request #191: Allow `with_metaclass` to work with metaclasses implemented 69 in C. 70 71- Pull request #203: Add parse_http_list and parse_keqv_list to moved 72 urllib.request. 73 74- Pull request #172 and issue #171: Add unquote_to_bytes to moved urllib.parse. 75 76- Pull request #167: Add `six.moves.getoutput`. 77 78- Pull request #80: Add `six.moves.urllib_parse.splitvalue`. 79 80- Pull request #75: Add `six.moves.email_mime_image`. 81 82- Pull request #72: Avoid creating reference cycles through tracebacks in 83 `reraise`. 84 851.10.0 86------ 87 88- Issue #122: Improve the performance of `six.int2byte` on Python 3. 89 90- Pull request #55 and issue #99: Don't add the `winreg` module to `six.moves` 91 on non-Windows platforms. 92 93- Pull request #60 and issue #108: Add `six.moves.getcwd` and 94 `six.moves.getcwdu`. 95 96- Pull request #64: Add `create_unbound_method` to create unbound methods. 97 981.9.0 99----- 100 101- Issue #106: Support the `flush` parameter to `six.print_`. 102 103- Pull request #48 and issue #15: Add the `python_2_unicode_compatible` 104 decorator. 105 106- Pull request #57 and issue #50: Add several compatibility methods for unittest 107 assertions that were renamed between Python 2 and 3. 108 109- Issue #105 and pull request #58: Ensure `six.wraps` respects the *updated* and 110 *assigned* arguments. 111 112- Issue #102: Add `raise_from` to abstract out Python 3's raise from syntax. 113 114- Issue #97: Optimize `six.iterbytes` on Python 2. 115 116- Issue #98: Fix `six.moves` race condition in multi-threaded code. 117 118- Pull request #51: Add `six.view(keys|values|items)`, which provide dictionary 119 views on Python 2.7+. 120 121- Issue #112: `six.moves.reload_module` now uses the importlib module on 122 Python 3.4+. 123 1241.8.0 125----- 126 127- Issue #90: Add `six.moves.shlex_quote`. 128 129- Issue #59: Add `six.moves.intern`. 130 131- Add `six.urllib.parse.uses_(fragment|netloc|params|query|relative)`. 132 133- Issue #88: Fix add_metaclass when the class has `__slots__` containing 134 `__weakref__` or `__dict__`. 135 136- Issue #89: Make six use absolute imports. 137 138- Issue #85: Always accept *updated* and *assigned* arguments for `wraps()`. 139 140- Issue #86: In `reraise()`, instantiate the exception if the second argument is 141 `None`. 142 143- Pull request #45: Add `six.moves.email_mime_nonmultipart`. 144 145- Issue #81: Add `six.urllib.request.splittag` mapping. 146 147- Issue #80: Add `six.urllib.request.splituser` mapping. 148 1491.7.3 150----- 151 152- Issue #77: Fix import six on Python 3.4 with a custom loader. 153 154- Issue #74: `six.moves.xmlrpc_server` should map to `SimpleXMLRPCServer` on Python 155 2 as documented not `xmlrpclib`. 156 1571.7.2 158----- 159 160- Issue #72: Fix installing on Python 2. 161 1621.7.1 163----- 164 165- Issue #71: Make the six.moves meta path importer handle reloading of the six 166 module gracefully. 167 1681.7.0 169----- 170 171- Pull request #30: Implement six.moves with a PEP 302 meta path hook. 172 173- Pull request #32: Add six.wraps, which is like functools.wraps but always sets 174 the __wrapped__ attribute. 175 176- Pull request #35: Improve add_metaclass, so that it doesn't end up inserting 177 another class into the hierarchy. 178 179- Pull request #34: Add import mappings for dummy_thread. 180 181- Pull request #33: Add import mappings for UserDict and UserList. 182 183- Pull request #31: Select the implementations of dictionary iterator routines 184 at import time for a 20% speed boost. 185 1861.6.1 187----- 188 189- Raise an AttributeError for six.moves.X when X is a module not available in 190 the current interpreter. 191 1921.6.0 193----- 194 195- Raise an AttributeError for every attribute of unimportable modules. 196 197- Issue #56: Make the fake modules six.moves puts into sys.modules appear not to 198 have a __path__ unless they are loaded. 199 200- Pull request #28: Add support for SplitResult. 201 202- Issue #55: Add move mapping for xmlrpc.server. 203 204- Pull request #29: Add move for urllib.parse.splitquery. 205 2061.5.2 207----- 208 209- Issue #53: Make the fake modules six.moves puts into sys.modules appear not to 210 have a __name__ unless they are loaded. 211 2121.5.1 213----- 214 215- Issue #51: Hack around the Django autoreloader after recent six.moves changes. 216 2171.5.0 218----- 219 220- Removed support for Python 2.4. This is because py.test no longer supports 221 2.4. 222 223- Fix various import problems including issues #19 and #41. six.moves modules 224 are now lazy wrappers over the underlying modules instead of the actual 225 modules themselves. 226 227- Issue #49: Add six.moves mapping for tkinter.ttk. 228 229- Pull request #24: Add __dir__ special method to six.moves modules. 230 231- Issue #47: Fix add_metaclass on classes with a string for the __slots__ 232 variable. 233 234- Issue #44: Fix interpretation of backslashes on Python 2 in the u() function. 235 236- Pull request #21: Add import mapping for urllib's proxy_bypass function. 237 238- Issue #43: Add import mapping for the Python 2 xmlrpclib module. 239 240- Issue #39: Add import mapping for the Python 2 thread module. 241 242- Issue #40: Add import mapping for the Python 2 gdbm module. 243 244- Issue #35: On Python versions less than 2.7, print_ now encodes unicode 245 strings when outputting to standard streams. (Python 2.7 handles this 246 automatically.) 247 2481.4.1 249----- 250 251- Issue #32: urllib module wrappings don't work when six is not a toplevel file. 252 2531.4.0 254----- 255 256- Issue #31: Add six.moves mapping for UserString. 257 258- Pull request #12: Add six.add_metaclass, a decorator for adding a metaclass to 259 a class. 260 261- Add six.moves.zip_longest and six.moves.filterfalse, which correspond 262 respectively to itertools.izip_longest and itertools.ifilterfalse on Python 2 263 and itertools.zip_longest and itertools.filterfalse on Python 3. 264 265- Issue #25: Add the unichr function, which returns a string for a Unicode 266 codepoint. 267 268- Issue #26: Add byte2int function, which complements int2byte. 269 270- Add a PY2 constant with obvious semantics. 271 272- Add helpers for indexing and iterating over bytes: iterbytes and indexbytes. 273 274- Add create_bound_method() wrapper. 275 276- Issue #23: Allow multiple base classes to be passed to with_metaclass. 277 278- Issue #24: Add six.moves.range alias. This exactly the same as the current 279 xrange alias. 280 281- Pull request #5: Create six.moves.urllib, which contains abstractions for a 282 bunch of things which are in urllib in Python 3 and spread out across urllib, 283 urllib2, and urlparse in Python 2. 284 2851.3.0 286----- 287 288- Issue #21: Add methods to access the closure and globals of a function. 289 290- In six.iter(items/keys/values/lists), passed keyword arguments through to the 291 underlying method. 292 293- Add six.iterlists(). 294 295- Issue #20: Fix tests if tkinter is not available. 296 297- Issue #17: Define callable to be builtin callable when it is available again 298 in Python 3.2+. 299 300- Issue #16: Rename Python 2 exec_'s arguments, so casually calling exec_ with 301 keyword arguments will raise. 302 303- Issue #14: Put the six.moves package in sys.modules based on the name six is 304 imported under. 305 306- Fix Jython detection. 307 308- Pull request #4: Add email_mime_multipart, email_mime_text, and 309 email_mime_base to six.moves. 310 3111.2.0 312----- 313 314- Issue #13: Make iterkeys/itervalues/iteritems return iterators on Python 3 315 instead of iterables. 316 317- Issue #11: Fix maxsize support on Jython. 318 319- Add six.next() as an alias for six.advance_iterator(). 320 321- Use the builtin next() function for advance_iterator() where is available 322 (2.6+), not just Python 3. 323 324- Add the Iterator class for writing portable iterators. 325 3261.1.0 327----- 328 329- Add the int2byte function. 330 331- Add compatibility mappings for iterators over the keys, values, and items of a 332 dictionary. 333 334- Fix six.MAXSIZE on platforms where sizeof(long) != sizeof(Py_ssize_t). 335 336- Issue #3: Add six.moves mappings for filter, map, and zip. 337 3381.0.0 339----- 340 341- Issue #2: u() on Python 2.x now resolves unicode escapes. 342 343- Expose an API for adding mappings to six.moves. 344 3451.0 beta 1 346---------- 347 348- Reworked six into one .py file. This breaks imports. Please tell me if you 349 are interested in an import compatibility layer. 350