neuronum 5.0.0__py3-none-any.whl → 5.1.0__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.

cli/main.py CHANGED
@@ -249,10 +249,11 @@ def delete_cell():
249
249
  @click.command()
250
250
  @click.option('--sync', multiple=True, default=None, help="Optional stream IDs for sync.")
251
251
  @click.option('--stream', multiple=True, default=None, help="Optional stream ID for stream.")
252
- def init_node(sync, stream):
253
- asyncio.run(async_init_node(sync, stream))
252
+ @click.option('--app', is_flag=True, help="Generate a Node with app template")
253
+ def init_node(sync, stream, app):
254
+ asyncio.run(async_init_node(sync, stream, app))
254
255
 
255
- async def async_init_node(sync, stream):
256
+ async def async_init_node(sync, stream, app):
256
257
  credentials_folder_path = Path.home() / ".neuronum"
257
258
  env_path = credentials_folder_path / ".env"
258
259
 
@@ -319,13 +320,35 @@ async def async_init_node(sync, stream):
319
320
  await asyncio.to_thread(gitignore_path.write_text, ".env\n")
320
321
 
321
322
  nodemd_path = project_path / "NODE.md"
322
- await asyncio.to_thread(nodemd_path.write_text, """### Getting started template: Neuronum NODE.md
323
- ### Use this .md file to add instructions on how to interact with your Node
323
+ await asyncio.to_thread(nodemd_path.write_text, """### NODE.md: How to interact with this Node
324
324
 
325
325
  ```json
326
326
  {
327
- "Use Case": "Getting started Node streaming: Hello, Neuronum!",
328
- "Requirements": [
327
+ "info": {
328
+ "use_case": "This Node...",
329
+ "github": "https://github.com/user"
330
+ },
331
+ "gateways": [
332
+ {
333
+ "type": "stream",
334
+ "id": "id::stx",
335
+ "link": "https://neuronum.net/stream/id::stx"
336
+ },
337
+ {
338
+ "type": "transmitter",
339
+ "id": "id::tx",
340
+ "link": "https://neuronum.net/tx/id::tx",
341
+ }
342
+ {
343
+ "type": "circuit",
344
+ "id": "id::ctx",
345
+ "link": "https://neuronum.net/circuit/id::ctx",
346
+ }
347
+ ],
348
+ "initialization": {
349
+ "command": "neuronum init-node --sync id::stx"
350
+ },
351
+ "requirements": [
329
352
  {
330
353
  "name": "Python",
331
354
  "version": ">= 3.8",
@@ -333,12 +356,10 @@ async def async_init_node(sync, stream):
333
356
  },
334
357
  {
335
358
  "name": "neuronum",
336
- "version": ">= 4.0.0",
359
+ "version": ">= 5.1.0",
337
360
  "link": "https://pypi.org/project/neuronum/"
338
361
  }
339
- ],
340
- "Installation": "pip install neuronum",
341
- "Initialization": "neuronum init-node"
362
+ ]
342
363
  }
343
364
  ```"""
344
365
  )
@@ -418,7 +439,7 @@ async def main():
418
439
  asyncio.run(main())
419
440
  """)
420
441
 
421
- if not sync and not stream:
442
+ if not sync and not stream and not app:
422
443
  sync_path = project_path / f"sync_{stx.replace('::stx', '')}.py"
423
444
  sync_path.write_text(f"""\
424
445
  import asyncio
@@ -476,6 +497,56 @@ async def main():
476
497
  }}
477
498
  await cell.stream(label, data)
478
499
 
500
+ asyncio.run(main())
501
+ """)
502
+
503
+ if app:
504
+ app_path = project_path / "app.py"
505
+ app_path.write_text(f"""\
506
+ import asyncio
507
+ import neuronum
508
+ import os
509
+ from dotenv import load_dotenv
510
+
511
+ load_dotenv()
512
+ host = os.getenv("HOST")
513
+ password = os.getenv("PASSWORD")
514
+ network = os.getenv("NETWORK")
515
+ synapse = os.getenv("SYNAPSE")
516
+
517
+ cell = neuronum.Cell(
518
+ host=host,
519
+ password=password,
520
+ network=network,
521
+ synapse=synapse
522
+ )
523
+
524
+ async def main():
525
+ STX = "id::stx"
526
+ async for operation in cell.sync(STX):
527
+ txID = operation.get("txID")
528
+
529
+ if txID == "id::tx":
530
+ client = operation.get("operator")
531
+ data = {{
532
+ "response": "TX activated!"
533
+ }}
534
+ await cell.tx_response(txID, client, data)
535
+
536
+ if txID == "id::tx":
537
+ client = operation.get("operator")
538
+ data = {{
539
+ "response": "TX activated!"
540
+ }}
541
+ await cell.tx_response(txID, client, data)
542
+
543
+ if txID == "id::tx":
544
+ client = operation.get("operator")
545
+ data = {{
546
+ "response": "TX activated!"
547
+ }}
548
+ await cell.tx_response(txID, client, data)
549
+
479
550
  asyncio.run(main())
480
551
  """)
