This typing utility provides static typing classes that can be used to ease the development by providing the IDE type hints.

## Key features

- Add static typing classes
- Ease the development by leveraging your IDE's type hints
- Avoid common typing mistakes in Python

## Getting started

> [!TIP]
>
> All examples shared in this documentation are available within the [project repository](<https://github.com/aws-powertools/powertools-lambda-python/tree/develop/examples>).

We provide static typing for any context methods or properties implemented by [Lambda context object](<https://docs.aws.amazon.com/lambda/latest/dg/python-context.html>).

## LambdaContext

The `LambdaContext` typing is typically used in the handler method for the Lambda function.

```
from aws_lambda_powertools.utilities.typing import LambdaContext


def handler(event: dict, context: LambdaContext) -> dict:
    # Insert business logic
    return event
```

## Working with context methods and properties

Using `LambdaContext` typing makes it possible to access information and hints of all properties and methods implemented by Lambda context object.

```
from time import sleep

import requests

from aws_lambda_powertools import Logger
from aws_lambda_powertools.utilities.typing import LambdaContext

logger = Logger()


def lambda_handler(event, context: LambdaContext) -> dict:
    limit_execution: int = 1000  # milliseconds

    # scrape website and exit before lambda timeout
    while context.get_remaining_time_in_millis() > limit_execution:
        comments: requests.Response = requests.get("https://jsonplaceholder.typicode.com/comments")
        # add logic here and save the results of the request to an S3 bucket, for example.

        logger.info(
            {
                "operation": "scrape_website",
                "request_id": context.aws_request_id,
                "remaining_time": context.get_remaining_time_in_millis(),
                "comments": comments.json()[:2],
            },
        )

        sleep(1)

    return {"message": "Success"}
```

### Available properties and methods

| Name | Type | Description |
| --- | --- | --- |
| `function_name` | property | The name of the Lambda function |
| `function_version` | property | The version of the function |
| `invoked_function_arn` | property | The Amazon Resource Name (ARN) that's used to invoke the function |
| `memory_limit_in_mb` | property | The amount of memory that's allocated for the function |
| `aws_request_id` | property | The identifier of the invocation request |
| `log_group_name` | property | The log group for the function |
| `log_stream_name` | property | The log stream for the function instance |
| `identity` | property | Information about the Amazon Cognito identity that authorized the request |
| `client_context` | property | Client context that's provided to Lambda by the client application |
| `tenant_id` | property | The tenant\_id used to invoke the function |
| `get_remaining_time_in_millis` | method | Returns the number of milliseconds left before the execution times out |
