-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
datasites.py
132 lines (102 loc) · 48.1 KB
/
datasites.py
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/usr/bin/env python
# coding: utf-8
import syft as sy
from datasets import load_data, generate_mock
from datasets import NAMES, CLEVELAND, HUNGARY, SWITZERLAND, LONG_BEACH
from threading import current_thread
from time import sleep
from typing import Optional
DATASITE_PORTS = {name: (54879 + i) for i, name in enumerate(NAMES)}
DATASITE_URLS = {
name: f"http://localhost:{port}" for name, port in DATASITE_PORTS.items()
}
INSTITUTE_FULLNAMES = {
CLEVELAND: "Clevelan Clinic, Ohio (USA)",
SWITZERLAND: "University Hospitals of Zurich and Basel (Switzerland)",
HUNGARY: "Hungarian Institute of Cardiology, Budapest (Hungary)",
LONG_BEACH: "Veteran Administration Medical Center, Long Beach, California (USA)",
}
def create_syft_dataset(name: str) -> Optional[sy.Dataset]:
"""Creates a new syft.Dataset for the selected datasite/dataset.
None is returned is the matching dataset cannot be found/load from disk.
"""
data = load_data(name=name)
if data is None:
return None
full_name = INSTITUTE_FULLNAMES[name]
dataset = sy.Dataset(
name="Heart Disease Dataset",
summary=(sumry := f"Heart Disease Dataset from {full_name}"),
description=f"""
## Heart Disease Dataset
**Institute**: {full_name}
**Descriptive Statistics** (demographics removed):
{data.drop(["age", "sex"], axis=1).describe().to_markdown()}
**Demographics**:
- `age`: Integer, _age in years_
- `sex`: Categorical, `1 = male; 0 = female`
**Outcome**:
- `num`: Integer, _Angiographic Disease Status_
- Diagnosis: Absence (`num = 0`); Presence (`num > 0`)
""",
) # type: ignore
dataset.add_asset(
sy.Asset(
name="Heart Study Data",
data=data,
mock=generate_mock(data=data, seed=len(name)),
)
)
return dataset
def _get_welcome_message(name: str, full_name: str) -> str:
return f"""
<img src="data:image/png;base64,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" alt="Logo" style="width:48px;height:48px;padding:3px;">
## Welcome to the {name} Datasite
**Institute**: {full_name}
**Deployment Type**: Local
"""
def spawn_server(sid: int):
"""Utility function to launch a new instance of a PySyft Datasite"""
name = NAMES[sid % len(NAMES)]
data_site = sy.orchestra.launch(
name=name,
port=DATASITE_PORTS[name],
reset=True,
n_consumers=3,
create_producer=True,
)
client = data_site.login(email="[email protected]", password="changethis")
# Customise Settings
client.settings.allow_guest_signup(True)
client.settings.welcome_customize(
markdown=_get_welcome_message(name=name, full_name=INSTITUTE_FULLNAMES[name])
)
client.users.create(
email="[email protected]",
password="****",
password_verify="****",
name="OpenMined Researcher",
institution="OpenMined",
website="https://openmined.org",
)
user = client.users[-1]
# user.allow_mock_execution(True)
ds = create_syft_dataset(name)
if not ds is None:
client.upload_dataset(ds)
print(f"Datasite {name} is up and running: {data_site.url}:{data_site.port}")
return data_site, client
def check_and_approve_incoming_requests(client):
"""This utility function will set the server in busy-waiting
to constantly check and auto-approve any incoming code requests.
Note: This function is only intended for the tutorial as demonstration
of the PoC example.
For further information about please check out the official for the
Requests API: https://docs.openmined.org/en/latest/components/requests-api.html
"""
while not current_thread().stopped(): # type: ignore
requests = client.requests
for r in filter(lambda r: r.status.value != 2, requests): # 2 == APPROVED
r.approve(approve_nested=True)
# print("New Request approved in ")
sleep(1)