You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

116 lines
3.1 KiB
Python

import logging
from typing import Dict
import requests
class LibreViewSession:
def __init__(self):
self.authenticated = False
self.token = ""
self.connections = []
def useToken(self, token):
url = "https://api.libreview.io/user"
self.token = token
headers = {
"version": "4.7",
"product": "llu.ios",
"Accept": "application/json",
"Authorization": "Bearer " + self.token
}
response = requests.get(url, headers=headers)
if response.status_code != 200:
logging.debug(f"got status code {response.status_code} when attempting to test token")
self.authenticated = False
else:
self.authenticated = True
def authenticate(self, email, password):
url = "https://api.libreview.io/llu/auth/login"
if self.authenticated:
return
headers = {
"version": "4.7",
"product": "llu.ios",
"Content-Type": "application/json",
"Accept": "application/json"
}
payload = {
"email": email,
"password": password,
}
response = requests.post(url, json=payload, headers=headers)
if response.status_code == 200:
json = response.json()
if 'status' in json:
if json['status'] == 0 and 'data' in json:
data = json['data']
auth_ticket = data['authTicket']
self.token = auth_ticket['token']
self.authenticated = True
else:
self.authenticated = False
logging.debug(f"failed to authenticate with libreview, got status {json['status']}")
return
def getConnections(self):
url = "https://api.libreview.io/llu/connections"
headers = {
"version": "4.7",
"product": "llu.ios",
"Accept": "application/json",
"Authorization": "Bearer " + self.token
}
response = requests.get(url, headers=headers)
if response.status_code != 200:
logging.debug(f"got http response code {response.status_code} from libreview when attempting to get connections")
return []
json = response.json()
if 'data' in json:
self.connections = json['data']
else:
print(response.content)
self.connections = []
def getGraph(self, patientId) -> Dict[str, Dict]:
"""
getGraph gets the LibreView graph for the {patientID}
"""
url = f"https://api.libreview.io/llu/connections/{patientId}/graph"
headers = {
"version": "4.7",
"product": "llu.ios",
"Accept": "application/json",
"Authorization": "Bearer " + self.token
}
response = requests.get(url, headers=headers)
json = response.json()
if 'data' in json:
return json['data']
else:
return {}