1
+ import json
1
2
import logging
3
+ from datetime import datetime
2
4
5
+ import aiofiles
3
6
from zigpy import types as t
4
7
5
8
from . import utils as u
6
9
7
- # from zigpy.zcl import foundation
8
- # import zigpy.zcl as zcl
10
+ try :
11
+ from zigpy_znp .tools .common import validate_backup_json
12
+ from zigpy_znp .tools .network_backup import backup_network
13
+ from zigpy_znp .tools .network_restore import json_backup_to_zigpy_state
14
+ from zigpy_znp .tools .nvram_read import nvram_read
15
+ from zigpy_znp .tools .nvram_reset import nvram_reset
16
+ from zigpy_znp .tools .nvram_write import nvram_write
17
+ except ImportError :
18
+ backup_network = None
19
+ nvram_read = None
20
+ nvram_write = None
21
+ nvram_reset = None
22
+ validate_backup_json = None
23
+ json_backup_to_zigpy_state = None
9
24
10
25
LOGGER = logging .getLogger (__name__ )
11
26
@@ -22,10 +37,10 @@ async def znp_backup(
22
37
LOGGER .debug (msg )
23
38
raise ValueError (msg )
24
39
25
- # Import stuff we need
26
- import json
27
-
28
- from zigpy_znp . tools . network_backup import backup_network
40
+ if backup_network is None :
41
+ msg = "ZNP tools not available (backup_network)"
42
+ LOGGER . debug ( msg )
43
+ raise RuntimeError ( msg )
29
44
30
45
# Get backup information
31
46
backup_obj = await backup_network (app ._znp )
@@ -44,8 +59,8 @@ async def znp_backup(
44
59
event_data ["backup_file" ] = fname
45
60
46
61
LOGGER .debug ("Writing to %s" , fname )
47
- with open (fname , "w" , encoding = "utf_8" ) as f :
48
- f .write (json .dumps (backup_obj , indent = 4 ))
62
+ async with aiofiles . open (fname , "w" , encoding = "utf_8" ) as f :
63
+ await f .write (json .dumps (backup_obj , indent = 4 ))
49
64
50
65
51
66
async def znp_restore (
@@ -58,6 +73,11 @@ async def znp_restore(
58
73
LOGGER .debug (msg )
59
74
raise ValueError (msg )
60
75
76
+ if validate_backup_json is None or json_backup_to_zigpy_state is None :
77
+ msg = "ZNP tools not available (validate_backup_json)"
78
+ LOGGER .debug (msg )
79
+ raise RuntimeError (msg )
80
+
61
81
# Get/set parameters
62
82
63
83
# command_data (data):
@@ -70,30 +90,22 @@ async def znp_restore(
70
90
71
91
counter_increment = t .uint32_t (counter_increment )
72
92
73
- from datetime import datetime
74
-
75
93
current_datetime = datetime .now ().strftime ("_%Y%m%d_%H%M%S" )
76
94
77
95
# Safety: backup current configuration
78
96
await znp_backup (
79
97
app , listener , ieee , cmd , current_datetime , service , params , event_data
80
98
)
81
99
82
- # Import stuff we need for restoring
83
- import json
84
-
85
- from zigpy_znp .tools .common import validate_backup_json
86
- from zigpy_znp .tools .network_restore import json_backup_to_zigpy_state
87
-
88
100
# Set name with regards to local path
89
101
fname = u .get_local_dir () + "nwk_backup.json"
90
102
LOGGER .info ("Restore from '%s'" , fname )
91
103
92
104
event_data ["restore_file" ] = fname
93
105
94
106
# Read backup file
95
- with open (fname , encoding = "utf_8" ) as f :
96
- backup = json .load ( f )
107
+ async with aiofiles . open (fname , encoding = "utf_8" ) as f :
108
+ backup = json .loads ( await f . read () )
97
109
98
110
# validate the backup file
99
111
LOGGER .info ("Validating backup contents" )
@@ -136,10 +148,10 @@ async def znp_nvram_backup(
136
148
LOGGER .debug (msg )
137
149
raise ValueError (msg )
138
150
139
- # Store backup information to file
140
- import json
141
-
142
- from zigpy_znp . tools . nvram_read import nvram_read
151
+ if nvram_read is None :
152
+ msg = "ZNP tools not available (nvram_read)"
153
+ LOGGER . debug ( msg )
154
+ raise RuntimeError ( msg )
143
155
144
156
# Set name with regards to local path
145
157
out_dir = u .get_local_dir ()
@@ -154,8 +166,8 @@ async def znp_nvram_backup(
154
166
fname = out_dir + "nvram_backup" + str (data ) + ".json"
155
167
156
168
LOGGER .info ("Saving NVRAM to '%s'" , fname )
157
- with open (fname , "w" , encoding = "utf_8" ) as f :
158
- f .write (json .dumps (backup_obj , indent = 4 ))
169
+ async with aiofiles . open (fname , "w" , encoding = "utf_8" ) as f :
170
+ await f .write (json .dumps (backup_obj , indent = 4 ))
159
171
LOGGER .info ("NVRAM backup saved to '%s'" , fname )
160
172
161
173
@@ -169,19 +181,17 @@ async def znp_nvram_restore(
169
181
LOGGER .debug (msg )
170
182
raise ValueError (msg )
171
183
172
- # Safety: backup current configuration
173
- from datetime import datetime
184
+ if nvram_write is None :
185
+ msg = "ZNP tools not available (nvram_write)"
186
+ LOGGER .debug (msg )
187
+ raise RuntimeError (msg )
174
188
175
189
current_datetime = datetime .now ().strftime ("_%Y%m%d_%H%M%S" )
176
190
await znp_nvram_backup (
177
191
app , listener , ieee , cmd , current_datetime , service , params , event_data
178
192
)
179
193
180
194
# Restore NVRAM backup from file
181
- import json
182
-
183
- from zigpy_znp .tools .nvram_write import nvram_write
184
-
185
195
# Set name with regards to local path
186
196
out_dir = u .get_local_dir ()
187
197
@@ -192,8 +202,8 @@ async def znp_nvram_restore(
192
202
fname = out_dir + "nvram_backup" + str (data ) + ".json"
193
203
194
204
LOGGER .info ("Restoring NVRAM from '%s'" , fname )
195
- with open (fname , "w " , encoding = "utf_8" ) as f :
196
- nvram_obj = json .load ( f )
205
+ async with aiofiles . open (fname , "r " , encoding = "utf_8" ) as f :
206
+ nvram_obj = json .loads ( await f . read () )
197
207
198
208
await nvram_write (app ._znp , nvram_obj )
199
209
LOGGER .info ("Restored NVRAM from '%s'" , fname )
@@ -211,7 +221,10 @@ async def znp_nvram_reset(
211
221
LOGGER .debug (msg )
212
222
raise ValueError (msg )
213
223
214
- from datetime import datetime
224
+ if nvram_reset is None :
225
+ msg = "ZNP tools not available (nvram_reset)"
226
+ LOGGER .debug (msg )
227
+ raise RuntimeError (msg )
215
228
216
229
current_datetime = datetime .now ().strftime ("_%Y%m%d_%H%M%S" )
217
230
@@ -220,9 +233,6 @@ async def znp_nvram_reset(
220
233
app , listener , ieee , cmd , current_datetime , service , params , event_data
221
234
)
222
235
223
- # Import stuff we need for resetting
224
- from zigpy_znp .tools .nvram_reset import nvram_reset
225
-
226
236
# Write back information from backup
227
237
LOGGER .info ("Reset NVRAM" )
228
238
await nvram_reset (app ._znp )
0 commit comments