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.chain_title( answer.te('Create repository') )
form = Form(request)
form.begin('Create repository', '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()
user = request.answer.objects['user']
repo = None
if path[0].isdecimal():
repo = request.model.repositories.get_by_id(int(path[0]), user)
else:
repo = request.model.repositories.get_by_name(user.id, str(path[0]), user)
if not repo:
raise exception.HttpNotFound()
request.answer.objects['repo'] = repo
request.answer.chain_title( request.answer.e(repo.title) )
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
answer.chain_title( answer.e(repo.name) )
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 += '<h3>' + answer.te('Repositiry') + '</h3>\n'
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.title) + '</p>\n'
answer.content += '<p>' + answer.e(repo.description) + '</p>\n'
answer.content += '<p>' + request.protocol + request.domain + '/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.chain_title( answer.te('Edit repository') )
form = Form(request)
form.begin('Edit repository', '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()
form = Form(request)
form.begin('Delete repository', '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.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.chain_title( answer.te('Repositories') )
answer.content += '<h3>' + answer.te('Repositories') + '</h3>\n'
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()