# You can't touch this
return False
- async def delete(self, user=None):
+ async def delete(self, deleted_by):
"""
Deletes this build including all jobs,
packages and the source package.
"""
+ # Check if we can actually delete
+ if not self.can_be_deleted(deleted_by):
+ raise PermissionError
+
# Delete all test builds
- if self.test_builds:
- await self.test_builds.delete(user=user)
+ #if self.test_builds:
+ # await self.test_builds.delete(user=user)
# Delete all jobs
- for job in self._jobs:
- await job.delete(user=user)
+ for job in self.alljobs:
+ await job.delete(deleted_by=deleted_by)
# Mark as deleted
- self._set_attribute_now("deleted_at")
- if user:
- await self._set_attribute("deleted_by", user)
+ await super().delete(deleted_by=deleted_by)
# Delete source package
- await self.pkg.delete(user=user)
+ await self.pkg.delete(deleted_by=deleted_by)
# All repositories this build has been in have been changed
await self._update_repos(build=True)
message = Column(Text, nullable=False, default="")
- async def delete(self, user=None):
+ async def delete(self, deleted_by=None):
"""
Deletes a job
"""
# Delete all binary packages
for pkg in self.packages:
- await pkg.delete(user=user)
+ await pkg.delete(deleted_by=deleted_by)
# Mark as deleted
- self._set_attribute_now("deleted_at")
- if user:
- self._set_attribute("deleted_by", user)
+ await super().delete(deleted_by=deleted_by)
# Delete the log
await self._delete_log()
DateTime(timezone=False), nullable=False, server_default=sqlalchemy.func.current_timestamp(),
)
- async def delete(self, *args, **kwargs):
+ async def delete(self, deleted_by=None):
"""
Deletes this package
"""
log.info("Deleting package %s" % self)
# Delete from the database
- await super().delete(*args, **kwargs)
+ await super().delete(deleted_by=deleted_by)
# Unlink the payload
if self.path:
-{% extends "../modal.html" %}
+{% extends "modal.html" %}
-{% block title %}{{ _("Delete Build") }} - {{ build }}{% end block %}
+{% block title %}{{ _("Delete Build") }} - {{ build }}{% endblock %}
{% block breadcrumbs %}
<nav class="breadcrumb" aria-label="breadcrumbs">
</li>
</ul>
</nav>
-{% end block %}
+{% endblock %}
{% block modal_title %}
<h4 class="title is-4">{{ _("Delete Build") }}</h4>
<h6 class="subtitle is-6">{{ build }}</h6>
-{% end block %}
+{% endblock %}
{% block modal %}
<form method="POST" action="">
- {% raw xsrf_form_html() %}
+ {{ xsrf_form_html() | safe }}
<div class="content">
<p>
</button>
</div>
</form>
-{% end block %}
+{% endblock %}
class DeleteHandler(base.BaseHandler):
@base.authenticated
- def get(self, uuid):
- build = self.backend.builds.get_by_uuid(uuid)
+ async def get(self, uuid):
+ build = await self.backend.builds.get_by_uuid(uuid)
if not build:
raise tornado.web.HTTPError(404, "Could not find build %s" % uuid)
raise tornado.web.HTTPError(403, "%s cannot delete build %s" \
% (self.current_user, build))
- self.render("builds/delete.html", build=build)
+ await self.render("builds/delete.html", build=build)
@base.authenticated
async def post(self, uuid):
- build = self.backend.builds.get_by_uuid(uuid)
+ build = await self.backend.builds.get_by_uuid(uuid)
if not build:
raise tornado.web.HTTPError(404, "Could not find build %s" % uuid)
- # Check permissions
- if not build.can_be_deleted(self.current_user):
- raise tornado.web.HTTPError(403, "%s cannot delete build %s" \
- % (self.current_user, build))
-
- # Perform Deletion
- with self.db.transaction():
- await build.delete(self.current_user)
+ # Delete the build
+ try:
+ await build.delete(deleted_by=self.current_user)
+ except PermissionError as e:
+ raise tornado.web.HTTPError(403) from e
self.redirect("/builds")