Ejemplo n.º 1
0
    def setUp(self):
        self.dependencies = [
            ModuleVersionContextDependency('themodule', '==1.1.0'),
            ModuleVersionContextDependency('anothermodule', '>=1.1.0,<=2.2.0')
        ]

        self.deps_by_id = {
            dep.dependency_id(): dep
            for dep in self.dependencies
        }
        self.slots = [
            PackManifestSlot(
                'slot1',
                serializer=GenericMLModelsSerializer(),
                serialized_sha256_hash='hash1',
                dependencies=[
                    self.deps_by_id['module-version:themodule-==1.1.0'], self.
                    deps_by_id['module-version:anothermodule-<=2.2.0,>=1.1.0']
                ]),
            PackManifestSlot(
                'slot2',
                serializer=GensimWord2VecModelsSerializer(),
                serialized_sha256_hash='hash2',
                dependencies=[
                    self.
                    deps_by_id['module-version:anothermodule-<=2.2.0,>=1.1.0']
                ])
        ]

        self.slots_by_id = {slot.slot_key: slot for slot in self.slots}

        with open(fixtures.file_path('manifest.json'), 'r') as f:
            self.manifest_dict = json.load(f)
Ejemplo n.º 2
0
    def test_ctor_invalid_version(self):

        with self.assertRaises(packaging.specifiers.InvalidSpecifier):
            ModuleVersionContextDependency("a module", "1.0.0")

        with self.assertRaises(packaging.specifiers.InvalidSpecifier):
            ModuleVersionContextDependency("a module", "wrong")
Ejemplo n.º 3
0
    def test_to_dict(self):

        # Empty context
        ctx_dep = ModuleVersionContextDependency("the module", "")
        self.assertDictEqual(
            ctx_dep.to_dict(), {
                "type": "module-version",
                "module_name": "the module",
                "version_specs": ""
            })

        # With single version
        ctx_dep = ModuleVersionContextDependency("the module", "==2.2.1")
        self.assertDictEqual(
            ctx_dep.to_dict(), {
                "type": "module-version",
                "module_name": "the module",
                "version_specs": "==2.2.1"
            })

        # With multi set
        ctx_dep = ModuleVersionContextDependency("the module",
                                                 "==2.2.1,<=3.0.0")
        self.assertDictEqual(
            ctx_dep.to_dict(), {
                "type": "module-version",
                "module_name": "the module",
                "version_specs": "==2.2.1,<=3.0.0"
            })
Ejemplo n.º 4
0
    def test_is_satisfied_empty_version_spec(self, mocked_f):

        # Empty context
        ctx_dep = ModuleVersionContextDependency("the module", "")

        mocked_f.return_value = packaging.version.Version('0.1.0')
        self.assertTrue(ctx_dep.is_satisfied())

        mocked_f.return_value = packaging.version.Version('1.1.0')
        self.assertTrue(ctx_dep.is_satisfied())

        mocked_f.return_value = packaging.version.Version('2.1.0')
        self.assertTrue(ctx_dep.is_satisfied())
Ejemplo n.º 5
0
    def test_ctor_empty_version(self):

        ctx_dep = ModuleVersionContextDependency(module_name='themodule',
                                                 version_specs='')

        self.assertEqual(ctx_dep.get_params(), {
            "module_name": "themodule",
            "version_specs": ""
        })
        self.assertIsInstance(ctx_dep.version_specs,
                              packaging.specifiers.SpecifierSet)
        self.assertEqual(str(ctx_dep.version_specs), '')

        # Check version compatibility with every version
        self.assertTrue(
            packaging.version.Version('0.0.0') in ctx_dep.version_specs)
Ejemplo n.º 6
0
    def test_load_unsatisfied_dependencies(self):

        with tempfile.TemporaryFile("w+") as tf:
            with Pack(tf) as pck:
                pck.dump('slot1', self.obj1k)

                # Hack to inject a dependency
                dep = ModuleVersionContextDependency('moduleone', '==1.1.0')
                pck.slots_info['slot1'].dependencies[dep.dependency_id()] = dep

                with mock.patch('mlio.io.context_dependencies.module_version.get_installed_module_version') \
                        as mocked_get_installed_module:
                    # Mock that dep is not satisfied
                    mocked_get_installed_module.side_effect = lambda m: {
                        'moduleone': '2.1.0'
                    }[m]

                    with self.assertRaises(MLIODependenciesNotSatisfied):
                        pck.load('slot1')
