import cgi import cherrypy import logging from sqlobject import SQLObjectNotFound try: from sqlobject.dberrors import DuplicateEntryError except ImportError: # Handle pre-DuplicateEntryError versions of SQLObject class DuplicateEntryError(Exception): pass from cherrypy import request, response, session from turbogears import identity, redirect from turbogears import error_handler from turbogears import controllers, expose, flash from turbogears import (validate, validators, flash, i18n, url, paginate) from turbogears.widgets import * log = logging.getLogger(__name__) class NewRepoFormFields(WidgetsList): from transifex.util import get_repositories, get_branches name = TextField(validator=validators.PlainText(not_empty=True, min=2, max=20)) description = TextArea(validator=validators.UnicodeString(not_empty=True, max=50), rows=2) summary = TextArea(validator=validators.UnicodeString(max=200), rows=4) root = TextField(validator=validators.UnicodeString(not_empty=True, max=300), attrs={'size':50}) type = SingleSelectField(options=['cvs', 'svn', 'hg', 'git'], validator=validators.PlainText(not_empty=True)) webpage = TextField(validator=validators.UnicodeString(), attrs={'size':50}) webfrontend = TextField(validator=validators.UnicodeString(), attrs={'size':50}) disabled = CheckBox(label="Disabled", default=False, validator=validators.Bool()) ################################################################## class Repo(controllers.Controller): new_repo_form = TableForm( fields=NewRepoFormFields(), action=url('/repos/save'), submit = SubmitButton("submit", default=_("Add repository"), css_classes=["icon16", "add"]) ) @expose(template="genshi:transifex.templates.repolist") @paginate('repos', default_order='name', allow_limit_override=True, limit=20,) def index(self, tg_errors=None, *args, **kw): from turbogears.widgets import DataGrid from transifex.util import get_repositories if tg_errors: flash(_('There was an error with your form.')) grid = DataGrid(fields=[ DataGrid.Column('name', 'name', _('Name'), options=dict(sortable=True)), DataGrid.Column('description', 'description', _('Description'), options=dict(sortable=True)), DataGrid.Column('root', 'root', _('Root'), options=dict(sortable=True)), DataGrid.Column('summary', 'summary', _('Summary'),), ]) return dict(repos=get_repositories(), grid=grid, new_repo_form = self.new_repo_form) @identity.require(identity.in_group("l10n-admin")) @expose() @error_handler(index) @validate(form=new_repo_form) def save(self, name=None, description=None, summary='', root=None, type=None, webpage='', webfrontend='', disabled=False, tg_errors=None, *args, **kw): from transifex.model import Repository try: m = Repository(name=name, description=description, summary=summary, root=root, type=type, webpage=webpage, webfrontend=webfrontend, disabled=disabled, ) except DuplicateEntryError, e: flash(_('Error: A repository with this name already exists.')) raise redirect("/") log.info('Repository %s added.' % name) flash(_("Repository '%s' added." % name)) return self.index() @expose() def default(self, *args, **kw): raise redirect("/")