Skip to content

Commit da2bf33

Browse files
authored
Merge pull request #280 from chenseanxy/fix-async-fileio
Fix inline import and sync file io raising hass warnings
2 parents 942d0cc + 857a813 commit da2bf33

File tree

2 files changed

+47
-39
lines changed

2 files changed

+47
-39
lines changed

custom_components/zha_toolkit/__init__.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,9 @@
1515
from zigpy import types as t
1616
from zigpy.exceptions import DeliveryError
1717

18-
from . import const as c
1918
from . import params as PARDEFS
2019
from . import utils as u
21-
22-
DOMAIN = c.DOMAIN
20+
from .const import DOMAIN
2321

2422
DEPENDENCIES = ["zha"]
2523

custom_components/zha_toolkit/znp.py

+46-36
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,26 @@
1+
import json
12
import logging
3+
from datetime import datetime
24

5+
import aiofiles
36
from zigpy import types as t
47

58
from . import utils as u
69

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
924

1025
LOGGER = logging.getLogger(__name__)
1126

@@ -22,10 +37,10 @@ async def znp_backup(
2237
LOGGER.debug(msg)
2338
raise ValueError(msg)
2439

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)
2944

3045
# Get backup information
3146
backup_obj = await backup_network(app._znp)
@@ -44,8 +59,8 @@ async def znp_backup(
4459
event_data["backup_file"] = fname
4560

4661
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))
4964

5065

5166
async def znp_restore(
@@ -58,6 +73,11 @@ async def znp_restore(
5873
LOGGER.debug(msg)
5974
raise ValueError(msg)
6075

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+
6181
# Get/set parameters
6282

6383
# command_data (data):
@@ -70,30 +90,22 @@ async def znp_restore(
7090

7191
counter_increment = t.uint32_t(counter_increment)
7292

73-
from datetime import datetime
74-
7593
current_datetime = datetime.now().strftime("_%Y%m%d_%H%M%S")
7694

7795
# Safety: backup current configuration
7896
await znp_backup(
7997
app, listener, ieee, cmd, current_datetime, service, params, event_data
8098
)
8199

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-
88100
# Set name with regards to local path
89101
fname = u.get_local_dir() + "nwk_backup.json"
90102
LOGGER.info("Restore from '%s'", fname)
91103

92104
event_data["restore_file"] = fname
93105

94106
# 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())
97109

98110
# validate the backup file
99111
LOGGER.info("Validating backup contents")
@@ -136,10 +148,10 @@ async def znp_nvram_backup(
136148
LOGGER.debug(msg)
137149
raise ValueError(msg)
138150

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)
143155

144156
# Set name with regards to local path
145157
out_dir = u.get_local_dir()
@@ -154,8 +166,8 @@ async def znp_nvram_backup(
154166
fname = out_dir + "nvram_backup" + str(data) + ".json"
155167

156168
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))
159171
LOGGER.info("NVRAM backup saved to '%s'", fname)
160172

161173

@@ -169,19 +181,17 @@ async def znp_nvram_restore(
169181
LOGGER.debug(msg)
170182
raise ValueError(msg)
171183

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)
174188

175189
current_datetime = datetime.now().strftime("_%Y%m%d_%H%M%S")
176190
await znp_nvram_backup(
177191
app, listener, ieee, cmd, current_datetime, service, params, event_data
178192
)
179193

180194
# Restore NVRAM backup from file
181-
import json
182-
183-
from zigpy_znp.tools.nvram_write import nvram_write
184-
185195
# Set name with regards to local path
186196
out_dir = u.get_local_dir()
187197

@@ -192,8 +202,8 @@ async def znp_nvram_restore(
192202
fname = out_dir + "nvram_backup" + str(data) + ".json"
193203

194204
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())
197207

198208
await nvram_write(app._znp, nvram_obj)
199209
LOGGER.info("Restored NVRAM from '%s'", fname)
@@ -211,7 +221,10 @@ async def znp_nvram_reset(
211221
LOGGER.debug(msg)
212222
raise ValueError(msg)
213223

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)
215228

216229
current_datetime = datetime.now().strftime("_%Y%m%d_%H%M%S")
217230

@@ -220,9 +233,6 @@ async def znp_nvram_reset(
220233
app, listener, ieee, cmd, current_datetime, service, params, event_data
221234
)
222235

223-
# Import stuff we need for resetting
224-
from zigpy_znp.tools.nvram_reset import nvram_reset
225-
226236
# Write back information from backup
227237
LOGGER.info("Reset NVRAM")
228238
await nvram_reset(app._znp)

0 commit comments

Comments
 (0)