Source code for steamship.cli.manifest_init_wizard

import re

import click
from click import BadParameter

from steamship import Steamship
from steamship.data.manifest import Manifest, PluginConfig, SteamshipRegistry
from steamship.data.user import User


[docs] def validate_handle(handle: str) -> str: if re.fullmatch(r"[a-z\-]+", handle) is not None: return handle else: raise BadParameter("Handle must only include lowercase letters and -")
[docs] def validate_version_handle(handle: str) -> str: if re.fullmatch(r"[a-z0-9\-.]+", handle) is not None: return handle else: raise BadParameter("Handle must only include lowercase letters, numbers, . and -")
[docs] def manifest_init_wizard(client: Steamship): click.secho( "It looks like you don't yet have a steamship.json to deploy. Let's create one.", fg="cyan", ) deployable_type = click.prompt( "Is this a package or a plugin?", default="package", type=click.Choice(["package", "plugin"]), show_choices=False, ) handle = click.prompt( f"What handle would you like to use for your {deployable_type}? Valid characters are a-z and -", value_proc=validate_handle, ) # TODO: claim the handle right here! version_handle = "0.0.1" plugin_detail = None if deployable_type == "plugin": plugin_type = click.prompt( "What type of plugin is this?", default="tagger", type=click.Choice( ["tagger", "blockifier", "exporter", "fileImporter", "corpusImporter", "generator"] ), show_choices=True, ) if plugin_type == "tagger": trainable = click.confirm("Is the plugin trainable?", default=False) else: trainable = False if plugin_type == "generator": streaming = click.confirm("Will the plugin stream its results?", default=False) else: streaming = False plugin_detail = PluginConfig(isTrainable=trainable, type=plugin_type, streaming=streaming) public = click.confirm(f"Do you want this {deployable_type} to be public?", default=True) user = User.current(client) author = click.prompt("How should we list your author name?", default=user.handle) tagline = None author_github = None if public: tagline = click.prompt(f"Want to give the {deployable_type} a tagline?", default="") author_github = click.prompt( "If you'd like this associated with your github account, please input your github username", default="", ) tag_string = click.prompt( f"Want to give the {deployable_type} some tags? (comma separated)", default="Prompt API" ) tags = [tag.strip() for tag in tag_string.split(",")] return Manifest( type=deployable_type, handle=handle, version=version_handle, description="", author=author, public=public, plugin=plugin_detail, build_config={"ignore": ["tests", "examples"]}, configTemplate={}, steamshipRegistry=SteamshipRegistry( tagline=tagline, authorGithub=author_github, authorName=author, tags=tags ), )