Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ Installation

pip install quads-lib

You can also install the in-development version with::
You can also install the development version with::

pip install https://github.com/quadsproject/python-quads-lib/archive/development.zip

Expand Down
7 changes: 7 additions & 0 deletions src/quads_lib/quads.py
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,13 @@ def update_vlan(self, vlan_id: int, data: dict) -> dict:
def create_vlan(self, data: dict) -> dict:
return self.post("vlans", data)

# OS
@returns("List[OS]")
def get_os_list(self) -> dict:
endpoint = Path("hosts") / "os_list"
json_response = self.get(str(endpoint))
return json_response

# Moves
def get_moves(self, date: Optional[str] = None) -> dict:
url = "moves"
Expand Down
36 changes: 36 additions & 0 deletions tests/test_quads.py
Original file line number Diff line number Diff line change
Expand Up @@ -1694,6 +1694,33 @@ def test_create_vlan(self, mock_post):
assert mock_post.call_args[1]["json"] == vlan_data
assert result == vlan_data

@patch("requests.Session.request")
def test_get_os_list(self, mock_get):
expected_response = [
{"Id": 1, "Title": "RHEL 9.4", "Release Name": "Plow", "Family": "rhel"},
{"Id": 2, "Title": "RHEL 8.10", "Release Name": "Ootpa", "Family": "rhel"},
]
mock_response = Mock()
mock_response.json.return_value = expected_response
mock_get.return_value = mock_response

result = self.api.get_os_list()

mock_get.assert_called_once()
assert str(mock_get.call_args[0][1]).endswith("/hosts/os_list")
assert result == expected_response

@patch("requests.Session.request")
def test_get_os_list_empty(self, mock_get):
mock_response = Mock()
mock_response.json.return_value = []
mock_get.return_value = mock_response

result = self.api.get_os_list()

mock_get.assert_called_once()
assert result == []

@patch("requests.Session.request")
def test_get_moves(self, mock_get):
expected_response = {
Expand Down Expand Up @@ -1776,6 +1803,15 @@ def test_get_vlans_error(self, mock_get):
with pytest.raises(APIServerException, match="Check the flask server logs"):
self.api.get_vlans()

@patch("requests.Session.request")
def test_get_os_list_error(self, mock_get):
mock_response = Mock()
mock_response.status_code = 500
mock_get.return_value = mock_response

with pytest.raises(APIServerException, match="Check the flask server logs"):
self.api.get_os_list()

@patch("requests.Session.request")
def test_get_version_error(self, mock_get):
mock_response = Mock()
Expand Down
Loading