Blame page/repo.py

e5b0ac
e5b0ac
import exception
e5b0ac
from generator.form import Form
e5b0ac
e5b0ac
from page.page import Page
e5b0ac
e5b0ac
e5b0ac
class RepoCreatePage(Page):
e5b0ac
  def process(self, request, path, prevpath):
e5b0ac
    user = request.answer.objects['user']
e5b0ac
    if path:
e5b0ac
      raise exception.HttpNotFound()
e5b0ac
    if not request.model.repositories.can_create(user.id):
e5b0ac
      raise exception.HttpNotFound()
e5b0ac
    answer = request.answer
e5b0ac
    answer.chain_title( answer.te('Create repository') )
e5b0ac
    
e5b0ac
    form = Form(request)
e5b0ac
    form.begin('Create repository', 'repo.create')
e5b0ac
    form.add_hidden('user_id', user.id)
e5b0ac
    form.add_select('type:', 'type', { k: v.name for k, v in request.server.repotypes.items() })
e5b0ac
    form.add_input('name:', 'name', 'text')
e5b0ac
    form.add_input('title:', 'title', 'text')
e5b0ac
    form.add_textarea('description:', 'description')
e5b0ac
    form.add_submit()
e5b0ac
    form.end()
e5b0ac
    answer.content += form.content
e5b0ac
    
e5b0ac
    return answer.complete_content()
e5b0ac
e5b0ac
e5b0ac
class RepoPage(Page):
e5b0ac
  def __init__(self):
e5b0ac
    super().__init__()
e5b0ac
    self.view = RepoViewPage()
e5b0ac
    
e5b0ac
  def process(self, request, path, prevpath):
e5b0ac
    if not path:
e5b0ac
      raise exception.HttpNotFound()
e5b0ac
e5b0ac
    user = request.answer.objects['user']
e5b0ac
    repo = None
e5b0ac
    if path[0].isdecimal():
e5b0ac
      repo = request.model.repositories.get_by_id(int(path[0]), user)
e5b0ac
    else:
e5b0ac
      repo = request.model.repositories.get_by_name(user.id, str(path[0]), user)
e5b0ac
    if not repo:
e5b0ac
      raise exception.HttpNotFound()
e5b0ac
e5b0ac
    request.answer.objects['repo'] = repo
e5b0ac
    request.answer.chain_title( request.answer.e(repo.title) )
e5b0ac
    return self.view.sub_process(request, path, prevpath)
e5b0ac
e5b0ac
e5b0ac
class RepoViewPage(Page):
e5b0ac
  def __init__(self):
e5b0ac
    super().__init__()
e5b0ac
    self.edit = RepoUpdatePage()
e5b0ac
    self.delete = RepoDeletePage()
e5b0ac
e5b0ac
  def process(self, request, path, prevpath):
e5b0ac
    repo = request.answer.objects['repo']
e5b0ac
    
e5b0ac
    answer = request.answer
e5b0ac
    answer.chain_title( answer.e(repo.name) )
e5b0ac
e5b0ac
    if path:
e5b0ac
      if path[0] == 'edit':
e5b0ac
        return self.edit.sub_process(request, path, prevpath)
e5b0ac
      if path[0] == 'delete':
e5b0ac
        return self.delete.sub_process(request, path, prevpath)
e5b0ac
      raise exception.HttpNotFound()
e5b0ac
e5b0ac
    answer.content += '

' + answer.te('Repositiry') + '

\n'
e5b0ac
    answer.content += '

' + answer.te(repo.repotype.name) + '

\n'
e5b0ac
    answer.content += '

' + answer.e(repo.name) + '

\n'
e5b0ac
    answer.content += '

' + answer.e(repo.title) + '

\n'
e5b0ac
    answer.content += '

' + answer.e(repo.description) + '

\n'
e5b0ac
    answer.content += '

' + request.protocol + request.domain + '/repo/' + repo.gen_subpath() + '

\n'
e5b0ac
e5b0ac
    if repo.can_update():
e5b0ac
      answer.content += '

' + self.make_link(answer, prevpath + ['edit'], 'Edit repository') + '

\n'
e5b0ac
e5b0ac
    return answer.complete_content()
e5b0ac
e5b0ac
e5b0ac
class RepoUpdatePage(Page):
e5b0ac
  def process(self, request, path, prevpath):
