Blame page/repo.py

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

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

\n'
Ivan Mahonin e5b0ac
    answer.content += '

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

\n'
Ivan Mahonin e5b0ac
    answer.content += '

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

\n'
Ivan Mahonin 572081
    answer.content += '

' + answer.te('clone url:') + ' ' \

Ivan Mahonin 572081
                    + request.protocol \
Ivan Mahonin 572081
                    + request.domain \
Ivan Mahonin a30080
                    + request.prefix \
Ivan Mahonin 572081
                    + '/repo/' \
Ivan Mahonin 572081
                    + repo.gen_subpath() \
Ivan Mahonin 572081
                    + '

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

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

\n'
Ivan Mahonin e5b0ac
Ivan Mahonin e5b0ac
    return answer.complete_content()
Ivan Mahonin e5b0ac
Ivan Mahonin e5b0ac
Ivan Mahonin e5b0ac
class RepoUpdatePage(Page):
Ivan Mahonin e5b0ac
  def process(self, request, path, prevpath):
Ivan Mahonin e5b0ac
    if path:
Ivan Mahonin e5b0ac
      raise exception.HttpNotFound()
Ivan Mahonin e5b0ac
Ivan Mahonin e5b0ac
    answer = request.answer
Ivan Mahonin e5b0ac
    repo = answer.objects['repo']
Ivan Mahonin e5b0ac
    if not repo.can_update():
Ivan Mahonin e5b0ac
      raise exception.HttpNotFound()
Ivan Mahonin e5b0ac
    
Ivan Mahonin 61454c
    answer.add_uipath_entry( answer.t('Edit repository'), prevpath )
Ivan Mahonin e5b0ac
    
Ivan Mahonin e5b0ac
    form = Form(request)
Ivan Mahonin 572081
    form.begin('Details', 'repo.update')
Ivan Mahonin e5b0ac
    form.add_hidden('repository_id', repo.id)
Ivan Mahonin e5b0ac
    form.add_input('title:', 'title', 'text', repo.title)
Ivan Mahonin e5b0ac
    form.add_textarea('description:', 'description', repo.description)
Ivan Mahonin e5b0ac
    form.add_submit()
Ivan Mahonin e5b0ac
    form.end()
Ivan Mahonin e5b0ac
    answer.content += form.content
Ivan Mahonin e146e6
Ivan Mahonin e146e6
    user_rights = repo.get_user_rights()
Ivan Mahonin e146e6
    for i in user_rights:
Ivan Mahonin e146e6
      form = Form(request)
Ivan Mahonin e146e6
      form.begin('Rights', 'repo.setuserright')
Ivan Mahonin e146e6
      form.add_hidden('repository_id', repo.id)
Ivan Mahonin e146e6
      form.add_hidden('allowed', '')
Ivan Mahonin e146e6
      form.add_hidden('all_users', '' if i.user_id else '1')
Ivan Mahonin e146e6
      form.add_hidden('user_id', i.user_id)
Ivan Mahonin e146e6
      form.add_hidden('mode', i.mode)
Ivan Mahonin e146e6
      if i.user_id == 0:
Ivan Mahonin e146e6
        form.add_field_raw('all users', '')
Ivan Mahonin e146e6
      else:
Ivan Mahonin e146e6
        user = request.model.users.get_by_id(i.user_id)
Ivan Mahonin e146e6
        login = user.login if user else ''
Ivan Mahonin e146e6
        form.add_field_raw('login:', answer.e(login))
Ivan Mahonin e146e6
      form.add_field_raw('mode:', answer.te(i.mode))
Ivan Mahonin e146e6
      form.add_submit('Delete')
Ivan Mahonin e146e6
      form.end()
Ivan Mahonin e146e6
      answer.content += form.content
Ivan Mahonin e146e6
Ivan Mahonin e146e6
    form = Form(request)
Ivan Mahonin e146e6
    form.begin('Add rights', 'repo.setuserright')
Ivan Mahonin e146e6
    form.add_hidden('repository_id', repo.id)
Ivan Mahonin e146e6
    form.add_hidden('allowed', 1)
Ivan Mahonin e146e6
    form.add_checkbox('for all users:', 'all_users')
Ivan Mahonin e146e6
    form.add_input('login:', 'user_login', 'text')
