-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathclient.py
More file actions
49 lines (40 loc) · 1.32 KB
/
client.py
File metadata and controls
49 lines (40 loc) · 1.32 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
"""Streamdata.io demo."""
import collections
import json
import jsonpatch
import requests
import sseclient
from terminaltables import AsciiTable
SD_TOKEN = "[YOUR_STREAMDATAIO_APP_TOKEN]"
DEMO_API = "http://stockmarket.streamdata.io/v2/prices"
URL = (
"https://streamdata.motwin.net/{}?X-Sd-Token={}".format(DEMO_API, SD_TOKEN)
)
def print_table(data):
"""Print data as a table."""
table_data = []
for item in data:
item = collections.OrderedDict(
sorted(item.items(), key=lambda t: t[0]))
if len(table_data) == 0:
table_data.append(item.keys())
table_data.append(item.values())
table = AsciiTable(table_data)
print(table.table)
def run():
"""Launch client."""
with requests.get(URL, stream=True) as response:
client = sseclient.SSEClient(response)
for event in client.events():
if event.event == "data":
print("Data event received")
data = json.loads(event.data)
elif event.event == "patch":
print("Patch event received")
patch = jsonpatch.JsonPatch.from_string(event.data)
patch.apply(data, in_place=True)
else:
print("Unhandled event received.")
print_table(data)
if __name__ == "__main__":
run()