naeural-client 2.5.25__py3-none-any.whl → 2.5.26__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- 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
|