Warning
This document is for an old release of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.
Source code for galaxy.webapps.galaxy.controllers.shed_tool_static
import logging
import os
from galaxy import web
from galaxy.exceptions import RequestParameterInvalidException
from galaxy.util.path import (
join,
safe_contains,
)
from galaxy.webapps.base.controller import BaseUIController
log = logging.getLogger(__name__)
def _asset_exists_and_is_safe(repo_path, asset_path):
if not safe_contains(repo_path, asset_path):
raise RequestParameterInvalidException()
return os.path.exists(asset_path)
[docs]class ShedToolStatic(BaseUIController):
[docs] @web.expose
def index(self, trans, shed, owner, repo, tool, version, image_file):
"""
Open an image file that is contained in an installed tool shed repository or that is referenced by a URL for display. The
image can be defined in either a README.rst file contained in the repository or the help section of a Galaxy tool config that
is contained in the repository. The following image definitions are all supported. The former $PATH_TO_IMAGES is no longer
required, and is now ignored.
.. image:: https://raw.github.com/galaxy/some_image.png
.. image:: $PATH_TO_IMAGES/some_image.png
.. image:: /static/images/some_image.gif
.. image:: some_image.jpg
.. image:: /deep/some_image.png
"""
guid = "/".join((shed, "repos", owner, repo, tool, version))
tool = trans.app.toolbox.get_tool(guid)
repo_path = os.path.abspath(tool._repository_dir)
found_path = None
if "static/images" not in image_file:
asset_path = os.path.abspath(join(repo_path, "static", "images", image_file))
if _asset_exists_and_is_safe(repo_path, asset_path):
found_path = asset_path
if not found_path:
asset_path = os.path.abspath(join(repo_path, image_file))
if _asset_exists_and_is_safe(repo_path, asset_path):
found_path = asset_path
if found_path:
ext = os.path.splitext(image_file)[-1].lstrip(".")
if ext:
mime = trans.app.datatypes_registry.get_mimetype_by_extension(ext)
if mime:
trans.response.set_content_type(mime)
return open(found_path, "rb")
else:
raise RequestParameterInvalidException()