Ivan Mahonin e146e6
    form.add_select('mode:', 'mode', {
Ivan Mahonin e146e6
      request.model.repositories.READ      : request.model.repositories.READ,
Ivan Mahonin e146e6
      request.model.repositories.REPOWRITE : request.model.repositories.REPOWRITE })
Ivan Mahonin e146e6
    form.add_submit()
Ivan Mahonin e146e6
    form.end()
Ivan Mahonin e146e6
    answer.content += form.content
Ivan Mahonin e5b0ac
    
Ivan Mahonin e5b0ac
    if repo.can_delete() and prevpath:
Ivan Mahonin e5b0ac
      url = request.get_urlpath_escaped(prevpath[:-1] + ['delete'])
Ivan Mahonin e5b0ac
      form = Form(request)
Ivan Mahonin e5b0ac
      form.content += '<form method="GET" action="' + url + '">' + form.GROUP_BEGIN
Ivan Mahonin e5b0ac
      form.content += form.title('Deletion')
Ivan Mahonin e5b0ac
      form.add_submit('Delete repository')
Ivan Mahonin e5b0ac
      form.end()
Ivan Mahonin e5b0ac
      answer.content += form.content
Ivan Mahonin e5b0ac
Ivan Mahonin e5b0ac
    return answer.complete_content()
Ivan Mahonin e5b0ac
Ivan Mahonin e5b0ac
Ivan Mahonin e5b0ac
class RepoDeletePage(Page):
Ivan Mahonin e5b0ac
  def process(self, request, path, prevpath):
Ivan Mahonin e5b0ac
    if path:
Ivan Mahonin e5b0ac
      raise exception.HttpNotFound()
Ivan Mahonin e5b0ac
Ivan Mahonin e5b0ac
    answer = request.answer
Ivan Mahonin e5b0ac
    repo = answer.objects['repo']
Ivan Mahonin e5b0ac
    if not repo.can_delete():
Ivan Mahonin e5b0ac
      raise exception.HttpNotFound()
Ivan Mahonin e5b0ac
Ivan Mahonin 572081
    answer.add_uipath_entry( answer.t('Delete repository'), prevpath )
Ivan Mahonin 572081
Ivan Mahonin e5b0ac
    form = Form(request)
Ivan Mahonin 572081
    form.begin('', 'repo.delete')
Ivan Mahonin e5b0ac
    form.add_hidden('repository_id', repo.id)
Ivan Mahonin e5b0ac
    form.content += '

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

\n'
Ivan Mahonin e5b0ac
    form.content += '

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

\n'
Ivan Mahonin e5b0ac
    form.content += '

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

\n'
Ivan Mahonin e5b0ac
    form.content += '

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

\n'
Ivan Mahonin e5b0ac
    form.content += '

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

\n'
Ivan Mahonin e5b0ac
    form.content += '

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

\n'
Ivan Mahonin 572081
    form.content += '

' + answer.te('Do you really want do delete repository?') + '

\n'
Ivan Mahonin e5b0ac
    form.add_submit('Confirm delete')
Ivan Mahonin e5b0ac
    form.end()
Ivan Mahonin e5b0ac
    answer.content += form.content
Ivan Mahonin 572081
Ivan Mahonin e5b0ac
    return answer.complete_content()
Ivan Mahonin e5b0ac
Ivan Mahonin e5b0ac
Ivan Mahonin e5b0ac
class RepoListPage(Page):
Ivan Mahonin e5b0ac
  def process(self, request, path, prevpath):
Ivan Mahonin e5b0ac
    user = request.answer.objects['user']
Ivan Mahonin e5b0ac
    if path:
Ivan Mahonin e5b0ac
      raise exception.HttpNotFound()
Ivan Mahonin e5b0ac
    if not prevpath:
Ivan Mahonin e5b0ac
      raise exception.HttpNotFound()
Ivan Mahonin e5b0ac
    
Ivan Mahonin e5b0ac
    repositories = request.model.repositories.get_list(user)
Ivan Mahonin e5b0ac
    
Ivan Mahonin e5b0ac
    answer = request.answer
Ivan Mahonin 572081
    answer.add_uipath_entry( answer.t('Repositories'), prevpath )
Ivan Mahonin e5b0ac
    
Ivan Mahonin e5b0ac
    for repo in repositories:
Ivan Mahonin e5b0ac
      url = request.get_urlpath_escaped(prevpath[:-1] + ['repo', str(repo.name)])
Ivan Mahonin e5b0ac
      answer.content += '

' \

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

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

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

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