import base64 import json from kivy.network.urlrequest import UrlRequest from urllib.parse import quote class RESTConnection: def __init__(self, authority, port, root_path, username=None, password=None): self.authority = authority self.port = port self.root_path = root_path self.headers = { 'Content-type': 'application/json', } if username is not None and password is not None: credentials = base64.standard_b64encode(f'{username}:{password}'.encode('UTF8')).decode('UTF8') self.headers['Authorization'] = f'Basic {credentials}' def construct_url(self, resource, get_parameters=None): parameter_string = '&'.join(f'{quote(str(key))}={quote(str(value))}' for key, value in get_parameters.items()) \ if get_parameters is not None else '' return f'https://{self.authority}:{self.port}{self.root_path}/{resource}?{parameter_string}' def send_request_by_url(self, url, post_parameters, on_success, on_failure, on_error): UrlRequest(url, req_headers=self.headers, req_body=json.dumps(post_parameters) if post_parameters is not None else None, on_success=on_success, on_failure=on_failure, on_error=on_error) def send_request(self, resource, get_parameters, post_parameters, on_success, on_failure, on_error): url = self.construct_url(resource, get_parameters) self.send_request_by_url(url, post_parameters, on_success, on_failure, on_error)