Skip to content

Commit 2eb8a7f

Browse files
author
rakhim
committed
Loading spinner
1 parent eb480ed commit 2eb8a7f

File tree

11 files changed

+152
-88
lines changed

11 files changed

+152
-88
lines changed

verda/cli/commands/balance.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from verda.cli import main as cli_main
66
from verda.cli.utils.client import get_client
77
from verda.cli.utils.errors import handle_api_errors
8-
from verda.cli.utils.output import console, output_json
8+
from verda.cli.utils.output import console, output_json, spinner
99

1010
app = typer.Typer(no_args_is_help=True)
1111

@@ -15,7 +15,8 @@
1515
def get_balance() -> None:
1616
"""Get account balance."""
1717
client = get_client()
18-
balance = client.balance.get()
18+
with spinner('Fetching balance...'):
19+
balance = client.balance.get()
1920

2021
if cli_main.state['json_output']:
2122
output_json({'amount': balance.amount, 'currency': balance.currency})

verda/cli/commands/clusters.py

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,14 @@
77
from verda.cli import main as cli_main
88
from verda.cli.utils.client import get_client
99
from verda.cli.utils.errors import handle_api_errors
10-
from verda.cli.utils.output import console, output_json, output_single, output_table, success
10+
from verda.cli.utils.output import (
11+
console,
12+
output_json,
13+
output_single,
14+
output_table,
15+
spinner,
16+
success,
17+
)
1118
from verda.constants import ClusterStatus, Locations
1219

1320
app = typer.Typer(no_args_is_help=True)
@@ -46,7 +53,8 @@ def list_clusters(
4653
) -> None:
4754
"""List all clusters."""
4855
client = get_client()
49-
clusters = client.clusters.get(status=status)
56+
with spinner('Fetching clusters...'):
57+
clusters = client.clusters.get(status=status)
5058

5159
if cli_main.state['json_output']:
5260
output_json(clusters)
@@ -61,7 +69,8 @@ def get_cluster(
6169
) -> None:
6270
"""Get cluster details by ID."""
6371
client = get_client()
64-
cluster = client.clusters.get_by_id(cluster_id)
72+
with spinner('Fetching cluster...'):
73+
cluster = client.clusters.get_by_id(cluster_id)
6574

