naeural-client 2.0.1__py3-none-any.whl → 2.0.3__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.
- naeural_client/_ver.py +1 -1
- naeural_client/base/generic_session.py +56 -35
- naeural_client/base/instance.py +2 -2
- naeural_client/base/payload/payload.py +14 -1
- naeural_client/base/pipeline.py +14 -14
- naeural_client/base/plugin_template.py +31 -0
- naeural_client/base_decentra_object.py +1 -1
- naeural_client/code_cheker/base.py +29 -2
- naeural_client/const/environment.py +4 -0
- naeural_client/default/instance/custom_web_app_01_plugin.py +50 -17
- {naeural_client-2.0.1.dist-info → naeural_client-2.0.3.dist-info}/METADATA +9 -9
- {naeural_client-2.0.1.dist-info → naeural_client-2.0.3.dist-info}/RECORD +14 -14
- {naeural_client-2.0.1.dist-info → naeural_client-2.0.3.dist-info}/licenses/LICENSE +0 -1
- {naeural_client-2.0.1.dist-info → naeural_client-2.0.3.dist-info}/WHEEL +0 -0
naeural_client/_ver.py
CHANGED
@@ -23,7 +23,7 @@ from .transaction import Transaction
|
|
23
23
|
|
24
24
|
class GenericSession(BaseDecentrAIObject):
|
25
25
|
"""
|
26
|
-
A Session is a connection to a communication server which provides the channel to interact with nodes from the Naeural network.
|
26
|
+
A Session is a connection to a communication server which provides the channel to interact with nodes from the Naeural Edge Protocol network.
|
27
27
|
A Session manages `Pipelines` and handles all messages received from the communication server.
|
28
28
|
The Session handles all callbacks that are user-defined and passed as arguments in the API calls.
|
29
29
|
"""
|
@@ -74,7 +74,7 @@ class GenericSession(BaseDecentrAIObject):
|
|
74
74
|
root_topic="naeural",
|
75
75
|
**kwargs) -> None:
|
76
76
|
"""
|
77
|
-
A Session is a connection to a communication server which provides the channel to interact with nodes from the Naeural network.
|
77
|
+
A Session is a connection to a communication server which provides the channel to interact with nodes from the Naeural Edge Protocol network.
|
78
78
|
A Session manages `Pipelines` and handles all messages received from the communication server.
|
79
79
|
The Session handles all callbacks that are user-defined and passed as arguments in the API calls.
|
80
80
|
|
@@ -91,8 +91,8 @@ class GenericSession(BaseDecentrAIObject):
|
|
91
91
|
secured: bool, optional
|
92
92
|
True if connection is secured, by default None
|
93
93
|
name : str, optional
|
94
|
-
The name of this connection, used to identify owned pipelines on a specific Naeural edge node.
|
95
|
-
The name will be used as `INITIATOR_ID` and `SESSION_ID` when communicating with Naeural edge nodes, by default 'pySDK'
|
94
|
+
The name of this connection, used to identify owned pipelines on a specific Naeural Edge Protocol edge node.
|
95
|
+
The name will be used as `INITIATOR_ID` and `SESSION_ID` when communicating with Naeural Edge Protocol edge nodes, by default 'pySDK'
|
96
96
|
config : dict, optional
|
97
97
|
Configures the names of the channels this session will connect to.
|
98
98
|
If using a Mqtt server, these channels are in fact topics.
|
@@ -102,7 +102,7 @@ class GenericSession(BaseDecentrAIObject):
|
|
102
102
|
If set, process the messages that come only from the nodes from this list.
|
103
103
|
Defaults to None
|
104
104
|
show_commands : bool
|
105
|
-
If True, will print the commands that are being sent to the Naeural edge nodes.
|
105
|
+
If True, will print the commands that are being sent to the Naeural Edge Protocol edge nodes.
|
106
106
|
Defaults to False
|
107
107
|
log : Logger, optional
|
108
108
|
A logger object which implements basic logging functionality and some other utils stuff. Can be ignored for now.
|
@@ -335,7 +335,7 @@ class GenericSession(BaseDecentrAIObject):
|
|
335
335
|
Parameters
|
336
336
|
----------
|
337
337
|
node_addr : str
|
338
|
-
The address of the Naeural edge node that sent the message.
|
338
|
+
The address of the Naeural Edge Protocol edge node that sent the message.
|
339
339
|
|
340
340
|
Returns
|
341
341
|
-------
|
@@ -351,7 +351,7 @@ class GenericSession(BaseDecentrAIObject):
|
|
351
351
|
Parameters
|
352
352
|
----------
|
353
353
|
node_addr : str
|
354
|
-
The address of the Naeural edge node that sent the message.
|
354
|
+
The address of the Naeural Edge Protocol edge node that sent the message.
|
355
355
|
"""
|
356
356
|
self._dct_node_last_seen_time[node_addr] = tm()
|
357
357
|
self._dct_node_addr_name[node_addr] = node_id
|
@@ -364,7 +364,7 @@ class GenericSession(BaseDecentrAIObject):
|
|
364
364
|
Parameters
|
365
365
|
----------
|
366
366
|
node_addr : str
|
367
|
-
The address of the Naeural edge node that sent the message.
|
367
|
+
The address of the Naeural Edge Protocol edge node that sent the message.
|
368
368
|
dict_msg : dict
|
369
369
|
The message received from the communication server.
|
370
370
|
"""
|
@@ -383,7 +383,7 @@ class GenericSession(BaseDecentrAIObject):
|
|
383
383
|
dict_msg : dict
|
384
384
|
The message received from the communication server
|
385
385
|
msg_node_addr : str
|
386
|
-
The address of the Naeural edge node that sent the message.
|
386
|
+
The address of the Naeural Edge Protocol edge node that sent the message.
|
387
387
|
msg_pipeline : str
|
388
388
|
The name of the pipeline that sent the message.
|
389
389
|
msg_signature : str
|
@@ -449,7 +449,7 @@ class GenericSession(BaseDecentrAIObject):
|
|
449
449
|
dict_msg : dict
|
450
450
|
The message received from the communication server
|
451
451
|
msg_node_addr : str
|
452
|
-
The address of the Naeural edge node that sent the message.
|
452
|
+
The address of the Naeural Edge Protocol edge node that sent the message.
|
453
453
|
msg_pipeline : str
|
454
454
|
The name of the pipeline that sent the message.
|
455
455
|
msg_signature : str
|
@@ -509,7 +509,7 @@ class GenericSession(BaseDecentrAIObject):
|
|
509
509
|
dict_msg : dict
|
510
510
|
The message received from the communication server
|
511
511
|
msg_node_addr : str
|
512
|
-
The address of the Naeural edge node that sent the message.
|
512
|
+
The address of the Naeural Edge Protocol edge node that sent the message.
|
513
513
|
msg_pipeline : str
|
514
514
|
The name of the pipeline that sent the message.
|
515
515
|
msg_signature : str
|
@@ -538,7 +538,14 @@ class GenericSession(BaseDecentrAIObject):
|
|
538
538
|
for transaction in open_transactions_copy:
|
539
539
|
transaction.handle_payload(dict_msg)
|
540
540
|
if self.custom_on_payload is not None:
|
541
|
-
self.custom_on_payload(
|
541
|
+
self.custom_on_payload(
|
542
|
+
self, # session
|
543
|
+
msg_node_addr, # node_addr
|
544
|
+
msg_pipeline, # pipeline
|
545
|
+
msg_signature, # plugin signature
|
546
|
+
msg_instance, # plugin instance name
|
547
|
+
Payload(msg_data) # the actual payload
|
548
|
+
)
|
542
549
|
|
543
550
|
return
|
544
551
|
|
@@ -662,7 +669,7 @@ class GenericSession(BaseDecentrAIObject):
|
|
662
669
|
Parameters
|
663
670
|
----------
|
664
671
|
to : str
|
665
|
-
The name of the Naeural edge node that will receive the payload.
|
672
|
+
The name of the Naeural Edge Protocol edge node that will receive the payload.
|
666
673
|
payload : dict
|
667
674
|
The payload to send.
|
668
675
|
"""
|
@@ -808,13 +815,14 @@ class GenericSession(BaseDecentrAIObject):
|
|
808
815
|
os.getenv(ENVIRONMENT.AIXP_USER),
|
809
816
|
os.getenv(ENVIRONMENT.EE_USERNAME),
|
810
817
|
os.getenv(ENVIRONMENT.EE_USER),
|
818
|
+
os.getenv(ENVIRONMENT.EE_MQTT_USER),
|
811
819
|
self._config.get(comm_ct.USER),
|
812
820
|
]
|
813
821
|
|
814
822
|
user = next((x for x in possible_user_values if x is not None), None)
|
815
823
|
|
816
824
|
if user is None:
|
817
|
-
env_error = "Error: No user specified for Naeural network connection. Please make sure you have the correct credentials in the environment variables within the .env file or provide them as params in code (not recommended due to potential security issue)."
|
825
|
+
env_error = "Error: No user specified for Naeural Edge Protocol network connection. Please make sure you have the correct credentials in the environment variables within the .env file or provide them as params in code (not recommended due to potential security issue)."
|
818
826
|
raise ValueError(env_error)
|
819
827
|
if self._config.get(comm_ct.USER, None) is None:
|
820
828
|
self._config[comm_ct.USER] = user
|
@@ -827,13 +835,14 @@ class GenericSession(BaseDecentrAIObject):
|
|
827
835
|
os.getenv(ENVIRONMENT.EE_PASSWORD),
|
828
836
|
os.getenv(ENVIRONMENT.EE_PASS),
|
829
837
|
os.getenv(ENVIRONMENT.EE_PWD),
|
838
|
+
os.getenv(ENVIRONMENT.EE_MQTT),
|
830
839
|
self._config.get(comm_ct.PASS),
|
831
840
|
]
|
832
841
|
|
833
842
|
pwd = next((x for x in possible_password_values if x is not None), None)
|
834
843
|
|
835
844
|
if pwd is None:
|
836
|
-
raise ValueError("Error: No password specified for Naeural network connection")
|
845
|
+
raise ValueError("Error: No password specified for Naeural Edge Protocol network connection")
|
837
846
|
if self._config.get(comm_ct.PASS, None) is None:
|
838
847
|
self._config[comm_ct.PASS] = pwd
|
839
848
|
|
@@ -843,6 +852,7 @@ class GenericSession(BaseDecentrAIObject):
|
|
843
852
|
os.getenv(ENVIRONMENT.AIXP_HOST),
|
844
853
|
os.getenv(ENVIRONMENT.EE_HOSTNAME),
|
845
854
|
os.getenv(ENVIRONMENT.EE_HOST),
|
855
|
+
os.getenv(ENVIRONMENT.EE_MQTT_HOST),
|
846
856
|
self._config.get(comm_ct.HOST),
|
847
857
|
"r9092118.ala.eu-central-1.emqxsl.com",
|
848
858
|
]
|
@@ -850,7 +860,7 @@ class GenericSession(BaseDecentrAIObject):
|
|
850
860
|
host = next((x for x in possible_host_values if x is not None), None)
|
851
861
|
|
852
862
|
if host is None:
|
853
|
-
raise ValueError("Error: No host specified for Naeural network connection")
|
863
|
+
raise ValueError("Error: No host specified for Naeural Edge Protocol network connection")
|
854
864
|
if self._config.get(comm_ct.HOST, None) is None:
|
855
865
|
self._config[comm_ct.HOST] = host
|
856
866
|
|
@@ -858,6 +868,7 @@ class GenericSession(BaseDecentrAIObject):
|
|
858
868
|
port,
|
859
869
|
os.getenv(ENVIRONMENT.AIXP_PORT),
|
860
870
|
os.getenv(ENVIRONMENT.EE_PORT),
|
871
|
+
os.getenv(ENVIRONMENT.EE_MQTT_PORT),
|
861
872
|
self._config.get(comm_ct.PORT),
|
862
873
|
8883,
|
863
874
|
]
|
@@ -865,7 +876,7 @@ class GenericSession(BaseDecentrAIObject):
|
|
865
876
|
port = next((x for x in possible_port_values if x is not None), None)
|
866
877
|
|
867
878
|
if port is None:
|
868
|
-
raise ValueError("Error: No port specified for Naeural network connection")
|
879
|
+
raise ValueError("Error: No port specified for Naeural Edge Protocol network connection")
|
869
880
|
if self._config.get(comm_ct.PORT, None) is None:
|
870
881
|
self._config[comm_ct.PORT] = int(port)
|
871
882
|
|
@@ -920,7 +931,7 @@ class GenericSession(BaseDecentrAIObject):
|
|
920
931
|
command : str
|
921
932
|
The command to send.
|
922
933
|
worker : str
|
923
|
-
The name of the Naeural edge node that will receive the command.
|
934
|
+
The name of the Naeural Edge Protocol edge node that will receive the command.
|
924
935
|
payload : dict
|
925
936
|
The payload to send.
|
926
937
|
show_command : bool, optional
|
@@ -1134,7 +1145,7 @@ class GenericSession(BaseDecentrAIObject):
|
|
1134
1145
|
max_wait_time=0,
|
1135
1146
|
**kwargs) -> Pipeline:
|
1136
1147
|
"""
|
1137
|
-
Create a new pipeline on a node. A pipeline is the equivalent of the "config file" used by the Naeural edge node team internally.
|
1148
|
+
Create a new pipeline on a node. A pipeline is the equivalent of the "config file" used by the Naeural Edge Protocol edge node team internally.
|
1138
1149
|
|
1139
1150
|
A `Pipeline` is a an object that encapsulates a one-to-many, data acquisition to data processing, flow of data.
|
1140
1151
|
|
@@ -1150,14 +1161,14 @@ class GenericSession(BaseDecentrAIObject):
|
|
1150
1161
|
|
1151
1162
|
`Plugin` == `Signature`
|
1152
1163
|
|
1153
|
-
This call can busy-wait for a number of seconds to listen to heartbeats, in order to check if an Naeural edge node is online or not.
|
1164
|
+
This call can busy-wait for a number of seconds to listen to heartbeats, in order to check if an Naeural Edge Protocol edge node is online or not.
|
1154
1165
|
If the node does not appear online, a warning will be displayed at the stdout, telling the user that the message that handles the
|
1155
1166
|
creation of the pipeline will be sent, but it is not guaranteed that the specific node will receive it.
|
1156
1167
|
|
1157
1168
|
Parameters
|
1158
1169
|
----------
|
1159
1170
|
node : str
|
1160
|
-
Address or Name of the Naeural edge node that will handle this pipeline.
|
1171
|
+
Address or Name of the Naeural Edge Protocol edge node that will handle this pipeline.
|
1161
1172
|
name : str
|
1162
1173
|
Name of the pipeline. This is good to be kept unique, as it allows multiple parties to overwrite each others configurations.
|
1163
1174
|
data_source : str, optional
|
@@ -1233,36 +1244,36 @@ class GenericSession(BaseDecentrAIObject):
|
|
1233
1244
|
|
1234
1245
|
def get_active_nodes(self):
|
1235
1246
|
"""
|
1236
|
-
Get the list of all Naeural edge nodes that sent a message since this session was created, and that are considered online
|
1247
|
+
Get the list of all Naeural Edge Protocol edge nodes that sent a message since this session was created, and that are considered online
|
1237
1248
|
|
1238
1249
|
Returns
|
1239
1250
|
-------
|
1240
1251
|
list
|
1241
|
-
List of names of all the Naeural edge nodes that are considered online
|
1252
|
+
List of names of all the Naeural Edge Protocol edge nodes that are considered online
|
1242
1253
|
|
1243
1254
|
"""
|
1244
1255
|
return [k for k, v in self._dct_node_last_seen_time.items() if tm() - v < self.online_timeout]
|
1245
1256
|
|
1246
1257
|
def get_allowed_nodes(self):
|
1247
1258
|
"""
|
1248
|
-
Get the list of all active Naeural edge nodes to whom this session can send messages
|
1259
|
+
Get the list of all active Naeural Edge Protocol edge nodes to whom this session can send messages
|
1249
1260
|
|
1250
1261
|
Returns
|
1251
1262
|
-------
|
1252
1263
|
list[str]
|
1253
|
-
List of names of all the active Naeural edge nodes to whom this session can send messages
|
1264
|
+
List of names of all the active Naeural Edge Protocol edge nodes to whom this session can send messages
|
1254
1265
|
"""
|
1255
1266
|
active_nodes = self.get_active_nodes()
|
1256
1267
|
return [node for node in self._dct_can_send_to_node if self._dct_can_send_to_node[node] and node in active_nodes]
|
1257
1268
|
|
1258
1269
|
def get_active_pipelines(self, node):
|
1259
1270
|
"""
|
1260
|
-
Get a dictionary with all the pipelines that are active on this Naeural edge node
|
1271
|
+
Get a dictionary with all the pipelines that are active on this Naeural Edge Protocol edge node
|
1261
1272
|
|
1262
1273
|
Parameters
|
1263
1274
|
----------
|
1264
1275
|
node : str
|
1265
|
-
Address or Name of the Naeural edge node
|
1276
|
+
Address or Name of the Naeural Edge Protocol edge node
|
1266
1277
|
|
1267
1278
|
Returns
|
1268
1279
|
-------
|
@@ -1302,7 +1313,7 @@ class GenericSession(BaseDecentrAIObject):
|
|
1302
1313
|
on_notification=None,
|
1303
1314
|
max_wait_time=0) -> Pipeline:
|
1304
1315
|
"""
|
1305
|
-
Create a Pipeline object and attach to an existing pipeline on an Naeural edge node.
|
1316
|
+
Create a Pipeline object and attach to an existing pipeline on an Naeural Edge Protocol edge node.
|
1306
1317
|
Useful when one wants to treat an existing pipeline as one of his own,
|
1307
1318
|
or when one wants to attach callbacks to various events (on_data, on_notification).
|
1308
1319
|
|
@@ -1320,7 +1331,7 @@ class GenericSession(BaseDecentrAIObject):
|
|
1320
1331
|
|
1321
1332
|
`Plugin` == `Signature`
|
1322
1333
|
|
1323
|
-
This call can busy-wait for a number of seconds to listen to heartbeats, in order to check if an Naeural edge node is online or not.
|
1334
|
+
This call can busy-wait for a number of seconds to listen to heartbeats, in order to check if an Naeural Edge Protocol edge node is online or not.
|
1324
1335
|
If the node does not appear online, a warning will be displayed at the stdout, telling the user that the message that handles the
|
1325
1336
|
creation of the pipeline will be sent, but it is not guaranteed that the specific node will receive it.
|
1326
1337
|
|
@@ -1328,7 +1339,7 @@ class GenericSession(BaseDecentrAIObject):
|
|
1328
1339
|
Parameters
|
1329
1340
|
----------
|
1330
1341
|
node : str
|
1331
|
-
Address or Name of the Naeural edge node that handles this pipeline.
|
1342
|
+
Address or Name of the Naeural Edge Protocol edge node that handles this pipeline.
|
1332
1343
|
name : str
|
1333
1344
|
Name of the existing pipeline.
|
1334
1345
|
on_data : Callable[[Pipeline, str, str, dict], None], optional
|
@@ -1393,12 +1404,12 @@ class GenericSession(BaseDecentrAIObject):
|
|
1393
1404
|
max_wait_time=0,
|
1394
1405
|
**kwargs) -> Pipeline:
|
1395
1406
|
"""
|
1396
|
-
Create a new pipeline on a node, or attach to an existing pipeline on an Naeural edge node.
|
1407
|
+
Create a new pipeline on a node, or attach to an existing pipeline on an Naeural Edge Protocol edge node.
|
1397
1408
|
|
1398
1409
|
Parameters
|
1399
1410
|
----------
|
1400
1411
|
node : str
|
1401
|
-
Address or Name of the Naeural edge node that will handle this pipeline.
|
1412
|
+
Address or Name of the Naeural Edge Protocol edge node that will handle this pipeline.
|
1402
1413
|
name : str
|
1403
1414
|
Name of the pipeline. This is good to be kept unique, as it allows multiple parties to overwrite each others configurations.
|
1404
1415
|
data_source : str
|
@@ -1552,7 +1563,7 @@ class GenericSession(BaseDecentrAIObject):
|
|
1552
1563
|
Parameters
|
1553
1564
|
----------
|
1554
1565
|
node : str
|
1555
|
-
The address or name of the Naeural edge node.
|
1566
|
+
The address or name of the Naeural Edge Protocol edge node.
|
1556
1567
|
timeout : int, optional
|
1557
1568
|
The timeout, by default 15
|
1558
1569
|
|
@@ -1586,7 +1597,7 @@ class GenericSession(BaseDecentrAIObject):
|
|
1586
1597
|
Parameters
|
1587
1598
|
----------
|
1588
1599
|
node : str
|
1589
|
-
The address or name of the Naeural edge node.
|
1600
|
+
The address or name of the Naeural Edge Protocol edge node.
|
1590
1601
|
|
1591
1602
|
Returns
|
1592
1603
|
-------
|
@@ -1640,7 +1651,9 @@ class GenericSession(BaseDecentrAIObject):
|
|
1640
1651
|
*,
|
1641
1652
|
node,
|
1642
1653
|
name,
|
1643
|
-
signature,
|
1654
|
+
signature="CUSTOM_CODE_FASTAPI_01",
|
1655
|
+
endpoints=None,
|
1656
|
+
use_ngrok=True,
|
1644
1657
|
**kwargs
|
1645
1658
|
):
|
1646
1659
|
|
@@ -1652,8 +1665,16 @@ class GenericSession(BaseDecentrAIObject):
|
|
1652
1665
|
instance = pipeline.create_plugin_instance(
|
1653
1666
|
signature=signature,
|
1654
1667
|
instance_id=self.log.get_unique_id(),
|
1668
|
+
use_ngrok=use_ngrok,
|
1655
1669
|
**kwargs
|
1656
1670
|
)
|
1671
|
+
|
1672
|
+
if endpoints is not None:
|
1673
|
+
for endpoint in endpoints:
|
1674
|
+
assert isinstance(endpoint, dict), "Each endpoint must be a dictionary defining the endpoint configuration."
|
1675
|
+
instance.add_new_endpoint(**endpoint)
|
1676
|
+
# end for
|
1677
|
+
# end if we have endpoints defined in the call
|
1657
1678
|
|
1658
1679
|
return pipeline, instance
|
1659
1680
|
|
naeural_client/base/instance.py
CHANGED
@@ -310,7 +310,7 @@ class Instance():
|
|
310
310
|
def __register_transaction_for_instance_command(self, session_id: str = None, timeout: float = 0) -> list[Transaction]:
|
311
311
|
"""
|
312
312
|
Register a new transaction for the instance command.
|
313
|
-
This method is called before sending an instance command to the Naeural edge node.
|
313
|
+
This method is called before sending an instance command to the Naeural Edge Protocol edge node.
|
314
314
|
|
315
315
|
Parameters
|
316
316
|
----------
|
@@ -441,7 +441,7 @@ class Instance():
|
|
441
441
|
def send_instance_command(self, command, payload=None, command_params=None, wait_confirmation=True, session_id=None, timeout=10):
|
442
442
|
"""
|
443
443
|
Send a command to the instance.
|
444
|
-
This command can block until the command is confirmed by the Naeural edge node.
|
444
|
+
This command can block until the command is confirmed by the Naeural Edge Protocol edge node.
|
445
445
|
|
446
446
|
Example:
|
447
447
|
--------
|
@@ -8,7 +8,7 @@ import numpy as np
|
|
8
8
|
class Payload(UserDict):
|
9
9
|
"""
|
10
10
|
This class enriches the default python dict, providing
|
11
|
-
helpful methods to process the payloads received from Naeural edge nodes.
|
11
|
+
helpful methods to process the payloads received from Naeural Edge Protocol edge nodes.
|
12
12
|
"""
|
13
13
|
|
14
14
|
def get_images_as_np(self, key='IMG') -> list:
|
@@ -64,3 +64,16 @@ class Payload(UserDict):
|
|
64
64
|
except ModuleNotFoundError:
|
65
65
|
raise "This functionality requires the PIL library. To use this feature, please install it using 'pip install pillow'"
|
66
66
|
return image
|
67
|
+
|
68
|
+
|
69
|
+
if __name__ == "__main__":
|
70
|
+
import json
|
71
|
+
payload = Payload()
|
72
|
+
payload.data = {
|
73
|
+
"IMG": "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABKklEQVR42mNkAAwOyKg",
|
74
|
+
"TEST" : "TEST"
|
75
|
+
}
|
76
|
+
|
77
|
+
print(type(payload), payload)
|
78
|
+
print(type(payload.data), payload.data)
|
79
|
+
print(json.dumps(payload.data, indent=2))
|
naeural_client/base/pipeline.py
CHANGED
@@ -54,7 +54,7 @@ class Pipeline(BaseCodeChecker):
|
|
54
54
|
In the future, the documentation for the Logger base class will be available and developers will be able to use
|
55
55
|
custom-made Loggers.
|
56
56
|
node_addr : str
|
57
|
-
Address of the Naeural edge node that will handle this pipeline.
|
57
|
+
Address of the Naeural Edge Protocol edge node that will handle this pipeline.
|
58
58
|
name : str
|
59
59
|
The name of this pipeline.
|
60
60
|
data_source : str
|
@@ -91,7 +91,7 @@ class Pipeline(BaseCodeChecker):
|
|
91
91
|
plugins = config.pop('PLUGINS', plugins)
|
92
92
|
|
93
93
|
if is_attached:
|
94
|
-
assert existing_config is not None, "When attaching to a pipeline, the existing configuration should be found in the heartbeat of the Naeural edge node."
|
94
|
+
assert existing_config is not None, "When attaching to a pipeline, the existing configuration should be found in the heartbeat of the Naeural Edge Protocol edge node."
|
95
95
|
assert config == {}, "Cannot provide a configuration when attaching to a pipeline."
|
96
96
|
assert len(kwargs) == 0, "Cannot provide a configuration when attaching to a pipeline."
|
97
97
|
self.config = {k.upper(): v for k, v in existing_config.items()}
|
@@ -201,7 +201,7 @@ class Pipeline(BaseCodeChecker):
|
|
201
201
|
def __register_transactions_for_update(self, session_id: str = None, timeout: float = 0) -> list[Transaction]:
|
202
202
|
"""
|
203
203
|
Register transactions for updating the pipeline and instances configuration.
|
204
|
-
This method is called before sending an update pipeline configuration command to the Naeural edge node.
|
204
|
+
This method is called before sending an update pipeline configuration command to the Naeural Edge Protocol edge node.
|
205
205
|
|
206
206
|
Parameters
|
207
207
|
----------
|
@@ -261,7 +261,7 @@ class Pipeline(BaseCodeChecker):
|
|
261
261
|
def __register_transactions_for_delete(self, session_id: str = None, timeout: float = 0) -> list[Transaction]:
|
262
262
|
"""
|
263
263
|
Register transactions for deleting the pipeline.
|
264
|
-
This method is called before sending a delete pipeline command to the Naeural edge node.
|
264
|
+
This method is called before sending a delete pipeline command to the Naeural Edge Protocol edge node.
|
265
265
|
|
266
266
|
Parameters
|
267
267
|
----------
|
@@ -294,7 +294,7 @@ class Pipeline(BaseCodeChecker):
|
|
294
294
|
def __register_transaction_for_pipeline_command(self, session_id: str = None, timeout: float = 0) -> list[Transaction]:
|
295
295
|
"""
|
296
296
|
Register a transaction for a pipeline command.
|
297
|
-
This method is called before sending a pipeline command to the Naeural edge node.
|
297
|
+
This method is called before sending a pipeline command to the Naeural Edge Protocol edge node.
|
298
298
|
|
299
299
|
Parameters
|
300
300
|
----------
|
@@ -366,7 +366,7 @@ class Pipeline(BaseCodeChecker):
|
|
366
366
|
|
367
367
|
def __send_update_config_to_box(self, session_id=None):
|
368
368
|
"""
|
369
|
-
Send an update pipeline configuration command to the Naeural edge node.
|
369
|
+
Send an update pipeline configuration command to the Naeural Edge Protocol edge node.
|
370
370
|
"""
|
371
371
|
self.session._send_command_update_pipeline_config(
|
372
372
|
worker=self.node_addr,
|
@@ -668,7 +668,7 @@ class Pipeline(BaseCodeChecker):
|
|
668
668
|
if True:
|
669
669
|
def _on_data(self, signature, instance_id, data):
|
670
670
|
"""
|
671
|
-
Handle the data received from the Naeural edge node. This method is called by the Session object when a message is received from the Naeural edge node.
|
671
|
+
Handle the data received from the Naeural Edge Protocol edge node. This method is called by the Session object when a message is received from the Naeural Edge Protocol edge node.
|
672
672
|
This method will call all the `on_data` callbacks of the pipeline and the instance that received the message.
|
673
673
|
|
674
674
|
Parameters
|
@@ -690,7 +690,7 @@ class Pipeline(BaseCodeChecker):
|
|
690
690
|
|
691
691
|
def _on_notification(self, signature, instance_id, data):
|
692
692
|
"""
|
693
|
-
Handle the notification received from the Naeural edge node. This method is called by the Session object when a notification is received from the Naeural edge node.
|
693
|
+
Handle the notification received from the Naeural Edge Protocol edge node. This method is called by the Session object when a notification is received from the Naeural Edge Protocol edge node.
|
694
694
|
|
695
695
|
Parameters
|
696
696
|
----------
|
@@ -893,7 +893,7 @@ class Pipeline(BaseCodeChecker):
|
|
893
893
|
The name of the instance. There can be multiple instances of the same plugin, mostly with different parameters
|
894
894
|
custom_code : Callable[[CustomPluginTemplate], Any], optional
|
895
895
|
A string containing the entire code, a path to a file containing the code as a string or a function with the code.
|
896
|
-
This code will be executed remotely on an Naeural edge node. Defaults to None.
|
896
|
+
This code will be executed remotely on an Naeural Edge Protocol edge node. Defaults to None.
|
897
897
|
config : dict, optional
|
898
898
|
parameters used to customize the functionality. One can change the AI engine used for object detection,
|
899
899
|
or finetune alerter parameters to better fit a camera located in a low light environment.
|
@@ -989,8 +989,8 @@ class Pipeline(BaseCodeChecker):
|
|
989
989
|
|
990
990
|
def deploy(self, with_confirmation=True, wait_confirmation=True, timeout=10, verbose=False):
|
991
991
|
"""
|
992
|
-
This method is used to deploy the pipeline on the Naeural edge node.
|
993
|
-
Here we collect all the proposed configurations and send them to the Naeural edge node.
|
992
|
+
This method is used to deploy the pipeline on the Naeural Edge Protocol edge node.
|
993
|
+
Here we collect all the proposed configurations and send them to the Naeural Edge Protocol edge node.
|
994
994
|
All proposed configs become staged configs.
|
995
995
|
After all responses, apply the staged configs to finish the transaction.
|
996
996
|
"""
|
@@ -1050,7 +1050,7 @@ class Pipeline(BaseCodeChecker):
|
|
1050
1050
|
----------
|
1051
1051
|
custom_code : Callable[[CustomPluginTemplate], Any], optional
|
1052
1052
|
A string containing the entire code, a path to a file containing the code as a string or a function with the code.
|
1053
|
-
This code will be executed remotely on an Naeural edge node. Defaults to None.
|
1053
|
+
This code will be executed remotely on an Naeural Edge Protocol edge node. Defaults to None.
|
1054
1054
|
config : dict, optional
|
1055
1055
|
parameters used to customize the functionality, by default {}
|
1056
1056
|
|
@@ -1281,8 +1281,8 @@ class Pipeline(BaseCodeChecker):
|
|
1281
1281
|
|
1282
1282
|
def send_pipeline_command(self, command, payload=None, command_params=None, wait_confirmation=True, timeout=10) -> list[Transaction]:
|
1283
1283
|
"""
|
1284
|
-
Send a pipeline command to the Naeural edge node.
|
1285
|
-
This command can block until the command is confirmed by the Naeural edge node.
|
1284
|
+
Send a pipeline command to the Naeural Edge Protocol edge node.
|
1285
|
+
This command can block until the command is confirmed by the Naeural Edge Protocol edge node.
|
1286
1286
|
|
1287
1287
|
Example:
|
1288
1288
|
--------
|
@@ -1,3 +1,34 @@
|
|
1
|
+
"""
|
2
|
+
CustomPluginTemplate
|
3
|
+
====================
|
4
|
+
|
5
|
+
The `CustomPluginTemplate` class provides an interface to the on-edge `BasePluginExecutor`, facilitating the creation of custom plugins within the Neural Edge Protocol framework system.
|
6
|
+
It exposes all methods and properties defined on the target edge nodes, allowing developers to access any functionality needed for their custom plugins.
|
7
|
+
This interface supports code completion and documentation features, enhancing the development experience.
|
8
|
+
|
9
|
+
Note that code using this class will be executed in a dedicated thread on the edge node during the plugin execution cycle.
|
10
|
+
|
11
|
+
**Example Usage:**
|
12
|
+
|
13
|
+
```python
|
14
|
+
def some_custom_code(plugin: CustomPluginTemplate):
|
15
|
+
plugin.P("Hello World") # Log a message on the edge node
|
16
|
+
obj = plugin.obj_cache.get('MyDict')
|
17
|
+
if obj is None:
|
18
|
+
obj = {
|
19
|
+
'counter': 0,
|
20
|
+
'some_data': 'some_value'
|
21
|
+
}
|
22
|
+
plugin.obj_cache['MyDict'] = obj
|
23
|
+
|
24
|
+
obj['counter'] += 1
|
25
|
+
plugin.P(f"Counter: {obj['counter']}") # Log the counter value
|
26
|
+
# Finally, send a payload from the edge node to the client
|
27
|
+
return obj
|
28
|
+
```
|
29
|
+
"""
|
30
|
+
|
31
|
+
|
1
32
|
class CustomPluginTemplate:
|
2
33
|
@property
|
3
34
|
def BytesIO(self):
|
@@ -32,7 +32,7 @@ class BaseDecentrAIObject(object):
|
|
32
32
|
if not create_logger:
|
33
33
|
raise ValueError("Logger object is invalid: {}".format(log))
|
34
34
|
else:
|
35
|
-
log = Logger(DEBUG=DEBUG, base_folder='.', app_folder='_local_cache')
|
35
|
+
log = Logger("DEF", DEBUG=DEBUG, base_folder='.', app_folder='_local_cache')
|
36
36
|
# endif
|
37
37
|
|
38
38
|
self.log = log
|
@@ -9,7 +9,10 @@ import ctypes
|
|
9
9
|
import threading
|
10
10
|
import queue
|
11
11
|
|
12
|
-
|
12
|
+
try:
|
13
|
+
from .checker import ASTChecker, CheckerConstants
|
14
|
+
except:
|
15
|
+
from naeural_client.code_cheker.checker import ASTChecker, CheckerConstants
|
13
16
|
|
14
17
|
__VER__ = '0.6.1'
|
15
18
|
|
@@ -496,7 +499,7 @@ class BaseCodeChecker:
|
|
496
499
|
|
497
500
|
def get_function_source_code(self, func):
|
498
501
|
"""
|
499
|
-
Get the source code of a function and remove the indentation.
|
502
|
+
Get the source code of a function including the docstring and remove the indentation.
|
500
503
|
|
501
504
|
Parameters
|
502
505
|
----------
|
@@ -518,3 +521,27 @@ class BaseCodeChecker:
|
|
518
521
|
plain_code = '\n'.join([line.rstrip()[indent:] for line in plain_code])
|
519
522
|
|
520
523
|
return plain_code
|
524
|
+
|
525
|
+
|
526
|
+
if __name__ == '__main__':
|
527
|
+
|
528
|
+
def some_function(x):
|
529
|
+
"""
|
530
|
+
A simple function that adds 1 to the input.
|
531
|
+
|
532
|
+
Parameters
|
533
|
+
----------
|
534
|
+
x : _type_
|
535
|
+
_description_
|
536
|
+
|
537
|
+
Returns
|
538
|
+
-------
|
539
|
+
_type_
|
540
|
+
_description_
|
541
|
+
"""
|
542
|
+
return x + 1
|
543
|
+
|
544
|
+
checker = BaseCodeChecker()
|
545
|
+
source_code = checker.get_function_source_code(some_function)
|
546
|
+
print("some_function:\n" + source_code)
|
547
|
+
|
@@ -3,6 +3,7 @@ class ENVIRONMENT:
|
|
3
3
|
AIXP_USER = 'AIXP_USER'
|
4
4
|
EE_USERNAME = 'EE_USERNAME'
|
5
5
|
EE_USER = 'EE_USER'
|
6
|
+
EE_MQTT_USER = 'EE_MQTT_USER'
|
6
7
|
|
7
8
|
AIXP_PASSWORD = 'AIXP_PASSWORD'
|
8
9
|
AIXP_PASS = 'AIXP_PASS'
|
@@ -10,14 +11,17 @@ class ENVIRONMENT:
|
|
10
11
|
EE_PASSWORD = 'EE_PASSWORD'
|
11
12
|
EE_PASS = 'EE_PASS'
|
12
13
|
EE_PWD = 'EE_PWD'
|
14
|
+
EE_MQTT = 'EE_MQTT'
|
13
15
|
|
14
16
|
AIXP_HOSTNAME = 'AIXP_HOSTNAME'
|
15
17
|
AIXP_HOST = 'AIXP_HOST'
|
16
18
|
EE_HOSTNAME = 'EE_HOSTNAME'
|
17
19
|
EE_HOST = 'EE_HOST'
|
20
|
+
EE_MQTT_HOST = 'EE_MQTT_HOST'
|
18
21
|
|
19
22
|
AIXP_PORT = 'AIXP_PORT'
|
20
23
|
EE_PORT = 'EE_PORT'
|
24
|
+
EE_MQTT_PORT = 'EE_MQTT_PORT'
|
21
25
|
|
22
26
|
AIXP_CERT_PATH = 'AIXP_CERT_PATH'
|
23
27
|
EE_CERT_PATH = 'EE_CERT_PATH'
|
@@ -20,7 +20,54 @@ class CustomWebApp01(Instance):
|
|
20
20
|
|
21
21
|
return name, args, base64_code
|
22
22
|
|
23
|
-
|
23
|
+
|
24
|
+
def get_proposed_assets(self):
|
25
|
+
from copy import deepcopy
|
26
|
+
proposed_config = self._get_proposed_config_dictionary(full=True)
|
27
|
+
if "ASSETS" in proposed_config:
|
28
|
+
return deepcopy(proposed_config["ASSETS"])
|
29
|
+
return deepcopy(self.config.get("ASSETS", {}))
|
30
|
+
|
31
|
+
|
32
|
+
def get_proposed_jinja_args(self):
|
33
|
+
from copy import deepcopy
|
34
|
+
proposed_config = self._get_proposed_config_dictionary(full=True)
|
35
|
+
if "JINJA_ARGS" in proposed_config:
|
36
|
+
return deepcopy(proposed_config["JINJA_ARGS"])
|
37
|
+
return deepcopy(self.config.get("JINJA_ARGS", {}))
|
38
|
+
|
39
|
+
|
40
|
+
def add_new_endpoint(self, endpoint_type="default", **kwargs):
|
41
|
+
"""
|
42
|
+
Add a new endpoint to a existing web app instance.
|
43
|
+
|
44
|
+
Parameters
|
45
|
+
----------
|
46
|
+
endpoint_type : str, optional
|
47
|
+
The type of the endpoint. Can be "default", "file" or "html". The default is "default".
|
48
|
+
|
49
|
+
Raises
|
50
|
+
------
|
51
|
+
ValueError
|
52
|
+
If the endpoint_type is invalid.
|
53
|
+
"""
|
54
|
+
self.P("Attempting to add a new `{}` endpoint: {}".format(endpoint_type, kwargs))
|
55
|
+
if endpoint_type == "default":
|
56
|
+
self.add_new_function_endpoint(**kwargs)
|
57
|
+
elif endpoint_type == "file":
|
58
|
+
self.add_new_file_endpoint(**kwargs)
|
59
|
+
elif endpoint_type == "html":
|
60
|
+
self.add_new_html_endpoint(**kwargs)
|
61
|
+
else:
|
62
|
+
raise ValueError("Invalid endpoint type.")
|
63
|
+
return
|
64
|
+
|
65
|
+
|
66
|
+
def add_new_file_endpoint(self, str_code, file_name, endpoint_name):
|
67
|
+
raise NotImplementedError("This method is not implemented yet.")
|
68
|
+
|
69
|
+
|
70
|
+
def add_new_function_endpoint(self, function, method="get"):
|
24
71
|
name, args, base64_code = self.get_endpoint_fields(function)
|
25
72
|
dct_endpoint = {
|
26
73
|
"NAME": name
|
@@ -40,23 +87,8 @@ class CustomWebApp01(Instance):
|
|
40
87
|
dct_endpoint["ARGS"] = args
|
41
88
|
|
42
89
|
self.update_instance_config(config={"ENDPOINTS": proposed_endpoints})
|
90
|
+
return
|
43
91
|
|
44
|
-
def get_proposed_assets(self):
|
45
|
-
from copy import deepcopy
|
46
|
-
proposed_config = self._get_proposed_config_dictionary(full=True)
|
47
|
-
if "ASSETS" in proposed_config:
|
48
|
-
return deepcopy(proposed_config["ASSETS"])
|
49
|
-
return deepcopy(self.config.get("ASSETS", {}))
|
50
|
-
|
51
|
-
def get_proposed_jinja_args(self):
|
52
|
-
from copy import deepcopy
|
53
|
-
proposed_config = self._get_proposed_config_dictionary(full=True)
|
54
|
-
if "JINJA_ARGS" in proposed_config:
|
55
|
-
return deepcopy(proposed_config["JINJA_ARGS"])
|
56
|
-
return deepcopy(self.config.get("JINJA_ARGS", {}))
|
57
|
-
|
58
|
-
def add_new_file_endpoint(self, str_code, file_name, endpoint_name):
|
59
|
-
raise NotImplementedError("This method is not implemented yet.")
|
60
92
|
|
61
93
|
def add_new_html_endpoint(self, html_path, web_app_file_name, endpoint_route):
|
62
94
|
str_code = None
|
@@ -116,3 +148,4 @@ class CustomWebApp01(Instance):
|
|
116
148
|
dict_name_route_method["route"] = endpoint_route
|
117
149
|
|
118
150
|
self.update_instance_config(config={"ASSETS": proposed_assets, "JINJA_ARGS": proposed_jinja_args})
|
151
|
+
return
|
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: naeural_client
|
3
|
-
Version: 2.0.
|
4
|
-
Summary: `naeural_client` is the Python SDK required for client app development for the Naeural Edge Protocol framework
|
5
|
-
Project-URL: Homepage, https://github.com/
|
6
|
-
Project-URL: Bug Tracker, https://github.com/
|
3
|
+
Version: 2.0.3
|
4
|
+
Summary: `naeural_client` is the Python SDK required for client app development for the Naeural Edge Protocol Edge Protocol framework
|
5
|
+
Project-URL: Homepage, https://github.com/Naeural Edge ProtocolEdgeProtocol/naeural_client
|
6
|
+
Project-URL: Bug Tracker, https://github.com/Naeural Edge ProtocolEdgeProtocol/naeural_client/issues
|
7
7
|
Author-email: Stefan Saraev <saraevstefan@gmail.com>, Andrei Ionut Damian <andrei.damian@me.com>, Cristan Bleotiu <cristibleotiu@gmail.com>
|
8
8
|
License-File: LICENSE
|
9
9
|
Classifier: License :: OSI Approved :: MIT License
|
@@ -21,7 +21,7 @@ Description-Content-Type: text/markdown
|
|
21
21
|
|
22
22
|
# naeural_client SDK
|
23
23
|
|
24
|
-
This is the Python SDK package that allows interactions, development and deployment of jobs in Naeural network. The SDK enables low-code development and deployment of end-to-end AI (and not only) cooperative application pipelines within the Naeural Execution Engine processing nodes ecosystem. For further information please see [Naeural AI OS - Decentralized ubiquitous computing MLOps execution engine](https://arxiv.org/pdf/2306.08708).
|
24
|
+
This is the Python SDK package that allows interactions, development and deployment of jobs in Naeural Edge Protocol network. The SDK enables low-code development and deployment of end-to-end AI (and not only) cooperative application pipelines within the Naeural Edge Protocol Execution Engine processing nodes ecosystem. For further information please see [Naeural Edge Protocol AI OS - Decentralized ubiquitous computing MLOps execution engine](https://arxiv.org/pdf/2306.08708).
|
25
25
|
|
26
26
|
## Dependencies
|
27
27
|
|
@@ -337,9 +337,9 @@ For any inquiries related to the funding and its impact on this project, please
|
|
337
337
|
```bibtex
|
338
338
|
@misc{naeural_client,
|
339
339
|
author = {Stefan Saraev, Andrei Damian},
|
340
|
-
title = {naeural_client: Python SDK for Naeural Edge Protocol},
|
340
|
+
title = {naeural_client: Python SDK for Naeural Edge Protocol Edge Protocol},
|
341
341
|
year = {2024},
|
342
|
-
howpublished = {\url{https://github.com/
|
342
|
+
howpublished = {\url{https://github.com/Naeural Edge ProtocolEdgeProtocol/naeural_client}},
|
343
343
|
}
|
344
344
|
```
|
345
345
|
|
@@ -348,7 +348,7 @@ For any inquiries related to the funding and its impact on this project, please
|
|
348
348
|
author = {Damian, Bleotiu, Saraev, Constantinescu},
|
349
349
|
title = {SOLIS – Sistem Omogen multi-Locație cu funcționalități Inteligente și Sustenabile”
|
350
350
|
SMIS 143488},
|
351
|
-
howpublished = {\url{https://github.com/
|
351
|
+
howpublished = {\url{https://github.com/Naeural Edge ProtocolEdgeProtocol/}},
|
352
352
|
note = {This project includes open-source components developed with support from the Romanian Competitiveness Operational Programme under grants SMIS 143488. The content is solely the responsibility of the authors and does not necessarily reflect the views of the funding agencies.},
|
353
353
|
year = {2021-2022}
|
354
354
|
}
|
@@ -358,7 +358,7 @@ SMIS 143488},
|
|
358
358
|
@misc{project_funding_acknowledgment2,
|
359
359
|
author = {Damian, Bleotiu, Saraev, Constantinescu, Milik, Lupaescu},
|
360
360
|
title = {ReDeN – Rețea Descentralizată Neurală SMIS 156084},
|
361
|
-
howpublished = {\url{https://github.com/
|
361
|
+
howpublished = {\url{https://github.com/Naeural Edge ProtocolEdgeProtocol/}},
|
362
362
|
note = {This project includes open-source components developed with support from the Romanian Competitiveness Operational Programme under grants SMIS 143488. The content is solely the responsibility of the authors and does not necessarily reflect the views of the funding agencies.},
|
363
363
|
year = {2023-2024}
|
364
364
|
}
|
@@ -1,17 +1,17 @@
|
|
1
1
|
naeural_client/__init__.py,sha256=ZNoadMrxrd1EZqxni0zpoqjFIBrS8Jg-vfZrr7xwe9I,498
|
2
|
-
naeural_client/_ver.py,sha256=
|
3
|
-
naeural_client/base_decentra_object.py,sha256=
|
2
|
+
naeural_client/_ver.py,sha256=22NfIkgjJksCD3HVuCZFvbFPyAMVCrB4W2uIX0hfSRw,330
|
3
|
+
naeural_client/base_decentra_object.py,sha256=qDBpitcyhr1eEXPD8cGFtcNPNf71fqNRsmOEcCpx4sM,4180
|
4
4
|
naeural_client/plugins_manager_mixin.py,sha256=X1JdGLDz0gN1rPnTN_5mJXR8JmqoBFQISJXmPR9yvCo,11106
|
5
5
|
naeural_client/base/__init__.py,sha256=hACh83_cIv7-PwYMM3bQm2IBmNqiHw-3PAfDfAEKz9A,259
|
6
6
|
naeural_client/base/distributed_custom_code_presets.py,sha256=cvz5R88P6Z5V61Ce1vHVVh8bOkgXd6gve_vdESDNAsg,2544
|
7
|
-
naeural_client/base/generic_session.py,sha256=
|
8
|
-
naeural_client/base/instance.py,sha256=
|
9
|
-
naeural_client/base/pipeline.py,sha256=
|
10
|
-
naeural_client/base/plugin_template.py,sha256=
|
7
|
+
naeural_client/base/generic_session.py,sha256=QEuXQVB3bCPk4CfrFVOwUHER1S6RzxH332GNgXvV3J4,67207
|
8
|
+
naeural_client/base/instance.py,sha256=m6IKOWuT5GsZVSdFNdcR-ImJTpTdHqNoMe8KQlEK3Gc,19970
|
9
|
+
naeural_client/base/pipeline.py,sha256=fWwSNUvvrVvJYzxRBCKTt1f9_pci1hCBiG2LtoyOpMU,57512
|
10
|
+
naeural_client/base/plugin_template.py,sha256=qGaXByd_JZFpjvH9GXNbT7KaitRxIJB6-1IhbKrZjq4,138123
|
11
11
|
naeural_client/base/responses.py,sha256=ZKBZmRhYDv8M8mQ5C_ahGsQvtWH4b9ImRcuerQdZmNw,6937
|
12
12
|
naeural_client/base/transaction.py,sha256=bfs6td5M0fINgPQNxhrl_AUjb1YiilLDQ-Cd_o3OR_E,5146
|
13
13
|
naeural_client/base/payload/__init__.py,sha256=y8fBI8tG2ObNfaXFWjyWZXwu878FRYj_I8GIbHT4GKE,29
|
14
|
-
naeural_client/base/payload/payload.py,sha256=
|
14
|
+
naeural_client/base/payload/payload.py,sha256=v50D7mBBD2WwWzvpbRGMSr-X6vv5ie21IY1aDxTqe1c,2275
|
15
15
|
naeural_client/bc/__init__.py,sha256=FQj23D1PrY06NUOARiKQi4cdj0-VxnoYgYDEht8lpr8,158
|
16
16
|
naeural_client/bc/base.py,sha256=QK6QdONTpT9N--H7CHk8pwRxwJUGK4nvhNTfKxQeztQ,28328
|
17
17
|
naeural_client/bc/chain.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -19,7 +19,7 @@ naeural_client/bc/ec.py,sha256=8ryEvc3__lVXSoYxd1WoTy9c8uC5Q_8R1uME7CeloIg,8578
|
|
19
19
|
naeural_client/certs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
20
20
|
naeural_client/certs/r9092118.ala.eu-central-1.emqxsl.com.crt,sha256=y-6io0tseyx9-a4Pmde1z1gPULtJNSYUpG_YFkYaMKU,1337
|
21
21
|
naeural_client/code_cheker/__init__.py,sha256=pwkdeZGVL16ZA4Qf2mRahEhoOvKhL7FyuQbMFLr1E5M,33
|
22
|
-
naeural_client/code_cheker/base.py,sha256=
|
22
|
+
naeural_client/code_cheker/base.py,sha256=WIHP8LICypTBt7HR0FeC1KtIQ-PASTPaeFmCKvT5vuU,17190
|
23
23
|
naeural_client/code_cheker/checker.py,sha256=QWupeM7ToancVIq1tRUxRNUrI8B5l5eoY0kDU4-O5aE,7365
|
24
24
|
naeural_client/comm/__init__.py,sha256=za3B2HUKNXzYtjElMgGM9xbxNsdQfFY4JB_YzdyFkVU,76
|
25
25
|
naeural_client/comm/amqp_wrapper.py,sha256=hzj6ih07DnLQy2VSfA88giDIFHaCp9uSdGLTA-IFE4s,8535
|
@@ -28,7 +28,7 @@ naeural_client/const/README.md,sha256=6OHesr-f5NBuuJGryEoi_TCu2XdlhfQYlDKx_IJoXe
|
|
28
28
|
naeural_client/const/__init__.py,sha256=nm0maDn_l44UQkJy4XLHnOcpHMypkVvYYDFkezi6_rk,380
|
29
29
|
naeural_client/const/base.py,sha256=V94oaT7xYrrTGxmLJlynxmbFujVX0G9wIfC8TilH5MU,2548
|
30
30
|
naeural_client/const/comms.py,sha256=La6JXWHexH8CfcBCKyT4fCIoeaoZlcm7KtZ57ab4ZgU,2201
|
31
|
-
naeural_client/const/environment.py,sha256=
|
31
|
+
naeural_client/const/environment.py,sha256=Aj_AyelP_Y97CgEM6pvIv2T9TLbe7sT2mrkg6OtGShg,698
|
32
32
|
naeural_client/const/formatter.py,sha256=AW3bWlqf39uaqV4BBUuW95qKYfF2OkkU4f9hy3kSVhM,200
|
33
33
|
naeural_client/const/heartbeat.py,sha256=jGHmKfeHTFOXJaKUT3o_ocnQyF-EpcLeunW-ifkYKfU,2534
|
34
34
|
naeural_client/const/misc.py,sha256=1ypROmZsOyp_8zG2LARwPeo-YfXuyYqZnml0elTP4kw,211
|
@@ -36,7 +36,7 @@ naeural_client/const/payload.py,sha256=k24vH9iJIBBPnCXx7HAEuli2fNAETK7h8ZuVKyKLg
|
|
36
36
|
naeural_client/default/__init__.py,sha256=ozU6CMMuWl0LhG8Ae3LrZ65a6tLrptfscVYGf83zjxM,46
|
37
37
|
naeural_client/default/instance/__init__.py,sha256=k1YZhbhLh7-Q7avnvwuQ2Ij-BhGbTlgwiWsOj9cS9xU,205
|
38
38
|
naeural_client/default/instance/chain_dist_custom_job_01_plugin.py,sha256=-YO26dH3774wkMbj0Z0GACpVeVYblkxV4KhidtPEqcI,1891
|
39
|
-
naeural_client/default/instance/custom_web_app_01_plugin.py,sha256=
|
39
|
+
naeural_client/default/instance/custom_web_app_01_plugin.py,sha256=9swEcfEzpL_P29WDkP9kTZ8oHNS0s9TXwd5BfIGiDZI,4805
|
40
40
|
naeural_client/default/instance/net_mon_01_plugin.py,sha256=1k1Ul6pKyhSfAYbcfj38t404Z3KyMVvfhlMJdzIgV-c,1154
|
41
41
|
naeural_client/default/instance/view_scene_01_plugin.py,sha256=bQtkQKrZRvzenlH3JYVvBXe2Tow5qdKYlmuvjpBLYn4,666
|
42
42
|
naeural_client/default/session/mqtt_session.py,sha256=dpQcBhhVZDo458v0IqJMZb1CsTn-TxXhYjNlyJp9Rp8,2414
|
@@ -72,7 +72,7 @@ naeural_client/logging/tzlocal/windows_tz.py,sha256=Sv9okktjZJfRGGUOOppsvQuX_eXy
|
|
72
72
|
naeural_client/utils/__init__.py,sha256=mAnke3-MeRzz3nhQvhuHqLnpaaCSmDxicd7Ck9uwpmI,77
|
73
73
|
naeural_client/utils/comm_utils.py,sha256=4cS9llRr_pK_3rNgDcRMCQwYPO0kcNU7AdWy_LtMyCY,1072
|
74
74
|
naeural_client/utils/dotenv.py,sha256=_AgSo35n7EnQv5yDyu7C7i0kHragLJoCGydHjvOkrYY,2008
|
75
|
-
naeural_client-2.0.
|
76
|
-
naeural_client-2.0.
|
77
|
-
naeural_client-2.0.
|
78
|
-
naeural_client-2.0.
|
75
|
+
naeural_client-2.0.3.dist-info/METADATA,sha256=5ONsD3fdCiVEh4Z3_h8bOkcbwz0RqBwCi0gP6YKzU5M,14479
|
76
|
+
naeural_client-2.0.3.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
|
77
|
+
naeural_client-2.0.3.dist-info/licenses/LICENSE,sha256=cvOsJVslde4oIaTCadabXnPqZmzcBO2f2zwXZRmJEbE,11311
|
78
|
+
naeural_client-2.0.3.dist-info/RECORD,,
|
@@ -186,7 +186,6 @@
|
|
186
186
|
same "printed page" as the copyright notice for easier
|
187
187
|
identification within third-party archives.
|
188
188
|
|
189
|
-
Copyright 2024 Naeural.AI
|
190
189
|
|
191
190
|
Licensed under the Apache License, Version 2.0 (the "License");
|
192
191
|
you may not use this file except in compliance with the License.
|
File without changes
|