neuronum 1.4.1__py3-none-any.whl → 1.4.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of neuronum might be problematic. Click here for more details.

neuronum/neuronum.py CHANGED
@@ -5,7 +5,6 @@ import ssl
5
5
  from websocket import create_connection
6
6
  import json
7
7
 
8
-
9
8
  class Cell:
10
9
  def __init__(self, host: str, password: str, network: str, synapse: str):
11
10
  self.host = host
@@ -30,12 +29,63 @@ class Cell:
30
29
  self.sock.sendall(credentials.encode('utf-8'))
31
30
 
32
31
  response = self.sock.recv(1024).decode('utf-8')
33
- print(response)
34
32
  return "Authentication successful" in response
35
33
 
36
34
 
37
- def activate(self, txID: str, data: dict):
38
- url = f"https://{self.network}/activateTX/{txID}"
35
+ def create_tx(self, descr: str, key_values: dict, ctx: str, label: str, partners: list):
36
+ url = f"https://{self.network}/api/create_tx"
37
+
38
+ TX = {
39
+ "descr": descr,
40
+ "key_values": key_values,
41
+ "ctx": ctx,
42
+ "label": label,
43
+ "partners": partners,
44
+ "cell": self.to_dict()
45
+ }
46
+
47
+ try:
48
+ response = requests.post(
49
+ url,
50
+ json=TX,
51
+ )
52
+
53
+ response.raise_for_status()
54
+
55
+ return response.json()["txID"]
56
+
57
+ except requests.exceptions.RequestException as e:
58
+ print(f"Error sending request: {e}")
59
+ except Exception as e:
60
+ print(f"Unexpected error: {e}")
61
+
62
+
63
+ def delete_tx(self, txID: str):
64
+ url = f"https://{self.network}/api/delete_tx"
65
+
66
+ TX = {
67
+ "txID": txID,
68
+ "cell": self.to_dict()
69
+ }
70
+
71
+ try:
72
+ response = requests.post(
73
+ url,
74
+ json=TX,
75
+ )
76
+
77
+ response.raise_for_status()
78
+
79
+ print(f"Response from Neuronum: {response.json()}")
80
+
81
+ except requests.exceptions.RequestException as e:
82
+ print(f"Error sending request: {e}")
83
+ except Exception as e:
84
+ print(f"Unexpected error: {e}")
85
+
86
+
87
+ def activate_tx(self, txID: str, data: dict):
88
+ url = f"https://{self.network}/api/activate_tx/{txID}"
39
89
 