6675
if cli_main.state['json_output']:
6776
output_json(cluster)
@@ -131,18 +140,19 @@ def create_cluster(
131140

132141
wait_status = None if no_wait else ClusterStatus.PROVISIONING
133142

134-
cluster = client.clusters.create(
135-
cluster_type=cluster_type,
136-
image=image,
137-
hostname=hostname,
138-
description=description,
139-
ssh_key_ids=ssh_key_ids or [],
140-
location=location,
141-
startup_script_id=startup_script_id,
142-
shared_volume_name=shared_volume_name,
143-
shared_volume_size=shared_volume_size,
144-
wait_for_status=wait_status,
145-
)
143+
with spinner('Creating cluster...'):
144+
cluster = client.clusters.create(
145+
cluster_type=cluster_type,
146+
image=image,
147+
hostname=hostname,
148+
description=description,
149+
ssh_key_ids=ssh_key_ids or [],
150+
location=location,
151+
startup_script_id=startup_script_id,
152+
shared_volume_name=shared_volume_name,
153+
shared_volume_size=shared_volume_size,
154+
wait_for_status=wait_status,
155+
)
146156

147157
if cli_main.state['json_output']:
148158
output_json(cluster)
@@ -166,7 +176,8 @@ def delete_cluster(
166176
raise typer.Abort()
167177

168178
client = get_client()
169-
client.clusters.delete(cluster_id)
179+
with spinner('Deleting cluster...'):
180+
client.clusters.delete(cluster_id)
170181
success(f'Cluster {cluster_id} deletion initiated')
171182

172183

@@ -186,14 +197,16 @@ def check_availability(
186197
client = get_client()
187198

188199
if cluster_type:
189-
available = client.clusters.is_available(cluster_type, location_code=location)
200+
with spinner('Checking availability...'):
201+
available = client.clusters.is_available(cluster_type, location_code=location)
190202
if cli_main.state['json_output']:
191203
output_json({'cluster_type': cluster_type, 'available': available})
192204
else:
193205
status = '[green]Available[/green]' if available else '[red]Not Available[/red]'
194206
typer.echo(f'{cluster_type}: {status}')
195207
else:
196-
availabilities = client.clusters.get_availabilities(location_code=location)
208+
with spinner('Fetching availabilities...'):
209+
availabilities = client.clusters.get_availabilities(location_code=location)
197210
if cli_main.state['json_output']:
198211
output_json(availabilities)
199212
else:
@@ -212,7 +225,8 @@ def list_cluster_images(
212225
) -> None:
213226
"""List available cluster images."""
214227
client = get_client()
215-
images = client.clusters.get_cluster_images(cluster_type=cluster_type)
228+
with spinner('Fetching images...'):
229+
images = client.clusters.get_cluster_images(cluster_type=cluster_type)
216230

217231
if cli_main.state['json_output']:
218232
output_json(images)

verda/cli/commands/images.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from verda.cli import main as cli_main
66
from verda.cli.utils.client import get_client
77
from verda.cli.utils.errors import handle_api_errors
8-
from verda.cli.utils.output import output_json, output_table
8+
from verda.cli.utils.output import output_json, output_table, spinner
99

1010
app = typer.Typer(no_args_is_help=True)
1111

@@ -15,7 +15,8 @@
1515
def list_images() -> None:
1616
"""List available OS images."""
1717
client = get_client()
18-
images = client.images.get()
18+
with spinner('Fetching images...'):
19+
images = client.images.get()
1920

2021
if cli_main.state['json_output']:
2122
output_json(images)

verda/cli/commands/instance_types.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from verda.cli import main as cli_main
66
from verda.cli.utils.client import get_client
77
from verda.cli.utils.errors import handle_api_errors
8-
from verda.cli.utils.output import output_json, output_table
8+
from verda.cli.utils.output import output_json, output_table, spinner
99

1010
app = typer.Typer(no_args_is_help=True)
1111

@@ -29,7 +29,8 @@ def format_memory(memory: dict) -> str:
2929
def list_instance_types() -> None:
3030
"""List available instance types with pricing."""
3131
client = get_client()
32-
types = client.instance_types.get()
32+
with spinner('Fetching instance types...'):
33+
types = client.instance_types.get()
3334

3435
if cli_main.state['json_output']:
3536
output_json(types)

verda/cli/commands/instances.py

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from verda.cli import main as cli_main
88
from verda.cli.utils.client import get_client
99
from verda.cli.utils.errors import handle_api_errors
10-
from verda.cli.utils.output import output_json, output_single, output_table, success
10+
from verda.cli.utils.output import output_json, output_single, output_table, spinner, success
1111
from verda.constants import Actions, Locations
1212

1313
app = typer.Typer(no_args_is_help=True)
@@ -49,7 +49,8 @@ def list_instances(
4949
) -> None:
5050
"""List all instances."""
5151
client = get_client()
52-
instances = client.instances.get(status=status)
52+
with spinner('Fetching instances...'):
53+
instances = client.instances.get(status=status)
5354

5455
if cli_main.state['json_output']:
5556
output_json(instances)
@@ -64,7 +65,8 @@ def get_instance(
6465
) -> None:
6566
"""Get instance details by ID."""
6667
client = get_client()
67-
instance = client.instances.get_by_id(instance_id)
68+
with spinner('Fetching instance...'):
69+
instance = client.instances.get_by_id(instance_id)
6870

6971
if cli_main.state['json_output']:
7072
output_json(instance)
@@ -140,19 +142,20 @@ def create_instance(
140142

141143
max_wait_time = 0 if no_wait else 180
142144

143-
instance = client.instances.create(
144-
instance_type=instance_type,
145-
image=image,
146-
hostname=hostname,
147-
description=description,
148-
ssh_key_ids=ssh_key_ids or [],
149-
location=location,
150-
startup_script_id=startup_script_id,
151-
existing_volumes=existing_volumes,
152-
is_spot=spot,
153-
contract=contract,
154-
max_wait_time=max_wait_time,
155-
)
145+
with spinner('Creating instance...'):
146+
instance = client.instances.create(
147+
instance_type=instance_type,
148+
image=image,
149+
hostname=hostname,
150+
description=description,
151+
ssh_key_ids=ssh_key_ids or [],
152+
location=location,
153+
startup_script_id=startup_script_id,
154+
existing_volumes=existing_volumes,
155+
is_spot=spot,
156+
contract=contract,
157+
max_wait_time=max_wait_time,
158+
)
156159

157160
if cli_main.state['json_output']:
158161
output_json(instance)
@@ -175,7 +178,8 @@ def start_instance(
175178
) -> None:
176179
"""Start an instance."""
177180
client = get_client()
178-
client.instances.action(instance_id, Actions.START)
181+
with spinner('Starting instance...'):
182+
client.instances.action(instance_id, Actions.START)
179183
success(f'Instance {instance_id} start initiated')
180184

181185

@@ -186,7 +190,8 @@ def stop_instance(
186190
) -> None:
187191
"""Stop (shutdown) an instance."""
188192
client = get_client()
189-
client.instances.action(instance_id, Actions.SHUTDOWN)
193+
with spinner('Stopping instance...'):
194+
client.instances.action(instance_id, Actions.SHUTDOWN)
190195
success(f'Instance {instance_id} shutdown initiated')
191196

192197

@@ -206,7 +211,8 @@ def delete_instance(
206211
raise typer.Abort()
207212

208213
client = get_client()
209-
client.instances.action(instance_id, Actions.DELETE)
214+
with spinner('Deleting instance...'):
215+
client.instances.action(instance_id, Actions.DELETE)
210216
success(f'Instance {instance_id} deletion initiated')
211217

212218

@@ -217,7 +223,8 @@ def hibernate_instance(
217223
) -> None:
218224
"""Hibernate an instance."""
219225
client = get_client()
220-
client.instances.action(instance_id, Actions.HIBERNATE)
226+
with spinner('Hibernating instance...'):
227+
client.instances.action(instance_id, Actions.HIBERNATE)
221228
success(f'Instance {instance_id} hibernation initiated')
222229

223230

@@ -228,7 +235,8 @@ def restore_instance(
228235
) -> None:
229236
"""Restore a hibernated instance."""
230237
client = get_client()
231-
client.instances.action(instance_id, Actions.RESTORE)
238+
with spinner('Restoring instance...'):
239+
client.instances.action(instance_id, Actions.RESTORE)
232240
success(f'Instance {instance_id} restore initiated')
233241

234242

@@ -252,16 +260,20 @@ def check_availability(
252260
client = get_client()
253261

254262
if instance_type:
255-
available = client.instances.is_available(
256-
instance_type, is_spot=spot, location_code=location
257-
)
263+
with spinner('Checking availability...'):
264+
available = client.instances.is_available(
265+
instance_type, is_spot=spot, location_code=location
266+
)
258267
if cli_main.state['json_output']:
259268
output_json({'instance_type': instance_type, 'available': available})
260269
else:
261270
status = '[green]Available[/green]' if available else '[red]Not Available[/red]'
262271
typer.echo(f'{instance_type}: {status}')
263272
else:
264-
availabilities = client.instances.get_availabilities(is_spot=spot, location_code=location)
273+
with spinner('Fetching availabilities...'):
274+
availabilities = client.instances.get_availabilities(
275+
is_spot=spot, location_code=location
276+
)
265277
if cli_main.state['json_output']:
266278
output_json(availabilities)
267279
else:

verda/cli/commands/locations.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from verda.cli import main as cli_main
66
from verda.cli.utils.client import get_client
77
from verda.cli.utils.errors import handle_api_errors
8-
from verda.cli.utils.output import output_json, output_table
8+
from verda.cli.utils.output import output_json, output_table, spinner
99

1010
app = typer.Typer(no_args_is_help=True)
1111

@@ -15,7 +15,8 @@
1515
def list_locations() -> None:
1616
"""List available datacenter locations."""
1717
client = get_client()
18-
locations = client.locations.get()
18+
with spinner('Fetching locations...'):
19+
locations = client.locations.get()
1920

2021
if cli_main.state['json_output']:
2122
output_json(locations)

verda/cli/commands/ssh_keys.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from verda.cli import main as cli_main
99
from verda.cli.utils.client import get_client
1010
from verda.cli.utils.errors import handle_api_errors
11-
from verda.cli.utils.output import output_json, output_single, output_table, success
11+
from verda.cli.utils.output import output_json, output_single, output_table, spinner, success
1212

1313
app = typer.Typer(no_args_is_help=True)
1414

@@ -24,7 +24,8 @@
2424
def list_ssh_keys() -> None:
2525
"""List all SSH keys."""
2626
client = get_client()
27-
keys = client.ssh_keys.get()
27+
with spinner('Fetching SSH keys...'):
28+
keys = client.ssh_keys.get()
2829

2930
if cli_main.state['json_output']:
3031
output_json(keys)
@@ -39,7 +40,8 @@ def get_ssh_key(
3940
) -> None:
4041
"""Get SSH key details by ID."""
4142
client = get_client()
42-
key = client.ssh_keys.get_by_id(key_id)
43+
with spinner('Fetching SSH key...'):
44+
key = client.ssh_keys.get_by_id(key_id)
4345

4446
if cli_main.state['json_output']:
4547
output_json(key)
@@ -77,7 +79,8 @@ def create_ssh_key(
7779
key = key_file.read_text().strip()
7880

7981
client = get_client()
80-
ssh_key = client.ssh_keys.create(name, key)
82+
with spinner('Creating SSH key...'):
83+
ssh_key = client.ssh_keys.create(name, key)
8184

8285
if cli_main.state['json_output']:
8386
output_json(ssh_key)
@@ -101,8 +104,9 @@ def delete_ssh_key(
101104
raise typer.Abort()
102105

103106
client = get_client()
104-
if len(key_ids) == 1:
105-
client.ssh_keys.delete_by_id(key_ids[0])
106-
else:
107-
client.ssh_keys.delete(key_ids)
107+
with spinner('Deleting SSH key(s)...'):
108+
if len(key_ids) == 1:
109+
client.ssh_keys.delete_by_id(key_ids[0])
110+
else:
111+
client.ssh_keys.delete(key_ids)
108112
success('SSH key(s) deleted')

0 commit comments

Comments
 (0)