Skip to content

Commit 5c372ec

Browse files
committed
Decouple rte and snipeit modules
Signed-off-by: Pawel Langowski <[email protected]>
1 parent a9913c4 commit 5c372ec

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
@@ -5,6 +5,7 @@
55
from copy import copy
66
from importlib import metadata
77

8+
import osfv.libs.utils as utils
89
import pexpect
910
import requests
1011
from osfv.libs.rte import RTE
@@ -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

+12-24
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,15 @@ 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(f"Missing value for 'sonoff_ip' or Sonoff not found in SnipeIT")
39+
)
3840

3941
def load_model_data(self):
4042
file_path = os.path.join(files("osfv"), "models", f"{self.dut_model}.yml")
@@ -97,26 +99,6 @@ def load_model_data(self):
9799
# Return the loaded data
98100
return data
99101

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-
120102
def power_on(self, sleep=1):
121103
self.gpio_set(self.GPIO_POWER, "low", sleep)
122104
time.sleep(sleep)
@@ -322,6 +304,12 @@ def flash_write(self, write_file):
322304
if self.dut_data["reset_cmos"] == True:
323305
self.reset_cmos()
324306

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

326314
class IncompleteModelData(Exception):
327315
pass

osfv_cli/src/osfv/libs/utils.py

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from osfv.libs.sonoff_api import SonoffDevice
2+
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

+12-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
import osfv.libs.utils as utils
12
import robot.api.logger
23
from osfv.libs.rte import RTE, UnsupportedDUTModel
34
from osfv.libs.snipeit_api import SnipeIT
5+
from osfv.libs.sonoff_api import SonoffDevice
46
from robot.api.deco import keyword
57

68
model_dict = {
@@ -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,13 @@ 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)
43-
else:
44-
self.rte = RTE(
45-
rte_ip, self.cli_model_from_osfv(config), sonoff_ip=sonoff_ip
45+
self.sonoff, self.sonoff_ip = utils.init_sonoff(
46+
sonoff_ip, self.rte_ip, self.snipeit_api
4647
)
48+
self.rte = RTE(rte_ip, dut_model_name, self.sonoff)
49+
else:
50+
self.sonoff, self.sonoff_ip = utils.init_sonoff(sonoff_ip, self.rte_ip)
51+
self.rte = RTE(rte_ip, self.cli_model_from_osfv(config), self.sonoff)
4752

4853
def cli_model_from_osfv(self, osfv_model):
4954
"""

0 commit comments

Comments
 (0)