# Copyright (C) 2022 The Sipwise Team - http://sipwise.com # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . import datetime import json import requests import structlog from requests.auth import HTTPBasicAuth from .conf import GerritConf gerrit_settings = GerritConf() logger = structlog.get_logger(__name__) def get_gerrit_response(url: str) -> requests.Response: auth = HTTPBasicAuth( gerrit_settings.REST_HTTP_USER, gerrit_settings.REST_HTTP_PASSWD, ) response = requests.get(url, auth=auth) return response def get_filtered_json(text: str): """gerrit responds with malformed json https://gerrit-review.googlesource.com/Documentation/rest-api.html#output """ return json.loads(text[5:]) def get_gerrit_info(url: str) -> str: from django.conf import settings if settings.DEBUG: logger.debug(f"Debug mode, would trigger: {url}") return r")]}'\n[]" else: response = get_gerrit_response(url) response.raise_for_status() return response.text def get_gerrit_tags(project: str, regex=None): url = gerrit_settings.URL.format(f"a/projects/{project}/tags/") return get_gerrit_info(url) def get_gerrit_branches(project: str, regex=None): url = gerrit_settings.URL.format(f"a/projects/{project}/branches/") return get_gerrit_info(url) def get_gerrit_change(id: str) -> str: url = gerrit_settings.URL.format(f"a/changes/{id}") return get_gerrit_info(url) def get_change_info(id: str): return get_filtered_json(get_gerrit_change(id)) def get_datetime(val: str) -> datetime.datetime: return datetime.datetime.strptime(val, gerrit_settings.DATETIME_FMT) def get_gerrit_change_url(id: str, project: str) -> str: return gerrit_settings.URL.format(f"c/{project}/+/{id}")