samcli/commands/local/start_lambda/core/command.py (67 lines of code) (raw):
"""
Invoke Command Class.
"""
from click import Context, style
from samcli.cli.core.command import CoreCommand
from samcli.cli.row_modifiers import RowDefinition, ShowcaseRowModifier
from samcli.commands.local.start_lambda.core.formatters import InvokeStartLambdaCommandHelpTextFormatter
from samcli.commands.local.start_lambda.core.options import OPTIONS_INFO
class InvokeLambdaCommand(CoreCommand):
class CustomFormatterContext(Context):
formatter_class = InvokeStartLambdaCommandHelpTextFormatter
context_class = CustomFormatterContext
@staticmethod
def format_examples(ctx: Context, formatter: InvokeStartLambdaCommandHelpTextFormatter):
AWS_SDK_EXAMPLE = """
self.lambda_client = boto3.client('lambda',
endpoint_url="http://127.0.0.1:3001",
use_ssl=False,
verify=False,
config=Config(signature_version=UNSIGNED,
read_timeout=0,
retries={'max_attempts': 0}))
self.lambda_client.invoke(FunctionName="HelloWorldFunction")
"""
with formatter.indented_section(name="Examples", extra_indents=1):
with formatter.indented_section(name="Setup", extra_indents=1):
formatter.write_rd(
[
RowDefinition(
text="\n",
),
RowDefinition(
name="Start the local lambda endpoint.",
),
RowDefinition(
name=style(f"${ctx.command_path}"),
extra_row_modifiers=[ShowcaseRowModifier()],
),
]
)
with formatter.indented_section(name="Using AWS CLI", extra_indents=1):
formatter.write_rd(
[
RowDefinition(
text="\n",
),
RowDefinition(
name="Invoke Lambda function locally using the AWS CLI.",
),
RowDefinition(
name=style(
"$ aws lambda invoke --function-name HelloWorldFunction "
"--endpoint-url http://127.0.0.1:3001 --no-verify-ssl out.txt"
),
extra_row_modifiers=[ShowcaseRowModifier()],
),
]
)
with formatter.indented_section(name="Using AWS SDK", extra_indents=1):
formatter.write_rd(
[
RowDefinition(
text="\n",
),
RowDefinition(
name="Use AWS SDK in automated tests.",
),
RowDefinition(
name=AWS_SDK_EXAMPLE,
extra_row_modifiers=[ShowcaseRowModifier()],
),
]
)
def format_options(self, ctx: Context, formatter: InvokeStartLambdaCommandHelpTextFormatter) -> None: # type:ignore
# NOTE(sriram-mv): `ignore` is put in place here for mypy even though it is the correct behavior,
# as the `formatter_class` can be set in subclass of Command. If ignore is not set,
# mypy raises argument needs to be HelpFormatter as super class defines it.
self.format_description(formatter)
InvokeLambdaCommand.format_examples(ctx, formatter)
CoreCommand._format_options(
ctx=ctx, params=self.get_params(ctx), formatter=formatter, formatting_options=OPTIONS_INFO
)