]> git.ipfire.org Git - pbs.git/commitdiff
builds: Implement filtering by user
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 29 Apr 2023 12:30:19 +0000 (12:30 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 29 Apr 2023 15:06:19 +0000 (15:06 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/builds.py
src/templates/base.html
src/templates/builds/index.html
src/web/builds.py
src/web/users.py

index 12fbdeeb129533e9c7c823e37620ac66cf1d378e..ea7a91b1d4bef07ddecc2d7f8777890ceca89549 100644 (file)
@@ -138,6 +138,30 @@ class Builds(base.Object):
 
                return list(builds)
 
+       def get_by_user(self, user, limit=None, offset=None):
+               """
+                       Returns builds by a certain user
+               """
+               builds = self._get_builds("""
+                       SELECT
+                               *
+                       FROM
+                               builds
+                       WHERE
+                               deleted_at IS NULL
+                       AND
+                               owner_id = %s
+                       ORDER BY
+                               created_at DESC
+                       LIMIT
+                               %s
+                       OFFSET
+                               %s
+                       """, user, limit, offset,
+               )
+
+               return list(builds)
+
        async def create(self, repo, package, owner=None, group=None):
                """
                        Creates a new build based on the given distribution and package
index 15a9e67b808ef9811c37f1e258578cbbb8c53d76..5edafb16ea7c88b83424043cf5b205b1ba9646f2 100644 (file)
                                                                </a>
 
                                                                <div class="navbar-dropdown is-boxed">
-                                                                       <a class="navbar-item" href="/profile/builds">
+                                                                       <a class="navbar-item" href="/builds?user={{ current_user.name }}">
                                                                                {{ _("My Builds") }}
                                                                        </a>
+
                                                                        <hr class="navbar-divider">
+
                                                                        <a class="navbar-item" href="/logout">
                                                                                {{ _("Logout") }}
                                                                        </a>
index 44ab693360b208e71caf458bab7feecb88778b71..95b22af91f05596aac74ad875d0c1c5fc2b1ddb9 100644 (file)
                </ul>
        </nav>
 
-       <h1 class="title">{{ _("Recent Builds") }}</h1>
+       <h1 class="title">
+               {% if user %}
+                       {{ _("%s's Builds") % user }}
+               {% else %}
+                       {{ _("Recent Builds") }}
+               {% end %}
+       </h1>
 
        {# Render all builds #}
        {% module BuildsList(builds) %}
index e3f644b2b753d86180d49cd3181311645de03e56..0089988c85f5c5322f50a1b954e65700dc31aa64 100644 (file)
@@ -58,10 +58,16 @@ class APIv1IndexHandler(base.APIMixin, base.BaseHandler):
 
 class IndexHandler(base.BaseHandler):
        def get(self):
+               # Filters
+               user = self.get_argument_user("user", None)
+
                # Fetch the most recent builds
-               builds = self.backend.builds.get_recent(limit=25)
+               if user:
+                       builds = self.backend.builds.get_by_user(user, limit=25)
+               else:
+                       builds = self.backend.builds.get_recent(limit=25)
 
-               self.render("builds/index.html", builds=builds)
+               self.render("builds/index.html", builds=builds, user=user)
 
 
 class ShowHandler(base.BaseHandler):
index 4c770bac58b96bbe6fb1efffcf0cffe6b22cac80..ab2d22fd77ef4c83d7249ccc23fb53b2b729b633 100644 (file)
@@ -78,6 +78,15 @@ class EditHandler(base.BaseHandler):
                self.redirect("/users/%s" % user.name)
 
 
+class BuildsHandler(base.BaseHandler):
+       def get(self, name):
+               user = self.backend.users.get_by_name(name)
+               if not user:
+                       raise tornado.web.HTTPError(404, "Could not find user: %s" % name)
+
+               self.render("users/builds.html", user=user, builds=user.builds)
+
+
 class ListModule(ui_modules.UIModule):
        def render(self, users):
                return self.render_string("users/modules/list.html", users=users)