mirror of
https://github.com/Lunik/gitea_prometheus_exporter.git
synced 2025-04-19 22:02:15 +03:00
65 lines
1.7 KiB
Python
65 lines
1.7 KiB
Python
import requests
|
|
import json
|
|
|
|
class GiteaAPI:
|
|
def __init__(self, base_url, token, api_version="v1"):
|
|
self.base_url = "{url}/api/{version}".format(url=base_url, version=api_version)
|
|
self.headers = {
|
|
"Authorization": "token {}".format(token),
|
|
"Content-type": "application/json",
|
|
}
|
|
|
|
self.requests = requests.Session()
|
|
|
|
@staticmethod
|
|
def parse_response(result):
|
|
if result.text and len(result.text) > 3:
|
|
return json.loads(result.text)
|
|
return {}
|
|
|
|
def _get_url(self, endpoint):
|
|
return "{url}/{endpoint}".format(url=self.base_url, endpoint=endpoint)
|
|
|
|
def requests_get(self, endpoint, params={}, raw=False):
|
|
params = params.copy()
|
|
response = self.requests.get(self._get_url(endpoint), headers=self.headers, params=params)
|
|
|
|
print(response.url)
|
|
|
|
if raw:
|
|
return response
|
|
|
|
if response.status_code == 204:
|
|
return None
|
|
|
|
if response.status_code not in [200, 201]:
|
|
message = "Received status code: %s (%s)" % (
|
|
response.status_code,
|
|
response.url,
|
|
)
|
|
|
|
if response.status_code in [404]:
|
|
raise Exception(message)
|
|
|
|
if response.status_code in [403]:
|
|
raise Exception(
|
|
"Unauthorized: %s - Check your permissions and try again! (%s)"
|
|
% (response.url, message)
|
|
)
|
|
|
|
if response.status_code in [409]:
|
|
raise Exception(message)
|
|
|
|
raise Exception(message)
|
|
|
|
result = self.parse_response(response)
|
|
|
|
if "X-Total-Count" in response.headers and len(result) > 0:
|
|
if "page" in params:
|
|
params['page'] += 1
|
|
else:
|
|
params['page'] = 2
|
|
|
|
result += self.requests_get(endpoint, params=params)
|
|
|
|
return result |