481
552
 
@@ -488,7 +559,7 @@ def start_node(d):
488
559
  click.echo("Starting Node...")
489
560
 
490
561
  project_path = Path.cwd()
491
- script_files = glob.glob("sync_*.py") + glob.glob("stream_*.py")
562
+ script_files = glob.glob("sync_*.py") + glob.glob("stream_*.py") + glob.glob("app.py")
492
563
 
493
564
  processes = []
494
565
  system_name = platform.system()
neuronum/neuronum.py CHANGED
@@ -164,7 +164,6 @@ class Cell:
164
164
 
165
165
  async def activate_tx(self, txID: str, data: dict):
166
166
  url = f"https://{self.network}/api/activate_tx/{txID}"
167
-
168
167
  TX = {
169
168
  "data": data,
170
169
  "cell": self.to_dict()
@@ -173,18 +172,15 @@ class Cell:
173
172
  async with aiohttp.ClientSession() as session:
174
173
  try:
175
174
  async with session.post(url, json=TX) as response:
176
- response.raise_for_status()
177
175
  response.raise_for_status()
178
176
  data = await response.json()
179
177
  if data["success"] == "activated":
180
178
  async for operation in self.sync():
181
179
  label = operation.get("label")
182
- if label == "tx_response":
183
- operation_id = operation.get("operationID")
184
- if operation_id == data["operationID"]:
185
- tx_response = operation.get("data")
186
- return tx_response
187
-
180
+ if label == "tx_response":
181
+ operation_txID = operation.get("txID")
182
+ if operation_txID == txID:
183
+ return operation.get("data")
188
184
  else:
189
185
  print(data["success"], data["message"])
190
186
 
@@ -194,29 +190,27 @@ class Cell:
194
190
  print(f"Unexpected error: {e}")
195
191
 
196
192
 
197
- async def tx_response(self, txID: str, cc: str, operationID: str, data: dict):
193
+ async def tx_response(self, txID: str, client: str, data: dict):
198
194
  url = f"https://{self.network}/api/tx_response/{txID}"
199
195
 
200
196
  tx_response = {
201
- "cc": cc,
202
- "operationID": operationID,
197
+ "client": client,
203
198
  "data": data,
204
199
  "cell": self.to_dict()
205
200
  }
206
201
 
207
202
  async with aiohttp.ClientSession() as session:
208
- for attempt in range(5):
209
- try:
203
+ try:
204
+ for _ in range(2):
210
205
  async with session.post(url, json=tx_response) as response:
211
206
  response.raise_for_status()
212
207
  data = await response.json()
213
-
214
- except aiohttp.ClientError as e:
215
- print(f"Attempt {attempt + 1}: Error sending request: {e}")
216
- except Exception as e:
217
- print(f"Attempt {attempt + 1}: Unexpected error: {e}")
218
-
219
- print(data["message"])
208
+ print(data["message"])
209
+
210
+ except aiohttp.ClientError as e:
211
+ print(f"Error sending request: {e}")
212
+ except Exception as e:
213
+ print(f"Unexpected error: {e}")
220
214
 
221
215
 
222
216
  async def create_ctx(self, descr: str, partners: list):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: neuronum
3
- Version: 5.0.0
3
+ Version: 5.1.0
4
4
  Summary: Official client library to interact with the Neuronum Network
5
5
  Home-page: https://neuronum.net
6
6
  Author: Neuronum Cybernetics
@@ -35,23 +35,23 @@ Dynamic: summary
35
35
  [![Website](https://img.shields.io/badge/Website-Neuronum-blue)](https://neuronum.net) [![Documentation](https://img.shields.io/badge/Docs-Read%20now-green)](https://github.com/neuronumcybernetics/neuronum)
36
36
 
37
37
 
38
- ### **Getting Started Goals**
38
+ ## **Getting Started Goals**
39
39
  - Learn about Neuronum
40
40
  - Connect to Neuronum
41
41
  - Build on Neuronum
42
42
 
43
43
 
44
44
  ### **About Neuronum**
45
- Neuronum is a framework to build serverless data gateways automating the processing and distribution of data transmission, storage, and streaming.
45
+ Neuronum is a framework to build serverless connected app & data gateways automating the processing and distribution of data transmission, storage, and streaming.
46
46
 
47
47
 
48
- ### **Neuronum Attributes**
48
+ ### **Features**
49
49
  **Cell & Nodes**
50
50
  - Cell: Account to connect and interact with Neuronum
51
- - Nodes: Soft- and Hardware components hosting data gateways
51
+ - Nodes: Soft- and Hardware components hosting gateways
52
52
 
53
- **Data Gateways**
54
- - Transmitters (TX): Automate data transfer in standardized formats
53
+ **Gateways**
54
+ - Transmitters (TX): Securely transmit and receive data packages
55
55
  - Circuits (CTX): Store data in cloud-based key-value-label databases
56
56
  - Streams (STX): Stream, synchronize, and control data in real time
57
57
 
@@ -75,6 +75,12 @@ Create Cell:
75
75
  neuronum create-cell # create Cell / Cell type / Cell network
76
76
  ```
77
77
 
78
+ or
79
+
80
+ Connect Cell:
81
+ ```sh
82
+ neuronum connect-cell # connect Cell
83
+ ```
78
84
 
79
85
  View connected Cell:
80
86
  ```sh
@@ -103,3 +109,8 @@ Stop Node:
103
109
  ```sh
104
110
  neuronum stop-node # stop Node
105
111
  ```
112
+
113
+ Connect Node to Neuronum:
114
+ ```sh
115
+ neuronum connect-node # connect Node
116
+ ```
@@ -0,0 +1,10 @@
1
+ cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ cli/main.py,sha256=tklC9GhJCB-zR26djn9D3ke6P6SGR2Jq66mG1a1Si3g,26848
3
+ neuronum/__init__.py,sha256=Drsm263_w3_VWgl1YsKLUr8WwVodqV3TSjqpxLjyq_M,46
4
+ neuronum/neuronum.py,sha256=qzxc9csSEnGX8wRC_14vzjJPQsCTC8wswhXno1Ih_Xw,17166
5
+ neuronum-5.1.0.dist-info/licenses/LICENSE,sha256=UiZjNHiCyRP6WoZfbYQh9cv4JW96wIofKXmzBJrYSUk,1125
6
+ neuronum-5.1.0.dist-info/METADATA,sha256=zgR264a9Ukp5wE7tIfNkbqCOpGB_vdA3vWqvJSnYZZc,3060
7
+ neuronum-5.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
8
+ neuronum-5.1.0.dist-info/entry_points.txt,sha256=XKYBcRNxGeJpZZkDPsa8HA_RaJ7Km_R_JaUq5T9Nk2U,42
9
+ neuronum-5.1.0.dist-info/top_level.txt,sha256=ru8Fr84cHm6oHr_DcJ8-uaq3RTiuCRFIr6AC8V0zPu4,13
10
+ neuronum-5.1.0.dist-info/RECORD,,
@@ -1,10 +0,0 @@
1
- cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- cli/main.py,sha256=g7Y-W1G7C1firXHsEnBFyqa52nSk6GVzcax_6up0Ezg,24991
3
- neuronum/__init__.py,sha256=Drsm263_w3_VWgl1YsKLUr8WwVodqV3TSjqpxLjyq_M,46
4
- neuronum/neuronum.py,sha256=t1BDzFDzbq9kQN7RSFIagctSGWOoP5MewjpauJxhH5k,17511
5
- neuronum-5.0.0.dist-info/licenses/LICENSE,sha256=UiZjNHiCyRP6WoZfbYQh9cv4JW96wIofKXmzBJrYSUk,1125
6
- neuronum-5.0.0.dist-info/METADATA,sha256=KkMqALQtmMd_2gnstSXwjqx2AvkegZr-26c1oBXAHao,2883
7
- neuronum-5.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
8
- neuronum-5.0.0.dist-info/entry_points.txt,sha256=XKYBcRNxGeJpZZkDPsa8HA_RaJ7Km_R_JaUq5T9Nk2U,42
9
- neuronum-5.0.0.dist-info/top_level.txt,sha256=ru8Fr84cHm6oHr_DcJ8-uaq3RTiuCRFIr6AC8V0zPu4,13
10
- neuronum-5.0.0.dist-info/RECORD,,