"""
API operations allowing clients to determine Galaxy instance's capabilities
and configuration settings.
"""
import json
import logging
import os
from galaxy.managers import configuration, users
from galaxy.queue_worker import send_control_task
from galaxy.web import (
_future_expose_api as expose_api,
_future_expose_api_anonymous_and_sessionless as expose_api_anonymous_and_sessionless,
require_admin
)
from galaxy.web.base.controller import BaseAPIController
log = logging.getLogger(__name__)
[docs]class ConfigurationController(BaseAPIController):
[docs] def __init__(self, app):
super(ConfigurationController, self).__init__(app)
self.config_serializer = configuration.ConfigSerializer(app)
self.admin_config_serializer = configuration.AdminConfigSerializer(app)
self.user_manager = users.UserManager(app)
[docs] @expose_api
def whoami(self, trans, **kwd):
"""
GET /api/whoami
Return information about the current authenticated user.
:returns: dictionary with user information
:rtype: dict
"""
current_user = self.user_manager.current_user(trans)
rval = None
if current_user: # None for master API key for instance
rval = current_user.to_dict()
return rval
[docs] @expose_api_anonymous_and_sessionless
def index(self, trans, **kwd):
"""
GET /api/configuration
Return an object containing exposable configuration settings.
Note: a more complete list is returned if the user is an admin.
"""
is_admin = trans.user_is_admin()
serialization_params = self._parse_serialization_params(kwd, 'all')
return self.get_config_dict(trans, is_admin, **serialization_params)
[docs] @expose_api_anonymous_and_sessionless
def version(self, trans, **kwds):
"""
GET /api/version
Return a description of the major version of Galaxy (e.g. 15.03).
:rtype: dict
:returns: dictionary with major version keyed on 'version_major'
"""
extra = {}
try:
version_file = os.environ.get("GALAXY_VERSION_JSON_FILE", self.app.container_finder.app_info.galaxy_root_dir + "/version.json")
with open(version_file, "r") as f:
extra = json.load(f)
except Exception:
pass
return {"version_major": self.app.config.version_major, "extra": extra}
[docs] def get_config_dict(self, trans, return_admin=False, view=None, keys=None, default_view='all'):
"""
Return a dictionary with (a subset of) current Galaxy settings.
If `return_admin` also include a subset of more sensitive keys.
Pass in `view` (String) and comma seperated list of keys to control which
configuration settings are returned.
"""
serializer = self.config_serializer
if return_admin:
# TODO: this should probably just be under a different route: 'admin/configuration'
serializer = self.admin_config_serializer
serialized = serializer.serialize_to_view(self.app.config, view=view, keys=keys, default_view=default_view)
return serialized
[docs] @expose_api
@require_admin
def decode_id(self, trans, encoded_id, **kwds):
"""Decode a given id."""
decoded_id = None
# Handle the special case for library folders
if ((len(encoded_id) % 16 == 1) and encoded_id.startswith('F')):
decoded_id = trans.security.decode_id(encoded_id[1:])
else:
decoded_id = trans.security.decode_id(encoded_id)
return {"decoded_id": decoded_id}
def _tool_conf_to_dict(conf):
return dict(
config_filename=conf['config_filename'],
tool_path=conf['tool_path'],
)