コード例 #1
0
    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)
コード例 #2
0
    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')))
コード例 #3
0
ファイル: tasks.py プロジェクト: almoisson/substra-backend
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
コード例 #4
0
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
コード例 #5
0
    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)
コード例 #6
0
    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!')
コード例 #7
0
    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')))
コード例 #8
0
    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
                        }
                    })
コード例 #9
0
 def test_create_directory(self):
     directory = './test/'
     create_directory(directory)
     self.assertTrue(os.path.exists(directory))
     shutil.rmtree(directory)