From 958982f16590300f533b6ac171d04f3cd10589a4 Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Fri, 22 Feb 2019 22:28:12 +0000 Subject: [PATCH 01/16] check for readlink --- fs/osfs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/osfs.py b/fs/osfs.py index e10ebc12..f6512fb6 100644 --- a/fs/osfs.py +++ b/fs/osfs.py @@ -282,7 +282,7 @@ def getinfo(self, path, namespaces=None): info["lstat"] = { k: getattr(_lstat, k) for k in dir(_lstat) if k.startswith("st_") } - if "link" in namespaces: + if "link" in namespaces and hasattr(os, "readlink"): info["link"] = self._make_link_info(sys_path) if "access" in namespaces: info["access"] = self._make_access_from_stat(_stat) From 3ebbef1d0833c0c41019a6a98175fb372a887810 Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Fri, 22 Feb 2019 22:31:09 +0000 Subject: [PATCH 02/16] no test symlink --- appveyor.yml | 2 +- tests/test_osfs.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 2124bf6a..0d66a907 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -19,7 +19,7 @@ environment: install: # We need wheel installed to build wheels - - "%PYTHON%\\python.exe -m pip install nose pyftpdlib mock" + - "%PYTHON%\\python.exe -m pip install nose psutil pyftpdlib mock" - "%PYTHON%\\python.exe setup.py install" build: off diff --git a/tests/test_osfs.py b/tests/test_osfs.py index 59d2ab6a..178531bb 100644 --- a/tests/test_osfs.py +++ b/tests/test_osfs.py @@ -115,6 +115,7 @@ def test_unicode_paths(self): finally: shutil.rmtree(dir_path) + @unittest.skipif(not hasattr(os, "symlink"), "No symlink support") def test_symlinks(self): with open(self._get_real_path("foo"), "wb") as f: f.write(b"foobar") From 959939d14a4110d10cc133fee2268082d460d76f Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Fri, 22 Feb 2019 22:34:51 +0000 Subject: [PATCH 03/16] capital I --- tests/test_osfs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_osfs.py b/tests/test_osfs.py index 178531bb..09c74df9 100644 --- a/tests/test_osfs.py +++ b/tests/test_osfs.py @@ -115,7 +115,7 @@ def test_unicode_paths(self): finally: shutil.rmtree(dir_path) - @unittest.skipif(not hasattr(os, "symlink"), "No symlink support") + @unittest.skipIf(not hasattr(os, "symlink"), "No symlink support") def test_symlinks(self): with open(self._get_real_path("foo"), "wb") as f: f.write(b"foobar") From 841b9bea93a9b949a40dc6762d3f90121be63f60 Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Fri, 22 Feb 2019 22:38:59 +0000 Subject: [PATCH 04/16] handle lack of readlink --- fs/osfs.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/fs/osfs.py b/fs/osfs.py index f6512fb6..57154d36 100644 --- a/fs/osfs.py +++ b/fs/osfs.py @@ -245,12 +245,14 @@ def _get_type_from_stat(cls, _stat): def _gettarget(self, sys_path): # type: (Text) -> Optional[Text] - try: - target = os.readlink(fsencode(sys_path)) - except OSError: - return None - else: - return target + if hasattr(os, "readlink"): + try: + target = os.readlink(fsencode(sys_path)) + except OSError: + pass + else: + return target + return None def _make_link_info(self, sys_path): # type: (Text) -> Dict[Text, object] @@ -282,7 +284,7 @@ def getinfo(self, path, namespaces=None): info["lstat"] = { k: getattr(_lstat, k) for k in dir(_lstat) if k.startswith("st_") } - if "link" in namespaces and hasattr(os, "readlink"): + if "link" in namespaces: info["link"] = self._make_link_info(sys_path) if "access" in namespaces: info["access"] = self._make_access_from_stat(_stat) From 858823bbfa138716f00137c0050c4d935b4fff36 Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Fri, 22 Feb 2019 22:53:34 +0000 Subject: [PATCH 05/16] winfix --- fs/osfs.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fs/osfs.py b/fs/osfs.py index 57154d36..3e1fd14e 100644 --- a/fs/osfs.py +++ b/fs/osfs.py @@ -456,7 +456,12 @@ def _scandir(self, path, namespaces=None): self.check() namespaces = namespaces or () _path = self.validatepath(path) - sys_path = self._to_sys_path(_path) + if _WINDOWS_PLATFORM: + sys_path = os.path.join( + self._root_path, path.lstrip("/").replace("/", os.sep) + ) + else: + sys_path = self._to_sys_path(_path) with convert_os_errors("scandir", path, directory=True): for dir_entry in scandir(sys_path): info = { From 7bd838f5af0dce18bebf94ae6bd47ea6945462dc Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Fri, 22 Feb 2019 23:08:35 +0000 Subject: [PATCH 06/16] readlink on windows --- appveyor.yml | 20 ++++++++++---------- fs/osfs.py | 5 ++++- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 0d66a907..f0307b39 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -5,16 +5,16 @@ environment: # The list here is complete (excluding Python 2.6, which # isn't covered by this document) at the time of writing. - - PYTHON: "C:\\Python27" - - PYTHON: "C:\\Python33" - - PYTHON: "C:\\Python34" - - PYTHON: "C:\\Python35" - - PYTHON: "C:\\Python27-x64" - - PYTHON: "C:\\Python33-x64" - DISTUTILS_USE_SDK: "1" - - PYTHON: "C:\\Python34-x64" - DISTUTILS_USE_SDK: "1" - - PYTHON: "C:\\Python35-x64" + # - PYTHON: "C:\\Python27" + # - PYTHON: "C:\\Python33" + # - PYTHON: "C:\\Python34" + # - PYTHON: "C:\\Python35" + # - PYTHON: "C:\\Python27-x64" + # - PYTHON: "C:\\Python33-x64" + # DISTUTILS_USE_SDK: "1" + # - PYTHON: "C:\\Python34-x64" + # DISTUTILS_USE_SDK: "1" + # - PYTHON: "C:\\Python35-x64" - PYTHON: "C:\\Python36-x64" install: diff --git a/fs/osfs.py b/fs/osfs.py index 3e1fd14e..4a8848ec 100644 --- a/fs/osfs.py +++ b/fs/osfs.py @@ -247,7 +247,10 @@ def _gettarget(self, sys_path): # type: (Text) -> Optional[Text] if hasattr(os, "readlink"): try: - target = os.readlink(fsencode(sys_path)) + if _WINDOWS_PLATFORM: # pragma: no cover + target = os.readlink(sys_path) + else: + target = os.readlink(fsencode(sys_path)) except OSError: pass else: From 2e786665d9858b2bceee6647689ef0cfe1d51797 Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Fri, 22 Feb 2019 23:16:46 +0000 Subject: [PATCH 07/16] case insensitive fix --- appveyor.yml | 2 +- fs/osfs.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index f0307b39..c73b884d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -25,4 +25,4 @@ install: build: off test_script: - - "%PYTHON%\\python.exe -m nose tests" + - "%PYTHON%\\python.exe -m nose tests -v" diff --git a/fs/osfs.py b/fs/osfs.py index 4a8848ec..e7d44ae3 100644 --- a/fs/osfs.py +++ b/fs/osfs.py @@ -134,7 +134,7 @@ def __init__( raise errors.CreateFailed("root path does not exist") _meta = self._meta = { - "case_insensitive": os.path.normcase("Aa") != "aa", + "case_insensitive": os.path.normcase("Aa") == "aa", "network": False, "read_only": False, "supports_rename": True, From 533aa32fe06f61e6d26af4380ebf95ce6170b814 Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Fri, 22 Feb 2019 23:31:07 +0000 Subject: [PATCH 08/16] debug --- fs/error_tools.py | 1 + tests/test_archives.py | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/fs/error_tools.py b/fs/error_tools.py index ba32c23c..bcf7daae 100644 --- a/fs/error_tools.py +++ b/fs/error_tools.py @@ -81,6 +81,7 @@ def __exit__( traceback, # type: Optional[TracebackType] ): # type: (...) -> None + print(exc_value) os_errors = self.DIR_ERRORS if self._directory else self.FILE_ERRORS if exc_type and isinstance(exc_value, EnvironmentError): _errno = exc_value.errno diff --git a/tests/test_archives.py b/tests/test_archives.py index 1873718b..c0bfff3b 100644 --- a/tests/test_archives.py +++ b/tests/test_archives.py @@ -86,9 +86,10 @@ def test_getinfo(self): except errors.NoSysPath: pass else: - self.assertEqual( - top.permissions.mode, stat.S_IMODE(os.stat(source_syspath).st_mode) - ) + if top.has_namespace("access"): + self.assertEqual( + top.permissions.mode, stat.S_IMODE(os.stat(source_syspath).st_mode) + ) self.assertEqual(top.get("details", "type"), ResourceType.file) From d949d3788d214a37c632d1aab1228653f78c3f3a Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Fri, 22 Feb 2019 23:42:39 +0000 Subject: [PATCH 09/16] fix for FileExpected --- fs/error_tools.py | 1 - fs/osfs.py | 4 ++++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/fs/error_tools.py b/fs/error_tools.py index bcf7daae..ba32c23c 100644 --- a/fs/error_tools.py +++ b/fs/error_tools.py @@ -81,7 +81,6 @@ def __exit__( traceback, # type: Optional[TracebackType] ): # type: (...) -> None - print(exc_value) os_errors = self.DIR_ERRORS if self._directory else self.FILE_ERRORS if exc_type and isinstance(exc_value, EnvironmentError): _errno = exc_value.errno diff --git a/fs/osfs.py b/fs/osfs.py index e7d44ae3..f9d85a43 100644 --- a/fs/osfs.py +++ b/fs/osfs.py @@ -605,6 +605,8 @@ def open( validate_open_mode(mode) self.check() _path = self.validatepath(path) + if _path == "/": + raise FileExpected(path) sys_path = self._to_sys_path(_path) with convert_os_errors("open", path): if six.PY2 and _mode.exclusive: @@ -624,6 +626,8 @@ def setinfo(self, path, info): # type: (Text, RawInfo) -> None self.check() _path = self.validatepath(path) + if _path == "/": + raise FileExpected(path) sys_path = self._to_sys_path(_path) if not os.path.exists(sys_path): raise errors.ResourceNotFound(path) From 3681f8b539a0e5bb88a0fe60095e4c084addaed8 Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Fri, 22 Feb 2019 23:44:20 +0000 Subject: [PATCH 10/16] correct error --- fs/osfs.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/osfs.py b/fs/osfs.py index f9d85a43..6e85a4a1 100644 --- a/fs/osfs.py +++ b/fs/osfs.py @@ -606,7 +606,7 @@ def open( self.check() _path = self.validatepath(path) if _path == "/": - raise FileExpected(path) + raise error.FileExpected(path) sys_path = self._to_sys_path(_path) with convert_os_errors("open", path): if six.PY2 and _mode.exclusive: @@ -627,7 +627,7 @@ def setinfo(self, path, info): self.check() _path = self.validatepath(path) if _path == "/": - raise FileExpected(path) + raise errors.FileExpected(path) sys_path = self._to_sys_path(_path) if not os.path.exists(sys_path): raise errors.ResourceNotFound(path) From fc51e5b3d8d5751a347e3c4d3ce1fc840a202fe2 Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Fri, 22 Feb 2019 23:46:52 +0000 Subject: [PATCH 11/16] fix for file expected --- fs/osfs.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/osfs.py b/fs/osfs.py index 6e85a4a1..e00cbae4 100644 --- a/fs/osfs.py +++ b/fs/osfs.py @@ -333,6 +333,8 @@ def openbin(self, path, mode="r", buffering=-1, **options): _mode.validate_bin() self.check() _path = self.validatepath(path) + if _path == "/": + raise errors.FileExpected(path) sys_path = self._to_sys_path(_path) with convert_os_errors("openbin", path): if six.PY2 and _mode.exclusive: @@ -606,7 +608,7 @@ def open( self.check() _path = self.validatepath(path) if _path == "/": - raise error.FileExpected(path) + raise errors.FileExpected(path) sys_path = self._to_sys_path(_path) with convert_os_errors("open", path): if six.PY2 and _mode.exclusive: @@ -626,8 +628,6 @@ def setinfo(self, path, info): # type: (Text, RawInfo) -> None self.check() _path = self.validatepath(path) - if _path == "/": - raise errors.FileExpected(path) sys_path = self._to_sys_path(_path) if not os.path.exists(sys_path): raise errors.ResourceNotFound(path) From fd99669d8da8fa4857f9b64ed5ff1a4400d53397 Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Fri, 22 Feb 2019 23:50:00 +0000 Subject: [PATCH 12/16] fix name conflict --- fs/osfs.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/osfs.py b/fs/osfs.py index e00cbae4..20dee97c 100644 --- a/fs/osfs.py +++ b/fs/osfs.py @@ -47,7 +47,7 @@ from .permissions import Permissions from .error_tools import convert_os_errors from .mode import Mode, validate_open_mode -from .errors import NoURL +from .errors import FileExpected, NoURL if False: # typing.TYPE_CHECKING from typing import ( @@ -608,7 +608,7 @@ def open( self.check() _path = self.validatepath(path) if _path == "/": - raise errors.FileExpected(path) + raise FileExpected(path) sys_path = self._to_sys_path(_path) with convert_os_errors("open", path): if six.PY2 and _mode.exclusive: From 13c6c219619256a465bf84bf93dda46bfac72232 Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Fri, 22 Feb 2019 23:57:20 +0000 Subject: [PATCH 13/16] close tempfiles --- appveyor.yml | 1 + tests/test_tarfs.py | 2 ++ tests/test_zipfs.py | 1 + 3 files changed, 4 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index c73b884d..6cdb3773 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -16,6 +16,7 @@ environment: # DISTUTILS_USE_SDK: "1" # - PYTHON: "C:\\Python35-x64" - PYTHON: "C:\\Python36-x64" + - PYTHON: "C:\\Python37-x64" install: # We need wheel installed to build wheels diff --git a/tests/test_tarfs.py b/tests/test_tarfs.py index 2603582b..ac25731d 100644 --- a/tests/test_tarfs.py +++ b/tests/test_tarfs.py @@ -9,6 +9,7 @@ import getpass import tarfile import tempfile +import time import unittest import uuid @@ -26,6 +27,7 @@ class TestWriteReadTarFS(unittest.TestCase): def setUp(self): fh, self._temp_path = tempfile.mkstemp() + os.close(fh) def tearDown(self): os.remove(self._temp_path) diff --git a/tests/test_zipfs.py b/tests/test_zipfs.py index c8c7ad76..421d80d8 100644 --- a/tests/test_zipfs.py +++ b/tests/test_zipfs.py @@ -22,6 +22,7 @@ class TestWriteReadZipFS(unittest.TestCase): def setUp(self): fh, self._temp_path = tempfile.mkstemp() + os.close(fh) def tearDown(self): os.remove(self._temp_path) From cb8fa06e44dcb95452ce3abe0b7dae51a5faba05 Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Sat, 23 Feb 2019 00:05:17 +0000 Subject: [PATCH 14/16] fix ftp test --- tests/test_encoding.py | 1 + tests/test_ftpfs.py | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/test_encoding.py b/tests/test_encoding.py index 6c15f7e9..569d0fdb 100644 --- a/tests/test_encoding.py +++ b/tests/test_encoding.py @@ -13,6 +13,7 @@ @unittest.skipIf(platform.system() == "Darwin", "Bad unicode not possible on OSX") +@unittest.skipIf(platform.system() == "Windows", "Strict encoding on Windows") class TestEncoding(unittest.TestCase): TEST_FILENAME = b"foo\xb1bar" diff --git a/tests/test_ftpfs.py b/tests/test_ftpfs.py index 8f64e279..77b4a4b6 100644 --- a/tests/test_ftpfs.py +++ b/tests/test_ftpfs.py @@ -25,6 +25,7 @@ from fs import errors from fs.opener import open_fs from fs.ftpfs import FTPFS, ftp_errors +from fs.path import join from fs.subfs import SubFS from fs.test import FSTestCases @@ -200,7 +201,7 @@ def test_opener_path(self): def test_create(self): - directory = os.path.join("home", self.user, "test", "directory") + directory = join("home", self.user, "test", "directory") base = "ftp://user:1234@{}:{}/foo".format(self.server.host, self.server.port) url = "{}/{}".format(base, directory) @@ -215,7 +216,7 @@ def test_create(self): # Open the base filesystem and check the subdirectory exists with open_fs(base) as ftp_fs: self.assertTrue(ftp_fs.isdir(directory)) - self.assertTrue(ftp_fs.isfile(os.path.join(directory, "foo"))) + self.assertTrue(ftp_fs.isfile(join(directory, "foo"))) # Open without `create` and check the file exists with open_fs(url) as ftp_fs: From 82c57cc93e3c9cc11197875d9703c4c54ae1da2b Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Sat, 23 Feb 2019 00:08:18 +0000 Subject: [PATCH 15/16] exclude test from windows --- tests/test_encoding.py | 86 ++++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 41 deletions(-) diff --git a/tests/test_encoding.py b/tests/test_encoding.py index 569d0fdb..0cd91d4c 100644 --- a/tests/test_encoding.py +++ b/tests/test_encoding.py @@ -12,44 +12,48 @@ from fs.osfs import OSFS -@unittest.skipIf(platform.system() == "Darwin", "Bad unicode not possible on OSX") -@unittest.skipIf(platform.system() == "Windows", "Strict encoding on Windows") -class TestEncoding(unittest.TestCase): - - TEST_FILENAME = b"foo\xb1bar" - TEST_FILENAME_UNICODE = fs.fsdecode(TEST_FILENAME) - - def setUp(self): - dir_path = self.dir_path = tempfile.mkdtemp() - if six.PY2: - with open(os.path.join(dir_path, self.TEST_FILENAME), "wb") as f: - f.write(b"baz") - else: - with open(os.path.join(dir_path, self.TEST_FILENAME_UNICODE), "wb") as f: - f.write(b"baz") - - def tearDown(self): - shutil.rmtree(self.dir_path) - - def test_open(self): - with OSFS(self.dir_path) as test_fs: - self.assertTrue(test_fs.exists(self.TEST_FILENAME_UNICODE)) - self.assertTrue(test_fs.isfile(self.TEST_FILENAME_UNICODE)) - self.assertFalse(test_fs.isdir(self.TEST_FILENAME_UNICODE)) - with test_fs.open(self.TEST_FILENAME_UNICODE, "rb") as f: - self.assertEqual(f.read(), b"baz") - self.assertEqual(test_fs.readtext(self.TEST_FILENAME_UNICODE), "baz") - test_fs.remove(self.TEST_FILENAME_UNICODE) - self.assertFalse(test_fs.exists(self.TEST_FILENAME_UNICODE)) - - def test_listdir(self): - with OSFS(self.dir_path) as test_fs: - dirlist = test_fs.listdir("/") - self.assertEqual(dirlist, [self.TEST_FILENAME_UNICODE]) - self.assertEqual(test_fs.readtext(dirlist[0]), "baz") - - def test_scandir(self): - with OSFS(self.dir_path) as test_fs: - for info in test_fs.scandir("/"): - self.assertIsInstance(info.name, six.text_type) - self.assertEqual(info.name, self.TEST_FILENAME_UNICODE) +if platform.system() != "Windows": + + @unittest.skipIf(platform.system() == "Darwin", "Bad unicode not possible on OSX") + class TestEncoding(unittest.TestCase): + + TEST_FILENAME = b"foo\xb1bar" + # fsdecode throws error on Windows + TEST_FILENAME_UNICODE = fs.fsdecode(TEST_FILENAME) + + def setUp(self): + dir_path = self.dir_path = tempfile.mkdtemp() + if six.PY2: + with open(os.path.join(dir_path, self.TEST_FILENAME), "wb") as f: + f.write(b"baz") + else: + with open( + os.path.join(dir_path, self.TEST_FILENAME_UNICODE), "wb" + ) as f: + f.write(b"baz") + + def tearDown(self): + shutil.rmtree(self.dir_path) + + def test_open(self): + with OSFS(self.dir_path) as test_fs: + self.assertTrue(test_fs.exists(self.TEST_FILENAME_UNICODE)) + self.assertTrue(test_fs.isfile(self.TEST_FILENAME_UNICODE)) + self.assertFalse(test_fs.isdir(self.TEST_FILENAME_UNICODE)) + with test_fs.open(self.TEST_FILENAME_UNICODE, "rb") as f: + self.assertEqual(f.read(), b"baz") + self.assertEqual(test_fs.readtext(self.TEST_FILENAME_UNICODE), "baz") + test_fs.remove(self.TEST_FILENAME_UNICODE) + self.assertFalse(test_fs.exists(self.TEST_FILENAME_UNICODE)) + + def test_listdir(self): + with OSFS(self.dir_path) as test_fs: + dirlist = test_fs.listdir("/") + self.assertEqual(dirlist, [self.TEST_FILENAME_UNICODE]) + self.assertEqual(test_fs.readtext(dirlist[0]), "baz") + + def test_scandir(self): + with OSFS(self.dir_path) as test_fs: + for info in test_fs.scandir("/"): + self.assertIsInstance(info.name, six.text_type) + self.assertEqual(info.name, self.TEST_FILENAME_UNICODE) From 5040ec3993f9b2764f84b0eda1a8f9612d0b6b4d Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Sat, 23 Feb 2019 09:46:19 +0000 Subject: [PATCH 16/16] version bump --- CHANGELOG.md | 7 +++++++ fs/_version.py | 2 +- tests/test_tarfs.py | 1 - 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 857a9476..752ed141 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## [2.4.3] - 2019-02-23 + +### Fixed + +- Fixed broken "case_insensitive" check +- Fixed Windows test fails + ## [2.4.2] - 2019-02-22 ### Fixed diff --git a/fs/_version.py b/fs/_version.py index d2bcc700..96b96f17 100644 --- a/fs/_version.py +++ b/fs/_version.py @@ -1,3 +1,3 @@ """Version, used in module and setup.py. """ -__version__ = "2.4.2" +__version__ = "2.4.3" diff --git a/tests/test_tarfs.py b/tests/test_tarfs.py index ac25731d..0ce09606 100644 --- a/tests/test_tarfs.py +++ b/tests/test_tarfs.py @@ -9,7 +9,6 @@ import getpass import tarfile import tempfile -import time import unittest import uuid