40
90
  TX = {
41
91
  "data": data,
@@ -58,17 +108,114 @@ class Cell:
58
108
  print(f"Unexpected error: {e}")
59
109
 
60
110
 
111
+ def create_ctx(self, descr: str, partners: list):
112
+ url = f"https://{self.network}/api/create_ctx"
113
+
114
+ CTX = {
115
+ "descr": descr,
116
+ "partners": partners,
117
+ "cell": self.to_dict()
118
+ }
61
119
 
62
- def register(self, node: str, mode: str, stx: str):
120
+ try:
121
+ response = requests.post(
122
+ url,
123
+ json=CTX,
124
+ )
125
+
126
+ response.raise_for_status()
127
+
128
+ return response.json()["ctxID"]
129
+
130
+ except requests.exceptions.RequestException as e:
131
+ print(f"Error sending request: {e}")
132
+ except Exception as e:
133
+ print(f"Unexpected error: {e}")
134
+
135
+
136
+ def delete_ctx(self, ctxID: str):
137
+ url = f"https://{self.network}/api/delete_ctx"
138
+
139
+ CTX = {
140
+ "ctxID": ctxID,
141
+ "cell": self.to_dict()
142
+ }
143
+
144
+ try:
145
+ response = requests.post(
146
+ url,
147
+ json=CTX,
148
+ )
149
+
150
+ response.raise_for_status()
151
+
152
+ print(f"Response from Neuronum: {response.json()}")
153
+
154
+ except requests.exceptions.RequestException as e:
155
+ print(f"Error sending request: {e}")
156
+ except Exception as e:
157
+ print(f"Unexpected error: {e}")
158
+
159
+
160
+ def create_stx(self, descr: str, partners: list):
161
+ url = f"https://{self.network}/api/create_stx"
162
+
163
+ STX = {
164
+ "descr": descr,
165
+ "partners": partners,
166
+ "cell": self.to_dict()
167
+ }
168
+
169
+ try:
170
+ response = requests.post(
171
+ url,
172
+ json=STX,
173
+ )
174
+
175
+ response.raise_for_status()["stxID"]
176
+
177
+ return response.json()
178
+
179
+ except requests.exceptions.RequestException as e:
180
+ print(f"Error sending request: {e}")
181
+ except Exception as e:
182
+ print(f"Unexpected error: {e}")
183
+
184
+
185
+ def delete_stx(self, stxID: str):
186
+ url = f"https://{self.network}/api/delete_stx"
187
+
188
+ STX = {
189
+ "stxID": stxID,
190
+ "cell": self.to_dict()
191
+ }
192
+
193
+ try:
194
+ response = requests.post(
195
+ url,
196
+ json=STX,
197
+ )
198
+
199
+ response.raise_for_status()
200
+
201
+ print(f"Response from Neuronum: {response.json()}")
202
+
203
+ except requests.exceptions.RequestException as e:
204
+ print(f"Error sending request: {e}")
205
+ except Exception as e:
206
+ print(f"Unexpected error: {e}")
207
+
208
+
209
+ def register_node(self, descr: str, mode: str, stx: str):
63
210
  if mode == "public":
64
- url = f"https://{self.network}/register/node/public"
211
+ url = f"https://{self.network}/api/register_node/public"
65
212
  elif mode == "private":
66
- url = f"https://{self.network}/register/node/private"
213
+ url = f"https://{self.network}/api/register_node/private"
67
214
  else:
68
215
  return {"error": "Invalid mode", "message": "Mode has to be 'public' or 'private'"}
69
216
 
70
217
  node_data = {
71
- "name": node,
218
+ "descr": descr,
72
219
  "mode": mode,
73
220
  "stream": stx,
74
221
  "cell": self.to_dict()
@@ -82,17 +229,225 @@ class Cell:
82
229
 
83
230
  response.raise_for_status()
84
231
 
232
+ return response.json()["nodeID"]
233
+
234
+ except requests.exceptions.RequestException as e:
235
+ print(f"Error sending request: {e}")
236
+ except Exception as e:
237
+ print(f"Unexpected error: {e}")
238
+
239
+
240
+ def delete_node(self, nodeID: str):
241
+ url = f"https://{self.network}/api/delete_node"
242
+
243
+ delete_node = {
244
+ "nodeID": nodeID,
245
+ "cell": self.to_dict()
246
+ }
247
+
248
+ try:
249
+ response = requests.post(
250
+ url,
251
+ json=delete_node,
252
+ )
253
+
254
+ response.raise_for_status()
255
+ print(response.json())
256
+
257
+ except requests.exceptions.RequestException as e:
258
+ print(f"Error sending request: {e}")
259
+ except Exception as e:
260
+ print(f"Unexpected error: {e}")
261
+
262
+
263
+ def sign_contract(self, contractID: str):
264
+ full_url = f"https://{self.network}/api/sign_contract"
265
+
266
+ sign_contract = {
267
+ "contractID": contractID,
268
+ "cell": self.to_dict()
269
+ }
270
+
271
+ try:
272
+ response = requests.post(full_url, json=sign_contract)
273
+ response.raise_for_status()
274
+ return response.json()["token"]
275
+ except requests.exceptions.RequestException as e:
276
+ print(f"Error sending request: {e}")
277
+ except Exception as e:
278
+ print(f"Unexpected error: {e}")
279
+
280
+
281
+ def validate_token(self, token: str, cp: str, contractID: str):
282
+ full_url = f"https://{self.network}/api/validate_token"
283
+
284
+ validate = {
285
+ "token": token,
286
+ "cp": cp,
287
+ "contractID": contractID,
288
+ "cell": self.to_dict()
289
+ }
290
+
291
+ try:
292
+ response = requests.post(full_url, json=validate)
293
+ response.raise_for_status()
294
+ return response.json()["validity"]
295
+ except requests.exceptions.RequestException as e:
296
+ print(f"Error sending request: {e}")
297
+ except Exception as e:
298
+ print(f"Unexpected error: {e}")
299
+
300
+
301
+ def request_token(self, cp: str, contractID: str):
302
+ full_url = f"https://{self.network}/api/request_token"
303
+
304
+ request_token = {
305
+ "cp": cp,
306
+ "contractID": contractID,
307
+ "cell": self.to_dict()
308
+ }
309
+
310
+ try:
311
+ response = requests.post(full_url, json=request_token)
312
+ response.raise_for_status()
313
+ print(response.json())
314
+ except requests.exceptions.RequestException as e:
315
+ print(f"Error sending request: {e}")
316
+ except Exception as e:
317
+ print(f"Unexpected error: {e}")
318
+
319
+
320
+ def present_token(self, token: str, cp: str, contractID: str):
321
+ full_url = f"https://{self.network}/api/present_token"
322
+
323
+ present_token = {
324
+ "token": token,
325
+ "cp": cp,
326
+ "contractID": contractID,
327
+ "cell": self.to_dict()
328
+ }
329
+
330
+ try:
331
+ response = requests.post(full_url, json=present_token)
332
+ response.raise_for_status()
333
+ print(response.json())
334
+ except requests.exceptions.RequestException as e:
335
+ print(f"Error sending request: {e}")
336
+ except Exception as e:
337
+ print(f"Unexpected error: {e}")
338
+
339
+
340
+ def create_contract(self, descr: str, details: dict, partners: list):
341
+ full_url = f"https://{self.network}/api/create_contract"
342
+
343
+ create_contract = {
344
+ "cell": self.to_dict(),
345
+ "descr": descr,
346
+ "details": details,
347
+ "partners": partners
348
+ }
349
+ try:
350
+ response = requests.post(full_url, json=create_contract)
351
+ response.raise_for_status()
352
+ return response.json()["contractID"]
353
+ except requests.exceptions.RequestException as e:
354
+ print(f"Error sending request: {e}")
355
+ except Exception as e:
356
+ print(f"Unexpected error: {e}")
357
+
358
+
359
+ def delete_contract(self, contractID: str):
360
+ full_url = f"https://{self.network}/api/delete_contract"
361
+
362
+ request = {
363
+ "cell": self.to_dict(),
364
+ "contractID": contractID
365
+ }
366
+
367
+ try:
368
+ response = requests.post(full_url, json=request)
369
+ response.raise_for_status()
85
370
  print(f"Response from Neuronum: {response.json()}")
371
+ except requests.exceptions.RequestException as e:
372
+ print(f"Error sending request: {e}")
373
+ except Exception as e:
374
+ print(f"Unexpected error: {e}")
375
+
376
+
377
+ def list_contracts(self, cp: str):
378
+ full_url = f"https://{self.network}/api/list_contracts"
379
+
380
+ list_contracts = {
381
+ "cell": self.to_dict(),
382
+ "cp": cp
383
+ }
86
384
 
385
+ try:
386
+ response = requests.post(full_url, json=list_contracts)
387
+ response.raise_for_status()
388
+ return response.json()
87
389
  except requests.exceptions.RequestException as e:
88
390
  print(f"Error sending request: {e}")
89
391
  except Exception as e:
90
392
  print(f"Unexpected error: {e}")
91
393
 
92
394
 
395
+ def list_tx(self, cp: str):
396
+ full_url = f"https://{self.network}/api/list_tx"
397
+
398
+ list_tx = {
399
+ "cell": self.to_dict(),
400
+ "cp": cp
401
+ }
402
+
403
+ try:
404
+ response = requests.post(full_url, json=list_tx)
405
+ response.raise_for_status()
406
+ return response.json()
407
+ except requests.exceptions.RequestException as e:
408
+ print(f"Error sending request: {e}")
409
+ except Exception as e:
410
+ print(f"Unexpected error: {e}")
411
+
93
412
 
94
- def test_connection(self):
95
- url = f"https://{self.network}/testConnection"
413
+ def list_ctx(self, cp: str):
414
+ full_url = f"https://{self.network}/api/list_ctx"
415
+
416
+ list_ctx = {
417
+ "cell": self.to_dict(),
418
+ "cp": cp
419
+ }
420
+
421
+ try:
422
+ response = requests.post(full_url, json=list_ctx)
423
+ response.raise_for_status()
424
+ return response.json()
425
+ except requests.exceptions.RequestException as e:
426
+ print(f"Error sending request: {e}")
427
+ except Exception as e:
428
+ print(f"Unexpected error: {e}")
429
+
430
+
431
+ def list_stx(self, cp: str):
432
+ full_url = f"https://{self.network}/api/list_stx"
433
+
434
+ list_stx = {
435
+ "cell": self.to_dict(),
436
+ "cp": cp
437
+ }
438
+
439
+ try:
440
+ response = requests.post(full_url, json=list_stx)
441
+ response.raise_for_status()
442
+ return response.json()
443
+ except requests.exceptions.RequestException as e:
444
+ print(f"Error sending request: {e}")
445
+ except Exception as e:
446
+ print(f"Unexpected error: {e}")
447
+
448
+
449
+ def connect(self):
450
+ url = f"https://{self.network}/api/connect"
96
451
 
97
452
  test = {
98
453
  "cell": self.to_dict()
@@ -101,7 +456,7 @@ class Cell:
101
456
  try:
102
457
  response = requests.post(url, json=test)
103
458
  response.raise_for_status()
104
- print(response.json())
459
+ print(response.json()["connection"])
105
460
  except requests.exceptions.RequestException as e:
106
461
  print(f"Error sending request: {e}")
107
462
  except Exception as e:
@@ -110,9 +465,9 @@ class Cell:
110
465
 
111
466
  def store(self, label: str, data: dict, ctx: Optional[str] = None):
112
467
  if ctx:
113
- full_url = f"https://{self.network}/store_ctx/{ctx}"
468
+ full_url = f"https://{self.network}/api/store_in_ctx/{ctx}"
114
469
  else:
115
- full_url = f"https://{self.network}/store"
470
+ full_url = f"https://{self.network}/api/store"
116
471
 
117
472
  store = {
118
473
  "label": label,
@@ -133,11 +488,9 @@ class Cell:
133
488
 
134
489
  def load(self, label: str, ctx: Optional[str] = None):
135
490
  if ctx:
136
- full_url = f"https://{self.network}/load_ctx/{ctx}"
491
+ full_url = f"https://{self.network}/api/load_from_ctx/{ctx}"
137
492
  else:
138
- full_url = f"https://{self.network}/load"
139
-
140
- print(f"Full URL: {full_url}")
493
+ full_url = f"https://{self.network}/api/load"
141
494
 
142
495
  load = {
143
496
  "label": label,
@@ -157,11 +510,9 @@ class Cell:
157
510
 
158
511
  def delete(self, label: str, ctx: Optional[str] = None):
159
512
  if ctx:
160
- full_url = f"https://{self.network}/delete_ctx/{ctx}"
513
+ full_url = f"https://{self.network}/api/delete_from_ctx/{ctx}"
161
514
  else:
162
- full_url = f"https://{self.network}/delete"
163
-
164
- print(f"Full URL: {full_url}")
515
+ full_url = f"https://{self.network}/api/delete"
165
516
 
166
517
  delete = {
167
518
  "label": label,
@@ -180,11 +531,9 @@ class Cell:
180
531
 
181
532
  def clear(self, ctx: Optional[str] = None):
182
533
  if ctx:
183
- full_url = f"https://{self.network}/clear_ctx/{ctx}"
534
+ full_url = f"https://{self.network}/api/clear_ctx/{ctx}"
184
535
  else:
185
- full_url = f"https://{self.network}/clear"
186
-
187
- print(f"Full URL: {full_url}")
536
+ full_url = f"https://{self.network}/api/clear"
188
537
 
189
538
  clear = {
190
539
  "cell": self.to_dict()
@@ -240,48 +589,35 @@ class Cell:
240
589
  "password": self.password,
241
590
  "synapse": self.synapse,
242
591
  }
243
- ws = None
244
592
 
245
593
  try:
246
- while True:
247
- try:
248
- ws = create_connection(f"wss://{self.network}/sync/{stx}")
249
- ws.settimeout(1)
250
- ws.send(json.dumps(auth))
251
- print("Stream connection set...")
594
+ ws = create_connection(f"wss://{self.network}/sync/{stx}")
595
+ ws.send(json.dumps(auth))
596
+ print("Stream connection set...")
252
597
 
598
+ try:
599
+ while True:
253
600
  try:
254
601
  raw_operation = ws.recv()
255
602
  operation = json.loads(raw_operation)
256
603
  print("Listening to Stream...")
257
604
  yield operation
258
605
 
259
- ws.settimeout(None)
260
-
261
- while True:
262
- raw_operation = ws.recv()
263
- operation = json.loads(raw_operation)
264
- yield operation
265
606
  except socket.timeout:
266
- print("No initial data received. Retrying connection...")
267
- ws.close()
268
-
269
- except KeyboardInterrupt:
270
- print("Stream-Synchronization ended!")
271
- if ws:
272
- ws.close()
273
- print("Connection closed. Exiting.")
274
- return
275
- except Exception as e:
276
- print(f"{e}")
277
- finally:
278
- if ws:
279
- ws.close()
280
- print("Connection closed.")
607
+ print("No initial data received. Continuing to listen...")
608
+ continue
609
+
610
+ except KeyboardInterrupt:
611
+ print("Stream-Synchronization ended!")
612
+ except Exception as e:
613
+ print(f"Error: {e}")
614
+ finally:
615
+ ws.close()
616
+ print("Connection closed.")
617
+
281
618
  except KeyboardInterrupt:
282
619
  print("Stream-Synchronization ended!")
283
- if ws:
284
- ws.close()
620
+ ws.close()
285
621
  print("Connection closed. Goodbye!")
286
622
 
287
623
 
@@ -0,0 +1,317 @@
1
+ Metadata-Version: 2.1
2
+ Name: neuronum
3
+ Version: 1.4.2
4
+ Summary: Interact with the Neuronum Network to build, connect & automate real-time data streams
5
+ Home-page: https://neuronum.net
6
+ Author: Neuronum Cybernetics
7
+ Author-email: welcome@neuronum.net
8
+ Project-URL: GitHub, https://github.com/neuronumcybernetics/neuronum
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: License :: OSI Approved :: MIT License
11
+ Classifier: Operating System :: OS Independent
12
+ Requires-Python: >=3.6
13
+ Description-Content-Type: text/markdown
14
+ License-File: LICENSE
15
+ Requires-Dist: requests
16
+ Requires-Dist: websocket-client
17
+ Requires-Dist: iota-sdk
18
+
19
+ ![Neuronum Logo](https://neuronum.net/static/logo_pip.png "Neuronum")
20
+
21
+ [![Website](https://img.shields.io/badge/Website-Neuronum-blue)](https://neuronum.net)
22
+ [![Documentation](https://img.shields.io/badge/Docs-Read%20now-green)](https://github.com/neuronumcybernetics/neuronum)
23
+ [![Tutorials](https://img.shields.io/badge/Tutorials-Watch%20now-red)](https://www.youtube.com/@neuronumnet)
24
+
25
+ `Neuronum` is a cybernetic framework enabling businesses to build interconnected networks of Hardware and Software components
26
+
27
+ ## Features
28
+ - **Cell**: Identity to connect and interact with the Neuronum Network
29
+ - **Transmitters (TX)**: Automate economic data transfer and storage
30
+ - **Circuits (CTX)**: Store data in a Key-Value-Label database
31
+ - **Streams (STX)**: Stream, synchronize and control data in real time
32
+ - **Nodes**: Hard-/Software components participating in the Network ecosystem
33
+ - **Contracts/Tokens**: Automate Contract-based authorization between Nodes
34
+
35
+ ## Getting Started
36
+ To interact with the Network you will need to create a Neuronum Cell.
37
+ Create your Cell: [Create Cell](https://neuronum.net/createcell)
38
+
39
+ Start with installing the Neuronum library using pip:
40
+ ```python
41
+ pip install neuronum
42
+ ```
43
+
44
+ Configure and test Cell connection:
45
+ ```python
46
+ import neuronum
47
+
48
+ cell = neuronum.Cell(
49
+ host="host::cell", # specify your cell host
50
+ password="your_password", # enter your cell password
51
+ network="neuronum.net", # choose network
52
+ synapse="your_synapse" # provide the synapse (token)
53
+ )
54
+ cell.connect()
55
+ ```
56
+
57
+ ### Transmitters (TX)
58
+ Transmitters (TX) are used to create predefined templates to receive and send data in a standardized format. Data send with TX is always and automatically stored in a predefined Circuit (CTX)
59
+
60
+ Create Transmitter (TX):
61
+ ```python
62
+ descr = "Test Transmitter" # short description (max 25 characters)
63
+ key_values = { # predefined keys with example values
64
+ "key1": "value1",
65
+ "key2": "value2",
66
+ "key3": "value3",
67
+ }
68
+ ctx = "id::ctx" # target Circuit (CTX)
69
+ label = "key1:key2" # label data sent with the TX
70
+ partners = ["id::cell", "id::cell"] # authorized cells
71
+ txID = cell.create_tx(decr, key_values, ctx, label, partners)
72
+ ```
73
+
74
+ Activate Transmitter (TX):
75
+ ```python
76
+ TX = "id::tx" # specify the Transmitter (TX)
77
+ data = { # enter key values
78
+ "key1": "value1",
79
+ "key2": "value2",
80
+ "key3": "value3",
81
+ }
82
+ cell.activate_tx(TX, data)
83
+ ```
84
+
85
+ Delete Transmitter (TX):
86
+ ```python
87
+ TX = "id::tx" # specify the Transmitter (TX)
88
+ cell.delete_tx(TX)
89
+ ```
90
+
91
+ List Transmitter (TX) from cell:
92
+ ```python
93
+ cell = "id::cell" # specify cell
94
+ txList = cell.list_tx(cell)
95
+ ```
96
+
97
+ ### Circuits (CTX)
98
+ Circuits (CTX) store and organize data sent via Transmitters (TX) using a Key-Value-Label system, ensuring efficient retrieval and management within the Neuronum network
99
+
100
+ Create Circuit (CTX):
101
+ ```python
102
+ descr = "Test Circuit" # short description of the circuit (max 25 characters)
103
+ partners = ["id::cell", "id::cell"] # authorized cells
104
+ ctxID = cell.create_ctx(decr, partners)
105
+ ```
106
+
107
+ Store data on your private Circuit (CTX):
108
+ ```python
109
+ label = "your_label" # define a unique label (tag)
110
+ data = { # store data as key-value pairs
111
+ "key1": "value1",
112
+ "key2": "value2",
113
+ "key3": "value3",
114
+ }
115
+ cell.store(label, data)
116
+ ```
117
+
118
+ Store data on a public Circuit (CTX):
119
+ ```python
120
+ CTX = "id::ctx" # specify the Circuit (CTX
121
+ label = "your_label" # define a unique label (tag)
122
+ data = { # store data as key-value pairs
123
+ "key1": "value1",
124
+ "key2": "value2",
125
+ "key3": "value3",
126
+ }
127
+ cell.store(label, data, CTX)
128
+ ```
129
+
130
+ Load data from your private Circuit (CTX):
131
+ ```python
132
+ label = "your_label" # load data by label
133
+ data = cell.load(label)
134
+ key1 = data["key1"] # get the data from the keys
135
+ key2 = data["key2"]
136
+ key3 = data["key3"]
137
+ ```
138
+
139
+ Load data from a public Circuit (CTX):
140
+ ```python
141
+ CTX = "id::ctx" # specify the CTX
142
+ label = "your_label" # load data by label
143
+ data = cell.load(label, CTX)
144
+ key1 = data["key1"] # get the data from the keys
145
+ key2 = data["key2"]
146
+ key3 = data["key3"]
147
+ ```
148
+
149
+ Delete data from your private Circuit (CTX):
150
+ ```python
151
+ label = "your_label" # delete data by label
152
+ cell.delete(label)
153
+ ```
154
+
155
+ Delete data from a public Circuit (CTX):
156
+ ```python
157
+ CTX = "id::ctx" # specify the CTX
158
+ label = "your_label" # delete data by label
159
+ cell.delete(label, CTX)
160
+ ```
161
+
162
+ Empty your private Circuit (CTX):
163
+ ```python
164
+ cell.clear()
165
+ ```
166
+
167
+ Empty a Circuit (CTX):
168
+ ```python
169
+ CTX = "id::ctx" # specify the CTX
170
+ cell.clear(CTX)
171
+ ```
172
+
173
+ Delete Circuit (CTX):
174
+ ```python
175
+ CTX = "id::ctx" # specify the Circuit (CTX)
176
+ cell.delete_ctx(CTX)
177
+ ```
178
+
179
+ List Circuits (CTX) from cell:
180
+ ```python
181
+ cell = "id::cell" # specify cell
182
+ ctxList = cell.list_ctx(cell)
183
+ ```
184
+
185
+ ### Streams (STX)
186
+ Streams (STX) facilitate real-time data synchronization and interaction, ensuring seamless connectivity between all Nodes in the Neuronum network
187
+
188
+ Create Stream (CTX):
189
+ ```python
190
+ descr = "Test Stream" # short description (max 25 characters)
191
+ partners = ["id::cell", "id::cell"] # authorized cells
192
+ stxID = cell.create_stx(decr, partners)
193
+ ```
194
+
195
+ Stream data to your private Stream (STX):
196
+ ```python
197
+ label = "your_label" # label your data
198
+ data = { # define data package (key-values)
199
+ "key1": "value1",
200
+ "key2": "value2",
201
+ "key3": "value3",
202
+ }
203
+ cell.stream(label, data)
204
+ ```
205
+
206
+ Stream data to a public Stream (STX):
207
+ ```python
208
+ STX = "id::stx" # specify the STX
209
+ label = "your_label" # label your data
210
+ data = { # define data package (key-values)
211
+ "key1": "value1",
212
+ "key2": "value2",
213
+ "key3": "value3",
214
+ }
215
+ cell.stream(label, data, STX)
216
+ ```
217
+
218
+ Sync data from your private Stream (STX):
219
+ ```python
220
+ stream = cell.sync() # retrieve stream data
221
+ for operation in stream: # iterate through each operation
222
+ label = operation.get("label") # get the operation details
223
+ key1 = operation.get("data").get("key1")
224
+ key2 = operation.get("data").get("key2")
225
+ key3 = operation.get("data").get("key3")
226
+ ts = operation.get("time")
227
+ stxID = operation.get("stxID")
228
+ operator = operation.get("operator")
229
+ ```
230
+
231
+ Sync data from a public Stream (STX):
232
+ ```python
233
+ STX = "id::stx" # specify the STX
234
+ stream = cell.sync(STX) # retrieve stream data
235
+ for operation in stream: # iterate through each operation
236
+ label = operation.get("label") # get the operation details
237
+ key1 = operation.get("data").get("key1")
238
+ key2 = operation.get("data").get("key2")
239
+ key3 = operation.get("data").get("key3")
240
+ ts = operation.get("time")
241
+ stxID = operation.get("stxID")
242
+ operator = operation.get("operator")
243
+ ```
244
+
245
+ List Streams (STX) from cell:
246
+ ```python
247
+ cell = "id::cell" # specify cell
248
+ stxList = cell.list_stx(cell)
249
+ ```
250
+
251
+ ### Nodes
252
+ Neuronum Nodes are computing hardware running the Neuronum Client Library, enabling seamless data transmission, synchronization, and facilitating public Stream (STX) access
253
+
254
+ Register a Node with its associated Stream (STX):
255
+ ```python
256
+ descr = "node_name" # short description (max 25 characters)
257
+ mode = "public" # set to "public or "private
258
+ STX = "id::stx" # specify the STX
259
+ nodeID = cell.register_node(descr, mode, STX)
260
+ ```
261
+
262
+ Remove a Node:
263
+ ```python
264
+ nodeID = "id::node" # get Node by ID
265
+ cell.delete_node(nodeID)
266
+ ```
267
+
268
+
269
+ ### Contracts/Tokens
270
+ Contracts define rules for authorization, allowing users to sign and generate unique tokens for secure access
271
+
272
+ Create a Contract:
273
+ ```python
274
+ descr = "Test Contract" # short description (max 25 characters)
275
+ details = { # define token details
276
+ "price_in_eur": 10, # token price in EUR
277
+ "max_usage": 10, # max number of uses
278
+ "validity_in_min": 10 # token expiration time (minutes)
279
+ }
280
+ partners = ["id::cell", "id::cell"]
281
+ contractID = cell.create_contract(descr, details, partners)
282
+ ```
283
+
284
+ Sign a Contract:
285
+ ```python
286
+ contractID = "id::contract" # specify the contract
287
+ token = cell.sign_contract(contractID)
288
+ ```
289
+
290
+ Request a Token from another Cell to authorize a service:
291
+ ```python
292
+ cp = "id::cell" # specify the counterparty cell
293
+ contractID = "id::contract" # specify the contract
294
+ cell.request_token(cp, contractID)
295
+ ```
296
+
297
+ Present a Token to another Cell to authorize a service:
298
+ ```python
299
+ token = "token" # specify the token
300
+ cp = "id::cell" # specify the counterparty cell
301
+ contractID = "id::contract" # specify the contract
302
+ cell.present_token(token, cp, contractID)
303
+ ```
304
+
305
+ Validate a Token to authorize a service:
306
+ ```python
307
+ token = "token" # specify the token
308
+ cp = "id::cell" # specify the counterparty cell
309
+ contractID = "id::contract" # specify the contract
310
+ cell.validate_token(token, cp, contractID)
311
+ ```
312
+
313
+ List Contracts from cell:
314
+ ```python
315
+ cell = "id::cell" # specify cell
316
+ contractList = cell.list_contracts(cell)
317
+ ```
@@ -0,0 +1,7 @@
1
+ neuronum/__init__.py,sha256=Drsm263_w3_VWgl1YsKLUr8WwVodqV3TSjqpxLjyq_M,46
2
+ neuronum/neuronum.py,sha256=Qe8Va5cI5LRFDV0nksedM8HwmbZiTsyNP5QSg9ffFVI,18737
3
+ neuronum-1.4.2.dist-info/LICENSE,sha256=UiZjNHiCyRP6WoZfbYQh9cv4JW96wIofKXmzBJrYSUk,1125
4
+ neuronum-1.4.2.dist-info/METADATA,sha256=J5B-8ngh_GhQW0829pBx3JHoyKk9J6xa663JqPqPH88,10116
5
+ neuronum-1.4.2.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
6
+ neuronum-1.4.2.dist-info/top_level.txt,sha256=73zXVVO9UTTiwEcSaXytsJ8n0q47OCwAqPlIh-hzWJU,9
7
+ neuronum-1.4.2.dist-info/RECORD,,
@@ -1,195 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: neuronum
3
- Version: 1.4.1
4
- Summary: Interact with the Neuronum Network to build, connect & automate real-time data streams
5
- Home-page: https://neuronum.net
6
- Author: Neuronum Cybernetics
7
- Author-email: welcome@neuronum.net
8
- Project-URL: GitHub, https://github.com/neuronumcybernetics/neuronum
9
- Classifier: Programming Language :: Python :: 3
10
- Classifier: License :: OSI Approved :: MIT License
11
- Classifier: Operating System :: OS Independent
12
- Requires-Python: >=3.6
13
- Description-Content-Type: text/markdown
14
- License-File: LICENSE
15
- Requires-Dist: requests
16
- Requires-Dist: websocket-client
17
-
18
- ![Neuronum Logo](https://neuronum.net/static/logo_pip.png "Neuronum")
19
-
20
- [![Website](https://img.shields.io/badge/Website-Neuronum-blue)](https://neuronum.net)
21
- [![Documentation](https://img.shields.io/badge/Docs-Read%20now-green)](https://github.com/neuronumcybernetics/neuronum)
22
- [![Tutorials](https://img.shields.io/badge/Tutorials-Watch%20now-red)](https://www.youtube.com/@neuronumnet)
23
-
24
- Interact with the `Neuronum Network` to build, connect & automate real-time data streams.
25
-
26
- ## Cell Features
27
- - **Transmitters (TX)**: Automate economic data transfer + Circuits Integration
28
- - **Circuits (CTX)**: A simple Key-Value-Label database to store economic data
29
- - **Streams (STX)**: Stream, synchronize and control data in real time
30
- - **Nodes**: Register hardware nodes actively streaming real-time data into the network
31
-
32
- ## Getting Started
33
- Create your Neuronum Cell: [Create Cell](https://neuronum.net/createcell)
34
-
35
- Install the Neuronum library using pip:
36
- ```bash
37
- pip install neuronum
38
- ```
39
-
40
- Set and test Cell connection:
41
- ```bash
42
- import neuronum
43
-
44
- cell = neuronum.Cell(
45
- host="host::cell",
46
- password="your_password",
47
- network="neuronum.net",
48
- synapse="your_synapse"
49
- )
50
- cell.test_connection()
51
- ```
52
-
53
- ### Transmitters (TX)
54
- Activate Transmitter (TX):
55
- ```bash
56
- TX = "id::tx"
57
- data = {
58
- "key1": "value1",
59
- "key2": "value2",
60
- "key3": "value3",
61
- }
62
- cell.activate(TX, data)
63
- ```
64
-
65
- ### Circuits (CTX)
66
- Store data on your private Circuit (CTX):
67
- ```bash
68
- label = "your_label"
69
- data = {
70
- "key1": "value1",
71
- "key2": "value2",
72
- "key3": "value3",
73
- }
74
- cell.store(label, data)
75
- ```
76
-
77
- Store data on a public Circuit (CTX):
78
- ```bash
79
- CTX = "id::ctx"
80
- label = "your_label"
81
- data = {
82
- "key1": "value1",
83
- "key2": "value2",
84
- "key3": "value3",
85
- }
86
- cell.store(label, data, CTX)
87
- ```
88
-
89
- Load data from your private Circuit (CTX):
90
- ```bash
91
- label = "your_label"
92
- data = cell.load(label)
93
- key1 = data["key1"]
94
- key2 = data["key2"]
95
- key3 = data["key3"]
96
- ```
97
-
98
- Load data from a public Circuit (CTX):
99
- ```bash
100
- CTX = "id::ctx"
101
- label = "your_label"
102
- data = cell.load(label, CTX)
103
- key1 = data["key1"]
104
- key2 = data["key2"]
105
- key3 = data["key3"]
106
- ```
107
-
108
- Delete data from your private Circuit (CTX):
109
- ```bash
110
- label = "your_label"
111
- data = cell.delete(label)
112
- ```
113
-
114
- Delete data from a public Circuit (CTX):
115
- ```bash
116
- CTX = "id::ctx"
117
- label = "your_label"
118
- data = cell.delete(label, CTX)
119
- ```
120
-
121
- Empty your private Circuit (CTX):
122
- ```bash
123
- cell.clear()
124
- ```
125
-
126
- Empty a public Circuit (CTX):
127
- ```bash
128
- CTX = "id::ctx"
129
- cell.clear(CTX)
130
- ```
131
-
132
- ### Streams (STX)
133
- Stream data to your private Stream (STX):
134
- ```bash
135
- label = "your_label"
136
- data = {
137
- "key1": "value1",
138
- "key2": "value2",
139
- "key3": "value3",
140
- }
141
- cell.stream(label, data)
142
- ```
143
-
144
- Stream data to a public Stream (STX):
145
- ```bash
146
- STX = "id::stx"
147
- label = "your_label"
148
- data = {
149
- "key1": "value1",
150
- "key2": "value2",
151
- "key3": "value3",
152
- }
153
- cell.stream(label, data, STX)
154
- ```
155
-
156
- Sync data from your private Stream (STX):
157
- ```bash
158
- stream = cell.sync()
159
- for operation in stream:
160
- label = operation.get("label")
161
- value = operation.get("data").get("key1")
162
- ts = operation.get("time")
163
- stxID = operation.get("stxID")
164
- operator = operation.get("operator")
165
- ```
166
-
167
- Sync data from a public Stream (STX):
168
- ```bash
169
- STX = "id::stx"
170
- stream = cell.sync(STX)
171
- for operation in stream:
172
- label = operation.get("label")
173
- value = operation.get("data").get("key1")
174
- ts = operation.get("time")
175
- stxID = operation.get("stxID")
176
- operator = operation.get("operator")
177
- ```
178
-
179
- ### Nodes
180
- Register a public Node with its associated Stream (STX):
181
- ```bash
182
- node = "node_name" # Unique node name
183
- mode = "public"
184
- STX = "id::stx"
185
- cell.register(node, mode, STX)
186
- ```
187
-
188
- Register a private Node with its associated Stream (STX):
189
- ```bash
190
- node = "node_name" # Unique node name
191
- mode = "private"
192
- STX = "id::stx"
193
- cell.register(node, mode, STX)
194
- ```
195
-
@@ -1,7 +0,0 @@
1
- neuronum/__init__.py,sha256=Drsm263_w3_VWgl1YsKLUr8WwVodqV3TSjqpxLjyq_M,46
2
- neuronum/neuronum.py,sha256=X5peM3ZOK7MJU-zS8GeqBC2vBu-weAJgCfzQ48I3FvI,8908
3
- neuronum-1.4.1.dist-info/LICENSE,sha256=UiZjNHiCyRP6WoZfbYQh9cv4JW96wIofKXmzBJrYSUk,1125
4
- neuronum-1.4.1.dist-info/METADATA,sha256=lg-qZ407i0vZsj4BNVR7X8_keos82I4r7pnzMVjwjwc,4590
5
- neuronum-1.4.1.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
6
- neuronum-1.4.1.dist-info/top_level.txt,sha256=73zXVVO9UTTiwEcSaXytsJ8n0q47OCwAqPlIh-hzWJU,9
7
- neuronum-1.4.1.dist-info/RECORD,,