]> git.ipfire.org Git - pbs.git/commitdiff
releases: Fix deleting releases and their images
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 11 Feb 2025 10:29:14 +0000 (10:29 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 11 Feb 2025 10:29:14 +0000 (10:29 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/releases.py
src/templates/distros/releases/delete.html
src/web/distributions.py

index df07029931b881d1988027afa01ff4b5c878bb4b..d76433229d076b6b20eac06a5bec530695c536b3 100644 (file)
@@ -124,15 +124,15 @@ class Release(database.Base, database.BackendMixin, database.SoftDeleteMixin):
 
        # Delete
 
-       async def delete(self, user=None):
+       async def delete(self, *args, **kwargs):
                """
                        Deletes this release
                """
-               self._set_attribute_now("deleted_at")
-               if user:
-                       self._set_attribute("deleted_by", user)
+               await super().delete(*args, **kwargs)
 
-               # XXX TODO delete images
+               # Delete all images, too
+               for image in self.images:
+                       await image.delete(*args, **kwargs)
 
        # Images
 
index 1e37cc60fcd851c5e35070c18a40351a8fce8929..6884e2056b0121941a6e864028b1dd94f72c4372 100644 (file)
@@ -1,6 +1,6 @@
-{% extends "../../modal.html" %}
+{% extends "modal.html" %}
 
-{% block title %}{{ release }} - {{ _("Delete") }}{% end block %}
+{% block title %}{{ release }} - {{ _("Delete") }}{% endblock %}
 
 {% block breadcrumbs %}
        <nav class="breadcrumb" aria-label="breadcrumbs">
                        </li>
                </ul>
        </nav>
-{% end block %}
+{% endblock %}
 
 {% block modal_title %}
        <h4 class="title is-4">{{ _("Delete Release") }}</h4>
        <h6 class="subtitle is-6">{{ release }}</h6>
-{% end block %}
+{% endblock %}
 
 {% block modal %}
        <form method="POST" action="">
-               {% raw xsrf_form_html() %}
+               {{ xsrf_form_html() | safe }}
 
                <div class="content">
                        <p>
@@ -50,4 +50,4 @@
                        </button>
                </div>
        </form>
-{% end block %}
+{% endblock %}
index 694a1a0759def77bafe74ef4e3adcbccbfbd5c22..08d1501151c4b59f391a1184144b6c36a8c064e2 100644 (file)
@@ -172,13 +172,13 @@ class ReleasesEditHandler(base.BaseHandler):
 
 class ReleasesDeleteHandler(base.BaseHandler):
        @base.authenticated
-       def get(self, distro_slug, release_slug):
-               distro = self.backend.distros.get_by_slug(distro_slug)
+       async def get(self, distro_slug, release_slug):
+               distro = await self.backend.distros.get_by_slug(distro_slug)
                if not distro:
                        raise tornado.web.HTTPError(404, "Could not find distro: %s" % distro_slug)
 
                # Fetch the release
-               release = distro.get_release(release_slug)
+               release = await distro.get_release(release_slug)
                if not release:
                        raise tornado.web.HTTPError(404, "Could not find release %s" % release_slug)
 
@@ -186,16 +186,16 @@ class ReleasesDeleteHandler(base.BaseHandler):
                if not release.has_perm(self.current_user):
                        raise tornado.web.HTTPError(403)
 
-               self.render("distros/releases/delete.html", release=release, distro=distro)
+               await self.render("distros/releases/delete.html", release=release, distro=distro)
 
        @base.authenticated
        async def post(self, distro_slug, release_slug):
-               distro = self.backend.distros.get_by_slug(distro_slug)
+               distro = await self.backend.distros.get_by_slug(distro_slug)
                if not distro:
                        raise tornado.web.HTTPError(404, "Could not find distro: %s" % distro_slug)
 
                # Fetch the release
-               release = distro.get_release(release_slug)
+               release = await distro.get_release(release_slug)
                if not release:
                        raise tornado.web.HTTPError(404, "Could not find release %s" % release_slug)
 
@@ -203,7 +203,8 @@ class ReleasesDeleteHandler(base.BaseHandler):
                if not release.has_perm(self.current_user):
                        raise tornado.web.HTTPError(403)
 
-               with self.db.transaction():
+               # Delete the release
+               async with await self.db.transaction():
                        await release.delete(self.current_user)
 
                # Redirect back to all releases