##// END OF EJS Templates
#2: proposed changes to shortlog added header table description
#2: proposed changes to shortlog added header table description

File last commit:

r266:32d6c955 default
r279:ba0523f4 default
Show More
repos.py
175 lines | 6.9 KiB | text/x-python | PythonLexer
licensing updates, code cleanups
r252 #!/usr/bin/env python
# encoding: utf-8
# repos controller for pylons
# Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; version 2
# of the License or (at your opinion) any later version of the license.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
"""
Created on April 7, 2010
admin controller for pylons
@author: marcink
"""
Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
r265 from operator import itemgetter
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.
r215 from pylons import request, response, session, tmpl_context as c, url, \
app_globals as g
from pylons.controllers.util import abort, redirect
Added support for repository located in subdirectories.
r248 from pylons.i18n.translation import _
from pylons_app.lib import helpers as h
Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
r265 from pylons_app.lib.auth import LoginRequired
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.
r215 from pylons_app.lib.base import BaseController, render
Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
r265 from pylons_app.lib.utils import invalidate_cache
from pylons_app.model.repo_model import RepoModel
Fixed bug in repos, added dependencies and bumped version
r246 from pylons_app.model.hg_model import HgModel
Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
r265 from pylons_app.model.forms import RepoForm
from pylons_app.model.meta import Session
from datetime import datetime
import formencode
from formencode import htmlfill
import logging
Marcin Kuzminski
Added hg model,implemented removal of repos, added HgModel for fetching repos(with generator)
r58 import os
import shutil
Marcin Kuzminski
Added rest controllers for repos and users,...
r47 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:
# map.resource('repo', 'repos')
Fixed access to repos and users.
r235 @LoginRequired()
Marcin Kuzminski
Added rest controllers for repos and users,...
r47 def __before__(self):
c.admin_user = session.get('admin_user')
c.admin_username = session.get('admin_username')
Authenticated controller with LoginRequired decorator, and cleaned __before__ (used in baseController now). fixed User for clone url with logged in session user....
r191 super(ReposController, self).__before__()
Marcin Kuzminski
Added sqlalchemy support...
r49
Marcin Kuzminski
Added rest controllers for repos and users,...
r47 def index(self, format='html'):
"""GET /repos: All items in the collection"""
# url('repos')
Fixed bug in repos, added dependencies and bumped version
r246 cached_repo_list = HgModel().get_repos()
proper sorting fix
r247 c.repos_list = sorted(cached_repo_list, key=itemgetter('name_sort'))
Html changes and cleanups, made folders for html templates, implemented tags and branches pages
r127 return render('admin/repos/repos.html')
Marcin Kuzminski
Added rest controllers for repos and users,...
r47
def create(self):
"""POST /repos: Create a new item"""
# url('repos')
Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
r265 repo_model = RepoModel()
_form = RepoForm()()
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.
r215 try:
Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
r265 form_result = _form.to_python(dict(request.POST))
repo_model.create(form_result, c.hg_app_user)
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.
r215 invalidate_cache('cached_repo_list')
Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
r265 h.flash(_('created repository %s') % form_result['repo_name'],
category='success')
except formencode.Invalid as errors:
c.form_errors = errors.error_dict
c.new_repo = errors.value['repo_name']
return htmlfill.render(
render('admin/repos/repo_add.html'),
defaults=errors.value,
encoding="UTF-8")
except Exception:
h.flash(_('error occured during creation of repository %s') \
% form_result['repo_name'], category='error')
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.
r215 return redirect('repos')
Marcin Kuzminski
Added rest controllers for repos and users,...
r47
def new(self, format='html'):
"""GET /repos/new: Form to create a new item"""
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.
r215 new_repo = request.GET.get('repo', '')
Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
r265 c.new_repo = h.repo_name_slug(new_repo)
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.
r215
return render('admin/repos/repo_add.html')
Marcin Kuzminski
Added rest controllers for repos and users,...
r47
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:
# h.form(url('repo', id=ID),
# method='put')
# url('repo', id=ID)
Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
r265 repo_model = RepoModel()
_form = RepoForm(edit=True)()
try:
form_result = _form.to_python(dict(request.POST))
repo_model.update(id, form_result)
invalidate_cache('cached_repo_list')
h.flash(_('Repository updated succesfully'), category='success')
except formencode.Invalid as errors:
c.repo_info = repo_model.get(id)
c.form_errors = errors.error_dict
return htmlfill.render(
render('admin/repos/repo_edit.html'),
defaults=errors.value,
encoding="UTF-8")
except Exception:
h.flash(_('error occured during update of repository %s') \
% form_result['repo_name'], category='error')
return redirect(url('repos'))
Marcin Kuzminski
Added rest controllers for repos and users,...
r47 def delete(self, id):
"""DELETE /repos/id: Delete an existing item"""
# Forms posted to this method should contain a hidden field:
# <input type="hidden" name="_method" value="DELETE" />
# Or using helpers:
# h.form(url('repo', id=ID),
# method='delete')
# url('repo', id=ID)
Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
r265
repo_model = RepoModel()
repo = repo_model.get(id)
if not repo:
h.flash(_('%s repository is not mapped to db perhaps'
added check for repo created outside of hg app
r266 ' it was moved or renamed from the filesystem'
' please run the application again'
Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
r265 ' in order to rescan repositories') % id, category='error')
moved cache invalidating to utils, as seperate function. Implemented invalidating in
r140
Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
r265 return redirect(url('repos'))
try:
repo_model.delete(repo)
invalidate_cache('cached_repo_list')
h.flash(_('deleted repository %s') % id, category='success')
except Exception:
h.flash(_('An error occured during deletion of %s') % id,
category='error')
Marcin Kuzminski
Added hg model,implemented removal of repos, added HgModel for fetching repos(with generator)
r58 return redirect(url('repos'))
Marcin Kuzminski
Added rest controllers for repos and users,...
r47 def show(self, id, format='html'):
"""GET /repos/id: Show a specific item"""
# url('repo', id=ID)
repo edit
r220
Marcin Kuzminski
Added rest controllers for repos and users,...
r47 def edit(self, id, format='html'):
"""GET /repos/id/edit: Form to edit an existing item"""
# url('edit_repo', id=ID)
Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
r265 repo_model = RepoModel()
added check for repo created outside of hg app
r266 c.repo_info = repo = repo_model.get(id)
if not repo:
h.flash(_('%s repository is not mapped to db perhaps'
' it was created or renamed from the filesystem'
' please run the application again'
' in order to rescan repositories') % id, category='error')
return redirect(url('repos'))
Implemented basic repository managment. Implemented repo2db mappings, model, helpers updates and code cleanups
r265 defaults = c.repo_info.__dict__
defaults.update({'user':c.repo_info.user.username})
return htmlfill.render(
render('admin/repos/repo_edit.html'),
defaults=defaults,
encoding="UTF-8",
force_defaults=False
)