naeural-client 2.5.25__py3-none-any.whl → 2.5.26__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 +71 -15
- naeural_client/bc/base.py +4 -39
- naeural_client/cli/nodes.py +45 -3
- naeural_client/const/base.py +45 -2
- naeural_client/utils/config.py +18 -2
- {naeural_client-2.5.25.dist-info → naeural_client-2.5.26.dist-info}/METADATA +1 -1
- {naeural_client-2.5.25.dist-info → naeural_client-2.5.26.dist-info}/RECORD +11 -11
- {naeural_client-2.5.25.dist-info → naeural_client-2.5.26.dist-info}/WHEEL +0 -0
- {naeural_client-2.5.25.dist-info → naeural_client-2.5.26.dist-info}/entry_points.txt +0 -0
- {naeural_client-2.5.25.dist-info → naeural_client-2.5.26.dist-info}/licenses/LICENSE +0 -0
naeural_client/_ver.py
CHANGED
@@ -179,7 +179,7 @@ class GenericSession(BaseDecentrAIObject):
|
|
179
179
|
self._dct_online_nodes_pipelines: dict[str, Pipeline] = {}
|
180
180
|
self._dct_online_nodes_last_heartbeat: dict[str, dict] = {}
|
181
181
|
self._dct_can_send_to_node: dict[str, bool] = {}
|
182
|
-
self._dct_node_last_seen_time = {}
|
182
|
+
self._dct_node_last_seen_time = {} # key is node address
|
183
183
|
self._dct_node_addr_name = {}
|
184
184
|
self.online_timeout = 60
|
185
185
|
self.filter_workers = filter_workers
|
@@ -209,9 +209,14 @@ class GenericSession(BaseDecentrAIObject):
|
|
209
209
|
self.sdk_main_loop_thread = Thread(target=self.__main_loop, daemon=True)
|
210
210
|
self.__formatter_plugins_locations = formatter_plugins_locations
|
211
211
|
|
212
|
-
self.__bc_engine = bc_engine
|
213
212
|
self.__blockchain_config = blockchain_config
|
214
213
|
|
214
|
+
# TODO: needs refactoring - suboptimal design
|
215
|
+
self.__bc_engine : DefaultBlockEngine = bc_engine
|
216
|
+
self.bc_engine : DefaultBlockEngine = None
|
217
|
+
# END TODO
|
218
|
+
|
219
|
+
|
215
220
|
self.__open_transactions: list[Transaction] = []
|
216
221
|
self.__open_transactions_lock = Lock()
|
217
222
|
|
@@ -1033,10 +1038,19 @@ class GenericSession(BaseDecentrAIObject):
|
|
1033
1038
|
self._config[comm_ct.SECURED] = secured
|
1034
1039
|
|
1035
1040
|
return
|
1041
|
+
|
1042
|
+
def __aliases_to_addresses(self):
|
1043
|
+
"""
|
1044
|
+
Convert the aliases to addresses.
|
1045
|
+
"""
|
1046
|
+
dct_aliases = {v: k for k, v in self._dct_node_addr_name.items()}
|
1047
|
+
return dct_aliases
|
1036
1048
|
|
1037
1049
|
def __get_node_address(self, node):
|
1038
1050
|
"""
|
1039
1051
|
Get the address of a node. If node is an address, return it. Else, return the address of the node.
|
1052
|
+
This method is used to convert the alias of a node to its address if needed however it is
|
1053
|
+
not recommended to use it as it was created for backward compatibility reasons.
|
1040
1054
|
|
1041
1055
|
Parameters
|
1042
1056
|
----------
|
@@ -1048,11 +1062,19 @@ class GenericSession(BaseDecentrAIObject):
|
|
1048
1062
|
str
|
1049
1063
|
The address of the node.
|
1050
1064
|
"""
|
1051
|
-
if node not in self.get_active_nodes():
|
1052
|
-
|
1053
|
-
|
1065
|
+
# if node not in self.get_active_nodes():
|
1066
|
+
# node = next((key for key, value in self._dct_node_addr_name.items() if value == node), node)
|
1067
|
+
result = None
|
1068
|
+
if node in self.get_active_nodes():
|
1069
|
+
# node seems to be already an address
|
1070
|
+
result = node
|
1071
|
+
else:
|
1072
|
+
# maybe node is a name
|
1073
|
+
aliases = self.__aliases_to_addresses()
|
1074
|
+
result = aliases.get(node, None)
|
1075
|
+
return result
|
1054
1076
|
|
1055
|
-
def _send_command_to_box(self, command, worker, payload, show_command=
|
1077
|
+
def _send_command_to_box(self, command, worker, payload, show_command=True, session_id=None, **kwargs):
|
1056
1078
|
"""
|
1057
1079
|
Send a command to a node.
|
1058
1080
|
|
@@ -1062,10 +1084,16 @@ class GenericSession(BaseDecentrAIObject):
|
|
1062
1084
|
The command to send.
|
1063
1085
|
worker : str
|
1064
1086
|
The name of the Naeural Edge Protocol edge node that will receive the command.
|
1087
|
+
|
1088
|
+
Observation: this approach will be deprecated soon in favor of the direct use of the address that
|
1089
|
+
will not require the node to be already "seend" by the session.
|
1090
|
+
|
1065
1091
|
payload : dict
|
1066
1092
|
The payload to send.
|
1067
1093
|
show_command : bool, optional
|
1068
1094
|
If True, will print the complete command that is being sent, by default False
|
1095
|
+
|
1096
|
+
|
1069
1097
|
"""
|
1070
1098
|
|
1071
1099
|
show_command = show_command or self.__show_commands
|
@@ -1080,10 +1108,17 @@ class GenericSession(BaseDecentrAIObject):
|
|
1080
1108
|
|
1081
1109
|
# This part is duplicated with the creation of payloads
|
1082
1110
|
encrypt_payload = self.encrypt_comms
|
1083
|
-
if encrypt_payload and worker is not None:
|
1084
|
-
# TODO: use safe_json_dumps
|
1111
|
+
if encrypt_payload and worker is not None:
|
1085
1112
|
str_data = json.dumps(critical_data)
|
1086
|
-
|
1113
|
+
|
1114
|
+
# Initial code `str_enc_data = self.bc_engine.encrypt(str_data, worker)` could not work under any
|
1115
|
+
# circumstances due to the fact that encrypt requires the public key of the receiver not the alias
|
1116
|
+
# of the receiver. The code below is a workaround to encrypt the message
|
1117
|
+
# TODO: furthermore the code will be migrated to the use of the address of the worker
|
1118
|
+
worker_addr = self.get_addr_by_name(worker)
|
1119
|
+
assert worker_addr is not None, f"Unknown worker address: {worker} - {worker_addr}"
|
1120
|
+
|
1121
|
+
str_enc_data = self.bc_engine.encrypt(str_data, worker_addr)
|
1087
1122
|
critical_data = {
|
1088
1123
|
comm_ct.COMM_SEND_MESSAGE.K_EE_IS_ENCRYPTED: True,
|
1089
1124
|
comm_ct.COMM_SEND_MESSAGE.K_EE_ENCRYPTED_DATA: str_enc_data,
|
@@ -1104,10 +1139,11 @@ class GenericSession(BaseDecentrAIObject):
|
|
1104
1139
|
}
|
1105
1140
|
self.bc_engine.sign(msg_to_send, use_digest=True)
|
1106
1141
|
if show_command:
|
1107
|
-
self.P(
|
1108
|
-
|
1109
|
-
|
1110
|
-
|
1142
|
+
self.P(
|
1143
|
+
"Sending command '{}' to '{}':\n{}".format(command, worker, json.dumps(msg_to_send, indent=2)),
|
1144
|
+
color='y',
|
1145
|
+
verbosity=1
|
1146
|
+
)
|
1111
1147
|
self._send_payload(worker, msg_to_send)
|
1112
1148
|
return
|
1113
1149
|
|
@@ -1357,6 +1393,25 @@ class GenericSession(BaseDecentrAIObject):
|
|
1357
1393
|
)
|
1358
1394
|
self.own_pipelines.append(pipeline)
|
1359
1395
|
return pipeline
|
1396
|
+
|
1397
|
+
def get_addr_by_name(self, name):
|
1398
|
+
"""
|
1399
|
+
Get the address of a node by its name.
|
1400
|
+
This function should be used with caution and it was created for backward compatibility reasons.
|
1401
|
+
|
1402
|
+
Parameters
|
1403
|
+
----------
|
1404
|
+
|
1405
|
+
name : str
|
1406
|
+
The name of the node.
|
1407
|
+
|
1408
|
+
Returns
|
1409
|
+
-------
|
1410
|
+
str
|
1411
|
+
The address of the node.
|
1412
|
+
"""
|
1413
|
+
return self.__get_node_address(name)
|
1414
|
+
|
1360
1415
|
|
1361
1416
|
def get_node_name(self, node_addr):
|
1362
1417
|
"""
|
@@ -1376,12 +1431,13 @@ class GenericSession(BaseDecentrAIObject):
|
|
1376
1431
|
|
1377
1432
|
def get_active_nodes(self):
|
1378
1433
|
"""
|
1379
|
-
Get the list of all Naeural Edge Protocol edge nodes that sent a message since this
|
1434
|
+
Get the list of all Naeural Edge Protocol edge nodes addresses that sent a message since this
|
1435
|
+
session was created, and that are considered online.
|
1380
1436
|
|
1381
1437
|
Returns
|
1382
1438
|
-------
|
1383
1439
|
list
|
1384
|
-
List of
|
1440
|
+
List of addresses of all the Naeural Edge Protocol edge nodes that are considered online
|
1385
1441
|
|
1386
1442
|
"""
|
1387
1443
|
return [k for k, v in self._dct_node_last_seen_time.items() if tm() - v < self.online_timeout]
|
naeural_client/bc/base.py
CHANGED
@@ -14,42 +14,7 @@ from cryptography.hazmat.primitives import serialization
|
|
14
14
|
|
15
15
|
from ..utils.config import get_user_folder
|
16
16
|
|
17
|
-
|
18
|
-
SIGN = 'EE_SIGN'
|
19
|
-
SENDER = 'EE_SENDER'
|
20
|
-
HASH = 'EE_HASH'
|
21
|
-
|
22
|
-
ETH_SIGN = 'EE_ETH_SIGN'
|
23
|
-
ETH_SENDER= 'EE_ETH_SENDER'
|
24
|
-
|
25
|
-
|
26
|
-
class BCct:
|
27
|
-
SIGN = BCctbase.SIGN
|
28
|
-
SENDER = BCctbase.SENDER
|
29
|
-
HASH = BCctbase.HASH
|
30
|
-
ETH_SIGN = BCctbase.ETH_SIGN
|
31
|
-
ETH_SENDER = BCctbase.ETH_SENDER
|
32
|
-
|
33
|
-
ADDR_PREFIX_OLD = "aixp_"
|
34
|
-
ADDR_PREFIX = "0xai_"
|
35
|
-
|
36
|
-
K_USER_CONFIG_PEM_FILE = 'NAEURAL_PEM_FILE'
|
37
|
-
K_PEM_FILE = 'PEM_FILE'
|
38
|
-
K_PASSWORD = 'PASSWORD'
|
39
|
-
K_PEM_LOCATION = 'PEM_LOCATION'
|
40
|
-
|
41
|
-
ERR_UNAVL_MSG = "Missing signature/sender data"
|
42
|
-
ERR_UNAVL = 1
|
43
|
-
|
44
|
-
ERR_SIGN_MSG = "Bad hash"
|
45
|
-
ERR_UNAVL = 1000
|
46
|
-
|
47
|
-
ERR_SIGN_MSG = "Bad signature"
|
48
|
-
ERR_UNAVL = 1001
|
49
|
-
|
50
|
-
AUTHORISED_ADDRS = 'authorized_addrs'
|
51
|
-
|
52
|
-
DEFAULT_INFO = '0xai handshake data'
|
17
|
+
from ..const.base import BCctbase, BCct
|
53
18
|
|
54
19
|
|
55
20
|
|
@@ -342,10 +307,10 @@ class BaseBlockEngine:
|
|
342
307
|
|
343
308
|
if user_config:
|
344
309
|
user_folder = get_user_folder()
|
345
|
-
pem_fn = str(user_folder /
|
310
|
+
pem_fn = str(user_folder / BCct.USER_PEM_FILE)
|
346
311
|
else:
|
347
|
-
pem_name = config.get(BCct.K_PEM_FILE,
|
348
|
-
pem_folder = config.get(BCct.K_PEM_LOCATION,
|
312
|
+
pem_name = config.get(BCct.K_PEM_FILE, BCct.DEFAULT_PEM_FILE)
|
313
|
+
pem_folder = config.get(BCct.K_PEM_LOCATION, BCct.DEFAULT_PEM_LOCATION)
|
349
314
|
pem_fn = os.path.join(log.get_target_folder(pem_folder), pem_name)
|
350
315
|
#endif pem is defined in ~/.naeural/ or in the data folder of the _local_cache
|
351
316
|
self.__pem_file = pem_fn
|
naeural_client/cli/nodes.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
from time import time
|
2
2
|
from naeural_client.utils.config import log_with_color
|
3
|
-
from naeural_client.const import SESSION_CT
|
3
|
+
from naeural_client.const import SESSION_CT, COMMANDS
|
4
4
|
|
5
5
|
|
6
6
|
def _get_netstats(
|
@@ -9,6 +9,7 @@ def _get_netstats(
|
|
9
9
|
allowed_only=False,
|
10
10
|
supervisor=None,
|
11
11
|
supervisors_only=False,
|
12
|
+
return_session=False,
|
12
13
|
):
|
13
14
|
t1 = time()
|
14
15
|
from naeural_client import Session
|
@@ -23,8 +24,11 @@ def _get_netstats(
|
|
23
24
|
nr_supers = dct_info[SESSION_CT.NETSTATS_NR_SUPERVISORS]
|
24
25
|
_elapsed = dct_info[SESSION_CT.NETSTATS_ELAPSED] # computed on call
|
25
26
|
elapsed = time() - t1 # elapsed=_elapsed
|
27
|
+
if return_session:
|
28
|
+
return df, supervisor, super_alias, nr_supers, elapsed, sess
|
26
29
|
return df, supervisor, super_alias, nr_supers, elapsed
|
27
30
|
|
31
|
+
|
28
32
|
def get_nodes(args):
|
29
33
|
"""
|
30
34
|
This function is used to get the information about the nodes and it will perform the following:
|
@@ -76,6 +80,40 @@ def get_supervisors(args):
|
|
76
80
|
log_with_color(f"{df}")
|
77
81
|
return
|
78
82
|
|
83
|
+
def _send_command_to_node(args, command):
|
84
|
+
node = args.node
|
85
|
+
silent = not args.verbose
|
86
|
+
|
87
|
+
t1 = time()
|
88
|
+
df, _, _, _, _, sess = _get_netstats(
|
89
|
+
silent=silent, online_only=True, return_session=True
|
90
|
+
)
|
91
|
+
peered = None
|
92
|
+
selection = df.Alias == node
|
93
|
+
found = selection.any()
|
94
|
+
node_addr = None
|
95
|
+
df_found = df[selection]
|
96
|
+
if found:
|
97
|
+
peered = df_found.Peered.values[0]
|
98
|
+
node_addr = df_found.Address.values[0]
|
99
|
+
log_with_color(f"{df_found}")
|
100
|
+
if not found:
|
101
|
+
log_with_color(f"Node '{node}' <{node_addr}> not found in network.", color='r')
|
102
|
+
return
|
103
|
+
if not peered:
|
104
|
+
log_with_color(f"Node '{node}' <{node_addr}> does not accept commands from this SDK.", color='r')
|
105
|
+
return
|
106
|
+
# TODO: currently this is based on node alias, but we should be based on node address
|
107
|
+
# and maybe even node alias
|
108
|
+
if command == COMMANDS.RESTART:
|
109
|
+
sess._send_command_restart_node(node)
|
110
|
+
elif command == COMMANDS.SHUTDOWN:
|
111
|
+
sess._send_command_stop_node(node)
|
112
|
+
else:
|
113
|
+
log_with_color(f"Command '{command}' not supported.", color='r')
|
114
|
+
return
|
115
|
+
elapsed = time() - t1
|
116
|
+
return
|
79
117
|
|
80
118
|
def restart_node(args):
|
81
119
|
"""
|
@@ -86,7 +124,9 @@ def restart_node(args):
|
|
86
124
|
args : argparse.Namespace
|
87
125
|
Arguments passed to the function.
|
88
126
|
"""
|
89
|
-
|
127
|
+
node = args.node
|
128
|
+
log_with_color(f"Attempting to restart node <{node}>", color='b')
|
129
|
+
_send_command_to_node(args, COMMANDS.RESTART)
|
90
130
|
return
|
91
131
|
|
92
132
|
|
@@ -99,5 +139,7 @@ def shutdown_node(args):
|
|
99
139
|
args : argparse.Namespace
|
100
140
|
Arguments passed to the function.
|
101
141
|
"""
|
102
|
-
|
142
|
+
node = args.node
|
143
|
+
log_with_color(f"Attempting to shutdown node <{node}>", color='b')
|
144
|
+
_send_command_to_node(args, COMMANDS.SHUTDOWN)
|
103
145
|
return
|
naeural_client/const/base.py
CHANGED
@@ -1,11 +1,54 @@
|
|
1
1
|
EE_ID = 'EE_ID'
|
2
2
|
SB_ID = 'SB_ID' # change to SB_ID = EE_ID post mod from sb to ee
|
3
3
|
|
4
|
+
|
5
|
+
class BCctbase:
|
6
|
+
SIGN = 'EE_SIGN'
|
7
|
+
SENDER = 'EE_SENDER'
|
8
|
+
HASH = 'EE_HASH'
|
9
|
+
|
10
|
+
ETH_SIGN = 'EE_ETH_SIGN'
|
11
|
+
ETH_SENDER= 'EE_ETH_SENDER'
|
12
|
+
|
13
|
+
|
14
|
+
class BCct:
|
15
|
+
SIGN = BCctbase.SIGN
|
16
|
+
SENDER = BCctbase.SENDER
|
17
|
+
HASH = BCctbase.HASH
|
18
|
+
ETH_SIGN = BCctbase.ETH_SIGN
|
19
|
+
ETH_SENDER = BCctbase.ETH_SENDER
|
20
|
+
|
21
|
+
ADDR_PREFIX_OLD = "aixp_"
|
22
|
+
ADDR_PREFIX = "0xai_"
|
23
|
+
|
24
|
+
K_USER_CONFIG_PEM_FILE = 'NAEURAL_PEM_FILE'
|
25
|
+
K_PEM_FILE = 'PEM_FILE'
|
26
|
+
K_PASSWORD = 'PASSWORD'
|
27
|
+
K_PEM_LOCATION = 'PEM_LOCATION'
|
28
|
+
|
29
|
+
ERR_UNAVL_MSG = "Missing signature/sender data"
|
30
|
+
ERR_UNAVL = 1
|
31
|
+
|
32
|
+
ERR_SIGN_MSG = "Bad hash"
|
33
|
+
ERR_UNAVL = 1000
|
34
|
+
|
35
|
+
ERR_SIGN_MSG = "Bad signature"
|
36
|
+
ERR_UNAVL = 1001
|
37
|
+
|
38
|
+
AUTHORISED_ADDRS = 'authorized_addrs'
|
39
|
+
|
40
|
+
DEFAULT_INFO = '0xai handshake data'
|
41
|
+
|
42
|
+
USER_PEM_FILE = '_naeural.pem'
|
43
|
+
DEFAULT_PEM_FILE = '_pk.pem'
|
44
|
+
DEFAULT_PEM_LOCATION = 'data'
|
45
|
+
|
4
46
|
BLOCKCHAIN_CONFIG = {
|
5
|
-
"PEM_FILE":
|
47
|
+
"PEM_FILE": BCct.DEFAULT_PEM_FILE,
|
6
48
|
"PASSWORD": None,
|
7
|
-
"PEM_LOCATION":
|
49
|
+
"PEM_LOCATION": BCct.DEFAULT_PEM_LOCATION
|
8
50
|
}
|
51
|
+
|
9
52
|
|
10
53
|
class DCT_TYPES:
|
11
54
|
VOID_PIPELINE = 'Void'
|
naeural_client/utils/config.py
CHANGED
@@ -2,6 +2,13 @@ import os
|
|
2
2
|
from pathlib import Path
|
3
3
|
import shutil
|
4
4
|
|
5
|
+
from naeural_client.const.base import BCct
|
6
|
+
|
7
|
+
|
8
|
+
CONFIG_FILE = "config"
|
9
|
+
SDK_HOME = ".naeural"
|
10
|
+
LOCAL_PEM_PATH = "./_local_cache/_data/" + BCct.DEFAULT_PEM_FILE
|
11
|
+
|
5
12
|
ENV_TEMPLATE = """
|
6
13
|
|
7
14
|
EE_MQTT_HOST=r9092118.ala.eu-central-1.emqxsl.com
|
@@ -75,13 +82,13 @@ def get_user_folder():
|
|
75
82
|
"""
|
76
83
|
Returns the user folder.
|
77
84
|
"""
|
78
|
-
return Path.home() /
|
85
|
+
return Path.home() / SDK_HOME
|
79
86
|
|
80
87
|
def get_user_config_file():
|
81
88
|
"""
|
82
89
|
Returns the user configuration file.
|
83
90
|
"""
|
84
|
-
return get_user_folder() /
|
91
|
+
return get_user_folder() / CONFIG_FILE
|
85
92
|
|
86
93
|
def reset_config(*larg, **kwargs):
|
87
94
|
"""
|
@@ -93,6 +100,9 @@ def reset_config(*larg, **kwargs):
|
|
93
100
|
config_dir = get_user_folder()
|
94
101
|
config_file = get_user_config_file()
|
95
102
|
|
103
|
+
local_pem = Path(LOCAL_PEM_PATH)
|
104
|
+
target_pem = config_dir / BCct.USER_PEM_FILE
|
105
|
+
|
96
106
|
# Create the ~/.naeural folder if it doesn't exist
|
97
107
|
config_dir.mkdir(parents=True, exist_ok=True)
|
98
108
|
|
@@ -115,6 +125,12 @@ def reset_config(*larg, **kwargs):
|
|
115
125
|
color='y'
|
116
126
|
)
|
117
127
|
log_with_color(f"Please UPDATE the configuration in the file {config_file}", color='b')
|
128
|
+
|
129
|
+
if local_pem.exists():
|
130
|
+
log_with_color(f"Copying local PEM file {local_pem} to {target_pem}", color='y')
|
131
|
+
shutil.copy(local_pem, target_pem)
|
132
|
+
else:
|
133
|
+
log_with_color(f"No local PEM file found at {local_pem}. A default private key will be generated.", color='r')
|
118
134
|
return
|
119
135
|
|
120
136
|
def show_address(args):
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: naeural_client
|
3
|
-
Version: 2.5.
|
3
|
+
Version: 2.5.26
|
4
4
|
Summary: `naeural_client` is the Python SDK required for client app development for the Naeural Edge Protocol Edge Protocol framework
|
5
5
|
Project-URL: Homepage, https://github.com/NaeuralEdgeProtocol/naeural_client
|
6
6
|
Project-URL: Bug Tracker, https://github.com/NaeuralEdgeProtocol/naeural_client/issues
|
@@ -1,10 +1,10 @@
|
|
1
1
|
naeural_client/__init__.py,sha256=YimqgDbjLuywsf8zCWE0EaUXH4MBUrqLxt0TDV558hQ,632
|
2
|
-
naeural_client/_ver.py,sha256=
|
2
|
+
naeural_client/_ver.py,sha256=8hHk58mquJxWggJKicLlNUEf81FcB_OM-4VuQOLyG8E,331
|
3
3
|
naeural_client/base_decentra_object.py,sha256=C4iwZTkhKNBS4VHlJs5DfElRYLo4Q9l1V1DNVSk1fyQ,4412
|
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=
|
7
|
+
naeural_client/base/generic_session.py,sha256=TAfLadFrvSO_IPsrY4vRm8qLHtDNzW0Nq7pux32Wch4,91555
|
8
8
|
naeural_client/base/instance.py,sha256=kcZJmjLBtx8Bjj_ysIOx1JmLA-qSpG7E28j5rq6IYus,20444
|
9
9
|
naeural_client/base/pipeline.py,sha256=b4uNHrEIOlAtw4PGUx20dxwBhDck5__SrVXaHcSi8ZA,58251
|
10
10
|
naeural_client/base/plugin_template.py,sha256=qGaXByd_JZFpjvH9GXNbT7KaitRxIJB6-1IhbKrZjq4,138123
|
@@ -14,7 +14,7 @@ naeural_client/base/webapp_pipeline.py,sha256=QmPLVmhP0CPdi0YuvbZEH4APYz2Amtw3gy
|
|
14
14
|
naeural_client/base/payload/__init__.py,sha256=y8fBI8tG2ObNfaXFWjyWZXwu878FRYj_I8GIbHT4GKE,29
|
15
15
|
naeural_client/base/payload/payload.py,sha256=x-au7l67Z_vfn_4R2C_pjZCaFuUVXHngJiGOfIAYVdE,2690
|
16
16
|
naeural_client/bc/__init__.py,sha256=FQj23D1PrY06NUOARiKQi4cdj0-VxnoYgYDEht8lpr8,158
|
17
|
-
naeural_client/bc/base.py,sha256=
|
17
|
+
naeural_client/bc/base.py,sha256=Nd0THGidmlLZOD8k8vwldQqIZ_LnvMgAE6l5U5OA45E,32286
|
18
18
|
naeural_client/bc/chain.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
19
19
|
naeural_client/bc/ec.py,sha256=mWjodWCRgC3omVXOA9jtNdtPVNn2kMKV3Dcjt9oFUCQ,22974
|
20
20
|
naeural_client/certs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -22,7 +22,7 @@ naeural_client/certs/r9092118.ala.eu-central-1.emqxsl.com.crt,sha256=y-6io0tseyx
|
|
22
22
|
naeural_client/cli/README.md,sha256=WPdI_EjzAbUW1aPyj1sSR8rLydcJKZtoiaEtklQrjHo,74
|
23
23
|
naeural_client/cli/cli.py,sha256=Lo5qsANtjvWP0CG2BxIdYF8QLSpUQoLmYIgCGCVZp9Y,3808
|
24
24
|
naeural_client/cli/cli_commands.py,sha256=Y81oKz5Rx8qxYgzEzCwI9eB8iVL6iET7dETLVygs_VE,1686
|
25
|
-
naeural_client/cli/nodes.py,sha256=
|
25
|
+
naeural_client/cli/nodes.py,sha256=Oq7bh7kkU79doBLEa8ANU6OiWv83mJvyjFyZqwpKx1s,4595
|
26
26
|
naeural_client/code_cheker/__init__.py,sha256=pwkdeZGVL16ZA4Qf2mRahEhoOvKhL7FyuQbMFLr1E5M,33
|
27
27
|
naeural_client/code_cheker/base.py,sha256=lT5DRIFO5rqzsMNCmdMRfkAeevmezozehyfgmhnKpuI,19074
|
28
28
|
naeural_client/code_cheker/checker.py,sha256=QWupeM7ToancVIq1tRUxRNUrI8B5l5eoY0kDU4-O5aE,7365
|
@@ -32,7 +32,7 @@ naeural_client/comm/mqtt_wrapper.py,sha256=Ig3bFZkCbWd4y_Whn2PPa91Z3aLgNbNPau6Tn
|
|
32
32
|
naeural_client/const/README.md,sha256=6OHesr-f5NBuuJGryEoi_TCu2XdlhfQYlDKx_IJoXeg,177
|
33
33
|
naeural_client/const/__init__.py,sha256=MM6Zib6i7M2qWcMkLtLx14zqU-lE-u2uPHjNvbh2jAM,478
|
34
34
|
naeural_client/const/apps.py,sha256=gIONTZUkqPveu3DwelyJWpbFMeIR9l6DlaNg-xEfK1A,611
|
35
|
-
naeural_client/const/base.py,sha256
|
35
|
+
naeural_client/const/base.py,sha256=oO7FIdk7Q56xFDWNLlayPFGXmwpB2pDIU-r8VI5cGmM,4012
|
36
36
|
naeural_client/const/comms.py,sha256=La6JXWHexH8CfcBCKyT4fCIoeaoZlcm7KtZ57ab4ZgU,2201
|
37
37
|
naeural_client/const/environment.py,sha256=iytmTDgbOjvORPwHQmc0K0r-xJx7dnnzNnqAJJiFCDA,870
|
38
38
|
naeural_client/const/formatter.py,sha256=AW3bWlqf39uaqV4BBUuW95qKYfF2OkkU4f9hy3kSVhM,200
|
@@ -79,10 +79,10 @@ naeural_client/logging/tzlocal/win32.py,sha256=zBoj0vFVrGhnCm_f7xmYzGym4-fV-4Ij2
|
|
79
79
|
naeural_client/logging/tzlocal/windows_tz.py,sha256=Sv9okktjZJfRGGUOOppsvQuX_eXyXUxkSKCAFmWT9Hw,34203
|
80
80
|
naeural_client/utils/__init__.py,sha256=mAnke3-MeRzz3nhQvhuHqLnpaaCSmDxicd7Ck9uwpmI,77
|
81
81
|
naeural_client/utils/comm_utils.py,sha256=4cS9llRr_pK_3rNgDcRMCQwYPO0kcNU7AdWy_LtMyCY,1072
|
82
|
-
naeural_client/utils/config.py,sha256=
|
82
|
+
naeural_client/utils/config.py,sha256=JfW2gMQMYx9NzF2M4mJpioXawDHcOQ3deJprpCRtdOI,5874
|
83
83
|
naeural_client/utils/dotenv.py,sha256=_AgSo35n7EnQv5yDyu7C7i0kHragLJoCGydHjvOkrYY,2008
|
84
|
-
naeural_client-2.5.
|
85
|
-
naeural_client-2.5.
|
86
|
-
naeural_client-2.5.
|
87
|
-
naeural_client-2.5.
|
88
|
-
naeural_client-2.5.
|
84
|
+
naeural_client-2.5.26.dist-info/METADATA,sha256=_KG-9kNCy1R0hjdpfHNBG2PnnSh6i73ICp3N-Pz-hvQ,14619
|
85
|
+
naeural_client-2.5.26.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
86
|
+
naeural_client-2.5.26.dist-info/entry_points.txt,sha256=PNdyotDaQBAslZREx5luVyj0kqpQnwNACwkFNTPIHU4,55
|
87
|
+
naeural_client-2.5.26.dist-info/licenses/LICENSE,sha256=cvOsJVslde4oIaTCadabXnPqZmzcBO2f2zwXZRmJEbE,11311
|
88
|
+
naeural_client-2.5.26.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|