Ejemplo n.º 1
0
def test_collect_images_no_updated(result_path):
    result = _get_dummy_result(result_path)
    first_assets = collect_images.collect_images(result, [])
    assert len(first_assets) == 2

    second_assets = collect_images.collect_images(result, first_assets)
    assert first_assets == second_assets
Ejemplo n.º 2
0
def test_collect_images_updated(result_path):
    info_path = os.path.join(result_path, '.chainerui_images')
    result = _get_dummy_result(result_path)
    first_assets = collect_images.collect_images(result, [])
    assert len(first_assets) == 2

    with open(os.path.join(result_path, 'img1_3.png'), 'w') as f:
        f.write('text add')
    test_data2 = {
        'iteration': 3000,
        'epoch': 3,
        'images': {
            '0': 'img1_3.png',
        }
    }
    with open(info_path, 'r') as f:
        meta = json.load(f)
    meta.append(test_data2)
    with open(info_path, 'w') as f:
        json.dump(meta, f)

    second_assets = collect_images.collect_images(result, first_assets)
    assert len(second_assets) == 3

    actual_img3 = second_assets[2]
    assert len(actual_img3.content_list) == 1
    assert actual_img3.content_list[0].name == 'img1_3.png'
    assert actual_img3.content_list[0].tag == '0'
    assert actual_img3.content_list[0].content == b'text add'
    actual_img3_summary = json.loads(actual_img3.summary)
    assert 'iteration' in actual_img3_summary
    assert actual_img3_summary['iteration'] == 3000
    assert 'epoch' in actual_img3_summary
    assert actual_img3_summary['epoch'] == 3
Ejemplo n.º 3
0
def test_collect_images_new_meta(result_path):
    info_path = os.path.join(result_path, '.chainerui_images')
    result = _get_dummy_result(result_path)
    first_assets = collect_images.collect_images(result, [])
    assert len(first_assets) == 2

    test_data = [
        {
            'iteration': 1001,
            'epoch': 1,
            'images': OrderedDict([
                ('0', 'img1_1.png'),
                ('1', 'img1_2.png'),
            ])
        }
    ]
    with open(info_path, 'w') as f:
        json.dump(test_data, f)
    second_assets = collect_images.collect_images(result, first_assets)
    assert len(second_assets) == 1
    actual_img1 = second_assets[0]
    assert len(actual_img1.content_list) == 2
    assert actual_img1.content_list[0].name == 'img1_1.png'
    assert actual_img1.content_list[0].tag == '0'
    assert actual_img1.content_list[0].content == b'text'
    assert actual_img1.content_list[1].name == 'img1_2.png'
    assert actual_img1.content_list[1].tag == '1'
    assert actual_img1.content_list[1].content == b'text2'
    actual_img1_summary = json.loads(actual_img1.summary)
    assert 'iteration' in actual_img1_summary
    assert actual_img1_summary['iteration'] == 1001
    assert 'epoch' in actual_img1_summary
    assert actual_img1_summary['epoch'] == 1
Ejemplo n.º 4
0
def test_collect_images(result_path):
    result = _get_dummy_result(result_path)
    actual_list = collect_images.collect_images(result, [])

    assert len(actual_list) == 2
    actual_img1 = actual_list[0]
    assert len(actual_img1.content_list) == 2
    assert actual_img1.content_list[0].name == 'img1_1.png'
    assert actual_img1.content_list[0].tag == '0'
    assert actual_img1.content_list[0].content == b'text'
    assert actual_img1.content_list[1].name == 'img1_2.png'
    assert actual_img1.content_list[1].tag == '1'
    assert actual_img1.content_list[1].content == b'text2'
    actual_img1_summary = json.loads(actual_img1.summary)
    assert 'iteration' in actual_img1_summary
    assert actual_img1_summary['iteration'] == 1000
    assert 'epoch' in actual_img1_summary
    assert actual_img1_summary['epoch'] == 1

    actual_img2 = actual_list[1]
    actual_img2_summary = json.loads(actual_img2.summary)
    assert 'images' not in actual_img2_summary
    assert 'custom' in actual_img2_summary
    assert actual_img2_summary['custom'] == 'test'
    assert len(actual_img2.content_list) == 1
    assert actual_img2.content_list[0].name == 'img2.png'
    assert actual_img2.content_list[0].tag == 'seg'
    assert actual_img2.content_list[0].content == b'text3'
Ejemplo n.º 5
0
    def get(self, result_id=None, project_id=None):
        # project is not necessary to collect images,
        # but check parent project exists or not
        project = DB_SESSION.query(Project).\
            filter_by(id=project_id).\
            first()
        if project is None:
            return jsonify({
                'project': None,
                'message': 'No interface defined for URL.'
            }), 404

        result = DB_SESSION.query(Result).\
            filter_by(id=result_id).\
            filter_by(is_unregistered=False).\
            first()
        if result is None:
            return jsonify({
                'result': None,
                'message': 'No interface defined for URL.'
            }), 404

        images = collect_images(result.id)

        return jsonify({'images': images})
