1. 12 Jun, 2018 8 commits
    • Giampaolo Rodola's avatar
      bpo-33671: efficient zero-copy for shutil.copy* functions (Linux, OSX and Win) (#7160) · 4a172ccc
      Giampaolo Rodola authored
      * have shutil.copyfileobj use sendfile() if possible
      
      * refactoring: use ctx manager
      
      * add test with non-regular file obj
      
      * emulate case where file size can't be determined
      
      * reference _copyfileobj_sendfile directly
      
      * add test for offset() at certain position
      
      * add test for empty file
      
      * add test for non regular file dst
      
      * small refactoring
      
      * leave copyfileobj() alone in order to not introduce any incompatibility
      
      * minor refactoring
      
      * remove old test
      
      * update docstring
      
      * update docstring; rename exception class
      
      * detect platforms which only support file to socket zero copy
      
      * don't run test on platforms where file-to-file zero copy is not supported
      
      * use tempfiles
      
      * reset verbosity
      
      * add test for smaller chunks
      
      * add big file size test
      
      * add comment
      
      * update doc
      
      * update whatsnew doc
      
      * update doc
      
      * catch Exception
      
      * remove unused import
      
      * add test case for error on second sendfile() call
      
      * turn docstring into comment
      
      * add one more test
      
      * update comment
      
      * add Misc/NEWS entry
      
      * get rid of COPY_BUFSIZE; it belongs to another PR
      
      * update doc
      
      * expose posix._fcopyfile() for OSX
      
      * merge from linux branch
      
      * merge from linux branch
      
      * expose fcopyfile
      
      * arg clinic for the win implementation
      
      * convert path type to path_t
      
      * expose CopyFileW
      
      * fix windows tests
      
      * release GIL
      
      * minor refactoring
      
      * update doc
      
      * update comment
      
      * update docstrings
      
      * rename functions
      
      * rename test classes
      
      * update doc
      
      * update doc
      
      * update docstrings and comments
      
      * avoid do import nt|posix modules if unnecessary
      
      * set nt|posix modules to None if not available
      
      * micro speedup
      
      * update description
      
      * add doc note
      
      * use better wording in doc
      
      * rename function using 'fastcopy' prefix instead of 'zerocopy'
      
      * use :ref: in rst doc
      
      * change wording in doc
      
      * add test to make sure sendfile() doesn't get called aymore in case it doesn't support file to file copies
      
      * move CopyFileW in _winapi and actually expose CopyFileExW instead
      
      * fix line endings
      
      * add tests for mode bits
      
      * add docstring
      
      * remove test file mode class; let's keep it for later when Istart addressing OSX fcopyfile() specific copies
      
      * update doc to reflect new changes
      
      * update doc
      
      * adjust tests on win
      
      * fix argument clinic error
      
      * update doc
      
      * OSX: expose copyfile(3) instead of fcopyfile(3); also expose flags arg to python
      
      * osx / copyfile: use path_t instead of char
      
      * do not set dst name in the OSError exception in order to remain consistent with platforms which cannot do that (e.g. linux)
      
      * add same file test
      
      * add test for same file
      
      * have osx copyfile() pre-emptively check if src and dst are the same, otherwise it will return immedialtey and src file content gets deleted
      
      * turn PermissionError into appropriate SameFileError
      
      * expose ERROR_SHARING_VIOLATION in order to raise more appropriate SameFileError
      
      * honour follow_symlinks arg when using CopyFileEx
      
      * update Misc/NEWS
      
      * expose CreateDirectoryEx mock
      
      * change C type
      
      * CreateDirectoryExW actual implementation
      
      * provide specific makedirs() implementation for win
      
      * fix typo
      
      * skeleton for SetNamedSecurityInfo
      
      * get security info for src path
      
      * finally set security attrs
      
      * add unit tests
      
      * mimick os.makedirs() behavior and raise if dst dir exists
      
      * set 2 paths for OSError object
      
      * set 2 paths for OSError object
      
      * expand windows test
      
      * in case of exception on os.sendfile() set filename and filename2 exception attributes
      
      * set 2 filenames (src, dst) for OSError in case copyfile() fails on OSX
      
      * update doc
      
      * do not use CreateDirectoryEx() in copytree() if source dir is a symlink (breaks test_copytree_symlink_dir); instead just create a plain dir and remain consistent with POSIX implementation
      
      * use bytearray() and readinto()
      
      * use memoryview() with bytearray()
      
      * refactoring + introduce a new _fastcopy_binfileobj() fun
      
      * remove CopyFileEx and other C wrappers
      
      * remove code related to CopyFileEx
      
      * Recognize binary files in copyfileobj()
      ...and use fastest _fastcopy_binfileobj() when possible
      
      * set 1MB copy bufsize on win; also add a global _COPY_BUFSIZE variable
      
      * use ctx manager for memoryview()
      
      * update doc
      
      * remove outdated doc
      
      * remove last CopyFileEx remnants
      
      * OSX - use fcopyfile(3) instead of copyfile(3)
      
      ...as an extra safety measure: in case src/dst are "exotic" files (non
      regular or living on a network fs etc.) we better fail on open() instead
      of copyfile(3) as we're not quite sure what's gonna happen in that
      case.
      
      * update doc
      4a172ccc
    • Cheryl Sabella's avatar
    • Tal Einat's avatar
      bpo-27397: Make email module properly handle invalid-length base64 strings (#7583) · c3f55be7
      Tal Einat authored
      When attempting to base64-decode a payload of invalid length (1 mod 4),
      properly recognize and handle it.  The given data will be returned as-is,
      i.e. not decoded, along with a new defect, InvalidBase64LengthDefect.
      c3f55be7
    • Ned Deily's avatar
      Fix nested list in 3.7 What's New (GH-7659) · 5a982091
      Ned Deily authored
      5a982091
    • Ned Deily's avatar
      04290cb9
    • Zackery Spytz's avatar
    • Ned Deily's avatar
    • Ned Deily's avatar
  2. 11 Jun, 2018 14 commits
  3. 10 Jun, 2018 12 commits
  4. 09 Jun, 2018 6 commits
    • Ammar Askar's avatar
    • MarcoFalke's avatar
      doc: Fix typo in asyncio-eventloop.rst (GH-7345) · 7e0d882a
      MarcoFalke authored
      This is a fixup to 19a44f63
      7e0d882a
    • Ned Deily's avatar
    • Christian Tismer's avatar
      bpo-33738: Fix macros which contradict PEP 384 (GH-7477) · ea62ce7f
      Christian Tismer authored
      During development of the limited API support for PySide,
      we saw an error in a macro that accessed a type field.
      
      This patch fixes the 7 errors in the Python headers.
      Macros which were not written as capitals were implemented
      as function.
      
      To do the necessary analysis again, a script was included that
      parses all headers and looks for "->tp_" in serctions which can
      be reached with active limited API.
      
      It is easily possible to call this script as a test.
      
      Error listing:
      
      ../../Include/objimpl.h:243
      #define PyObject_IS_GC(o) (PyType_IS_GC(Py_TYPE(o)) && \
          (Py_TYPE(o)->tp_is_gc == NULL || Py_TYPE(o)->tp_is_gc(o)))
      Action: commented only
      
      ../../Include/objimpl.h:362
      #define PyType_SUPPORTS_WEAKREFS(t) ((t)->tp_weaklistoffset > 0)
      Action: commented only
      
      ../../Include/objimpl.h:364
      #define PyObject_GET_WEAKREFS_LISTPTR(o) \
          ((PyObject **) (((char *) (o)) + Py_TYPE(o)->tp_weaklistoffset))
      Action: commented only
      
      ../../Include/pyerrors.h:143
      #define PyExceptionClass_Name(x) \
           ((char *)(((PyTypeObject*)(x))->tp_name))
      Action: implemented function
      
      ../../Include/abstract.h:593
      #define PyIter_Check(obj) \
          ((obj)->ob_type->tp_iternext != NULL && \
           (obj)->ob_type->tp_iternext != &_PyObject_NextNotImplemented)
      Action: implemented function
      
      ../../Include/abstract.h:713
      #define PyIndex_Check(obj)                              \
          ((obj)->ob_type->tp_as_number != NULL &&            \
           (obj)->ob_type->tp_as_number->nb_index != NULL)
      Action: implemented function
      
      ../../Include/abstract.h:924
      #define PySequence_ITEM(o, i)\
          ( Py_TYPE(o)->tp_as_sequence->sq_item(o, i) )
      Action: commented only
      ea62ce7f
    • Zackery Spytz's avatar
      bpo-33375: Fix GCC warning in Python/_warnings.c (GH-7556) · 3f45f5da
      Zackery Spytz authored
      _Py_IDENTIFIER(argv) is now unused.
      3f45f5da
    • Nick Coghlan's avatar
      bpo-33409: Clarify PEP 538/540 relationship (GH-7534) · 1bcb8a63
      Nick Coghlan authored
      While locale coercion and UTF-8 mode turned out to
      be complementary ideas rather than competing ones,
      it isn't immediately obvious why it's useful to
      have both, or how they interact at runtime.
      
      This updates both the Python 3.7 What's New doc
      and the PYTHONCOERCECLOCALE and PYTHONUTF8
      documentation in an attempt to clarify that
      relationship:
      
      - in the respective What's New sections, add a closing paragraph
        explaining which problem each one solves, and pointing to the
        other PEP's section for the specific aspects it relies on the other
        PEP to solve
      - use "locale-aware mode" as a more descriptive term for the
        default non-UTF-8 mode
      - improve wording conistenccy between the PYTHONCOERCECLOCALE
        and PYTHONUTF8 docs when they cover the same thing (mostly
        related to legacy locale detection and setting the standard
        stream error handler)
      - improve the description of the locale coercion trigger conditions
        (including pointing out that setting LC_ALL turns off locale coercion)
      - port the full description of the UTF-8 mode behaviour changes
        from PEP 540 into the PYTHONUTF8 documentation
      - be explicit that PYTHONIOENCODING still overrides the settings
        for the standard streams
      - mention concrete examples of things that do and don't get their
        text encoding assumptions adjusted by the two text encoding
        assumption override techniques
      1bcb8a63