Skip to content

Commit fb2f9fa

Browse files
committed
ENH: refactoring of 'node_add' API
1 parent 19b9626 commit fb2f9fa

File tree

9 files changed

+178
-64
lines changed

9 files changed

+178
-64
lines changed

src/save_and_restore_api/_api_async.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,9 @@ async def nodes_get(self, uniqueIds):
102102
method, url, body_json = self._prepare_nodes_get(uniqueIds=uniqueIds)
103103
return await self.send_request(method, url, body_json=body_json)
104104

105-
async def node_add(self, parentNodeId, *, name, nodeType, auth=None, **kwargs):
105+
async def node_add(self, parentNodeId, *, node, auth=None, **kwargs):
106106
# Reusing docstrings from the threaded version
107-
method, url, params, body_json = self._prepare_node_add(
108-
parentNodeId=parentNodeId, name=name, nodeType=nodeType, **kwargs
109-
)
107+
method, url, params, body_json = self._prepare_node_add(parentNodeId=parentNodeId, node=node)
110108
return await self.send_request(method, url, params=params, body_json=body_json, auth=auth)
111109

112110
async def node_delete(self, nodeId, *, auth=None):

src/save_and_restore_api/_api_base.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -231,13 +231,14 @@ def _prepare_nodes_get(self, *, uniqueIds):
231231
body_json = uniqueIds
232232
return method, url, body_json
233233

234-
def _prepare_node_add(self, *, parentNodeId, name, nodeType, **kwargs):
235-
node_types = ("FOLDER", "CONFIGURATION")
236-
if nodeType not in node_types:
237-
raise self.RequestParameterError(f"Invalid nodeType: {nodeType!r}. Supported types: {node_types}.")
234+
def _prepare_node_add(self, *, parentNodeId, node):
235+
if "name" not in node or "nodeType" not in node:
236+
raise self.RequestParameterError(f"Parameters 'name' and 'nodeType' are required in 'node': {node!r}.")
237+
node_type, node_types = node["nodeType"], ("FOLDER", "CONFIGURATION")
238+
if node_type not in node_types:
239+
raise self.RequestParameterError(f"Invalid 'nodeType': {node_type!r}. Supported types: {node_types}.")
238240
method, url, params = "PUT", "/node", {"parentNodeId": parentNodeId}
239-
body_json = kwargs
240-
body_json.update({"name": name, "nodeType": nodeType})
241+
body_json = node
241242
return method, url, params, body_json
242243

243244
def _prepare_node_delete(self, *, nodeId):

src/save_and_restore_api/_api_threads.py

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -230,16 +230,54 @@ def nodes_get(self, uniqueIds):
230230
method, url, body_json = self._prepare_nodes_get(uniqueIds=uniqueIds)
231231
return self.send_request(method, url, body_json=body_json)
232232

233-
def node_add(self, parentNodeId, *, name, nodeType, auth=None, **kwargs):
233+
def node_add(self, parentNodeId, *, node, auth=None, **kwargs):
234234
"""
235-
Creates a new node under the specified parent node. Required parameters:
236-
``name`` and ``nodeType``. Supported types: ``"FOLDER"``, ``"CONFIGURATION"``.
235+
Creates a new node under the specified parent node.
237236
238237
API: PUT /node?parentNodeId={parentNodeId}
238+
239+
Parameters
240+
----------
241+
parentNodeId : str
242+
Unique ID of the parent node.
243+
node : dict
244+
Node metadata. The required fields are ``name`` and ``nodeType``.
245+
Supported node types: ``"FOLDER"``, ``"CONFIGURATION"``.
246+
auth : httpx.BasicAuth
247+
Object with authentication data (generated using ``auth_gen`` method). If not specified or None,
248+
then the authentication set using ``auth_set`` method is used.
249+
250+
Returns
251+
-------
252+
dict
253+
Created node metadata as returned by the server.
254+
255+
Examples
256+
--------
257+
258+
.. code-block:: python
259+
260+
from save_and_restore_api import SaveRestoreAPI
261+
262+
with SaveRestoreAPI(base_url="http://localhost:8080/save-restore") as SR:
263+
SR.auth_set(username="user", password="user_password")
264+
root_folder_uid = SR.ROOT_NODE_UID
265+
folder = SR.node_add(root_folder_uid, node={"name": "My Folder", "nodeType": "FOLDER"})
266+
print(f"Created folder metadata: {folder}")
267+
268+
Async version:
269+
270+
.. code-block:: python
271+
272+
from save_and_restore_api.aio import SaveRestoreAPI
273+
274+
async with SaveRestoreAPI(base_url="http://localhost:8080/save-restore") as SR:
275+
await SR.auth_set(username="user", password="user_password")
276+
root_folder_uid = SR.ROOT_NODE_UID
277+
folder = await SR.node_add(root_folder_uid, node={"name": "My Folder", "nodeType": "FOLDER"})
278+
print(f"Created folder metadata: {folder}")
239279
"""
240-
method, url, params, body_json = self._prepare_node_add(
241-
parentNodeId=parentNodeId, name=name, nodeType=nodeType, **kwargs
242-
)
280+
method, url, params, body_json = self._prepare_node_add(parentNodeId=parentNodeId, node=node)
243281
return self.send_request(method, url, params=params, body_json=body_json, auth=auth)
244282

