mirror of
https://git.planet-casio.com/Lephenixnoir/GiteaPC.git
synced 2024-12-29 13:03:41 +01:00
62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
|
from giteapc.util import *
|
||
|
import giteapc.repos
|
||
|
import giteapc.config
|
||
|
import subprocess
|
||
|
import json
|
||
|
import sys
|
||
|
|
||
|
# Provide a mechanism to submit HTTP GET requests to the forge. Try to use the
|
||
|
# requests module if it's available, otherwise default to cURL. If none is
|
||
|
# available, disable network features but keep going.
|
||
|
_http_get = None
|
||
|
|
||
|
try:
|
||
|
import requests
|
||
|
_http_get = requests_get
|
||
|
except ImportError:
|
||
|
pass
|
||
|
|
||
|
if _http_get is None and has_curl():
|
||
|
_http_get = curl_get
|
||
|
|
||
|
if _http_get is None:
|
||
|
warn("found neither requests nor curl, network will be disabled")
|
||
|
|
||
|
# Send a GET request to the specified API endpoint
|
||
|
def _get(url, params=None):
|
||
|
if _http_get is None:
|
||
|
raise Error("cannot access forge (network is disabled)")
|
||
|
return _http_get(giteapc.config.GITEA_URL + "/api/v1" + url, params)
|
||
|
|
||
|
# Search for repositories
|
||
|
def repo_search(keyword, **kwargs):
|
||
|
r = _get("/repos/search", { "q": keyword, **kwargs })
|
||
|
results = json.loads(r)['data']
|
||
|
results = [ giteapc.repos.RemoteRepo(r) for r in results ]
|
||
|
return sorted(results, key=lambda r: r.fullname)
|
||
|
|
||
|
# List all remote repositories (with topic "giteapc")
|
||
|
def all_remote_repos():
|
||
|
return repo_search("giteapc", topic=True)
|
||
|
|
||
|
# Repository info
|
||
|
def repo_get(fullname):
|
||
|
try:
|
||
|
r = _get(f"/repos/{fullname}")
|
||
|
return giteapc.repos.RemoteRepo(json.loads(r))
|
||
|
except NetworkError as e:
|
||
|
if e.status == 404:
|
||
|
return None
|
||
|
else:
|
||
|
raise e
|
||
|
|
||
|
def repo_branches(r):
|
||
|
r = _get(r.url + "/branches")
|
||
|
return json.loads(r)
|
||
|
def repo_tags(r):
|
||
|
r = _get(r.url + "/tags")
|
||
|
return json.loads(r)
|
||
|
def repo_topics(r):
|
||
|
r = _get(r.url + "/topics")
|
||
|
return json.loads(r)["topics"]
|