예제 #1
0
    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"))
예제 #2
0
    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'))
예제 #3
0
    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"))