Blob Blame Raw


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(),
}