"""Provision command for setting up agent settings before starting."""
import asyncio
from configargparse import ArgumentParser
from typing import Sequence
from ..config import argparse as arg
from ..config.default_context import DefaultContextBuilder
from ..config.base import BaseError
from ..config.ledger import get_genesis_transactions, ledger_config
from ..config.util import common_config
from ..config.wallet import wallet_config
from . import PROG
[docs]class ProvisionError(BaseError):
"""Base exception for provisioning errors."""
[docs]def init_argument_parser(parser: ArgumentParser):
"""Initialize an argument parser with the module's arguments."""
return arg.load_argument_groups(
parser, *arg.group.get_registered(arg.CAT_PROVISION)
)
[docs]async def provision(settings: dict):
"""Perform provisioning."""
context_builder = DefaultContextBuilder(settings)
context = await context_builder.build_context()
try:
await get_genesis_transactions(context.settings)
root_profile, public_did = await wallet_config(context, provision=True)
if await ledger_config(root_profile, public_did and public_did.did, True):
print("Ledger configured")
else:
print("Ledger not configured")
await root_profile.close()
except BaseError as e:
raise ProvisionError("Error during provisioning") from e
[docs]def execute(argv: Sequence[str] = None):
"""Entrypoint."""
parser = arg.create_argument_parser(prog=PROG)
parser.prog += " provision"
get_settings = init_argument_parser(parser)
args = parser.parse_args(argv)
settings = get_settings(args)
common_config(settings)
# provision needs write access to the ledger
# (override if specified otherwise)
settings["ledger.read_only"] = False
loop = asyncio.get_event_loop()
loop.run_until_complete(provision(settings))
[docs]def main():
"""Execute the main line."""
if __name__ == "__main__":
execute()
main()