@@ -100,15 +100,31 @@ async def receive(self) -> AsyncIterator[Dict[str, Any]]:
100100 await asyncio .sleep (self .interval )
101101
102102 def _parse_interval (self , interval_str : str ) -> float :
103- """Parse interval string to seconds"""
104- if interval_str .endswith ('s' ):
105- return float (interval_str [:- 1 ])
106- elif interval_str .endswith ('m' ):
107- return float (interval_str [:- 1 ]) * 60
108- elif interval_str .endswith ('h' ):
109- return float (interval_str [:- 1 ]) * 3600
110- else :
111- return float (interval_str )
103+ """Parse interval string to seconds
104+
105+ Args:
106+ interval_str: String in format '1s' (seconds), '1m' (minutes), or '1h' (hours)
107+
108+ Returns:
109+ float: Interval in seconds
110+
111+ Raises:
112+ ValueError: If interval_str is empty or invalid
113+ """
114+ if not interval_str or not isinstance (interval_str , str ):
115+ raise ValueError (f"Invalid interval: '{ interval_str } '. Must be a non-empty string." )
116+
117+ try :
118+ if interval_str .endswith ('s' ):
119+ return float (interval_str [:- 1 ])
120+ elif interval_str .endswith ('m' ):
121+ return float (interval_str [:- 1 ]) * 60
122+ elif interval_str .endswith ('h' ):
123+ return float (interval_str [:- 1 ]) * 3600
124+ else :
125+ return float (interval_str )
126+ except (ValueError , TypeError ) as e :
127+ raise ValueError (f"Invalid interval format: '{ interval_str } '. Expected format: '1s', '1m', or '1h'." ) from e
112128
113129
114130class GRPCSource (Source ):
0 commit comments