本文整理汇总了Python中tvb.core.entities.file.files_helper.FilesHelper.get_images_folder方法的典型用法代码示例。如果您正苦于以下问题:Python FilesHelper.get_images_folder方法的具体用法?Python FilesHelper.get_images_folder怎么用?Python FilesHelper.get_images_folder使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类tvb.core.entities.file.files_helper.FilesHelper
的用法示例。
在下文中一共展示了FilesHelper.get_images_folder方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: TestFigureService
# 需要导入模块: from tvb.core.entities.file.files_helper import FilesHelper [as 别名]
# 或者: from tvb.core.entities.file.files_helper.FilesHelper import get_images_folder [as 别名]
class TestFigureService(TransactionalTestCase):
"""
Tests for the figure service
"""
def transactional_setup_method(self):
self.figure_service = FigureService()
self.user = TestFactory.create_user()
self.project = TestFactory.create_project(admin=self.user)
self.files_helper = FilesHelper()
def transactional_teardown_method(self):
self.delete_project_folders()
def assertCanReadImage(self, image_path):
try:
Image.open(image_path).load()
except (IOError, ValueError):
raise AssertionError("Could not open %s as a image" % image_path)
def store_test_png(self):
self.figure_service.store_result_figure(self.project, self.user, "png", IMG_DATA, image_name="test-figure")
def retrieve_images(self):
figures_by_session, _ = self.figure_service.retrieve_result_figures(self.project, self.user)
# flatten image session grouping
figures = []
for fg in figures_by_session.itervalues():
figures.extend(fg)
return figures
def test_store_image(self):
self.store_test_png()
def test_store_image_from_operation(self):
# test that image can be retrieved from operation
test_operation = TestFactory.create_operation(test_user=self.user, test_project=self.project)
self.figure_service.store_result_figure(self.project, self.user, "png",
IMG_DATA, operation_id=test_operation.id)
figures = dao.get_figures_for_operation(test_operation.id)
assert 1 == len(figures)
image_path = self.files_helper.get_images_folder(self.project.name)
image_path = os.path.join(image_path, figures[0].file_path)
self.assertCanReadImage(image_path)
def test_store_and_retrieve_image(self):
self.store_test_png()
figures = self.retrieve_images()
assert 1 == len(figures)
image_path = utils.url2path(figures[0].file_path)
self.assertCanReadImage(image_path)
def test_load_figure(self):
self.store_test_png()
figures = self.retrieve_images()
self.figure_service.load_figure(figures[0].id)
def test_edit_figure(self):
session_name = 'the altered ones'
name = 'altered'
self.store_test_png()
figures = self.retrieve_images()
self.figure_service.edit_result_figure(figures[0].id, session_name=session_name, name=name)
figures_by_session, _ = self.figure_service.retrieve_result_figures(self.project, self.user)
assert [session_name] == figures_by_session.keys()
assert name == figures_by_session.values()[0][0].name
def test_remove_figure(self):
self.store_test_png()
figures = self.retrieve_images()
assert 1 == len(figures)
self.figure_service.remove_result_figure(figures[0].id)
figures = self.retrieve_images()
assert 0 == len(figures)
示例2: __init__
# 需要导入模块: from tvb.core.entities.file.files_helper import FilesHelper [as 别名]
# 或者: from tvb.core.entities.file.files_helper.FilesHelper import get_images_folder [as 别名]
class FigureService:
"""
Service layer for Figure entities.
"""
_TYPE_PNG = "png"
_TYPE_SVG = "svg"
_BRANDING_BAR_PNG = os.path.join(os.path.dirname(__file__), "resources", "branding_bar.png")
_BRANDING_BAR_SVG = os.path.join(os.path.dirname(__file__), "resources", "branding_bar.svg")
_DEFAULT_SESSION_NAME = "Default"
_DEFAULT_IMAGE_FILE_NAME = "snapshot."
def __init__(self):
self.logger = get_logger(self.__class__.__module__)
self.file_helper = FilesHelper()
def _write_png(self, store_path, export_data):
img_data = base64.b64decode(export_data) # decode the image
final_image = Image.open(StringIO(img_data)) # place it in a PIL stream
branding_bar = Image.open(FigureService._BRANDING_BAR_PNG) # place the branding bar over
final_image.paste(branding_bar, (0, final_image.size[1] - branding_bar.size[1]), branding_bar)
final_image.save(store_path) # store to disk as PNG
def _write_svg(self, store_path, export_data):
dom = xml.dom.minidom.parseString(export_data)
figureSvg = dom.getElementsByTagName('svg')[0] # get the original image
dom = xml.dom.minidom.parse(FigureService._BRANDING_BAR_SVG)
try:
width = float(figureSvg.getAttribute('width').replace('px', ''))
height = float(figureSvg.getAttribute('height').replace('px', ''))
except ValueError: # defaults when dimensions are not given
width = 1024
height = 768
figureSvg.setAttribute("width", str(width))
figureSvg.setAttribute("height", str(height))
finalSvg = dom.createElement('svg') # prepare the final svg
brandingSvg = dom.getElementsByTagName('svg')[0] # get the branding bar
brandingSvg.setAttribute("y", str(height)) # position it below the figure
height += float(brandingSvg.getAttribute('height').replace('px', '')) # increase original height with branding bar's height
finalSvg.setAttribute("width", str(width)) # same width as original figure
finalSvg.setAttribute("height", str(height))
finalSvg.appendChild(figureSvg) # add the image
finalSvg.appendChild(brandingSvg) # and the branding bar
# Generate path where to store image
with open(store_path, 'w') as dest:
finalSvg.writexml(dest) # store to disk
def _image_path(self, project_name, img_type):
"Generate path where to store image"
images_folder = self.file_helper.get_images_folder(project_name)
file_name = FigureService._DEFAULT_IMAGE_FILE_NAME + img_type
return utils.get_unique_file_name(images_folder, file_name)
@staticmethod
def _generate_image_name(project, user, operation, image_name):
if not image_name:
if operation is not None:
# create a name based on the operation that created the image
# e.g. TVB-Algo-Name-354
image_name = operation.algorithm.name.replace(' ', '-')
else:
# default to a generic name
image_name = "figure"
figure_count = dao.get_figure_count(project.id, user.id) + 1
return 'TVB-%s-%s' % (image_name, figure_count)
def store_result_figure(self, project, user, img_type, export_data, image_name=None, operation_id=None):
"""
Store into a file, Result Image and reference in DB.
"""
store_path, file_name = self._image_path(project.name, img_type)
if img_type == FigureService._TYPE_PNG: # PNG file from canvas
self._write_png(store_path, export_data)
elif img_type == FigureService._TYPE_SVG: # SVG file from svg viewer
self._write_svg(store_path, export_data)
if operation_id:
operation = dao.get_operation_by_id(operation_id)
else:
operation = None
operation_id = None
image_name = self._generate_image_name(project, user, operation, image_name)
# Store entity into DB
#.........这里部分代码省略.........
示例3: ImportService
# 需要导入模块: from tvb.core.entities.file.files_helper import FilesHelper [as 别名]
# 或者: from tvb.core.entities.file.files_helper.FilesHelper import get_images_folder [as 别名]
#.........这里部分代码省略.........
def _store_imported_datatypes_in_db(self, project, all_datatypes, dt_burst_mappings, burst_ids_mapping):
def by_time(dt):
return dt.create_date or datetime.now()
if burst_ids_mapping is None:
burst_ids_mapping = {}
if dt_burst_mappings is None:
dt_burst_mappings = {}
all_datatypes.sort(key=by_time)
for datatype in all_datatypes:
old_burst_id = dt_burst_mappings.get(datatype.gid)
if old_burst_id is not None:
datatype.fk_parent_burst = burst_ids_mapping[old_burst_id]
datatype_allready_in_tvb = dao.get_datatype_by_gid(datatype.gid)
if not datatype_allready_in_tvb:
# Compute disk size. Similar to ABCAdapter._capture_operation_results.
# No need to close the h5 as we have not written to it.
associated_file = os.path.join(datatype.storage_path, datatype.get_storage_file_name())
datatype.disk_size = FilesHelper.compute_size_on_disk(associated_file)
self.store_datatype(datatype)
else:
FlowService.create_link([datatype_allready_in_tvb.id], project.id)
def _store_imported_images(self, project):
"""
Import all images from project
"""
images_root = self.files_helper.get_images_folder(project.name)
# for file_name in os.listdir(images_root):
for root, _, files in os.walk(images_root):
for file_name in files:
if file_name.endswith(FilesHelper.TVB_FILE_EXTENSION):
self._populate_image(os.path.join(root, file_name), project.id)
def import_project_operations(self, project, import_path, dt_burst_mappings=None, burst_ids_mapping=None):
"""
This method scans provided folder and identify all operations that needs to be imported
"""
op_paths = self._append_tmp_to_folders_containing_operations(import_path)
operations = self._load_operations_from_paths(project, op_paths)
imported_operations = []
datatypes = []
# Here we process each operation found
for operation in operations:
self.logger.debug("Importing operation " + str(operation))
old_operation_folder, _ = os.path.split(operation.import_file)
operation_entity, datatype_group = self.__import_operation(operation)
# Rename operation folder with the ID of the stored operation
new_operation_path = FilesHelper().get_operation_folder(project.name, operation_entity.id)
if old_operation_folder != new_operation_path:
# Delete folder of the new operation, otherwise move will fail
shutil.rmtree(new_operation_path)
shutil.move(old_operation_folder, new_operation_path)
operation_datatypes = self._load_datatypes_from_operation_folder(new_operation_path, operation_entity,
datatype_group)
示例4: __init__
# 需要导入模块: from tvb.core.entities.file.files_helper import FilesHelper [as 别名]
# 或者: from tvb.core.entities.file.files_helper.FilesHelper import get_images_folder [as 别名]
#.........这里部分代码省略.........
result["create"] = string2date(str(one_op[6]))
else:
result["create"] = one_op[6]
if type(one_op[7]) in (str, unicode):
result["start"] = string2date(str(one_op[7]))
else:
result["start"] = one_op[7]
if type(one_op[8]) in (str, unicode):
result["complete"] = string2date(str(one_op[8]))
else:
result["complete"] = one_op[8]
if result["complete"] is not None and result["start"] is not None:
result["duration"] = format_timedelta(result["complete"] - result["start"])
result["status"] = one_op[9]
result["additional"] = one_op[10]
result["visible"] = True if one_op[11] > 0 else False
result['operation_tag'] = one_op[12]
result['figures'] = None
if not result['group']:
datatype_results = dao.get_results_for_operation(result['id'])
result['results'] = []
for dt in datatype_results:
dt_loaded = ABCAdapter.load_entity_by_gid(dt.gid)
if dt_loaded:
result['results'].append(dt_loaded)
else:
self.logger.warn("Could not retrieve datatype %s" % str(dt))
operation_figures = dao.get_figures_for_operation(result['id'])
# Compute the full path to the figure / image on disk
for figure in operation_figures:
figures_folder = self.structure_helper.get_images_folder(figure.project.name)
figure_full_path = os.path.join(figures_folder, figure.file_path)
# Compute the path available from browser
figure.figure_path = utils.path2url_part(figure_full_path)
result['figures'] = operation_figures
else:
result['results'] = None
operations.append(result)
except Exception:
## We got an exception when processing one Operation Row. We will continue with the rest of the rows.
self.logger.exception("Could not prepare operation for display:" + str(one_op))
return selected_project, total_ops_nr, operations, pages_no
def retrieve_projects_for_user(self, user_id, current_page=1):
"""
Return a list with all Projects visible for current user.
"""
start_idx = PROJECTS_PAGE_SIZE * (current_page - 1)
total = dao.get_projects_for_user(user_id, is_count=True)
available_projects = dao.get_projects_for_user(user_id, start_idx, PROJECTS_PAGE_SIZE)
pages_no = total // PROJECTS_PAGE_SIZE + (1 if total % PROJECTS_PAGE_SIZE else 0)
for prj in available_projects:
fns, sta, err, canceled, pending = dao.get_operation_numbers(prj.id)
prj.operations_finished = fns
prj.operations_started = sta
prj.operations_error = err
prj.operations_canceled = canceled
prj.operations_pending = pending
prj.disk_size = dao.get_project_disk_size(prj.id)
prj.disk_size_human = format_bytes_human(prj.disk_size)
self.logger.debug("Displaying " + str(len(available_projects)) + " projects in UI for user " + str(user_id))
示例5: __init__
# 需要导入模块: from tvb.core.entities.file.files_helper import FilesHelper [as 别名]
# 或者: from tvb.core.entities.file.files_helper.FilesHelper import get_images_folder [as 别名]
class FigureService:
"""
Service layer for Figure entities.
"""
_TYPE_PNG = "png"
_TYPE_SVG = "svg"
_BRANDING_BAR_PNG = os.path.join(os.path.dirname(__file__), "resources", "branding_bar.png")
_BRANDING_BAR_SVG = os.path.join(os.path.dirname(__file__), "resources", "branding_bar.svg")
_DEFAULT_SESSION_NAME = "Default"
_DEFAULT_IMAGE_FILE_NAME = "snapshot."
def __init__(self):
self.logger = get_logger(self.__class__.__module__)
self.file_helper = FilesHelper()
def store_result_figure(self, project, user, img_type, operation_id, export_data):
"""
Store into a file, Result Image and reference in DB.
"""
# Generate path where to store image
store_path = self.file_helper.get_images_folder(project.name, operation_id)
store_path = utils.get_unique_file_name(store_path, FigureService._DEFAULT_IMAGE_FILE_NAME + img_type)[0]
file_path = os.path.split(store_path)[1]
if img_type == FigureService._TYPE_PNG: # PNG file from canvas
imgData = base64.b64decode(export_data) # decode the image
fakeImgFile = StringIO(imgData) # PIL.Image only opens from file, so fake one
origImg = Image.open(fakeImgFile)
brandingBar = Image.open(FigureService._BRANDING_BAR_PNG)
finalSize = (origImg.size[0], # original width
origImg.size[1] + brandingBar.size[1]) # original height + brandingBar height
finalImg = Image.new("RGBA", finalSize)
finalImg.paste(origImg, (0, 0)) # add the original image
finalImg.paste(brandingBar, (0, origImg.size[1])) # add the branding bar, below the original
# the extra width will be discarded
finalImg.save(store_path) # store to disk
elif img_type == FigureService._TYPE_SVG: # SVG file from svg viewer
dom = xml.dom.minidom.parseString(export_data)
figureSvg = dom.getElementsByTagName('svg')[0] # get the original image
dom = xml.dom.minidom.parse(FigureService._BRANDING_BAR_SVG)
brandingSvg = dom.getElementsByTagName('svg')[0] # get the branding bar
brandingSvg.setAttribute("y", figureSvg.getAttribute("height")) # position it below the figure
finalSvg = dom.createElement('svg') # prepare the final svg
width = figureSvg.getAttribute('width').replace('px', '') # same width as original figure
finalSvg.setAttribute("width", width)
height = float(figureSvg.getAttribute('height').replace('px', '')) # increase original height with
height += float(brandingSvg.getAttribute('height').replace('px', '')) # branding bar's height
finalSvg.setAttribute("height", str(height))
finalSvg.appendChild(figureSvg) # add the image
finalSvg.appendChild(brandingSvg) # and the branding bar
# Generate path where to store image
dest = open(store_path, 'w')
finalSvg.writexml(dest) # store to disk
dest.close()
operation = dao.get_operation_by_id(operation_id)
file_name = 'TVB-%s-%s' % (operation.algorithm.name.replace(' ', '-'), operation_id) # e.g. TVB-Algo-Name-352
# Store entity into DB
entity = model.ResultFigure(operation_id, user.id, project.id, FigureService._DEFAULT_SESSION_NAME,
file_name, file_path, img_type)
entity = dao.store_entity(entity)
# Load instance from DB to have lazy fields loaded
figure = dao.load_figure(entity.id)
# Write image meta data to disk
self.file_helper.write_image_metadata(figure)
# Force writing operation meta data on disk.
# This is important later for operation import
self.file_helper.write_operation_metadata(operation)
def retrieve_result_figures(self, project, user, selected_session_name='all_sessions'):
"""
Retrieve from DB all the stored Displayer previews that belongs to the specified session. The
previews are for current user and project; grouped by session.
"""
result, previews_info = dao.get_previews(project.id, user.id, selected_session_name)
for name in result:
for figure in result[name]:
figures_folder = self.file_helper.get_images_folder(project.name, figure.operation.id)
figure_full_path = os.path.join(figures_folder, figure.file_path)
# Compute the path
figure.file_path = utils.path2url_part(figure_full_path)
return result, previews_info
#.........这里部分代码省略.........