From: Michael Tremer Date: Fri, 24 Jun 2022 15:27:53 +0000 (+0000) Subject: repos: Refactor building mirror list X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=12288cb2499e960f08530eef79c1653338b0d7ad;p=pbs.git repos: Refactor building mirror list Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/mirrors.py b/src/buildservice/mirrors.py index 40579aab..42ab43ae 100644 --- a/src/buildservice/mirrors.py +++ b/src/buildservice/mirrors.py @@ -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 diff --git a/src/buildservice/repository.py b/src/buildservice/repository.py index c0cb6303..4fded828 100644 --- a/src/buildservice/repository.py +++ b/src/buildservice/repository.py @@ -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}" )) diff --git a/src/web/__init__.py b/src/web/__init__.py index cef1554b..80d94149 100644 --- a/src/web/__init__.py +++ b/src/web/__init__.py @@ -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), diff --git a/src/web/handlers.py b/src/web/handlers.py index caa17a15..c7abfb1d 100644 --- a/src/web/handlers.py +++ b/src/web/handlers.py @@ -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): diff --git a/src/web/repos.py b/src/web/repos.py index 0c3cfd48..9df0f2f9 100644 --- a/src/web/repos.py +++ b/src/web/repos.py @@ -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)