]> git.ipfire.org Git - pbs.git/commitdiff
repos: Refactor building mirror list
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 24 Jun 2022 15:27:53 +0000 (15:27 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 24 Jun 2022 15:27:53 +0000 (15:27 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/mirrors.py
src/buildservice/repository.py
src/web/__init__.py
src/web/handlers.py
src/web/repos.py

index 40579aab4296b55777014747a87423b00f17fb2f..42ab43ae104f42992e607027aa197cfc28f3e4d3 100644 (file)
@@ -276,7 +276,7 @@ class Mirror(base.DataObject):
 
        @lazy_property
        def country_code(self):
-               network = self.location.lookup(self.address)
+               network = self.backend.mirrors.location.lookup(self.address)
 
                if network:
                        return network.country_code
index c0cb6303a4700acbb617ab6abc1a3357179b2b29..4fded82830183c17715b9bb7c769fd9d879c63b6 100644 (file)
@@ -191,8 +191,10 @@ class Repository(base.DataObject):
        def mirrorlist(self):
                return "/".join((
                        self.settings.get("baseurl", "https://pakfire.ipfire.org"),
-                       "distro", self.distro.slug,
-                       "repo", self.slug,
+                       "distros",
+                       self.distro.slug,
+                       "repos",
+                       self.slug,
                        "mirrorlist?arch=%{arch}"
                ))
 
index cef1554b7ab9ca091faa02c6776e53fe17835a88..80d94149e15e5a6014a4d3973a44d2ca81aebfd5 100644 (file)
@@ -159,9 +159,8 @@ class Application(tornado.web.Application):
                        (r"/distros/([A-Za-z0-9\-\.]+)/repos/([A-Za-z0-9\-]+)", repos.ShowHandler),
                        (r"/distros/([A-Za-z0-9\-\.]+)/repos/([A-Za-z0-9\-]+)\.repo", repos.ConfigHandler),
                        (r"/distros/([A-Za-z0-9\-\.]+)/repos/([A-Za-z0-9\-]+)/builds", repos.BuildsHandler),
+                       (r"/distros/([A-Za-z0-9\-\.]+)/repos/([A-Za-z0-9\-]+)/mirrorlist", repos.MirrorlistHandler),
 
-                       (r"/distro/([A-Za-z0-9\-\.]+)/repo/([A-Za-z0-9\-]+)/mirrorlist",
-                               RepositoryMirrorlistHandler),
                        (r"/distro/([A-Za-z0-9\-\.]+)/repo/([A-Za-z0-9\-]+)/edit",
                                RepositoryEditHandler),
 
index caa17a1547ef60e46450534d70cfd4f11993181e..c7abfb1d99d357aa29a3a6282d9fe0d41614e8b0 100644 (file)
@@ -49,47 +49,6 @@ class RepositoryEditHandler(base.BaseHandler):
                self.render("repository-edit.html", distro=distro, repo=repo)
 
 
-class RepositoryMirrorlistHandler(base.BaseHandler):
-       def get(self, distro, repo):
-               distro = self.backend.distros.get_by_slug(distro)
-               if not distro:
-                       raise tornado.web.HTTPError(404)
-
-               repo = distro.get_repo(repo)
-               if not repo:
-                       raise tornado.web.HTTPError(404)
-
-               # Send nothing if repository isn't supposed to be mirrored
-               if not repo.mirrored:
-                       raise tornado.web.HTTPError(404)
-
-               # This is a plaintext file.
-               self.set_header("Content-Type", "text/plain")
-
-               # Fetch architecture
-               arch = self.get_argument("arch")
-
-               ret = {
-                       "type"    : "mirrorlist",
-                       "version" : 1,
-               }
-
-               mirrors = []
-               for mirror in self.backend.mirrors.make_mirrorlist(self.current_address):
-                       mirrors.append({
-                               "url"       : "/".join((mirror.url, repo.basepath, arch)),
-                               "location"  : mirror.country_code,
-                       })
-
-               # Always use the buildservice itself as last resort
-               mirrors.append({
-                       "url" : "/".join((repo.url, arch)),
-               })
-
-               ret["mirrors"] = mirrors
-               self.finish(ret)
-
-
 class RepoActionHandler(base.BaseHandler):
        @tornado.web.authenticated
        def post(self, type):
index 0c3cfd48ea7badc4128972940dd4dd4335d1556b..9df0f2f96b1391135a183698d11c91d0d9f9bfdc 100644 (file)
@@ -76,6 +76,46 @@ class ConfigHandler(base.BaseHandler):
                self.finish(config)
 
 
+class MirrorlistHandler(base.BaseHandler):
+       def get(self, distro_slug, repo_slug):
+               # Find the distribution
+               distro = self.backend.distros.get_by_slug(distro_slug)
+               if not distro:
+                       raise tornado.web.HTTPError(404, "Could not find distro: %s" % distro_slug)
+
+               # Find the repository
+               repo = distro.get_repo(repo_slug)
+               if not repo:
+                       raise tornado.web.HTTPError(404, "Could not find repo: %s" % repo_slug)
+
+               # Send nothing if repository isn't supposed to be mirrored
+               if not repo.mirrored:
+                       raise tornado.web.HTTPError(404)
+
+               # Fetch architecture
+               arch = self.get_argument("arch")
+
+               mirrors = []
+
+               # Fetch mirrors
+               for mirror in self.backend.mirrors.make_mirrorlist(self.current_address):
+                       mirrors.append({
+                               "url"       : "/".join((mirror.url, repo.path, arch)),
+                               "location"  : mirror.country_code,
+                       })
+
+               # Always use the buildservice itself as last resort
+               mirrors.append({
+                       "url" : "/".join((repo.url, arch)),
+               })
+
+               self.finish({
+                       "type"    : "mirrorlist",
+                       "version" : 1,
+                       "mirrors" : mirrors,
+               })
+
+
 class ListModule(ui_modules.UIModule):
        def render(self, repos):
                return self.render_string("repos/modules/list.html", repos=repos)