import exception
from action.action import Action
from action.user import UserBase
class RepoBase(UserBase):
def parse_repository_id(self, request):
repository_id = 0
try:
repository_id = int(request.postvars.get('repository_id', 0))
except Exception:
raise exception.ActionError( request.t('Repository Id incorrect') )
if not repository_id:
raise exception.ActionError( request.t('Repository Id incorrect') )
return repository_id
def redirect_to_repo(self, request, repo, path = None):
if path is None: path = list()
return self.redirect_to_user(request, repo.get_user(), ['repo', str(repo.name)] + path)
class RepoCreate(RepoBase):
def process(self, request):
user_id = self.parse_user_id(request)
name = str(request.postvars.get('name', ''))
repotype = str(request.postvars.get('type', ''))
title = str(request.postvars.get('title', ''))
description = str(request.postvars.get('description', ''))
user = request.model.users.get_by_id(user_id)
if not user:
raise exception.ActionError( request.t('User not found') )
repo = None
try:
repo = request.model.repositories.create(user, name, repotype, title, description)
except Exception as e:
self.propagate_exception(e)
request.connection.commit()
return self.redirect_to_repo(request, repo)
class RepoUpdate(RepoBase):
def process(self, request):
repository_id = self.parse_repository_id(request)
title = str(request.postvars.get('title', ''))
description = str(request.postvars.get('description', ''))
repo = request.model.repositories.get_by_id(repository_id)
if not repo:
raise exception.ActionError( request.t('Repository not found') )
try:
repo.update(title, description)
except Exception as e:
self.propagate_exception(e)
request.connection.commit()
return self.redirect_to_repo(request, repo)
class RepoDelete(RepoBase):
def process(self, request):
repository_id = self.parse_repository_id(request)
repo = request.model.repositories.get_by_id(repository_id)
if not repo:
raise exception.ActionError( request.t('Repository not found') )
user = repo.get_user()
try:
repo.delete()
except Exception as e:
self.propagate_exception(e)
request.connection.commit()
return self.redirect_to_user(request, user, ['repos'])
class RepoSetUserRight(RepoBase):
def process(self, request):
repository_id = self.parse_repository_id(request)
repo = request.model.repositories.get_by_id(repository_id)
if not repo:
raise exception.ActionError( request.t('Repository not found') )
allowed = bool(request.postvars.get('allowed', False))
mode = str(request.postvars.get('mode', ''))
try:
user_id = int(request.postvars.get('user_id', 0))
except Exception:
raise exception.ActionError( request.t('User Id incorrect') )
user_login = str(request.postvars.get('user_login', ''))
all_users = bool(request.postvars.get('all_users', False))
if user_id and user_login:
raise exception.ActionError( request.t('Both user id and user login was set') )
if all_users and (user_id or user_login):
raise exception.ActionError( request.t('All users flag was set with selection of concrete user') )
user = None
if user_id:
user = request.model.users.get_by_id(user_id)
elif user_login:
user = request.model.users.get_by_login(user_login)
user_id = user.id
if not all_users and not user:
raise exception.ActionError( request.t('User not found') )
try:
repo.set_user_right(user_id, mode, allowed, all_users = all_users)
except Exception as e:
self.propagate_exception(e)
request.connection.commit()
return self.redirect_to_repo(request, repo, ['edit'])
actions = {
'create' : RepoCreate(),
'update' : RepoUpdate(),
'delete' : RepoDelete(),
'setuserright' : RepoSetUserRight(),
}