Changeset - 70f645fa97cc
[Not reviewed]
default
0 3 0
Marcin Kuzminski - 15 years ago 2010-05-24 22:18:15
marcin@python-works.com
Moved repo creation to admin/repos, as part of crud controller. Now repo creation is based on a form, which can be auto filled with data from 404 page. Fixed the error controller to properly give the repo name.
3 files changed with 42 insertions and 15 deletions:
0 comments (0 inline, 0 general)
pylons_app/controllers/error.py
Show inline comments
 
@@ -5,38 +5,45 @@ import paste.fileapp
 
from pylons import tmpl_context as c, app_globals as g, request, config
 
from pylons.controllers.util import forward
 
from pylons.i18n.translation import _
 
from pylons_app.lib.base import BaseController, render
 
from pylons.middleware import  media_path
 
from pylons_app.lib.utils import check_repo
 
from pylons_app.lib.filters import clean_repo
 
log = logging.getLogger(__name__)
 

	
 
log = logging.getLogger(__name__)
 
class ErrorController(BaseController):
 
    """
 
    Generates error documents as and when they are required.
 

	
 
    The ErrorDocuments middleware forwards to ErrorController when error
 
    related status codes are returned from the application.
 

	
 
    This behaviour can be altered by changing the parameters to the
 
    ErrorDocuments middleware in your config/middleware.py file.
 
    """
 
#    def __before__(self):
 
#        super(ErrorController, self).__before__()
 
        
 
    def document(self):
 
        resp = request.environ.get('pylons.original_response')
 
        
 
        log.debug(resp.status)
 

	
 
        e = request.environ
 
        c.serv_p = r'%(protocol)s://%(host)s/' % {
 
                                                'protocol': e.get('wsgi.url_scheme'),
 
                                                'host':e.get('HTTP_HOST'),
 
                                                }
 

	
 
                        
 
        if resp.status_int == 404:
 
            if check_repo(c.repo_name, g.base_path):
 
            org_e = request.environ.get('pylons.original_request').environ
 
            c.repo_name = repo_name = org_e['PATH_INFO'].split('/')[1]
 
            c.repo_name_cleaned = clean_repo(c.repo_name)
 
            if check_repo(repo_name, g.base_path):
 
                return render('/errors/error_404.html')
 
                
 
        c.error_message = cgi.escape(request.GET.get('code', str(resp.status)))
 
        c.error_explanation = self.get_error_explanation(resp.status_int)
 

	
 
        #redirect to when error with given seconds
pylons_app/controllers/repos.py
Show inline comments
 
from pylons import request, response, session, tmpl_context as c, url, \
 
    app_globals as g
 
from pylons.controllers.util import abort, redirect
 
from pylons_app.lib.base import BaseController, render
 
from pylons_app.lib.utils import check_repo, invalidate_cache
 
import logging
 
import os
 
from pylons import request, response, session, tmpl_context as c, url, app_globals as g
 
from pylons.controllers.util import abort, redirect
 
from pylons_app.lib import auth
 
from pylons_app.lib.base import BaseController, render
 
from pylons_app.model.db import Users, UserLogs
 
from pylons_app.model.hg_model import HgModel
 
from operator import itemgetter
 
import shutil
 
from pylons_app.lib.utils import invalidate_cache
 
from pylons_app.lib.filters import clean_repo
 
log = logging.getLogger(__name__)
 

	
 
class ReposController(BaseController):
 
    """REST Controller styled on the Atom Publishing Protocol"""
 
    # To properly map this controller, ensure your config/routing.py
 
    # file has a resource setup:
 
@@ -28,16 +26,37 @@ class ReposController(BaseController):
 
        c.repos_list = c.cached_repo_list
 
        return render('admin/repos/repos.html')
 
    
 
    def create(self):
 
        """POST /repos: Create a new item"""
 
        # url('repos')
 
        name = request.POST.get('name')
 

	
 
        try:
 
            self._create_repo(name)
 
            #clear our cached list for refresh with new repo
 
            invalidate_cache('cached_repo_list')
 
        except Exception as e:
 
            log.error(e)
 
        
 
        return redirect('repos')
 
        
 
    def _create_repo(self, repo_name):        
 
        repo_path = os.path.join(g.base_path, repo_name)
 
        if check_repo(repo_name, g.base_path):
 
            log.info('creating repo %s in %s', repo_name, repo_path)
 
            from vcs.backends.hg import MercurialRepository
 
            MercurialRepository(repo_path, create=True)
 
                        
 

	
 
    def new(self, format='html'):
 
        """GET /repos/new: Form to create a new item"""
 
        # url('new_repo')
 
        new_repo = request.GET.get('repo', '')
 
        c.new_repo = clean_repo(new_repo)
 

	
 
        return render('admin/repos/repo_add.html')
 

	
 
    def update(self, id):
 
        """PUT /repos/id: Update an existing item"""
 
        # Forms posted to this method should contain a hidden field:
 
        #    <input type="hidden" name="_method" value="PUT" />
 
        # Or using helpers:
pylons_app/templates/errors/error_404.html
Show inline comments
 
@@ -19,16 +19,17 @@ from pylons_app.lib import filters
 
</%def>
 
<%def name="js()">
 

	
 
</%def>
 
<%def name="main()">
 

	
 
    <h2 class="no-link no-border">Not Found</h2>
 
    <p class="normal">The specified repository "${c.repo_name}" is unknown, sorry.</p>
 
    <h2 class="no-link no-border">${_('Not Found')}</h2>
 
    <p class="normal">${_('The specified repository "%s" is unknown, sorry.') % c.repo_name}</p>
 
    <p class="normal">
 
    <a href="/_admin/add_repo/${c.repo_name|n,filters.clean_repo}">Create "${c.repo_name}" repository as ${c.repo_name|n,filters.clean_repo}</a>
 
    <a href="${h.url('new_repo',repo=c.repo_name_cleaned)}">
 
    ${_('Create "%s" repository as %s' % (c.repo_name,c.repo_name_cleaned))}</a>
 

	
 
    </p>
 
    <p class="normal">Go back to the ${h.link_to(_('main repository list page'),h.url('hg_home'))}.</p>
 
    <p class="normal">${h.link_to(_('Go back to the main repository list page'),h.url('hg_home'))}</p>
 
    <div class="page-footer">
 
    </div>
 
</%def>
 
\ No newline at end of file
0 comments (0 inline, 0 general)