#/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()