Exemple #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)
Exemple #2
0
    def test_from_dict_missing_serializer_field(self):
        manifest_deps = {}

        with self.assertRaises(MLIOPackWrongFormat):
            PackManifestSlot.from_dict(
                'nice slot', {
                    'serialized_sha256_hash': 'ahash',
                    'dependencies': ['module-version:themodule-==1.1.0']
                },
                manifest_dependencies=manifest_deps)
Exemple #3
0
    def test_to_dict(self):
        ser = GenericMLModelsSerializer()

        slot = PackManifestSlot(slot_key='nice slot',
                                serialized_sha256_hash='ahash',
                                serializer=ser,
                                dependencies=self.manifest_deps_by_id.values())

        self.assertEqual(
            slot.to_dict(), {
                'serializer': 'generic-ml-models',
                'serialized_sha256_hash': 'ahash',
                'dependencies': ['module-version:themodule-==1.1.0']
            })
Exemple #4
0
    def test_ctor_with_wrong_dep_types(self):
        ser = GenericMLModelsSerializer()

        with self.assertRaises(TypeError):
            PackManifestSlot(slot_key='key',
                             serializer=ser,
                             serialized_sha256_hash='ahash',
                             dependencies=['themodule-=1.1.0'])
Exemple #5
0
    def test_ctor_empty(self):
        ser = GenericMLModelsSerializer()

        slot = PackManifestSlot(slot_key='key',
                                serializer=ser,
                                serialized_sha256_hash='ahash')
        self.assertEqual(slot.slot_key, 'key')
        self.assertIs(slot.serializer, ser)
        self.assertDictEqual(slot.dependencies, {})
        self.assertEqual(slot.pack_object, 'ahash.slot')
Exemple #6
0
 def test_ctor_with_dependencies(self):
     ser = GenericMLModelsSerializer()
     slot = PackManifestSlot(slot_key='key',
                             serializer=ser,
                             serialized_sha256_hash='ahash',
                             dependencies=self.manifest_deps_by_id.values())
     self.assertEqual(slot.slot_key, 'key')
     self.assertIs(slot.serializer, ser)
     self.assertEqual(slot.serialized_sha256_hash, 'ahash')
     self.assertDictEqual(slot.dependencies, self.manifest_deps_by_id)
     self.assertEqual(slot.pack_object, 'ahash.slot')
Exemple #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'
            ])
Exemple #8
0
    def test_from_dict(self):

        slot = PackManifestSlot.from_dict(
            'nice slot', {
                'serializer': 'generic-ml-models',
                'serialized_sha256_hash': 'ahash',
                'dependencies': ['module-version:themodule-==1.1.0']
            },
            manifest_dependencies=self.manifest_deps_by_id)

        self.assertEqual(slot.slot_key, 'nice slot')
        self.assertIsInstance(slot.serializer, GenericMLModelsSerializer)
        self.assertDictEqual(slot.dependencies, self.manifest_deps_by_id)
        self.assertEqual(slot.pack_object, 'ahash.slot')
        self.assertEqual(slot.serialized_sha256_hash, 'ahash')