import exception
from generator.form import Form
from page.page import Page
class RepoCreatePage(Page):
def process(self, request, path, prevpath):
user = request.answer.objects['user']
if path:
raise exception.HttpNotFound()
if not request.model.repositories.can_create(user.id):
raise exception.HttpNotFound()
answer = request.answer
answer.add_uipath_entry( answer.t('Create repository'), prevpath )
form = Form(request)
form.begin('', 'repo.create')
form.add_hidden('user_id', user.id)
form.add_select('type:', 'type', { k: v.name for k, v in request.server.repotypes.items() })
form.add_input('name:', 'name', 'text')
form.add_input('title:', 'title', 'text')
form.add_textarea('description:', 'description')
form.add_submit()
form.end()
answer.content += form.content
return answer.complete_content()
class RepoPage(Page):
def __init__(self):
super().__init__()
self.view = RepoViewPage()
def process(self, request, path, prevpath):
if not path:
raise exception.HttpNotFound()
answer = request.answer
user = request.answer.objects['user']
repo = request.model.repositories.get_by_name(user.id, str(path[0]), user)
if not repo:
raise exception.HttpNotFound()
answer.objects['repo'] = repo
answer.add_uipath_entry( repo.title, prevpath + [repo.name] )
return self.view.sub_process(request, path, prevpath)
class RepoViewPage(Page):
def __init__(self):
super().__init__()
self.edit = RepoUpdatePage()
self.delete = RepoDeletePage()
def process(self, request, path, prevpath):
repo = request.answer.objects['repo']
answer = request.answer
if path:
if path[0] == 'edit':
return self.edit.sub_process(request, path, prevpath)
if path[0] == 'delete':
return self.delete.sub_process(request, path, prevpath)
raise exception.HttpNotFound()
answer.content += '<p>' + answer.te(repo.repotype.name) + '</p>\n'
answer.content += '<p>' + answer.e(repo.name) + '</p>\n'
answer.content += '<p>' + answer.e(repo.description) + '</p>\n'
answer.content += '<p>' + answer.te('clone url:') + ' ' \
+ request.protocol \
+ request.domain \
+ request.prefix \
+ '/repo/' \
+ repo.gen_subpath() \
+ '</p>\n'
if repo.can_update():
answer.content += '<p>' + self.make_link(answer, prevpath + ['edit'], 'Edit repository') + '</p>\n'
return answer.complete_content()
class RepoUpdatePage(Page):
def process(self, request, path, prevpath):
if path:
raise exception.HttpNotFound()
answer = request.answer
repo = answer.objects['repo']
if not repo.can_update():
raise exception.HttpNotFound()
answer.add_uipath_entry( answer.t('Edit repository'), prevpath )
form = Form(request)
form.begin('Details', 'repo.update')
form.add_hidden('repository_id', repo.id)
form.add_input('title:', 'title', 'text', repo.title)
form.add_textarea('description:', 'description', repo.description)
form.add_submit()
form.end()
answer.content += form.content
if repo.can_delete() and prevpath:
url = request.get_urlpath_escaped(prevpath[:-1] + ['delete'])
form = Form(request)
form.content += '<form method="GET" action="' + url + '">' + form.GROUP_BEGIN
form.content += form.title('Deletion')
form.add_submit('Delete repository')
form.end()
answer.content += form.content
return answer.complete_content()
class RepoDeletePage(Page):
def process(self, request, path, prevpath):
if path:
raise exception.HttpNotFound()
answer = request.answer
repo = answer.objects['repo']
if not repo.can_delete():
raise exception.HttpNotFound()
answer.add_uipath_entry( answer.t('Delete repository'), prevpath )
form = Form(request)
form.begin('', 'repo.delete')
form.add_hidden('repository_id', repo.id)
form.content += '<p>' + answer.te(repo.repotype.name) + '</p>\n'
form.content += '<p>' + answer.e(repo.name) + '</p>\n'
form.content += '<p>' + answer.e(repo.title) + '</p>\n'
form.content += '<p>' + answer.e(repo.description) + '</p>\n'
form.content += '<p>' + answer.e(repo.description) + '</p>\n'
form.content += '<p>' + request.protocol + request.domain + '/repo/' + repo.gen_subpath() + '</p>\n'
form.content += '<p>' + answer.te('Do you really want do delete repository?') + '</p>\n'
form.add_submit('Confirm delete')
form.end()
answer.content += form.content
return answer.complete_content()
class RepoListPage(Page):
def process(self, request, path, prevpath):
user = request.answer.objects['user']
if path:
raise exception.HttpNotFound()
if not prevpath:
raise exception.HttpNotFound()
repositories = request.model.repositories.get_list(user)
answer = request.answer
answer.add_uipath_entry( answer.t('Repositories'), prevpath )
for repo in repositories:
url = request.get_urlpath_escaped(prevpath[:-1] + ['repo', str(repo.name)])
answer.content += '<p><a href="' + url + '">' \
+ answer.e(repo.name) + ' ' \
+ answer.e(repo.title) + '</a></p>\n'
if request.model.repositories.can_create(user.id):
answer.content += '<p>' + self.make_link(answer, prevpath[:-1] + ['repo_create'], 'Create repository') + '</p>\n'
return answer.complete_content()