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 tool_shed.webapp.controllers.hg
import logging
from mercurial.hgweb.hgwebdir_mod import hgwebdir
from mercurial.hgweb.request import wsgiapplication
from galaxy import web
from galaxy.exceptions import ObjectNotFound
from galaxy.webapps.base.controller import BaseUIController
from tool_shed.util.repository_util import get_repository_by_name_and_owner
log = logging.getLogger(__name__)
[docs]class HgController(BaseUIController):
[docs]    @web.expose
    def handle_request(self, trans, **kwd):
        # The os command that results in this method being called will look something like:
        # hg clone http://test@127.0.0.1:9009/repos/test/convert_characters1
        hgweb_config = trans.app.hgweb_config_manager.hgweb_config
        def make_web_app():
            hgwebapp = hgwebdir(hgweb_config.encode('utf-8'))
            return hgwebapp
        wsgi_app = wsgiapplication(make_web_app)
        repository = None
        path_info = kwd.get('path_info', None)
        if path_info and len(path_info.split('/')) == 2:
            owner, name = path_info.split('/')
            repository = get_repository_by_name_and_owner(trans.app, name, owner)
        if repository:
            if repository.deprecated:
                raise ObjectNotFound("Requested repository not found or deprecated.")
            cmd = kwd.get('cmd', None)
            if cmd == 'getbundle':
                times_downloaded = repository.times_downloaded
                times_downloaded += 1
                repository.times_downloaded = times_downloaded
                trans.sa_session.add(repository)
                trans.sa_session.flush()
        return wsgi_app