Jason R. Coombs <jar...@jaraco.com> added the comment:

For the first two errors, the issue seems to be that CPython includes tests for 
the ResourceReader ABC and asserts that .contents() returns an empty list as 
the default degenerate behavior 
(https://github.com/python/cpython/blob/1b57426e3a7842b4e6f9fc13ffb657c78e5443d4/Lib/test/test_importlib/test_abc.py#L340-L341).
 It appears that the ABC in importlib_resources has for a [very long time 
raised 
FileNotFound](https://github.com/python/importlib_resources/commit/e82b5675b9fef7dd971b796136687f915f7a39ca).

Oh, this is interesting - these ABCs have diverged since their inception; 
here's where [both the empty list behavior and test were introduced in 
cpython](https://github.com/python/cpython/commit/4ac5150e068a3a795ef00465f6dff51747b62b91)
 and [later amended to return an iterable instead of 
iterator](https://github.com/python/cpython/commit/3ab9365dca8438f89b2060cd3eebe00606133dc4).

Brett, is this a divergence worth maintaining? Do you recall if there was a 
reason for changing the ABC during the port to CPython? There's no mention of 
'contents' in issue32248.

My temptation is to go with the implementation as found in importlib_resources 
as it presents a more consistent interface for ResourceReaders (and explicitly 
defaults to raising FileNotFoundError when no implementation for contents is 
present) and thus to change the test to:

```
cpython master $ git diff Lib/test/test_importlib/test_abc.py
diff --git a/Lib/test/test_importlib/test_abc.py 
b/Lib/test/test_importlib/test_abc.py
index d8b9fc89f2..d1c89c183b 100644
--- a/Lib/test/test_importlib/test_abc.py
+++ b/Lib/test/test_importlib/test_abc.py
@@ -338,7 +338,9 @@ def test_is_resource(self):
             self.ins.is_resource('dummy_file')
 
     def test_contents(self):
-        self.assertEqual([], list(self.ins.contents()))
+        with self.assertRaises(FileNotFoundError):
+            self.ins.contents()
+
 
 (Frozen_RRDefaultTests,
  Source_RRDefaultsTests
```

Brett, let me know if you have concern about harmonizing the two 
implementations around this behavior and if you have a strong preference for 
harmonizing toward the CPython implementation instead. Thanks.

----------
nosy: +brett.cannon

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue42129>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to