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()
e146e6
    if not request.model.repositories.can_create(user):
e5b0ac
      raise exception.HttpNotFound()
e5b0ac
    answer = request.answer
572081
    answer.add_uipath_entry( answer.t('Create repository'), prevpath )
e5b0ac
    
e5b0ac
    form = Form(request)
572081
    form.begin('', '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
572081
    answer = request.answer
572081
e5b0ac
    user = request.answer.objects['user']
e146e6
    repo = request.model.repositories.get_by_name(user, str(path[0]))
e5b0ac
    if not repo:
e5b0ac
      raise exception.HttpNotFound()
e5b0ac
572081
    answer.objects['repo'] = repo
572081
    answer.add_uipath_entry( repo.title, prevpath + [repo.name] )
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
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(repo.repotype.name) + '

\n'
e5b0ac
    answer.content += '

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

\n'
e5b0ac
    answer.content += '

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

\n'
572081
    answer.content += '

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

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

\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
    
61454c
    answer.add_uipath_entry( answer.t('Edit repository'), prevpath )
e5b0ac
    
e5b0ac
    form = Form(request)
572081
    form.begin('Details', '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
e146e6
e146e6
    user_rights = repo.get_user_rights()
e146e6
    for i in user_rights:
e146e6
      form = Form(request)
e146e6
      form.begin('Rights', 'repo.setuserright')
e146e6
      form.add_hidden('repository_id', repo.id)
e146e6
      form.add_hidden('allowed', '')
e146e6
      form.add_hidden('all_users', '' if i.user_id else '1')
e146e6
      form.add_hidden('user_id', i.user_id)
e146e6
      form.add_hidden('mode', i.mode)
e146e6
      if i.user_id == 0:
e146e6
        form.add_field_raw('all users', '')
e146e6
      else:
e146e6
        user = request.model.users.get_by_id(i.user_id)
e146e6
        login = user.login if user else ''
e146e6
        form.add_field_raw('login:', answer.e(login))
e146e6
      form.add_field_raw('mode:', answer.te(i.mode))
e146e6
      form.add_submit('Delete')
e146e6
      form.end()
e146e6
      answer.content += form.content
e146e6
e146e6
    form = Form(request)
e146e6
    form.begin('Add rights', 'repo.setuserright')
e146e6
    form.add_hidden('repository_id', repo.id)
e146e6
    form.add_hidden('allowed', 1)
e146e6
    form.add_checkbox('for all users:', 'all_users')
e146e6
    form.add_input('login:', 'user_login', 'text')
e146e6
    form.add_select('mode:', 'mode', {
e146e6
      request.model.repositories.READ      : request.model.repositories.READ,
e146e6
      request.model.repositories.REPOWRITE : request.model.repositories.REPOWRITE })
e146e6
    form.add_submit()
e146e6
    form.end()
e146e6
    answer.content += form.content
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
572081
    answer.add_uipath_entry( answer.t('Delete repository'), prevpath )
572081
e5b0ac
    form = Form(request)
572081
    form.begin('', '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'
572081
    form.content += '

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

\n'
e5b0ac
    form.add_submit('Confirm delete')
e5b0ac
    form.end()
e5b0ac
    answer.content += form.content
572081
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
572081
    answer.add_uipath_entry( answer.t('Repositories'), prevpath )
e5b0ac
    
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
e146e6
    if request.model.repositories.can_create(user):
e5b0ac
      answer.content += '

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

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