1- from __future__ import annotations
2-
31import json
4- from typing import TYPE_CHECKING
2+ from datetime import datetime
3+ from typing import List , Optional , Union
54
65import boto3
6+ from mypy_boto3_logs .client import CloudWatchLogsClient
77from pydantic import BaseModel
88from retry import retry
99
10- if TYPE_CHECKING :
11- from datetime import datetime
12-
13- from mypy_boto3_logs .client import CloudWatchLogsClient
14-
1510
1611class Log (BaseModel , extra = "allow" ):
1712 level : str
1813 location : str
19- message : dict | str
14+ message : Union [ dict , str ]
2015 timestamp : str
2116 service : str
22- cold_start : bool | None = None
23- function_name : str | None = None
24- function_memory_size : str | None = None
25- function_arn : str | None = None
26- function_request_id : str | None = None
27- xray_trace_id : str | None = None
17+ cold_start : Optional [ bool ] = None
18+ function_name : Optional [ str ] = None
19+ function_memory_size : Optional [ str ] = None
20+ function_arn : Optional [ str ] = None
21+ function_request_id : Optional [ str ] = None
22+ xray_trace_id : Optional [ str ] = None
2823
2924
3025class LogFetcher :
3126 def __init__ (
3227 self ,
3328 function_name : str ,
3429 start_time : datetime ,
35- log_client : CloudWatchLogsClient | None = None ,
36- filter_expression : str | None = None ,
30+ log_client : Optional [ CloudWatchLogsClient ] = None ,
31+ filter_expression : Optional [ str ] = None ,
3732 minimum_log_entries : int = 1 ,
3833 ):
3934 """Fetch and expose Powertools for AWS Lambda (Python) Logger logs from CloudWatch Logs
@@ -57,9 +52,9 @@ def __init__(
5752 self .filter_expression = filter_expression or "message" # Logger message key
5853 self .log_group = f"/aws/lambda/{ self .function_name } "
5954 self .minimum_log_entries = minimum_log_entries
60- self .logs : list [Log ] = self ._get_logs ()
55+ self .logs : List [Log ] = self ._get_logs ()
6156
62- def get_log (self , key : str , value : any | None = None ) -> list [Log ]:
57+ def get_log (self , key : str , value : Optional [ any ] = None ) -> List [Log ]:
6358 """Get logs based on key or key and value
6459
6560 Parameters
@@ -83,7 +78,7 @@ def get_log(self, key: str, value: any | None = None) -> list[Log]:
8378 logs .append (log )
8479 return logs
8580
86- def get_cold_start_log (self ) -> list [Log ]:
81+ def get_cold_start_log (self ) -> List [Log ]:
8782 """Get logs where cold start was true
8883
8984 Returns
@@ -103,7 +98,7 @@ def have_keys(self, *keys) -> bool:
10398 """
10499 return all (hasattr (log , key ) for log in self .logs for key in keys )
105100
106- def _get_logs (self ) -> list [Log ]:
101+ def _get_logs (self ) -> List [Log ]:
107102 ret = self .log_client .filter_log_events (
108103 logGroupName = self .log_group ,
109104 startTime = self .start_time ,
@@ -137,8 +132,8 @@ def get_logs(
137132 function_name : str ,
138133 start_time : datetime ,
139134 minimum_log_entries : int = 1 ,
140- filter_expression : str | None = None ,
141- log_client : CloudWatchLogsClient | None = None ,
135+ filter_expression : Optional [ str ] = None ,
136+ log_client : Optional [ CloudWatchLogsClient ] = None ,
142137) -> LogFetcher :
143138 """_summary_
144139
0 commit comments