1. 04 Oct, 2019 9 commits
  2. 03 Oct, 2019 7 commits
  3. 02 Oct, 2019 4 commits
  4. 01 Oct, 2019 10 commits
    • Steve Dower's avatar
    • Victor Stinner's avatar
      bpo-37802: Fix a compiler warning in longobject.c (GH-16517) · 6314abcc
      Victor Stinner authored
      bpo-37802, bpo-38321: Fix the following warnings:
      
          longobject.c(420): warning C4244: 'function': conversion from
          'unsigned __int64' to 'sdigit', possible loss of data
      
          longobject.c(428): warning C4267: 'function': conversion from
          'size_t' to 'sdigit', possible loss of data
      6314abcc
    • Victor Stinner's avatar
      bpo-37474: Don't call fedisableexcept() on FreeBSD (GH-16515) · 5e0ea754
      Victor Stinner authored
      On FreeBSD, Python no longer calls fedisableexcept() at startup to
      control the floating point control mode. The call became useless
      since FreeBSD 6: it became the default mode.
      5e0ea754
    • Victor Stinner's avatar
      bpo-38321: Fix compiler warning in _randommodule.c (GH-16512) · 2f902612
      Victor Stinner authored
      Fix the GCC warning: "initialization discards ‘const’ qualifier from
      pointer target type".
      2f902612
    • Victor Stinner's avatar
      bpo-36670: Multiple regrtest bugfixes (GH-16511) · 982bfa4d
      Victor Stinner authored
      * Windows: Fix counter name in WindowsLoadTracker. Counter names are
        localized: use the registry to get the counter name. Original
        change written by Lorenz Mende.
      * Regrtest.main() now ensures that the Windows load tracker is also
        killed if an exception is raised
      * TestWorkerProcess now ensures that worker processes are no longer
        running before exiting: kill also worker processes when an
        exception is raised.
      * Enhance regrtest messages and warnings: include test name,
        duration, add a worker identifier, etc.
      * Rename MultiprocessRunner to TestWorkerProcess
      * Use print_warning() to display warnings.
      Co-Authored-By: default avatarLorenz Mende <Lorenz.mende@gmail.com>
      982bfa4d
    • Victor Stinner's avatar
      bpo-38304: PyConfig_InitPythonConfig() cannot fail anymore (GH-16509) · 8462a493
      Victor Stinner authored
      PyConfig_InitPythonConfig() and PyConfig_InitIsolatedConfig() no
      longer return PyStatus: they cannot fail anymore.
      8462a493
    • Victor Stinner's avatar
      bpo-38304: Remove PyConfig.struct_size (GH-16500) (GH-16508) · 3c30a76f
      Victor Stinner authored
      For now, we'll rely on the fact that the config structures aren't covered by the stable ABI.
      
      We may revisit this in the future if we further explore the idea of offering a stable embedding API.
      
      (cherry picked from commit bdace21b769998396d0ccc8da99a8ca9b507bfdf)
      3c30a76f
    • Giampaolo Rodola's avatar
    • Maxwell A McKinnon's avatar
      bpo-32689: Updates shutil.move to allow for Path objects to be used as source arg (GH-15326) · cf57cabe
      Maxwell A McKinnon authored
      
      
      Important work originally done by @emilyemorehouse two years ago and nearly ready to go in.
      
      This bug has affected many people and in some cases has been a dealbreaker to the adoption of the otherwise wonderful pathlib and PEP519. https://stackoverflow.com/questions/33625931/copy-file-with-pathlib-in-python.
      
      This adds the outstanding test request from that PR @vstinner (https://github.com/python/cpython/pull/5393).
      
      Test fails without the change, passes with it, along with every other test in test_shutil.
      
      Some variants were experimented with to make the one line change and the most performant one was picked.
      
      
      # Added Test for PathLike directory destination, the current fail case
      
      ```
      Lib/test/test_shutil.py::TestMove::test_move_file_pathlike FAILED                                                               [100%]
      
      ============================================================== FAILURES ===============================================================
      __________________________________________________ TestMove.test_move_file_pathlike ___________________________________________________
      
      self = <test.test_shutil.TestMove testMethod=test_move_file_pathlike>
      
          def test_move_file_pathlike(self):
              # Move a file to another location on the same filesystem.
              src = pathlib.Path(self.src_file)
      >       self._check_move_file(src, self.dst_dir, self.dst_file)
      
      Lib/test/test_shutil.py:1563:
      _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
      Lib/test/test_shutil.py:1545: in _check_move_file
          shutil.move(src, dst)
      /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/shutil.py:562: in move
          real_dst = os.path.join(dst, _basename(src))
      _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
      
      path = PosixPath('/var/folders/r2/psq74t5x3nbfzlph8bh2pvdw0000gn/T/tmp9ie0wh9_/foo')
      
          def _basename(path):
              # A basename() variant which first strips the trailing slash, if present.
              # Thus we always get the last component of the path, even for directories.
              sep = os.path.sep + (os.path.altsep or '')
      >       return os.path.basename(path.rstrip(sep))
      E       AttributeError: 'PosixPath' object has no attribute 'rstrip'
      
      /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/shutil.py:526: AttributeError
      ============================================== 1 failed, 102 deselected in 0.30 seconds ===============================================
      ```
      
      After change:
      
      ```
      ========================================================= test session starts =========================================================
      platform darwin -- Python 3.7.4, pytest-5.0.1, py-1.8.0, pluggy-0.12.0 -- /Users/maxwellmckinnon/.venvs/TA3.7/bin/python3.7
      cachedir: .pytest_cache
      rootdir: /Users/maxwellmckinnon/dev/cpython
      plugins: cov-2.7.1, mock-1.10.4
      collected 103 items / 102 deselected / 1 selected
      
      Lib/test/test_shutil.py::TestMove::test_move_file_pathlike PASSED                                                               [100%]
      
      ============================================== 1 passed, 102 deselected in 0.06 seconds ===============================================
      ```
      
      Running all the tests in test_shutil.py
      ```
      ╰─ pytest Lib/test/test_shutil.py -v
      ========================================================= test session starts =========================================================
      platform darwin -- Python 3.7.4, pytest-5.0.1, py-1.8.0, pluggy-0.12.0 -- /Users/maxwellmckinnon/.venvs/TA3.7/bin/python3.7
      cachedir: .pytest_cache
      rootdir: /Users/maxwellmckinnon/dev/cpython
      plugins: cov-2.7.1, mock-1.10.4
      collected 103 items
      
      Lib/test/test_shutil.py::TestShutil::test_chown PASSED                                                                          [  0%]
      Lib/test/test_shutil.py::TestShutil::test_copy PASSED                                                                           [  1%]
      ...
      Lib/test/test_shutil.py::TermsizeTests::test_stty_match SKIPPED                                                                 [ 99%]
      Lib/test/test_shutil.py::PublicAPITests::test_module_all_attribute PASSED                                                       [100%]
      
      ================================================ 96 passed, 7 skipped in 1.25 seconds =================================================
      ```
      
      # Performance Considerations
      Is it considered poor form to get rid of _basename altogether and make use of pathlib in the move function? I'm not sure if the idea is for all these modules to strictly avoid circular dependencies. They are already using os.path which is just as much a citizen in 3.8 as pathlib right?
      
      e.g.
      
      `real_dst = os.path.join(dst, _basename(src))`
      becomes
      `real_dst = Path(dst) / Path(src).name`
      
      I've looked around and familiarized myself, and I now think importing pathlib here is fine. My only remaining concern is that of performance.
      
      Here's the performance difference for this step. 
      
      ```
      In [46]: %timeit real_dst = os.path.join("a/b/c", _basename('b/'))
      2.71 µs ± 62.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
      
      In [47]: %timeit real_dst = Path("a/b/c") / Path('b/').name
      12.4 µs ± 65.3 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
      ```
      
      Is 10us significant or insignificant compared to the least expensive operation this function will do? I don't know. Let's find out.
      
      ```
      In [55]: %timeit os.rename('/tmp/a/a.txt', '/tmp/a/b.txt'); os.rename('/tmp/a/b.txt', '/tmp/a/a.txt')
      124 µs ± 2.18 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
      ```
      62us to rename. 10us seems significant enough that we wouldn't want to favor the Path sugar suggestion. 16% speed decrease from adding the 10us.
      
      What do people think? I was hoping to get to use pathlib.Path here, but I suspect for this low level move, it should be as fast as possible, and 16% is not worth one line of sugary code to me.
      
      
      
      https://bugs.python.org/issue32689
      
      
      
      Automerge-Triggered-By: @gvanrossum
      cf57cabe
    • Kyle Stanley's avatar
      e4070130
  5. 30 Sep, 2019 10 commits