redfish-python-sdk 1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. redfish_python_sdk-1.0.0.dist-info/METADATA +164 -0
  2. redfish_python_sdk-1.0.0.dist-info/RECORD +56 -0
  3. redfish_python_sdk-1.0.0.dist-info/WHEEL +5 -0
  4. redfish_python_sdk-1.0.0.dist-info/licenses/LICENSE +29 -0
  5. redfish_python_sdk-1.0.0.dist-info/top_level.txt +1 -0
  6. redfish_sdk/__init__.py +63 -0
  7. redfish_sdk/client.py +1894 -0
  8. redfish_sdk/exceptions.py +56 -0
  9. redfish_sdk/http_client.py +452 -0
  10. redfish_sdk/managers/__init__.py +21 -0
  11. redfish_sdk/managers/_log_helpers.py +144 -0
  12. redfish_sdk/managers/account.py +96 -0
  13. redfish_sdk/managers/chassis.py +327 -0
  14. redfish_sdk/managers/event.py +264 -0
  15. redfish_sdk/managers/managers.py +120 -0
  16. redfish_sdk/managers/registries.py +48 -0
  17. redfish_sdk/managers/session.py +130 -0
  18. redfish_sdk/managers/systems.py +630 -0
  19. redfish_sdk/managers/task.py +89 -0
  20. redfish_sdk/managers/update.py +99 -0
  21. redfish_sdk/managers/update_strategies/__init__.py +51 -0
  22. redfish_sdk/managers/update_strategies/base.py +101 -0
  23. redfish_sdk/managers/update_strategies/h3c.py +140 -0
  24. redfish_sdk/managers/update_strategies/inspur.py +89 -0
  25. redfish_sdk/managers/update_strategies/lenovo.py +59 -0
  26. redfish_sdk/managers/update_strategies/nettrix.py +56 -0
  27. redfish_sdk/managers/update_strategies/registry.py +72 -0
  28. redfish_sdk/managers/update_strategies/vendor_detect.py +111 -0
  29. redfish_sdk/managers/update_strategies/xfusion.py +60 -0
  30. redfish_sdk/managers/update_strategies/zte.py +68 -0
  31. redfish_sdk/models/__init__.py +55 -0
  32. redfish_sdk/models/account.py +60 -0
  33. redfish_sdk/models/chassis.py +86 -0
  34. redfish_sdk/models/check.py +231 -0
  35. redfish_sdk/models/common.py +102 -0
  36. redfish_sdk/models/drive.py +53 -0
  37. redfish_sdk/models/event.py +64 -0
  38. redfish_sdk/models/fru.py +59 -0
  39. redfish_sdk/models/gpu.py +33 -0
  40. redfish_sdk/models/logs.py +56 -0
  41. redfish_sdk/models/managers.py +153 -0
  42. redfish_sdk/models/memory.py +50 -0
  43. redfish_sdk/models/network_adapter.py +76 -0
  44. redfish_sdk/models/oem.py +173 -0
  45. redfish_sdk/models/pcie_device.py +89 -0
  46. redfish_sdk/models/power.py +92 -0
  47. redfish_sdk/models/processor.py +50 -0
  48. redfish_sdk/models/registry.py +34 -0
  49. redfish_sdk/models/resource_key.py +70 -0
  50. redfish_sdk/models/root.py +50 -0
  51. redfish_sdk/models/session.py +42 -0
  52. redfish_sdk/models/storage.py +77 -0
  53. redfish_sdk/models/systems.py +194 -0
  54. redfish_sdk/models/task.py +54 -0
  55. redfish_sdk/models/thermal.py +111 -0
  56. redfish_sdk/models/update.py +55 -0
