2025-01-15 10:42:44 +01:00
|
|
|
import vcs.base
|
|
|
|
|
2025-01-15 11:30:00 +01:00
|
|
|
from lxml import etree as ET
|
|
|
|
|
2025-01-15 10:45:06 +01:00
|
|
|
import osc.core
|
|
|
|
from urllib.error import HTTPError, URLError
|
|
|
|
|
2025-01-15 10:42:44 +01:00
|
|
|
class OSC(vcs.base.VCSBase):
|
|
|
|
"""VCS interface implementation for OSC"""
|
|
|
|
|
|
|
|
def __init__(self, apiurl=None):
|
|
|
|
self.apiurl = apiurl
|
|
|
|
|
|
|
|
@property
|
|
|
|
def name(self) -> str:
|
|
|
|
return "osc"
|
2025-01-15 10:45:06 +01:00
|
|
|
|
|
|
|
def _get(self, l, query=None):
|
|
|
|
"""Construct a complete URL, and issue an HTTP GET to it."""
|
|
|
|
url = osc.core.makeurl(self.apiurl, l, query)
|
|
|
|
return osc.core.http_GET(url)
|
|
|
|
|
|
|
|
def get_path(self, *args):
|
|
|
|
try:
|
|
|
|
return self._get(args)
|
|
|
|
except HTTPError as e:
|
|
|
|
if e.code != 404:
|
|
|
|
raise e
|
|
|
|
return None
|
2025-01-15 11:30:00 +01:00
|
|
|
|
|
|
|
def get_request(self, request_id, with_full_history=False):
|
|
|
|
query = {'withfullhistory': '1'} if with_full_history else None
|
|
|
|
res = self._get(('request', request_id), query)
|
|
|
|
root = ET.parse(res).getroot()
|
|
|
|
req = osc.core.Request()
|
|
|
|
req.read(root)
|
|
|
|
return req
|