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
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', ''))
repo = None
try:
repo = request.model.repositories.create(user_id, name, repotype, title, description)
except Exception as e:
self.propagate_exception(e)
request.connection.commit()
return request.answer.complete_redirect(['user', str(repo.get_user().login), 'repo', str(repo.name)])
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 request.answer.complete_redirect(['user', str(repo.get_user().login), 'repo', str(repo.name)])
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') )
login = repo.get_user().login
try:
repo.delete()
except Exception as e:
self.propagate_exception(e)
request.connection.commit()
return request.answer.complete_redirect(['user', login, 'repos'])
actions = {
'create' : RepoCreate(),
'update' : RepoUpdate(),
'delete' : RepoDelete(),
}