Mercurial > kallithea
changeset 1347:43b8e161be3f beta
#47 implemented basic edition of groups
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Wed, 25 May 2011 10:27:29 +0200 |
parents | cf78d302d441 |
children | dccba44ee176 |
files | rhodecode/controllers/admin/repos_groups.py rhodecode/model/forms.py rhodecode/model/repos_group.py rhodecode/templates/admin/repos_groups/repos_groups_add.html rhodecode/templates/admin/repos_groups/repos_groups_edit.html |
diffstat | 5 files changed, 185 insertions(+), 43 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/controllers/admin/repos_groups.py Mon May 23 02:46:43 2011 +0200 +++ b/rhodecode/controllers/admin/repos_groups.py Wed May 25 10:27:29 2011 +0200 @@ -26,6 +26,10 @@ # file has a resource setup: # map.resource('repos_group', 'repos_groups') + @LoginRequired() + def __before__(self): + super(ReposGroupsController, self).__before__() + def __load_defaults(self): c.repo_groups = [('', '')] @@ -42,9 +46,19 @@ key=lambda t: t[1].split('»')[0]) c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups) - @LoginRequired() - def __before__(self): - super(ReposGroupsController, self).__before__() + def __load_data(self, group_id): + """ + Load defaults settings for edit, and update + + :param group_id: + """ + self.__load_defaults() + + repo_group = Group.get(group_id) + + defaults = repo_group.get_dict() + + return defaults @HasPermissionAnyDecorator('hg.admin') def index(self, format='html'): @@ -67,7 +81,7 @@ form_result = repos_group_form.to_python(dict(request.POST)) repos_group_model.create(form_result) h.flash(_('created repos group %s') \ - % form_result['repos_group_name'], category='success') + % form_result['group_name'], category='success') #TODO: in futureaction_logger(, '', '', '', self.sa) except formencode.Invalid, errors: @@ -80,7 +94,7 @@ except Exception: log.error(traceback.format_exc()) h.flash(_('error occurred during creation of repos group %s') \ - % request.POST.get('repos_group_name'), category='error') + % request.POST.get('group_name'), category='error') return redirect(url('repos_groups')) @@ -102,6 +116,36 @@ # method='put') # url('repos_group', id=ID) + self.__load_defaults() + c.repos_group = Group.get(id) + + repos_group_model = ReposGroupModel() + repos_group_form = ReposGroupForm(edit=True, + old_data=c.repos_group.get_dict(), + available_groups= + c.repo_groups_choices)() + try: + form_result = repos_group_form.to_python(dict(request.POST)) + repos_group_model.update(id, form_result) + h.flash(_('updated repos group %s') \ + % form_result['group_name'], category='success') + #TODO: in futureaction_logger(, '', '', '', self.sa) + except formencode.Invalid, errors: + + return htmlfill.render( + render('admin/repos_groups/repos_groups_edit.html'), + defaults=errors.value, + errors=errors.error_dict or {}, + prefix_error=False, + encoding="UTF-8") + except Exception: + log.error(traceback.format_exc()) + h.flash(_('error occurred during creation of repos group %s') \ + % request.POST.get('group_name'), category='error') + + return redirect(url('repos_groups')) + + @HasPermissionAnyDecorator('hg.admin') def delete(self, id): """DELETE /repos_groups/id: Delete an existing item""" @@ -179,3 +223,14 @@ def edit(self, id, format='html'): """GET /repos_groups/id/edit: Form to edit an existing item""" # url('edit_repos_group', id=ID) + c.repos_group = Group.get(id) + defaults = self.__load_data(id) + + return htmlfill.render( + render('admin/repos_groups/repos_groups_edit.html'), + defaults=defaults, + encoding="UTF-8", + force_defaults=False + ) + +
--- a/rhodecode/model/forms.py Mon May 23 02:46:43 2011 +0200 +++ b/rhodecode/model/forms.py Wed May 25 10:27:29 2011 +0200 @@ -117,25 +117,31 @@ def ValidReposGroup(edit, old_data): - class _ValidReposGroup(formencode.validators.FancyValidator): def validate_python(self, value, state): #TODO WRITE VALIDATIONS - group_name = value.get('repos_group_name') - parent_id = value.get('repos_group_parent') + group_name = value.get('group_name') + group_parent_id = value.get('group_parent_id') # slugify repo group just in case :) slug = repo_name_slug(group_name) - # check filesystem - gr = Group.query().filter(Group.group_name == slug)\ - .filter(Group.group_parent_id == parent_id).scalar() + old_gname = None + if edit: + old_gname = Group.get( + old_data.get('group_id')).group_name - if gr: - e_dict = {'repos_group_name':_('This group already exists')} - raise formencode.Invalid('', value, state, - error_dict=e_dict) + if old_gname != group_name or not edit: + # check filesystem + gr = Group.query().filter(Group.group_name == slug)\ + .filter(Group.group_parent_id == group_parent_id).scalar() + + if gr: + e_dict = {'group_name':_('This group already exists')} + raise formencode.Invalid('', value, state, + error_dict=e_dict) + return _ValidReposGroup class ValidPassword(formencode.validators.FancyValidator): @@ -502,11 +508,11 @@ allow_extra_fields = True filter_extra_fields = True - repos_group_name = All(UnicodeString(strip=True, min=1, not_empty=True), + group_name = All(UnicodeString(strip=True, min=1, not_empty=True), SlugifyName()) - repos_group_description = UnicodeString(strip=True, min=1, + group_description = UnicodeString(strip=True, min=1, not_empty=True) - repos_group_parent = OneOf(available_groups, hideList=False, + group_parent_id = OneOf(available_groups, hideList=False, testValueList=True, if_missing=None, not_empty=False)
--- a/rhodecode/model/repos_group.py Mon May 23 02:46:43 2011 +0200 +++ b/rhodecode/model/repos_group.py Wed May 25 10:27:29 2011 +0200 @@ -26,6 +26,7 @@ import os import logging import traceback +import shutil from pylons.i18n.translation import _ @@ -73,13 +74,21 @@ os.makedirs(create_path) - def __rename_group(self, group_name): + def __rename_group(self, old, new): """ Renames a group on filesystem :param group_name: """ - pass + log.info('renaming repos group from %s to %s', old, + old) + + old_path = os.path.join(self.repos_path, old) + new_path = os.path.join(self.repos_path, new) + if os.path.isdir(new_path): + raise Exception('Was trying to rename to already existing dir %s', + new_path) + shutil.move(old_path, new_path) def __delete_group(self, group): """ @@ -96,15 +105,15 @@ def create(self, form_data): try: new_repos_group = Group() - new_repos_group.group_name = form_data['repos_group_name'] + new_repos_group.group_name = form_data['group_name'] new_repos_group.group_description = \ - form_data['repos_group_description'] - new_repos_group.group_parent_id = form_data['repos_group_parent'] + form_data['group_description'] + new_repos_group.group_parent_id = form_data['group_parent_id'] self.sa.add(new_repos_group) - self.__create_group(form_data['repos_group_name'], - form_data['repos_group_parent']) + self.__create_group(form_data['group_name'], + form_data['group_parent_id']) self.sa.commit() except: @@ -116,10 +125,18 @@ try: repos_group = Group.get(repos_group_id) + old_name = repos_group.group_name - + repos_group.group_name = form_data['group_name'] + repos_group.group_description = \ + form_data['group_description'] + repos_group.group_parent_id = form_data['group_parent_id'] self.sa.add(repos_group) + + if old_name != form_data['group_name']: + self.__rename_group(old=old_name, new=form_data['group_name']) + self.sa.commit() except: log.error(traceback.format_exc())
--- a/rhodecode/templates/admin/repos_groups/repos_groups_add.html Mon May 23 02:46:43 2011 +0200 +++ b/rhodecode/templates/admin/repos_groups/repos_groups_add.html Wed May 25 10:27:29 2011 +0200 @@ -32,27 +32,27 @@ <label for="users_group_name">${_('Group name')}:</label> </div> <div class="input"> - ${h.text('repos_group_name',class_='medium')} + ${h.text('group_name',class_='medium')} </div> </div> - <div class="field"> - <div class="label label-textarea"> - <label for="description">${_('Description')}:</label> - </div> - <div class="textarea text-area editor"> - ${h.textarea('repos_group_description',cols=23,rows=5,class_="medium")} - </div> - </div> + <div class="field"> + <div class="label label-textarea"> + <label for="description">${_('Description')}:</label> + </div> + <div class="textarea text-area editor"> + ${h.textarea('group_description',cols=23,rows=5,class_="medium")} + </div> + </div> - <div class="field"> - <div class="label"> - <label for="repo_group">${_('Group parent')}:</label> - </div> - <div class="input"> - ${h.select('repos_group_parent','',c.repo_groups,class_="medium")} - </div> - </div> + <div class="field"> + <div class="label"> + <label for="repo_group">${_('Group parent')}:</label> + </div> + <div class="input"> + ${h.select('group_parent_id','',c.repo_groups,class_="medium")} + </div> + </div> <div class="buttons"> ${h.submit('save','save',class_="ui-button")}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rhodecode/templates/admin/repos_groups/repos_groups_edit.html Wed May 25 10:27:29 2011 +0200 @@ -0,0 +1,64 @@ +## -*- coding: utf-8 -*- +<%inherit file="/base/base.html"/> + +<%def name="title()"> + ${_('Edit repos group')} ${c.repos_group.group_name} - ${c.rhodecode_name} +</%def> +<%def name="breadcrumbs_links()"> + ${h.link_to(_('Admin'),h.url('admin_home'))} + » + ${h.link_to(_('Repos groups'),h.url('repos_groups'))} + » + ${_('edit repos group')} "${c.repos_group.group_name}" +</%def> + +<%def name="page_nav()"> + ${self.menu('admin')} +</%def> + +<%def name="main()"> +<div class="box"> + <!-- box / title --> + <div class="title"> + ${self.breadcrumbs()} + </div> + <!-- end box / title --> + ${h.form(url('repos_group',id=c.repos_group.group_id),method='put')} + <div class="form"> + <!-- fields --> + <div class="fields"> + <div class="field"> + <div class="label"> + <label for="users_group_name">${_('Group name')}:</label> + </div> + <div class="input"> + ${h.text('group_name',class_='medium')} + </div> + </div> + + <div class="field"> + <div class="label label-textarea"> + <label for="description">${_('Description')}:</label> + </div> + <div class="textarea text-area editor"> + ${h.textarea('group_description',cols=23,rows=5,class_="medium")} + </div> + </div> + + <div class="field"> + <div class="label"> + <label for="repo_group">${_('Group parent')}:</label> + </div> + <div class="input"> + ${h.select('group_parent_id','',c.repo_groups,class_="medium")} + </div> + </div> + + <div class="buttons"> + ${h.submit('save','save',class_="ui-button")} + </div> + </div> + </div> + ${h.end_form()} +</div> +</%def> \ No newline at end of file