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