From af3a5b91503f5d74aa111bbcd1ee531ee00f9ed7 Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Tue, 28 Apr 2020 20:29:56 -0700 Subject: [PATCH] shutil.Error, not OSError - refs #744 --- datasette/utils/__init__.py | 4 ++-- tests/test_utils.py | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/datasette/utils/__init__.py b/datasette/utils/__init__.py index 490b71c8..63b5a184 100644 --- a/datasette/utils/__init__.py +++ b/datasette/utils/__init__.py @@ -598,14 +598,14 @@ def link_or_copy(src, dst): # https://github.com/simonw/datasette/issues/141 try: os.link(src, dst) - except OSError: + except shutil.Error: shutil.copyfile(src, dst) def link_or_copy_directory(src, dst): try: shutil.copytree(src, dst, copy_function=os.link) - except OSError: + except shutil.Error: shutil.copytree(src, dst) diff --git a/tests/test_utils.py b/tests/test_utils.py index fe5d9a26..bb51bf04 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -9,6 +9,7 @@ import json import os import pathlib import pytest +import shutil import sqlite3 import tempfile from unittest.mock import patch @@ -253,8 +254,8 @@ def test_temporary_docker_directory_uses_hard_link(): @patch("os.link") def test_temporary_docker_directory_uses_copy_if_hard_link_fails(mock_link): - # Copy instead if os.link raises OSError (normally due to different device) - mock_link.side_effect = OSError + # Copy instead if shutil.Error (normally due to different device) + mock_link.side_effect = shutil.Error with tempfile.TemporaryDirectory() as td: os.chdir(td) open("hello", "w").write("world")