Beispiel #1
0
    def test_serialize_simple(self):
        f = OxidizedFinder()

        m = OxidizedResource()
        m.name = "my_module"
        m.flavor = "module"
        m.in_memory_source = b"import io"
        f.add_resource(m)

        m = OxidizedResource()
        m.name = "module_b"
        m.flavor = "module"
        m.in_memory_bytecode = b"dummy bytecode"
        f.add_resource(m)

        serialized = f.serialize_indexed_resources()
        self.assertIsInstance(serialized, bytes)

        f2 = OxidizedFinder(resources_data=serialized)

        modules = {
            r.name: r
            for r in f2.indexed_resources() if r.flavor == "module"
        }
        self.assertEqual(len(modules), 2)

        self.assertIn("my_module", modules)
        self.assertIn("module_b", modules)

        self.assertEqual(modules["my_module"].in_memory_source, b"import io")
        self.assertEqual(modules["module_b"].in_memory_bytecode,
                         b"dummy bytecode")
Beispiel #2
0
    def test_add_resources(self):
        f = OxidizedFinder()
        a = OxidizedResource()
        a.name = "foo_a"
        a.flavor = "module"

        b = OxidizedResource()
        b.name = "foo_b"
        b.flavor = "module"

        f.add_resources([a, b])

        resources = [
            r for r in f.indexed_resources() if r.name in ("foo_a", "foo_b")
        ]
        self.assertEqual(len(resources), 2)
Beispiel #3
0
    def test_add_resource_module(self):
        f = OxidizedFinder()
        resource = OxidizedResource()
        resource.name = "my_module"
        resource.flavor = "module"

        source = b"print('hello from my_module')"
        code = compile(source, "my_module.py", "exec")
        bytecode = marshal.dumps(code)

        resource.in_memory_source = source
        resource.in_memory_bytecode = bytecode

        f.add_resource(resource)

        resources = [r for r in f.indexed_resources() if r.name == "my_module"]
        self.assertEqual(len(resources), 1)

        spec = f.find_spec("my_module", None)
        self.assertIsInstance(spec, importlib.machinery.ModuleSpec)
        self.assertEqual(spec.name, "my_module")
        self.assertIsNone(spec.loader_state)
        self.assertIsNone(spec.submodule_search_locations)

        self.assertEqual(f.get_source("my_module"), source.decode("utf-8"))
        self.assertEqual(f.get_code("my_module"), code)
Beispiel #4
0
    def test_resource_set_flavor(self):
        resource = OxidizedResource()

        for flavor in (
                "module",
                "none",
                "builtin",
                "frozen",
                "extension",
                "shared_library",
        ):
            resource.flavor = flavor
            self.assertEqual(resource.flavor, flavor)

        with self.assertRaises(TypeError):
            del resource.flavor

        with self.assertRaises(TypeError):
            resource.flavor = None

        with self.assertRaisesRegex(ValueError, "unknown resource flavor"):
            resource.flavor = "foo"