def test_resource_reader(self): """Test compliance with the get_resource_reader importlib API.""" buffer = BytesIO() with PackageExporter(buffer, verbose=False) as pe: # Layout looks like: # package # ├── one/ # │ ├── a.txt # │ ├── b.txt # │ ├── c.txt # │ └── three/ # │ ├── d.txt # │ └── e.txt # └── two/ # ├── f.txt # └── g.txt pe.save_text("one", "a.txt", "hello, a!") pe.save_text("one", "b.txt", "hello, b!") pe.save_text("one", "c.txt", "hello, c!") pe.save_text("one.three", "d.txt", "hello, d!") pe.save_text("one.three", "e.txt", "hello, e!") pe.save_text("two", "f.txt", "hello, f!") pe.save_text("two", "g.txt", "hello, g!") buffer.seek(0) importer = PackageImporter(buffer) reader_one = importer.get_resource_reader("one") with self.assertRaises(FileNotFoundError): reader_one.resource_path("a.txt") self.assertTrue(reader_one.is_resource("a.txt")) self.assertEqual( reader_one.open_resource("a.txt").getbuffer(), b"hello, a!") self.assertFalse(reader_one.is_resource("three")) reader_one_contents = list(reader_one.contents()) self.assertSequenceEqual(reader_one_contents, ["a.txt", "b.txt", "c.txt", "three"]) reader_two = importer.get_resource_reader("two") self.assertTrue(reader_two.is_resource("f.txt")) self.assertEqual( reader_two.open_resource("f.txt").getbuffer(), b"hello, f!") reader_two_contents = list(reader_two.contents()) self.assertSequenceEqual(reader_two_contents, ["f.txt", "g.txt"]) reader_one_three = importer.get_resource_reader("one.three") self.assertTrue(reader_one_three.is_resource("d.txt")) self.assertEqual( reader_one_three.open_resource("d.txt").getbuffer(), b"hello, d!") reader_one_three_contenst = list(reader_one_three.contents()) self.assertSequenceEqual(reader_one_three_contenst, ["d.txt", "e.txt"]) self.assertIsNone(importer.get_resource_reader("nonexistent_package"))
def test_resource_reader(self): """Test compliance with the get_resource_reader importlib API.""" buffer = BytesIO() with PackageExporter(buffer, verbose=False) as pe: # Layout looks like: # package # ├── one/ # │ ├── a.txt # │ ├── b.txt # │ ├── c.txt # │ └── three/ # │ ├── d.txt # │ └── e.txt # └── two/ # ├── f.txt # └── g.txt pe.save_text('one', 'a.txt', 'hello, a!') pe.save_text('one', 'b.txt', 'hello, b!') pe.save_text('one', 'c.txt', 'hello, c!') pe.save_text('one.three', 'd.txt', 'hello, d!') pe.save_text('one.three', 'e.txt', 'hello, e!') pe.save_text('two', 'f.txt', 'hello, f!') pe.save_text('two', 'g.txt', 'hello, g!') buffer.seek(0) importer = PackageImporter(buffer) reader_one = importer.get_resource_reader('one') with self.assertRaises(FileNotFoundError): reader_one.resource_path('a.txt') self.assertTrue(reader_one.is_resource('a.txt')) self.assertEqual( reader_one.open_resource('a.txt').getbuffer(), b'hello, a!') self.assertFalse(reader_one.is_resource('three')) reader_one_contents = list(reader_one.contents()) self.assertSequenceEqual(reader_one_contents, ['a.txt', 'b.txt', 'c.txt', 'three']) reader_two = importer.get_resource_reader('two') self.assertTrue(reader_two.is_resource('f.txt')) self.assertEqual( reader_two.open_resource('f.txt').getbuffer(), b'hello, f!') reader_two_contents = list(reader_two.contents()) self.assertSequenceEqual(reader_two_contents, ['f.txt', 'g.txt']) reader_one_three = importer.get_resource_reader('one.three') self.assertTrue(reader_one_three.is_resource('d.txt')) self.assertEqual( reader_one_three.open_resource('d.txt').getbuffer(), b'hello, d!') reader_one_three_contenst = list(reader_one_three.contents()) self.assertSequenceEqual(reader_one_three_contenst, ['d.txt', 'e.txt']) self.assertIsNone(importer.get_resource_reader('nonexistent_package'))
def test_resource_reader(self): """Tests DirectoryReader as the base for get_resource_reader.""" filename = self.temp() with PackageExporter(filename, verbose=False) as pe: # Layout looks like: # package # ├── one/ # │ ├── a.txt # │ ├── b.txt # │ ├── c.txt # │ └── three/ # │ ├── d.txt # │ └── e.txt # └── two/ # ├── f.txt # └── g.txt pe.save_text("one", "a.txt", "hello, a!") pe.save_text("one", "b.txt", "hello, b!") pe.save_text("one", "c.txt", "hello, c!") pe.save_text("one.three", "d.txt", "hello, d!") pe.save_text("one.three", "e.txt", "hello, e!") pe.save_text("two", "f.txt", "hello, f!") pe.save_text("two", "g.txt", "hello, g!") zip_file = zipfile.ZipFile(filename, "r") with TemporaryDirectory() as temp_dir: zip_file.extractall(path=temp_dir) importer = PackageImporter(Path(temp_dir) / Path(filename).name) reader_one = importer.get_resource_reader("one") # Different behavior from still zipped archives resource_path = os.path.join(Path(temp_dir), Path(filename).name, "one", "a.txt") self.assertEqual(reader_one.resource_path("a.txt"), resource_path) self.assertTrue(reader_one.is_resource("a.txt")) self.assertEqual( reader_one.open_resource("a.txt").getbuffer(), b"hello, a!") self.assertFalse(reader_one.is_resource("three")) reader_one_contents = list(reader_one.contents()) reader_one_contents.sort() self.assertSequenceEqual(reader_one_contents, ["a.txt", "b.txt", "c.txt", "three"]) reader_two = importer.get_resource_reader("two") self.assertTrue(reader_two.is_resource("f.txt")) self.assertEqual( reader_two.open_resource("f.txt").getbuffer(), b"hello, f!") reader_two_contents = list(reader_two.contents()) reader_two_contents.sort() self.assertSequenceEqual(reader_two_contents, ["f.txt", "g.txt"]) reader_one_three = importer.get_resource_reader("one.three") self.assertTrue(reader_one_three.is_resource("d.txt")) self.assertEqual( reader_one_three.open_resource("d.txt").getbuffer(), b"hello, d!") reader_one_three_contents = list(reader_one_three.contents()) reader_one_three_contents.sort() self.assertSequenceEqual(reader_one_three_contents, ["d.txt", "e.txt"]) self.assertIsNone( importer.get_resource_reader("nonexistent_package"))