e5b0ac
    if path:
e5b0ac
      raise exception.HttpNotFound()
e5b0ac
e5b0ac
    answer = request.answer
e5b0ac
    repo = answer.objects['repo']
e5b0ac
    if not repo.can_update():
e5b0ac
      raise exception.HttpNotFound()
e5b0ac
    
e5b0ac
    answer.chain_title( answer.te('Edit repository') )
e5b0ac
    
e5b0ac
    form = Form(request)
e5b0ac
    form.begin('Edit repository', 'repo.update')
e5b0ac
    form.add_hidden('repository_id', repo.id)
e5b0ac
    form.add_input('title:', 'title', 'text', repo.title)
e5b0ac
    form.add_textarea('description:', 'description', repo.description)
e5b0ac
    form.add_submit()
e5b0ac
    form.end()
e5b0ac
    answer.content += form.content
e5b0ac
    
e5b0ac
    
e5b0ac
    if repo.can_delete() and prevpath:
e5b0ac
      url = request.get_urlpath_escaped(prevpath[:-1] + ['delete'])
e5b0ac
      form = Form(request)
e5b0ac
      form.content += '<form action="' + url + '" method="GET">' + form.GROUP_BEGIN</form>
e5b0ac
      form.content += form.title('Deletion')
e5b0ac
      form.add_submit('Delete repository')
e5b0ac
      form.end()
e5b0ac
      answer.content += form.content
e5b0ac
e5b0ac
    return answer.complete_content()
e5b0ac
e5b0ac
e5b0ac
class RepoDeletePage(Page):
e5b0ac
  def process(self, request, path, prevpath):
e5b0ac
    if path:
e5b0ac
      raise exception.HttpNotFound()
e5b0ac
e5b0ac
    answer = request.answer
e5b0ac
    repo = answer.objects['repo']
e5b0ac
    if not repo.can_delete():
e5b0ac
      raise exception.HttpNotFound()
e5b0ac
e5b0ac
    form = Form(request)
e5b0ac
    form.begin('Delete repository', 'repo.delete')
e5b0ac
    form.add_hidden('repository_id', repo.id)
e5b0ac
    form.content += '

' + answer.te(repo.repotype.name) + '

\n'
e5b0ac
    form.content += '

' + answer.e(repo.name) + '

\n'
e5b0ac
    form.content += '

' + answer.e(repo.title) + '

\n'
e5b0ac
    form.content += '

' + answer.e(repo.description) + '

\n'
e5b0ac
    form.content += '

' + answer.e(repo.description) + '

\n'
e5b0ac
    form.content += '

' + request.protocol + request.domain + '/repo/' + repo.gen_subpath() + '

\n'
e5b0ac
    form.add_submit('Confirm delete')
e5b0ac
    form.end()
e5b0ac
e5b0ac
    answer.content += form.content
e5b0ac
    return answer.complete_content()
e5b0ac
e5b0ac
e5b0ac
class RepoListPage(Page):
e5b0ac
  def process(self, request, path, prevpath):
e5b0ac
    user = request.answer.objects['user']
e5b0ac
    if path:
e5b0ac
      raise exception.HttpNotFound()
e5b0ac
    if not prevpath:
e5b0ac
      raise exception.HttpNotFound()
e5b0ac
    
e5b0ac
    repositories = request.model.repositories.get_list(user)
e5b0ac
    
e5b0ac
    answer = request.answer
e5b0ac
    answer.chain_title( answer.te('Repositories') )
e5b0ac
    
e5b0ac
    answer.content += '

' + answer.te('Repositories') + '

\n'
e5b0ac
    for repo in repositories:
e5b0ac
      url = request.get_urlpath_escaped(prevpath[:-1] + ['repo', str(repo.name)])
e5b0ac
      answer.content += '

' \

e5b0ac
                     + answer.e(repo.name) + ' ' \
e5b0ac
                     + answer.e(repo.title) + '

\n'
e5b0ac
e5b0ac
    if request.model.repositories.can_create(user.id):
e5b0ac
      answer.content += '

' + self.make_link(answer, prevpath[:-1] + ['repo_create'], 'Create repository') + '

\n'
e5b0ac
e5b0ac
    return answer.complete_content()
e5b0ac
    
e5b0ac