Skip to content
Snippets Groups Projects
Commit 382c7e01 authored by Brady James Garvin's avatar Brady James Garvin
Browse files

Initial commit.

parents
Branches
Tags
No related merge requests found
*~
*.pyc
*.pyo
.idea
main.py 0 → 100644
from kivy.app import App
from kivy.uix.label import Label
from kivy.logger import Logger
from json import dumps
from openmrs import RESTConnection
class RestApp(App):
def load_locations(self):
self.root.ids.results.clear_widgets()
openmrs_connection = RESTConnection('localhost', 8080, 'admin', 'Admin123')
openmrs_connection.send_request('location', None, None, self.on_locations_loaded,
self.on_locations_not_loaded, self.on_locations_not_loaded)
def on_locations_loaded(self, _, response):
print(dumps(response, indent=4, sort_keys=True))
results_layout = self.root.ids.results
for result in response['results']:
results_layout.add_widget(Label(text=result['display']))
def on_locations_not_loaded(self, _, error):
self.root.ids.results.add_widget(Label(text='[Failed to load locations]'))
Logger.error(f'{self.__class__.__name__}: {error}')
if __name__ == '__main__':
app = RestApp()
app.run()
from kivy.network.urlrequest import UrlRequest
import base64
import json
try:
from urllib import quote
except ImportError:
from urllib.parse import quote
class RESTConnection:
def __init__(self, authority, port, username, password):
self.authority = authority
self.port = port
credentials = f'{username}:{password}'
credentials = base64.standard_b64encode(credentials.encode('UTF8')).decode('UTF8')
self.headers = {
'Authorization': f'Basic {credentials}',
'Content-type': 'application/json',
}
def construct_url(self, resource, get_parameters=None):
get_parameters = '&'.join(f'{quote(str(key))}={quote(str(value))}' for key, value in get_parameters.items()) \
if get_parameters is not None else ''
return f'http://{self.authority}:{self.port}/openmrs/ws/rest/v1/{resource}?{get_parameters}'
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)
BoxLayout:
orientation: 'vertical'
BoxLayout:
id: results
orientation: 'vertical'
Button:
text: 'Load Locations'
on_press: app.load_locations()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment