Skip to content

Commit 7a05f43

Browse files
feat(parser): add AWS Transfer Family model (#5906)
1 parent 553e733 commit 7a05f43

File tree

5 files changed

+49
-2
lines changed

5 files changed

+49
-2
lines changed

aws_lambda_powertools/utilities/parser/models/__init__.py

+2
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@
109109
)
110110
from .sns import SnsModel, SnsNotificationModel, SnsRecordModel
111111
from .sqs import SqsAttributesModel, SqsModel, SqsMsgAttributeModel, SqsRecordModel
112+
from .transfer_family import TransferFamily
112113
from .vpc_lattice import VpcLatticeModel
113114
from .vpc_latticev2 import VpcLatticeV2Model
114115

@@ -179,6 +180,7 @@
179180
"SqsAttributesModel",
180181
"S3SqsEventNotificationModel",
181182
"S3SqsEventNotificationRecordModel",
183+
"TransferFamily",
182184
"APIGatewayProxyEventModel",
183185
"APIGatewayEventRequestContext",
184186
"APIGatewayEventAuthorizer",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from typing import Literal, Optional
2+
3+
from pydantic import BaseModel, Field
4+
from pydantic.networks import IPvAnyAddress
5+
6+
7+
class TransferFamily(BaseModel):
8+
username: str
9+
password: Optional[str] = None
10+
protocol: Literal["SFTP", "FTP", "FTPS"]
11+
server_id: str = Field(..., alias="serverId")
12+
source_ip: IPvAnyAddress = Field(..., alias="sourceIp")

docs/utilities/parser.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,8 @@ The example above uses `SqsModel`. Other built-in models can be found below.
108108
| **ApiGatewayAuthorizerRequest** | Lambda Event Source payload for Amazon API Gateway Lambda Authorizer with Request |
109109
| **APIGatewayProxyEventV2Model** | Lambda Event Source payload for Amazon API Gateway v2 payload |
110110
| **ApiGatewayAuthorizerRequestV2** | Lambda Event Source payload for Amazon API Gateway v2 Lambda Authorizer |
111-
| **APIGatewayWebSocketMessageEventModel** | Lambda Event Source payload for Amazon API Gateway WebSocket API message body |
112-
| **APIGatewayWebSocketConnectEventModel** | Lambda Event Source payload for Amazon API Gateway WebSocket API $connect message |
111+
| **APIGatewayWebSocketMessageEventModel** | Lambda Event Source payload for Amazon API Gateway WebSocket API message body |
112+
| **APIGatewayWebSocketConnectEventModel** | Lambda Event Source payload for Amazon API Gateway WebSocket API $connect message |
113113
| **APIGatewayWebSocketDisconnectEventModel** | Lambda Event Source payload for Amazon API Gateway WebSocket API $disconnect message |
114114
| **BedrockAgentEventModel** | Lambda Event Source payload for Bedrock Agents |
115115
| **CloudFormationCustomResourceCreateModel** | Lambda Event Source payload for AWS CloudFormation `CREATE` operation |
@@ -132,6 +132,7 @@ The example above uses `SqsModel`. Other built-in models can be found below.
132132
| **SesModel** | Lambda Event Source payload for Amazon Simple Email Service |
133133
| **SnsModel** | Lambda Event Source payload for Amazon Simple Notification Service |
134134
| **SqsModel** | Lambda Event Source payload for Amazon SQS |
135+
| **TransferFamily** | Lambda Event Source payload for AWS Transfer Family custom identity provider |
135136
| **VpcLatticeModel** | Lambda Event Source payload for Amazon VPC Lattice |
136137
| **VpcLatticeV2Model** | Lambda Event Source payload for Amazon VPC Lattice v2 payload |
137138

tests/events/TransferFamily.json

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"username": "value",
3+
"password": "value",
4+
"protocol": "SFTP",
5+
"serverId": "s-abcd123456",
6+
"sourceIp": "192.168.0.100"
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from aws_lambda_powertools.utilities.parser.models import TransferFamily
2+
from tests.functional.utils import load_event
3+
4+
5+
def test_aws_transfer_family_model():
6+
raw_event = load_event("TransferFamily.json")
7+
parsed_event = TransferFamily(**raw_event)
8+
9+
assert parsed_event.username == raw_event["username"]
10+
assert parsed_event.password == raw_event["password"]
11+
assert parsed_event.protocol == raw_event["protocol"]
12+
assert parsed_event.server_id == raw_event["serverId"]
13+
assert str(parsed_event.source_ip) == raw_event["sourceIp"]
14+
15+
16+
def test_aws_transfer_family_model_without_password():
17+
raw_event = load_event("TransferFamily.json")
18+
del raw_event["password"]
19+
parsed_event = TransferFamily(**raw_event)
20+
21+
assert parsed_event.username == raw_event["username"]
22+
assert parsed_event.password is None
23+
assert parsed_event.protocol == raw_event["protocol"]
24+
assert parsed_event.server_id == raw_event["serverId"]
25+
assert str(parsed_event.source_ip) == raw_event["sourceIp"]

0 commit comments

Comments
 (0)