diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..031e347db662c89bd91749397e73ace571523fcf Binary files /dev/null and b/requirements.txt differ diff --git a/stager_access.py b/stager_access.py index f2d19c0978488b96a77ca3dc28aaf97af7d64fff..a0cfa224f62d4d6a2070e6ec6c706baf2e024bc9 100755 --- a/stager_access.py +++ b/stager_access.py @@ -65,6 +65,7 @@ def parse_config_file(file): # Determine credentials and create proxy user = None passw = None +api_token = None proxy = None if __name__ == "__main__": @@ -83,10 +84,16 @@ if __name__ == "__main__": passw = credentials.get("password") break + if 'api_token' in credentials: + api_token = credentials.get("api_token") + break if user is not None and passw is not None: - print("%s - stager_access: Creating proxy" % (datetime.datetime.now())) + print("%s - stager_access: Creating xml rpc proxy" % (datetime.datetime.now())) proxy = stager_proxy.StagerProxy.from_xml_rpc("https://"+user+':'+passw+"@webportal.astron.nl/service-public/xmlrpc") + elif api_token is not None: + print("%s - stager_access: Creating rest api proxy" % (datetime.datetime.now())) + proxy = stager_proxy.StagerProxy.from_rest_api('http://localhost:8000/api/staging', api_token) else: print("%s - stager_access: Could not find a file with user credentials." % (datetime.datetime.now())) diff --git a/stager_proxy.py b/stager_proxy.py index 6b8d58deb45e9b8c9669d6455f1cf54b16b19c60..9f636d901bcf8d4d009bc8baf01a5284b45d1e28 100644 --- a/stager_proxy.py +++ b/stager_proxy.py @@ -1,4 +1,5 @@ from sys import version_info +import requests python_version = version_info.major if python_version == 3: @@ -17,10 +18,25 @@ class StagerProxy: self.LtaStager = lta_stager @classmethod - def from_xml_rpc(cls, uri): + def from_xml_rpc(cls, uri: str): proxy = xmlrpclib.ServerProxy(uri) return cls(proxy.LtaStager) @classmethod - def from_rest_api(cls, uri): - pass + def from_rest_api(cls, uri: str, token: str): + proxy = RestApiStager(uri, token) + return cls(proxy) + + +class RestApiStager: + def __init__(self, uri: str, token: str): + self.uri = uri + self.token = token + self.headers = { + 'Authorization': f'Token {token}', + 'Content-Type': 'application/json' + } + + def getstatus(self, stageid: str) -> str: + response = requests.get(f'{self.uri}/requests/{stageid}/status', headers=self.headers).json() + return response['status']