Skip to content

Commit 26e5387

Browse files
author
Jonathan Visser
committed
add bin/create_backup
1 parent 29c946e commit 26e5387

5 files changed

Lines changed: 104 additions & 0 deletions

File tree

bin/create_backup

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
command

hypernode_api_python/client.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,19 @@ def get_available_backups_for_app(self, app_name):
315315
"""
316316
return self.requests("GET", HYPERNODE_API_BACKUPS_ENDPOINT.format(app_name))
317317

318+
def create_backup(self, app_name):
319+
"""
320+
Create a new snapshot backup of the specified app. This requires
321+
sla-standard to be enabled on the Hypernode.
322+
Example:
323+
> client.create_backup('yourhypernodeappname').json()
324+
> 'A job to create a backup has been posted'
325+
326+
:param str app_name: The app to create the backup for
327+
:return obj response: The request response object
328+
"""
329+
return self.requests("POST", HYPERNODE_API_BACKUPS_ENDPOINT.format(app_name))
330+
318331
def get_app_eav_description(self):
319332
"""
320333
List all the available EAV settings that are available. These are

hypernode_api_python/commands.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,24 @@ def get_available_backups_for_app(args=None):
267267
print_response(client.get_available_backups_for_app(app_name))
268268

269269

270+
def create_backup(args=None):
271+
parser = ArgumentParser(
272+
description="""
273+
Create a new snapshot backup of the Hypernode. This requires
274+
sla-standard to be enabled on the Hypernode.
275+
276+
Example:
277+
$ ./bin/create_backup
278+
"A job to create a backup has been posted"
279+
""",
280+
formatter_class=RawTextHelpFormatter,
281+
)
282+
parser.parse_args(args=args)
283+
client = get_client()
284+
app_name = get_app_name()
285+
print_response(client.create_backup(app_name))
286+
287+
270288
def get_eav_description(args=None):
271289
parser = ArgumentParser(
272290
description="""

tests/client/test_create_backup.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from unittest import TestCase
2+
from unittest.mock import Mock
3+
4+
from hypernode_api_python.client import (
5+
HYPERNODE_API_BACKUPS_ENDPOINT,
6+
HypernodeAPIPython,
7+
)
8+
9+
10+
class TestCreateBackup(TestCase):
11+
def setUp(self):
12+
self.client = HypernodeAPIPython(token="my_token")
13+
self.mock_request = Mock()
14+
self.client.requests = self.mock_request
15+
self.app_name = "my_app"
16+
17+
def test_backups_endpoint_is_correct(self):
18+
self.assertEqual("/v2/app/{}/backup/", HYPERNODE_API_BACKUPS_ENDPOINT)
19+
20+
def test_calls_create_backup_endpoint_properly(self):
21+
self.client.create_backup(self.app_name)
22+
23+
self.mock_request.assert_called_once_with(
24+
"POST", f"/v2/app/{self.app_name}/backup/"
25+
)
26+
27+
def test_returns_create_backup_response(self):
28+
response = Mock()
29+
response.status_code = 200
30+
self.mock_request.return_value = response
31+
32+
self.assertEqual(
33+
self.client.create_backup(self.app_name),
34+
self.mock_request.return_value,
35+
)
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from hypernode_api_python.commands import create_backup
2+
from tests.testcase import TestCase
3+
4+
5+
class TestCreateBackup(TestCase):
6+
def setUp(self):
7+
self.print_response = self.set_up_patch(
8+
"hypernode_api_python.commands.print_response"
9+
)
10+
self.get_client = self.set_up_patch("hypernode_api_python.commands.get_client")
11+
self.client = self.get_client.return_value
12+
self.get_app_name = self.set_up_patch(
13+
"hypernode_api_python.commands.get_app_name"
14+
)
15+
self.get_app_name.return_value = "myappname"
16+
17+
def test_create_backup_gets_client(self):
18+
create_backup([])
19+
20+
self.get_client.assert_called_once_with()
21+
22+
def test_create_backup_gets_app_name(self):
23+
create_backup([])
24+
25+
self.get_app_name.assert_called_once_with()
26+
27+
def test_create_backup_creates_backup(self):
28+
create_backup([])
29+
30+
self.client.create_backup.assert_called_once_with("myappname")
31+
32+
def test_create_backup_prints_response(self):
33+
create_backup([])
34+
35+
self.print_response.assert_called_once_with(
36+
self.client.create_backup.return_value
37+
)

0 commit comments

Comments
 (0)