Ejemplo n.º 7
0
    def test_find_unsatisfied_dependencies(self):
        ser = GenericMLModelsSerializer()
        deps = [
            ModuleVersionContextDependency('moduleone', '==1.1.0'),
            ModuleVersionContextDependency('moduletwo', '~=1.2.0'),
        ]
        slot = PackManifestSlot(slot_key='key',
                                serializer=ser,
                                serialized_sha256_hash='ahash',
                                dependencies=deps)

        with mock.patch('mlio.io.context_dependencies.module_version.get_installed_module_version') \
                as mocked_get_installed_module:

            # Mock that everything is satisfied
            mocked_get_installed_module.side_effect = lambda m: {
                'moduleone': '1.1.0',
                'moduletwo': '1.2.0'
            }[m]
            self.assertListEqual(slot.find_unsatisfied_dependencies(), [])

            # Mock that one dep is not satisfied
            mocked_get_installed_module.side_effect = lambda m: {
                'moduleone': '1.2.0',
                'moduletwo': '1.2.5'
            }[m]
            self.assertListEqual(slot.find_unsatisfied_dependencies(),
                                 ['module-version:moduleone-==1.1.0'])

            # Mock that two deps are not satisfied
            mocked_get_installed_module.side_effect = lambda m: {
                'moduleone': '1.2.0',
                'moduletwo': '1.0.5'
            }[m]
            self.assertListEqual(slot.find_unsatisfied_dependencies(), [
                'module-version:moduleone-==1.1.0',
                'module-version:moduletwo-~=1.2.0'
            ])
Ejemplo n.º 8
0
    def test_from_dict_empty_version(self):

        # dict with empty version

        dep = ModuleVersionContextDependency.from_dict({
            'type': 'module-version',
            'module_name': 'the module',
            'version_specs': ''
        })
        self.assertEqual(dep.get_params(), {
            'module_name': 'the module',
            'version_specs': ''
        })
        self.assertEqual(dep.module_name, 'the module')
        self.assertEqual(dep.version_specs, '')
Ejemplo n.º 9
0
    def test_from_dict_full(self):

        # dict with empty version

        dep = ModuleVersionContextDependency.from_dict({
            "type":
            "module-version",
            "module_name":
            "the module",
            "version_specs":
            "==2.2.1"
        })
        self.assertEqual(dep.get_params(), {
            "module_name": "the module",
            "version_specs": "==2.2.1"
        })
        self.assertEqual(dep.module_name, 'the module')
        self.assertEqual(dep.version_specs, '==2.2.1')
Ejemplo n.º 10
0
    def test_is_satisfied_complex(self, mocked_f):
        # Empty context
        ctx_dep = ModuleVersionContextDependency("the module", ">=2.2,<4")

        mocked_f.return_value = packaging.version.Version('0.1.0')
        self.assertFalse(ctx_dep.is_satisfied())

        mocked_f.return_value = packaging.version.Version('2.2.0')
        self.assertTrue(ctx_dep.is_satisfied())

        mocked_f.return_value = packaging.version.Version('2.2.1')
        self.assertTrue(ctx_dep.is_satisfied())

        mocked_f.return_value = packaging.version.Version('2.2.2')
        self.assertTrue(ctx_dep.is_satisfied())

        mocked_f.return_value = packaging.version.Version('3.2.2')
        self.assertTrue(ctx_dep.is_satisfied())

        mocked_f.return_value = packaging.version.Version('4.0.1')
        self.assertFalse(ctx_dep.is_satisfied())
Ejemplo n.º 11
0
    def test_from_dict_wrong_types(self):

        # Dict without type
        with self.assertRaises(ValueError):
            ModuleVersionContextDependency.from_dict({})

        # Dict with wrong type
        with self.assertRaises(ValueError):
            ModuleVersionContextDependency.from_dict({'type': 'another-dep'})

        # Dict with missing module
        with self.assertRaises(TypeError):
            ModuleVersionContextDependency.from_dict(
                {'type': 'module-version'})

        # Dict with missing spec
        with self.assertRaises(TypeError):
            ModuleVersionContextDependency.from_dict({
                'type': 'module-version',
                'module_name': 'themodule'
            })
Ejemplo n.º 12
0
    def test_ctor_empty_parameters(self):

        with self.assertRaises(ValueError):
            ModuleVersionContextDependency('', '')
Ejemplo n.º 13
0
 def setUp(self):
     self.manifest_deps_by_id = {
         dep.dependency_id(): dep
         for dep in
         [ModuleVersionContextDependency('themodule', '==1.1.0')]
     }