mirror of https://github.com/sipwise/repoapi.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.2 KiB
77 lines
2.2 KiB
# 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 <http://www.gnu.org/licenses/>.
|
|
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"changes/{id}/")
|
|
return get_gerrit_info(url)
|
|
|
|
|
|
def get_change_info(id: str):
|
|
return get_filtered_json(get_gerrit_info(id))
|
|
|
|
|
|
def get_datetime(val: str) -> datetime.datetime:
|
|
return datetime.datetime.strptime(val, gerrit_settings.DATETIME_FMT)
|