Skip to content

Commit 2cb1983

Browse files
committed
Decouple rte and snipeit modules
Signed-off-by: Pawel Langowski <[email protected]>
1 parent 33b5622 commit 2cb1983

File tree

4 files changed

+39
-32
lines changed

4 files changed

+39
-32
lines changed

osfv_cli/src/osfv/cli/cli.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from osfv.libs.snipeit_api import SnipeIT
1212
from osfv.libs.sonoff_api import SonoffDevice
1313
from osfv.libs.zabbix import Zabbix
14+
import osfv.libs.utils as utils
1415

1516

1617
# Check out an asset
@@ -717,7 +718,8 @@ def main():
717718
exit(
718719
f"Failed to retrieve model name from Snipe-IT. Check again arguments, or try providing model manually."
719720
)
720-
rte = RTE(args.rte_ip, dut_model_name, snipeit_api)
721+
sonoff, sonoff_ip = utils.init_sonoff(None, args.rte_ip, snipeit_api)
722+
rte = RTE(args.rte_ip, dut_model_name, sonoff)
721723

722724
if args.rte_cmd == "rel":
723725
# Handle RTE relay related commands

osfv_cli/src/osfv/libs/rte.py

+13-25
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import yaml
66
from importlib_resources import files
77
from osfv.libs.rtectrl_api import rtectrl
8-
from osfv.libs.sonoff_api import SonoffDevice
98
from voluptuous import Any, Optional, Required, Schema
109

1110

@@ -29,12 +28,16 @@ class RTE(rtectrl):
2928
PROGRAMMER_CH341A = "ch341a_spi"
3029
FLASHROM_CMD = "flashrom -p {programmer} {args}"
3130

32-
def __init__(self, rte_ip, dut_model, snipeit_api=None, sonoff_ip=None):
31+
def __init__(self, rte_ip, dut_model, sonoff):
3332
self.rte_ip = rte_ip
3433
self.dut_model = dut_model
3534
self.dut_data = self.load_model_data()
36-
self.snipeit_api = snipeit_api
37-
self.sonoff, self.sonoff_ip = self.init_sonoff(sonoff_ip)
35+
self.sonoff = sonoff
36+
if not self.sonoff_sanity_check():
37+
raise SonoffNotFound(
38+
exit(
39+
f"Missing value for 'sonoff_ip' or Sonoff not found in SnipeIT")
40+
)
3841

3942
def load_model_data(self):
4043
file_path = os.path.join(files("osfv"), "models", f"{self.dut_model}.yml")
@@ -97,26 +100,6 @@ def load_model_data(self):
97100
# Return the loaded data
98101
return data
99102

100-
def init_sonoff(self, init_sonoff_ip):
101-
sonoff_ip = ""
102-
sonoff = None
103-
104-
if self.dut_data["pwr_ctrl"]["sonoff"] is True:
105-
if not self.snipeit_api:
106-
if not init_sonoff_ip:
107-
raise TypeError(
108-
f"Expected a value for 'sonoff_ip', but got None"
109-
)
110-
sonoff_ip = init_sonoff_ip
111-
else:
112-
sonoff_ip = self.snipeit_api.get_sonoff_ip_by_rte_ip(self.rte_ip)
113-
if not sonoff_ip:
114-
raise SonoffNotFound(
115-
exit(f"Sonoff IP not found in SnipeIT for RTE: {self.rte_ip}")
116-
)
117-
sonoff = SonoffDevice(sonoff_ip)
118-
return sonoff, sonoff_ip
119-
120103
def power_on(self, sleep=1):
121104
self.gpio_set(self.GPIO_POWER, "low", sleep)
122105
time.sleep(sleep)
@@ -322,6 +305,12 @@ def flash_write(self, write_file):
322305
if self.dut_data["reset_cmos"] == True:
323306
self.reset_cmos()
324307

308+
def sonoff_sanity_check(self):
309+
"""
310+
Verify that if DUT is powered by Sonoff, Sonoff IP is not None
311+
"""
312+
return not self.dut_data["pwr_ctrl"]["sonoff"] or self.sonoff.sonoff_ip
313+
325314

326315
class IncompleteModelData(Exception):
327316
pass
@@ -334,6 +323,5 @@ class UnsupportedDUTModel(Exception):
334323
class SPIWrongVoltage(Exception):
335324
pass
336325

337-
338326
class SonoffNotFound(Exception):
339327
pass

osfv_cli/src/osfv/libs/utils.py

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
2+
from osfv.libs.sonoff_api import SonoffDevice
3+
4+
def init_sonoff(init_sonoff_ip, rte_ip, snipeit_api=None):
5+
sonoff_ip = ""
6+
sonoff = None
7+
if not snipeit_api:
8+
sonoff_ip = init_sonoff_ip
9+
else:
10+
sonoff_ip = snipeit_api.get_sonoff_ip_by_rte_ip(rte_ip)
11+
sonoff = SonoffDevice(sonoff_ip)
12+
return sonoff, sonoff_ip

osfv_cli/src/osfv/rf/rte_robot.py

+11-6
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
from osfv.libs.rte import RTE, UnsupportedDUTModel
33
from osfv.libs.snipeit_api import SnipeIT
44
from robot.api.deco import keyword
5+
from osfv.libs.sonoff_api import SonoffDevice
6+
import osfv.libs.utils as utils
57

68
model_dict = {
79
"minnowboard-turbot": "MinnowBoard Turbot B41",
@@ -27,10 +29,11 @@
2729

2830
class RobotRTE:
2931
def __init__(self, rte_ip, snipeit: bool, sonoff_ip=None, config=None):
32+
self.rte_ip = rte_ip
3033
if snipeit:
31-
snipeit_api = SnipeIT()
32-
asset_id = snipeit_api.get_asset_id_by_rte_ip(rte_ip)
33-
status, dut_model_name = snipeit_api.get_asset_model_name(asset_id)
34+
self.snipeit_api = SnipeIT()
35+
asset_id = self.snipeit_api.get_asset_id_by_rte_ip(rte_ip)
36+
status, dut_model_name = self.snipeit_api.get_asset_model_name(asset_id)
3437
if status:
3538
robot.api.logger.info(
3639
f"DUT model retrieved from snipeit: {dut_model_name}"
@@ -39,11 +42,12 @@ def __init__(self, rte_ip, snipeit: bool, sonoff_ip=None, config=None):
3942
raise AssertionError(
4043
f"Failed to retrieve model name from Snipe-IT. Check again arguments, or try providing model manually."
4144
)
42-
self.rte = RTE(rte_ip, dut_model_name, snipeit_api)
45+
self.sonoff, self.sonoff_ip = utils.init_sonoff(sonoff_ip, self.rte_ip, self.snipeit_api)
46+
self.rte = RTE(rte_ip, dut_model_name, self.sonoff)
4347
else:
48+
self.sonoff, self.sonoff_ip = utils.init_sonoff(sonoff_ip, self.rte_ip)
4449
self.rte = RTE(
45-
rte_ip, self.cli_model_from_osfv(config), sonoff_ip=sonoff_ip
46-
)
50+
rte_ip, self.cli_model_from_osfv(config), self.sonoff)
4751

4852
def cli_model_from_osfv(self, osfv_model):
4953
"""
@@ -133,3 +137,4 @@ def rte_gpio_set(self, gpio_no, state):
133137
self.rte.gpio_set(int(gpio_no), state)
134138
state = self.rte.gpio_get(int(gpio_no))
135139
robot.api.logger.info(f"GPIO {gpio_no} state set to {state}")
140+

0 commit comments

Comments
 (0)