From 8c970f63914b781771e637be3c0c53802e99562d Mon Sep 17 00:00:00 2001 From: ahtlon Date: Wed, 11 Mar 2026 20:59:12 +0100 Subject: [PATCH] Add translator server --- gitea_hydra_server.py | 71 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 gitea_hydra_server.py diff --git a/gitea_hydra_server.py b/gitea_hydra_server.py new file mode 100644 index 00000000..5abc934a --- /dev/null +++ b/gitea_hydra_server.py @@ -0,0 +1,71 @@ +#/usr/bin/env python3 + +#imports +import os +import json +from http.server import BaseHTTPRequestHandler, HTTPServer +import urllib.request + +#Vars +baseurl="git.dynamicdiscord.de" +owner="ahtlon" +repo="infrastructure" +host="127.0.0.1" +port=27364 + +def _get_api_response(): + ###https://docs.gitea.com/api/1.21/#tag/repository/operation/repoListPullRequests + ###GET /api/v1/repos/{owner}/{repo}/pulls + url=(f"https://{baseurl}/api/v1/repos/{owner}/{repo}/pulls?state=open") + headers={"Accept": "application/json"} + req=urllib.request.Request(url, headers=headers) + with urllib.request.urlopen(req) as resp: + return json.loads(resp.read().decode("utf-8")) + +def _parse_response(): + target_repo_url=f"https://{baseurl}/{owner}/{repo}.git" + pulls: dict={} + response=_get_api_response() + for pr in response: + pr["target_repo_url"]=target_repo_url + pulls[str(pr["number"])]=pr + return pulls + +class PullsHandler(BaseHTTPRequestHandler): + _VALID_PATHS={"/", "gitea-pulls-sorted.json"} + + def do_GET(self): + if self.path not in self._VALID_PATHS: + self.send_error(404, "Not Found") + return + + answer=dict(_parse_response()) + + body=json.dumps(answer, indent=2, sort_keys=True).encode("utf-8") + + self.send_response(200) + self.send_header("Content-Type", "application/json; charset=utf-8") + self.send_header("Content-Length", str(len(body))) + self.end_headers() + self.wfile.write(body) + + def log_message(self, fmt, *args): + print( + f"[gitea-translator] {self.address_string()} - {fmt % args}", + flush=True, + ) + +def main(): + print( + f"[gitea-translator] Starting, pulling from {baseurl}/{owner}/{repo}", + flush=True, + ) + server=HTTPServer((host, port), PullsHandler) + print( + f"[gitea-translator] online @ {host}:{port}", + flush=True, + ) + server.serve_forever() + +if __name__ == "__main__": + main()