Ejemplo n.º 6
0
    def get(self, result_id=None, project_id=None, content_id=None):
        # project is not necessary to collect assets,
        # but check parent project exists or not
        project = db.session.query(Project).\
            filter_by(id=project_id).\
            first()
        if project is None:
            return jsonify({
                'project': None,
                'message': 'No interface defined for URL.'
            }), 404

        result = db.session.query(Result).\
            filter_by(id=result_id).\
            filter_by(is_unregistered=False).\
            first()
        if result is None:
            return jsonify({
                'result': None,
                'message': 'No interface defined for URL.'
            }), 404

        if content_id is None:
            assets = db.session.query(Asset).\
                filter_by(result_id=result_id).\
                order_by(Asset.id).all()
            if assets is None:
                assets = []
            assets = collect_images(result, assets)
            assets_response = [asset.serialize for asset in assets]
            for asset in assets_response:
                for content in asset['contents']:
                    content['uri'] = self._make_content_uri(
                        project_id, result_id, content['id'])
            return jsonify({'assets': assets_response})

        # sent content binary directly
        bindata = db.session.query(Bindata).\
            filter_by(id=content_id).\
            first()
        if bindata is None:
            return jsonify({
                'asset': None,
                'message': 'No interface defined for URL.'
            }), 404
        return send_file(io.BytesIO(bindata.content),
                         mimetype=bindata.mimetype(),
                         as_attachment=True,
                         attachment_filename=bindata.name)
Ejemplo n.º 7
0
def test_collect_images_no_meta(result_path):
    os.remove(os.path.join(result_path, '.chainerui_images'))
    result = _get_dummy_result(result_path)

    actual_list = collect_images.collect_images(result, [])
    assert len(actual_list) == 0
Ejemplo n.º 8
0
    def test_collect_images(self):
        result = MagicMock()
        result.path_name = self._dir

        mock_filter_by = MagicMock()
        mock_filter_by.first.return_value = result
        mock_query = MagicMock()
        mock_query.filter_by.return_value = mock_filter_by
        mock_session = MagicMock()
        mock_session.query.return_value = mock_query

        with patch('chainerui.tasks.collect_images.DB_SESSION', mock_session):
            collect_images.collect_images(0)

        img1_1_path = os.path.join(self._dir, 'img1_1.png')
        open(img1_1_path, 'w').close()
        img1_2_path = os.path.join(self._dir, 'img1_2.png')
        open(img1_2_path, 'w').close()
        img1_3_path = os.path.join(self._dir, 'img1_3.png')
        open(img1_3_path, 'w').close()
        img2_path = os.path.join(self._dir, 'img2.png')
        open(img2_path, 'w').close()

        test_data = [{
            'iteration': 1000,
            'epoch': 1,
            'images': {
                '0': [img1_1_path],
                '1': [img1_2_path, img1_3_path],
            }
        }, {
            'iteration': 2000,
            'epoch': 2,
            'custom': 'test',
            'images': {
                'seg': [img2_path],
            }
        }]
        with open(os.path.join(self._dir, '.chainerui_images'), 'w') as f:
            json.dump(test_data, f)

        with patch('chainerui.tasks.collect_images.DB_SESSION', mock_session):
            actual_list = collect_images.collect_images(0)

        assert len(actual_list) == 2
        actual_img1 = actual_list[0]
        assert len(actual_img1['contents']) == 2
        assert '0' in actual_img1['contents']
        assert len(actual_img1['contents']['0']) == 1
        img1_1_str = collect_images._make_src_tag(
            collect_images._serialize(img1_1_path))
        assert actual_img1['contents']['0'][0] == img1_1_str
        assert '1' in actual_img1['contents']
        assert len(actual_img1['contents']['1']) == 2
        img1_2_0_str = collect_images._make_src_tag(
            collect_images._serialize(img1_2_path))
        assert actual_img1['contents']['1'][0] == img1_2_0_str
        img1_2_1_str = collect_images._make_src_tag(
            collect_images._serialize(img1_3_path))
        assert actual_img1['contents']['1'][1] == img1_2_1_str
        assert 'iteration' in actual_img1['train_info']
        assert actual_img1['train_info']['iteration'] == 1000
        assert 'epoch' in actual_img1['train_info']
        assert actual_img1['train_info']['epoch'] == 1

        actual_img2 = actual_list[1]
        assert 'images' not in actual_img2['train_info']
        assert 'custom' in actual_img2['train_info']
        assert actual_img2['train_info']['custom'] == 'test'
Ejemplo n.º 9
0
    def test_collect_images_no_meta(self):
        os.remove(self._info_path)
        result = self._get_dummy_result()

        actual_list = collect_images.collect_images(result, [])
        assert len(actual_list) == 0