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)
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)
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'] })
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'])
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')
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')
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' ])
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')