Skip to content

Commit fc0bde3

Browse files
authored
feat: use prompt to setup config.json and root data folder in init command (#98)
1 parent 1fef395 commit fc0bde3

File tree

5 files changed

+307
-37
lines changed

5 files changed

+307
-37
lines changed

cbsurge/cli.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import click as click
2-
from cbsurge.session import init
2+
from cbsurge.initialize import init
33
from cbsurge.admin import admin
44
from cbsurge.exposure.builtenv import builtenv
55
from cbsurge.exposure.population import population

cbsurge/initialize.py

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import logging
2+
import click
3+
import os
4+
import shutil
5+
from cbsurge.session import Session
6+
from cbsurge.admin import silence_httpx_az
7+
8+
logger = logging.getLogger(__name__)
9+
10+
11+
def setup_prompt(session: Session):
12+
credential, token = session.authenticate()
13+
logger.debug(token)
14+
if token is None:
15+
click.prompt("Authentication failed.Please `az login` to authenticate first.")
16+
return
17+
18+
click.echo("Authentication successful. We need more information to setup from you.")
19+
20+
# project root data folder
21+
root_data_folder = None
22+
absolute_root_data_folder = None
23+
while not(root_data_folder is not None and os.path.exists(absolute_root_data_folder)):
24+
data_folder = click.prompt("Please enter project root folder to store all data. Enter to skip if use default value", default="~/cbsurge")
25+
absolute_root_data_folder = os.path.expanduser(data_folder)
26+
27+
if os.path.exists(absolute_root_data_folder):
28+
if click.confirm("The folder already exists. Yes to overwrite, No/Enter to use existing folder", default=False):
29+
shutil.rmtree(absolute_root_data_folder)
30+
click.echo(f"Removed folder {absolute_root_data_folder}")
31+
os.makedirs(absolute_root_data_folder)
32+
click.echo(f"The project root folder was created at {absolute_root_data_folder}")
33+
root_data_folder = data_folder
34+
else:
35+
click.echo(f"Use {absolute_root_data_folder} as the root folder.")
36+
root_data_folder = data_folder
37+
else:
38+
os.makedirs(absolute_root_data_folder)
39+
click.echo(f"The project root folder was created at {absolute_root_data_folder}")
40+
root_data_folder = data_folder
41+
session.set_root_data_folder(root_data_folder)
42+
43+
# azure blob container setting
44+
account_name = click.prompt('Please enter account name for UNDP Azure. Enter to skip if use default value',
45+
type=str, default='undpgeohub')
46+
session.set_account_name(account_name)
47+
click.echo(f"account name: {account_name}")
48+
49+
container_name = click.prompt('Please enter container name for UNDP Azure. Enter to skip if use default value',
50+
type=str, default='stacdata')
51+
session.set_container_name(container_name)
52+
click.echo(f"container name: {container_name}")
53+
54+
# azure file share setting
55+
share_name = click.prompt('Please enter share name for UNDP Azure. Enter to skip if use default value',
56+
type=str, default='cbrapida')
57+
session.set_file_share_name(share_name)
58+
click.echo(f"file share name: {share_name}")
59+
60+
session.save_config()
61+
click.echo('Setting up was successfully done!')
62+
63+
64+
@click.command()
65+
@click.option('--debug',
66+
is_flag=True,
67+
default=False,
68+
help="Set log level to debug"
69+
)
70+
def init(debug=False):
71+
"""
72+
This command setup rapida command environment by authenticating to Azure.
73+
"""
74+
silence_httpx_az()
75+
logging.basicConfig(level=logging.DEBUG if debug else logging.INFO, force=True)
76+
77+
click.echo("Welcome to rapida CLI tool!")
78+
with Session() as session:
79+
config = session.get_config()
80+
if config:
81+
if click.confirm('Your setup has already been done. Would you like to do setup again?', abort=True):
82+
setup_prompt(session)
83+
else:
84+
if click.confirm('Would you like to setup rapida tool?', abort=True):
85+
setup_prompt(session)

0 commit comments

Comments
 (0)