@@ -0,0 +1,120 @@
1
+ """
2
+ Managers manager — manages BMC (Baseboard Management Controller) resources.
3
+
4
+ Provides access to:
5
+ - Manager info (BMC firmware version, model, etc.)
6
+ - Log services and log entries
7
+ - Network protocol configuration
8
+ - Ethernet interfaces
9
+ - Host interfaces
10
+
11
+ """
12
+ from __future__ import annotations
13
+
14
+ import logging
15
+ from typing import TYPE_CHECKING, List, Optional
16
+
17
+ from ..models.logs import Log, LogEntry
18
+ from ..models.managers import EthernetInterface, HostInterface, Manager, NetworkProtocol
19
+
20
+ if TYPE_CHECKING:
21
+ from ..client import RedfishClient
22
+
23
+ logger = logging.getLogger(__name__)
24
+
25
+
26
+ class ManagersManager:
27
+ """
28
+ Manages Redfish Manager resources (BMC).
29
+
30
+
31
+ """
32
+
33
+ def __init__(self, client: RedfishClient):
34
+ self._client = client
35
+ self._http = client._http_client
36
+
37
+ def get(self, manager_id: str = "1") -> Manager:
38
+ """
39
+ Get a manager (BMC) resource by ID.
40
+
41
+
42
+
43
+ Args:
44
+ manager_id: Manager ID (default "1")
45
+
46
+ Returns:
47
+ Manager resource
48
+ """
49
+ managers_odata_id = self._client._get_managers_collection_odata_id()
50
+ return self._http.get(
51
+ f"{managers_odata_id}/{manager_id}", Manager
52
+ )
53
+
54
+ def log_services(self, manager_id: str = "1") -> List[Log]:
55
+ """
56
+ Get the list of log services for a manager (BMC).
57
+
58
+
59
+ """
60
+ from ._log_helpers import require_log_services_link
61
+
62
+ manager = self.get(manager_id)
63
+ odata_id = require_log_services_link(manager, f"Manager {manager.id!r}")
64
+ return self._client._get_collection(odata_id, Log)
65
+
66
+ def log_entries(
67
+ self,
68
+ log_id: Optional[str] = None,
69
+ manager_id: str = "1",
70
+ ) -> List[LogEntry]:
71
+ """
72
+ Get log entries for a manager (BMC) log service.
73
+
74
+ Dynamic Entries link discovery + per-entry GET fallback;
75
+ ``log_id`` is optional. See
76
+ :meth:`SystemsManager.log_entries` for the full behaviour contract.
77
+ """
78
+ from ._log_helpers import (
79
+ fetch_log_entries,
80
+ require_log_services_link,
81
+ resolve_log_service,
82
+ )
83
+
84
+ manager = self.get(manager_id)
85
+ odata_id = require_log_services_link(manager, f"Manager {manager.id!r}")
86
+ log = resolve_log_service(self._client, odata_id, log_id)
87
+ return fetch_log_entries(self._client, log)
88
+
89
+ def network_protocol(self, manager_id: str = "1") -> NetworkProtocol:
90
+ """
91
+ Get network protocol configuration for a manager.
92
+
93
+
94
+ """
95
+ manager = self.get(manager_id)
96
+ return self._http.get(
97
+ f"{manager.odata_id}/NetworkProtocol", NetworkProtocol
98
+ )
99
+
100
+ def ethernet_interfaces(self, manager_id: str = "1") -> List[EthernetInterface]:
101
+ """
102
+ Get the list of Ethernet interfaces for a manager (BMC).
103
+
104
+
105
+ """
106
+ manager = self.get(manager_id)
107
+ return self._client._get_collection(
108
+ manager.ethernet_interfaces.odata_id, EthernetInterface
109
+ )
110
+
111
+ def host_interfaces(self, manager_id: str = "1") -> List[HostInterface]:
112
+ """
113
+ Get the list of host interfaces for a manager.
114
+
115
+
116
+ """
117
+ manager = self.get(manager_id)
118
+ return self._client._get_collection(
119
+ manager.host_interfaces.odata_id, HostInterface
120
+ )
@@ -0,0 +1,48 @@
1
+ """
2
+ Registries manager — manages Redfish message registries.
3
+
4
+ """
5
+ from __future__ import annotations
6
+
7
+ import logging
8
+ from typing import TYPE_CHECKING, List
9
+
10
+ from ..models.registry import Registry
11
+
12
+ if TYPE_CHECKING:
13
+ from ..client import RedfishClient
14
+
15
+ logger = logging.getLogger(__name__)
16
+
17
+
18
+ class RegistriesManager:
19
+ """
20
+ Manages Redfish message registries.
21
+
22
+
23
+ """
24
+
25
+ def __init__(self, client: RedfishClient):
26
+ self._client = client
27
+ self._http = client._http_client
28
+
29
+ def registries(self) -> List[Registry]:
30
+ """
31
+ Get the list of message registries.
32
+
33
+
34
+ """
35
+ return self._client._get_registries_collection()
36
+
37
+ def get(self, registry_id: str) -> Registry:
38
+ """
39
+ Get a specific message registry by ID.
40
+
41
+ Args:
42
+ registry_id: Registry ID (e.g., "Base.1.15.0")
43
+
44
+ Returns:
45
+ Registry resource
46
+ """
47
+ registries_odata_id = self._client._get_registries_collection_odata_id()
48
+ return self._http.get(f"{registries_odata_id}/{registry_id}", Registry)
@@ -0,0 +1,130 @@
1
+ """
2
+ Session service manager — manages active BMC sessions.
3
+
4
+ Provides:
5
+ - List sessions
6
+ - Get session
7
+ - Create session (login)
8
+ - Delete session (logout)
9
+
10
+ Session creation returns an X-Auth-Token in the response header.
11
+ The SDK can optionally switch to token-based auth after login.
12
+
13
+ """
14
+ from __future__ import annotations
15
+
16
+ import logging
17
+ from typing import TYPE_CHECKING, List
18
+
19
+ from ..models.session import Session
20
+
21
+ if TYPE_CHECKING:
22
+ from ..client import RedfishClient
23
+
24
+ logger = logging.getLogger(__name__)
25
+
26
+
27
+ class SessionServiceManager:
28
+ """
29
+ Manages Redfish Session resources.
30
+
31
+
32
+ """
33
+
34
+ def __init__(self, client: RedfishClient):
35
+ self._client = client
36
+ self._http = client._http_client
37
+
38
+ def sessions(self) -> List[Session]:
39
+ """
40
+ Get the list of active sessions.
41
+
42
+
43
+ """
44
+ session_service = self._client._get_session_service()
45
+ return self._client._get_collection(session_service.sessions.odata_id, Session)
46
+
47
+ def get(self, session_id: str) -> Session:
48
+ """
49
+ Get a specific session by ID.
50
+
51
+
52
+ """
53
+ session_service = self._client._get_session_service()
54
+ path = f"{session_service.sessions.odata_id}/{session_id}"
55
+ return self._http.get(path, Session)
56
+
57
+ def create(
58
+ self,
59
+ username: str,
60
+ password: str,
61
+ switch_to_token_auth: bool = False,
62
+ ) -> Session:
63
+ """
64
+ Create a new session (login to the BMC).
65
+
66
+ The Redfish spec requires posting to the Sessions collection directly
67
+ (not via SessionService), which may be at /redfish/v1/SessionService/Sessions
68
+ or /redfish/v1/Sessions.
69
+
70
+ After creation, the X-Auth-Token is returned in the response header.
71
+ If switch_to_token_auth=True, the SDK client will use this token
72
+ for subsequent requests instead of Basic Auth.
73
+
74
+
75
+
76
+ Args:
77
+ username: BMC username
78
+ password: BMC password
79
+ switch_to_token_auth: If True, switch client to token-based auth
80
+
81
+ Returns:
82
+ Session resource with x_auth_token populated
83
+ """
84
+ # Use the Sessions link from the root service links (direct sessions endpoint)
85
+ root = self._client._get_root()
86
+ sessions_url = None
87
+
88
+ if root.links and root.links.sessions:
89
+ sessions_url = root.links.sessions.odata_id
90
+ else:
91
+ # Fallback to session service
92
+ session_service = self._client._get_session_service()
93
+ sessions_url = session_service.sessions.odata_id
94
+
95
+ body = {"UserName": username, "Password": password}
96
+
97
+ response = self._http.post_raw(sessions_url, body=body)
98
+
99
+ # Parse the session from response body
100
+ session_data = response.json()
101
+ session = Session.model_validate(session_data)
102
+
103
+ # Extract X-Auth-Token from response headers
104
+ token = response.headers.get("X-Auth-Token") or response.headers.get("x-auth-token")
105
+ if token:
106
+ session.x_auth_token = token
107
+ logger.info("Session created successfully, token acquired")
108
+
109
+ if switch_to_token_auth:
110
+ self._http.set_auth_token(token)
111
+
112
+ return session
113
+
114
+ def delete(self, session_id: str) -> str:
115
+ """
116
+ Delete a session (logout).
117
+
118
+
119
+
120
+ Args:
121
+ session_id: Session ID to delete
122
+
123
+ Returns:
124
+ Response body (usually empty)
125
+ """
126
+ session_service = self._client._get_session_service()
127
+ path = f"{session_service.sessions.odata_id}/{session_id}"
128
+ result = self._http.delete(path)
129
+ logger.info("Session %s deleted", session_id)
130
+ return result