-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapi.py
More file actions
56 lines (42 loc) · 2.02 KB
/
Copy pathapi.py
File metadata and controls
56 lines (42 loc) · 2.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
from flask import Flask, request
from re import match
from requests import get, post
from keys import APP_ID, API_KEY
app = Flask(__name__)
@app.route('/symptoms', methods=['GET'])
def symptoms():
return {'symptoms': infermedica_symptoms}, 200
@app.route('/diagnosis', methods=['POST'])
def diagnosis():
arguments = request.json if request.json else {}
try:
assert 'gender' in arguments, 'Missing <gender> argument'
assert str(arguments['gender']).lower() in ['male', 'female'], '<gender> argument requires value of "male" or "female"'
assert 'age' in arguments, 'Missing <age> argument'
assert match(r'^[0-9]+$', str(arguments['age'])), '<age> argument requires integer value'
assert 'symptoms' in arguments, 'Missing <symptoms> argument'
assert isinstance(arguments['symptoms'], list), '<symptoms> argument requires list of symptoms'
except AssertionError as error:
return {'message': str(error)}, 400
body = {'sex': arguments['gender'].lower(), 'age': int(arguments['age'])}
symptom_ids = []
for experienced_symptom in arguments['symptoms']:
symptom_ids += [{'id': experienced_symptom, 'choice_id': 'present'}]
body.update({'evidence': symptom_ids})
diagnosis_request = post(base+'/diagnosis', json=body, headers=__headers).json()
infermedica_diagnosis = []
try:
conditions = diagnosis_request['conditions']
for condition in conditions:
infermedica_diagnosis += [{'name': condition['common_name'], 'probability': condition['probability']*100}]
except KeyError:
return {'message': 'Invalid request'}, 400
return {'conditions': infermedica_diagnosis}, 200
__headers = {'App-Id': APP_ID, 'App-Key': API_KEY}
base = 'https://api.infermedica.com/v2'
infermedica_symptoms = []
symptoms_request = get(base+'/symptoms', headers=__headers).json()
for symptom in symptoms_request:
infermedica_symptoms += [{'id': symptom['id'], 'name': symptom['common_name']}]
if __name__ == '__main__':
app.run()