def test_put_model(self): model_content = self.model.read().encode() traintupleKey = compute_hash(model_content) model_hash = compute_hash(model_content, traintupleKey) model_type = 'model' subtuple = { 'key': model_hash, model_type: { 'hash': model_hash, 'traintupleKey': traintupleKey } } model_directory = os.path.join(self.subtuple_path, 'model') create_directory(model_directory) put_model(subtuple, self.subtuple_path, model_content) model_path = os.path.join(model_directory, traintupleKey) self.assertTrue(os.path.exists(model_path)) os.rename(model_path, model_path + '-local') with mock.patch('substrapp.models.Model.objects.get') as mget: mget.return_value = FakeModel(model_path + '-local') put_model(subtuple, self.subtuple_path, model_content) self.assertTrue(os.path.exists(model_path)) with mock.patch('substrapp.models.Model.objects.get') as mget: mget.return_value = FakeModel(model_path) with self.assertRaises(Exception): put_model({'model': { 'hash': 'fail-hash' }}, self.subtuple_path, model_content)
def test_put_opener(self): filepath = os.path.join(self.subtuple_path, self.script_filename) with open(filepath, 'w') as f: f.write(self.script.read()) self.assertTrue(os.path.exists(filepath)) opener_directory = os.path.join(self.subtuple_path, 'opener') create_directory(opener_directory) with mock.patch('substrapp.models.DataManager.objects.get') as mget: mget.return_value = FakeDataManager(filepath) # test fail with self.assertRaises(Exception): put_opener({'dataset': { 'openerHash': 'HASH' }}, self.subtuple_path) # test work put_opener({'dataset': { 'openerHash': get_hash(filepath) }}, self.subtuple_path) self.assertTrue( os.path.exists(os.path.join(opener_directory, 'opener.py')))
def build_subtuple_folders(subtuple): # create a folder named `subtuple['key']` in /medias/subtuple/ with 5 subfolders opener, data, model, pred, metrics subtuple_directory = get_subtuple_directory(subtuple) create_directory(subtuple_directory) for folder in ['opener', 'data', 'model', 'pred', 'metrics']: create_directory(path.join(subtuple_directory, folder)) return subtuple_directory
def build_subtuple_folders(subtuple): # create a folder named subtuple['key'] im /medias/subtuple with 5 folders opener, data, model, pred, metrics subtuple_directory = path.join(getattr(settings, 'MEDIA_ROOT'), 'subtuple', subtuple['key']) create_directory(subtuple_directory) for folder in ['opener', 'data', 'model', 'pred', 'metrics']: create_directory(path.join(subtuple_directory, folder)) return subtuple_directory
def test_put_models(self): model_content = self.model.read().encode() models_content = [model_content, model_content + b', -2.0'] traintupleKey = compute_hash(models_content[0]) model_hash = compute_hash(models_content[0], traintupleKey) traintupleKey2 = compute_hash(models_content[1]) model_hash2 = compute_hash(models_content[1], traintupleKey2) model_path = os.path.join(self.subtuple_path, 'model', traintupleKey) model_path2 = os.path.join(self.subtuple_path, 'model', traintupleKey2) model_type = 'inModels' subtuple = { model_type: [{ 'hash': model_hash, 'traintupleKey': traintupleKey }, { 'hash': model_hash2, 'traintupleKey': traintupleKey2 }] } model_directory = os.path.join(self.subtuple_path, 'model/') create_directory(model_directory) put_models(subtuple, self.subtuple_path, models_content) self.assertTrue(os.path.exists(model_path)) self.assertTrue(os.path.exists(model_path2)) os.rename(model_path, model_path + '-local') os.rename(model_path2, model_path2 + '-local') with mock.patch('substrapp.models.Model.objects.get') as mget: mget.side_effect = [ FakeModel(model_path + '-local'), FakeModel(model_path2 + '-local') ] put_models(subtuple, self.subtuple_path, models_content) self.assertTrue(os.path.exists(model_path)) self.assertTrue(os.path.exists(model_path2)) with mock.patch('substrapp.models.Model.objects.get') as mget: mget.return_value = FakeModel(model_path) with self.assertRaises(Exception): put_models({'inModels': [{ 'hash': 'hash' }]}, self.subtuple_path, model_content)
def test_create_directory(self): directory = './test/' create_directory(directory) self.assertTrue(os.path.exists(directory)) remove_subtuple_materials(directory) self.assertFalse(os.path.exists(directory)) # Remove a second time, it should not raise exception try: remove_subtuple_materials(directory) except Exception: self.fail( '`remove_subtuple_materials` raised Exception unexpectedly!')
def test_put_metric(self): filepath = os.path.join(self.subtuple_path, self.script_filename) with open(filepath, 'w') as f: f.write(self.script.read()) self.assertTrue(os.path.exists(filepath)) metrics_directory = os.path.join(self.subtuple_path, 'metrics/') create_directory(metrics_directory) put_metric(self.subtuple_path, FakeObjective(filepath)) self.assertTrue( os.path.exists(os.path.join(metrics_directory, 'metrics.py')))
def test_prepare_opener(self): filepath = os.path.join(self.subtuple_path, self.script_filename) with open(filepath, 'w') as f: f.write(self.script.read()) self.assertTrue(os.path.exists(filepath)) opener_checksum = get_hash(filepath) opener_directory = os.path.join(self.subtuple_path, 'opener') create_directory(opener_directory) with mock.patch('substrapp.models.DataManager.objects.get') as mget: mget.return_value = FakeDataManager(filepath) # test fail with self.assertRaises(Exception): prepare_opener(self.subtuple_path, {'dataset': { 'opener_checksum': 'HASH' }}) # test work prepare_opener(self.subtuple_path, { 'dataset': { 'key': 'some_key', 'opener_checksum': opener_checksum } }) opener_path = os.path.join(opener_directory, '__init__.py') self.assertTrue(os.path.exists(opener_path)) # test corrupted os.remove(opener_path) shutil.copyfile(filepath, opener_path) # Corrupted with open(opener_path, 'a+') as f: f.write('corrupted') with self.assertRaises(Exception): prepare_opener( self.subtuple_path, { 'dataset': { 'key': 'some_key', 'opener_checksum': opener_checksum } })
def test_create_directory(self): directory = './test/' create_directory(directory) self.assertTrue(os.path.exists(directory)) shutil.rmtree(directory)