245283
def node_delete(self, nodeId, *, auth=None):

src/save_and_restore_api/tools/cli.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -559,7 +559,7 @@ def create_missing_folders(SR, folder_name, *, create_folders=False):
559559
path += f"/{f}"
560560
node_uid = check_node_exists(SR, path, node_type="FOLDER")
561561
if not node_uid:
562-
response = SR.node_add(parent_uid, name=f, nodeType="FOLDER")
562+
response = SR.node_add(parent_uid, node={"name": f, "nodeType": "FOLDER"})
563563
node_uid = response["uniqueId"]
564564
parent_uid = node_uid
565565

tests/common.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def create_root_folder():
6464
"""
6565
with SaveRestoreAPI(base_url=base_url, timeout=2) as SR:
6666
SR.auth_set(username=admin_username, password=admin_password)
67-
res = SR.node_add(SR.ROOT_NODE_UID, name=root_folder_node_name, nodeType="FOLDER")
67+
res = SR.node_add(SR.ROOT_NODE_UID, node={"name": root_folder_node_name, "nodeType": "FOLDER"})
6868
return res["uniqueId"]
6969

7070

tests/test_config_control.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def test_config_add_01(clear_sar, library, usesetauth): # noqa: F811
6767
with SaveRestoreAPI_Threads(base_url=base_url, timeout=2) as SR:
6868
auth = _select_auth(SR=SR, usesetauth=usesetauth)
6969

70-
response = SR.node_add(root_folder_uid, name="Child Folder", nodeType="FOLDER", **auth)
70+
response = SR.node_add(root_folder_uid, node={"name": "Child Folder", "nodeType": "FOLDER"}, **auth)
7171
folder_uid = response["uniqueId"]
7272

7373

@@ -96,7 +96,8 @@ async def testing():
9696
async with SaveRestoreAPI_Async(base_url=base_url, timeout=2) as SR:
9797
auth = _select_auth(SR=SR, usesetauth=usesetauth)
9898

99-
response = await SR.node_add(root_folder_uid, name="Child Folder", nodeType="FOLDER", **auth)
99+
node = {"name": "Child Folder", "nodeType": "FOLDER"}
100+
response = await SR.node_add(root_folder_uid, node=node, **auth)
100101
folder_uid = response["uniqueId"]
101102

102103
response = await SR.config_add(
@@ -140,7 +141,7 @@ def test_config_update_01(clear_sar, library, usesetauth): # noqa: F811
140141
with SaveRestoreAPI_Threads(base_url=base_url, timeout=2) as SR:
141142
auth = _select_auth(SR=SR, usesetauth=usesetauth)
142143

143-
response = SR.node_add(root_folder_uid, name="Child Folder", nodeType="FOLDER", **auth)
144+
response = SR.node_add(root_folder_uid, node={"name": "Child Folder", "nodeType": "FOLDER"}, **auth)
144145
folder_uid = response["uniqueId"]
145146

146147
response = SR.config_add(
@@ -186,7 +187,8 @@ async def testing():
186187
async with SaveRestoreAPI_Async(base_url=base_url, timeout=2) as SR:
187188
auth = _select_auth(SR=SR, usesetauth=usesetauth)
188189

189-
response = await SR.node_add(root_folder_uid, name="Child Folder", nodeType="FOLDER", **auth)
190+
node = {"name": "Child Folder", "nodeType": "FOLDER"}
191+
response = await SR.node_add(root_folder_uid, node=node, **auth)
190192
folder_uid = response["uniqueId"]
191193

192194
response = await SR.config_add(

0 commit comments

Comments
 (0)