Skip to content
This repository was archived by the owner on Aug 6, 2024. It is now read-only.

Remove pkg resources deprecations #1

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions fs/__init__.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
"""Python filesystem abstraction layer.
"""

__import__("pkg_resources").declare_namespace(__name__) # type: ignore

from . import path
from ._fscompat import fsdecode, fsencode
from ._version import __version__
Expand Down
3 changes: 0 additions & 3 deletions fs/opener/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@
"""Open filesystems from a URL.
"""

# Declare fs.opener as a namespace package
__import__("pkg_resources").declare_namespace(__name__) # type: ignore

# Import opener modules so that `registry.install` if called on each opener
from . import appfs, ftpfs, memoryfs, osfs, tarfs, tempfs, zipfs

Expand Down
9 changes: 6 additions & 3 deletions fs/opener/registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

import collections
import contextlib
import pkg_resources
from importlib.metadata import entry_points

from ..errors import ResourceReadOnly
from .base import Opener
Expand Down Expand Up @@ -74,9 +74,10 @@ def protocols(self):
"""`list`: the list of supported protocols."""
_protocols = list(self._protocols)
if self.load_extern:
eps = entry_points()
_protocols.extend(
entry_point.name
for entry_point in pkg_resources.iter_entry_points("fs.opener")
for entry_point in eps.get("fs.opener") or []
)
_protocols = list(collections.OrderedDict.fromkeys(_protocols))
return _protocols
Expand All @@ -102,9 +103,11 @@ def get_opener(self, protocol):
protocol = protocol or self.default_opener

if self.load_extern:
eps = entry_points(group="fs.opener")
entry_point = next(
pkg_resources.iter_entry_points("fs.opener", protocol), None
(ep for ep in eps if ep.name == protocol), None
)

else:
entry_point = None

Expand Down
6 changes: 3 additions & 3 deletions tests/test_move.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ def test_move_file_overwrite(self, _, fs_url):
self.assertFalse(src.exists("target.txt"))
self.assertFalse(dst.exists("file.txt"))
self.assertTrue(dst.exists("target.txt"))
self.assertEquals(dst.readtext("target.txt"), "source content")
self.assertEqual(dst.readtext("target.txt"), "source content")

@parameterized.expand([("temp", "temp://"), ("mem", "mem://")])
def test_move_file_overwrite_itself(self, _, fs_url):
Expand All @@ -177,7 +177,7 @@ def test_move_file_overwrite_itself(self, _, fs_url):
tmp.writetext("file.txt", "content")
fs.move.move_file(tmp, "file.txt", tmp, "file.txt")
self.assertTrue(tmp.exists("file.txt"))
self.assertEquals(tmp.readtext("file.txt"), "content")
self.assertEqual(tmp.readtext("file.txt"), "content")

@parameterized.expand([("temp", "temp://"), ("mem", "mem://")])
def test_move_file_overwrite_itself_relpath(self, _, fs_url):
Expand All @@ -188,7 +188,7 @@ def test_move_file_overwrite_itself_relpath(self, _, fs_url):
new_dir.writetext("file.txt", "content")
fs.move.move_file(tmp, "dir/../dir/file.txt", tmp, "dir/file.txt")
self.assertTrue(tmp.exists("dir/file.txt"))
self.assertEquals(tmp.readtext("dir/file.txt"), "content")
self.assertEqual(tmp.readtext("dir/file.txt"), "content")

@parameterized.expand([(True,), (False,)])
def test_move_file_cleanup_on_error(self, cleanup):
Expand Down
37 changes: 19 additions & 18 deletions tests/test_opener.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
import sys

import os
import pkg_resources
import importlib.metadata

import shutil
import tempfile
import unittest
Expand All @@ -13,6 +14,7 @@
from fs.memoryfs import MemoryFS
from fs.opener import errors, registry
from fs.opener.parse import ParseResult

from fs.opener.registry import Registry
from fs.osfs import OSFS

Expand Down Expand Up @@ -111,13 +113,15 @@ def test_protocols(self):

def test_registry_protocols(self):
# Check registry.protocols list the names of all available extension
extensions = [
pkg_resources.EntryPoint("proto1", "mod1"),
pkg_resources.EntryPoint("proto2", "mod2"),
]
extensions = {
"fs.opener": [
importlib.metadata.EntryPoint("proto1", "mod1", "test"),
importlib.metadata.EntryPoint("proto2", "mod2", "test"),
]
}
m = mock.MagicMock(return_value=extensions)
with mock.patch.object(
sys.modules["pkg_resources"], "iter_entry_points", new=m
sys.modules["fs.opener.registry"], "entry_points", new=m
):
self.assertIn("proto1", opener.registry.protocols)
self.assertIn("proto2", opener.registry.protocols)
Expand All @@ -129,11 +133,12 @@ def test_unknown_protocol(self):
def test_entry_point_load_error(self):

entry_point = mock.MagicMock()
entry_point.name = "test"
entry_point.load.side_effect = ValueError("some error")

iter_entry_points = mock.MagicMock(return_value=iter([entry_point]))
entry_points = mock.MagicMock(return_value=iter([entry_point]))

with mock.patch("pkg_resources.iter_entry_points", iter_entry_points):
with mock.patch("fs.opener.registry.entry_points", entry_points):
with self.assertRaises(errors.EntryPointError) as ctx:
opener.open_fs("test://")
self.assertEqual(
Expand All @@ -145,10 +150,11 @@ class NotAnOpener(object):
pass

entry_point = mock.MagicMock()
entry_point.name = "test"
entry_point.load = mock.MagicMock(return_value=NotAnOpener)
iter_entry_points = mock.MagicMock(return_value=iter([entry_point]))
entry_points = mock.MagicMock(return_value=iter([entry_point]))

with mock.patch("pkg_resources.iter_entry_points", iter_entry_points):
with mock.patch("fs.opener.registry.entry_points", entry_points):
with self.assertRaises(errors.EntryPointError) as ctx:
opener.open_fs("test://")
self.assertEqual("entry point did not return an opener", str(ctx.exception))
Expand All @@ -162,10 +168,11 @@ def open_fs(self, *args, **kwargs):
pass

entry_point = mock.MagicMock()
entry_point.name = "test"
entry_point.load = mock.MagicMock(return_value=BadOpener)
iter_entry_points = mock.MagicMock(return_value=iter([entry_point]))
entry_points = mock.MagicMock(return_value=iter([entry_point]))

with mock.patch("pkg_resources.iter_entry_points", iter_entry_points):
with mock.patch("fs.opener.registry.entry_points", entry_points):
with self.assertRaises(errors.EntryPointError) as ctx:
opener.open_fs("test://")
self.assertEqual(
Expand Down Expand Up @@ -215,12 +222,6 @@ def setUp(self):
def tearDown(self):
shutil.rmtree(self.tmpdir)

def test_repr(self):
# Check __repr__ works
for entry_point in pkg_resources.iter_entry_points("fs.opener"):
_opener = entry_point.load()
repr(_opener())

def test_open_osfs(self):
fs = opener.open_fs("osfs://.")
self.assertIsInstance(fs, OSFS)
Expand Down