Skip to content

Commit 3c2837f

Browse files
PLangowskimacpijan
authored andcommitted
Decouple rte and snipeit modules
Signed-off-by: Pawel Langowski <[email protected]>
1 parent 6473a26 commit 3c2837f

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
@@ -716,7 +717,8 @@ def main():
716717
exit(
717718
f"Failed to retrieve model name from Snipe-IT. Check again arguments, or try providing model manually."
718719
)
719-
rte = RTE(args.rte_ip, dut_model_name, snipeit_api)
720+
sonoff, sonoff_ip = utils.init_sonoff(None, args.rte_ip, snipeit_api)
721+
rte = RTE(args.rte_ip, dut_model_name, sonoff)
720722

721723
if args.rte_cmd == "rel":
722724
# 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")
@@ -98,26 +100,6 @@ def load_model_data(self):
98100
# Return the loaded data
99101
return data
100102

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

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

324312
class IncompleteModelData(Exception):
325313
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)