Skip to content

Commit 75e84bd

Browse files
author
Ran Isenberg
committed
cr fixes
1 parent 50571b7 commit 75e84bd

File tree

4 files changed

+28
-27
lines changed

4 files changed

+28
-27
lines changed

aws_lambda_powertools/shared/functions.py

+20
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1+
import base64
2+
import logging
3+
from binascii import Error as BinAsciiError
14
from typing import Optional, Union
25

6+
logger = logging.getLogger(__name__)
7+
38

49
def strtobool(value: str) -> bool:
510
"""Convert a string representation of truth to True or False.
@@ -58,3 +63,18 @@ def resolve_env_var_choice(
5863
resolved choice as either bool or environment value
5964
"""
6065
return choice if choice is not None else env
66+
67+
68+
def base64_decode(value: str) -> bytes:
69+
try:
70+
logger.debug("Decoding base64 Kafka record item before parsing")
71+
return base64.b64decode(value)
72+
except (BinAsciiError, TypeError):
73+
raise ValueError("base64 decode failed")
74+
75+
76+
def bytes_to_string(value: bytes) -> str:
77+
try:
78+
return value.decode("utf-8")
79+
except (BinAsciiError, TypeError):
80+
raise ValueError("base64 UTF-8 decode failed")

aws_lambda_powertools/utilities/parser/models/kafka.py

+6-25
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,13 @@
1-
import base64
2-
import logging
3-
from binascii import Error as BinAsciiError
41
from datetime import datetime
5-
from typing import Dict, List, Optional, Type, Union
2+
from typing import Dict, List, Type, Union
63

74
from pydantic import BaseModel, validator
85

6+
from aws_lambda_powertools.shared.functions import base64_decode, bytes_to_string
97
from aws_lambda_powertools.utilities.parser.types import Literal
108

119
SERVERS_DELIMITER = ","
1210

13-
logger = logging.getLogger(__name__)
14-
15-
16-
def _base64_decode(value: str) -> bytes:
17-
try:
18-
logger.debug("Decoding base64 Kafka record item before parsing")
19-
return base64.b64decode(value)
20-
except (BinAsciiError, TypeError):
21-
raise ValueError("base64 decode failed")
22-
23-
24-
def _bytes_to_string(value: bytes) -> str:
25-
try:
26-
return value.decode("utf-8")
27-
except (BinAsciiError, TypeError):
28-
raise ValueError("base64 UTF-8 decode failed")
29-
3011

3112
class KafkaRecordModel(BaseModel):
3213
topic: str
@@ -39,12 +20,12 @@ class KafkaRecordModel(BaseModel):
3920
headers: List[Dict[str, bytes]]
4021

4122
# validators
42-
_decode_key = validator("key", allow_reuse=True)(_base64_decode)
23+
_decode_key = validator("key", allow_reuse=True)(base64_decode)
4324

4425
@validator("value", pre=True, allow_reuse=True)
4526
def data_base64_decode(cls, value):
46-
as_bytes = _base64_decode(value)
47-
return _bytes_to_string(as_bytes)
27+
as_bytes = base64_decode(value)
28+
return bytes_to_string(as_bytes)
4829

4930
@validator("headers", pre=True, allow_reuse=True)
5031
def decode_headers_list(cls, value):
@@ -55,7 +36,7 @@ def decode_headers_list(cls, value):
5536

5637

5738
class KafkaBaseEventModel(BaseModel):
58-
bootstrapServers: Optional[List[str]]
39+
bootstrapServers: List[str]
5940
records: Dict[str, List[KafkaRecordModel]]
6041

6142
@validator("bootstrapServers", pre=True, allow_reuse=True)

tests/functional/parser/schemas.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,5 @@ class MyALambdaFuncUrlBusiness(BaseModel):
9393
username: str
9494

9595

96-
class MyALambdaKafkaBusiness(BaseModel):
96+
class MyLambdaKafkaBusiness(BaseModel):
9797
key: str

tests/functional/parser/test_kafka.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99

1010
@event_parser(model=MyLambdaKafkaBusiness, envelope=envelopes.KafkaEnvelope)
11-
def handle_lambda_kafka_with_envelope(event: List[MyALambdaKafkaBusiness], _: LambdaContext):
11+
def handle_lambda_kafka_with_envelope(event: List[MyLambdaKafkaBusiness], _: LambdaContext):
1212
assert event[0].key == "value"
1313
assert len(event) == 1
1414

0 commit comments

Comments
 (0)