@@ -53,16 +53,7 @@ def __init_subclass__(cls, title: str, min_value: int, max_value: int, aliases:
5353 cls .aliases = aliases
5454
5555 def __iter__ (self ) -> Iterator [int ]:
56- if self .is_default :
57- begin = self .min_value
58- end = self .max_value
59- else :
60- begin = self .begin
61- end = self .begin if self .end is None else self .end
62-
63- step = 1 if self .step is None else self .step
64-
65- return iter (range (begin , end + 1 , step ))
56+ return self .iter ()
6657
6758 def __str__ (self ) -> str :
6859 if self .begin is None :
@@ -139,11 +130,19 @@ def iter(self, start_from: Optional[int] = None) -> Iterator[int]:
139130 :return: range values iterator
140131 """
141132
142- range_iter = iter (self )
143- if start_from :
144- range_iter = it .dropwhile (lambda value : value < start_from , range_iter )
133+ if self .is_default :
134+ begin = self .min_value
135+ end = self .max_value
136+ else :
137+ begin = self .begin
138+ end = self .begin if self .end is None else self .end
139+
140+ step = 1 if self .step is None else self .step
141+
142+ if start_from is not None :
143+ begin = max (begin , start_from )
145144
146- return range_iter
145+ return iter ( range ( begin , end + 1 , step ))
147146
148147
149148@dc .dataclass (frozen = True )
@@ -236,7 +235,7 @@ def __str__(self) -> str:
236235 return "," .join (map (str , self .ranges ))
237236
238237 def __iter__ (self ) -> Iterator [int ]:
239- return unique ( heapq . merge ( * self .ranges ) )
238+ return self .iter ( )
240239
241240 def iter (self , start_from : Optional [int ] = None ) -> Iterator [int ]:
242241 """
@@ -246,11 +245,7 @@ def iter(self, start_from: Optional[int] = None) -> Iterator[int]:
246245 :return: iterator over all field values
247246 """
248247
249- range_iter = iter (self )
250- if start_from :
251- range_iter = it .dropwhile (lambda value : value < start_from , range_iter )
252-
253- return range_iter
248+ return unique (heapq .merge (* (rng .iter (start_from = start_from ) for rng in self .ranges )))
254249
255250 @classmethod
256251 def __init_subclass__ (cls , range_type : Type [Range ]):
@@ -339,22 +334,22 @@ def _weekday_iter(self, year: int, month: int, start_day: int = 1) -> Iterator[i
339334 curr_weekday = calendar .weekday (year , month , curr_day ) + 1
340335 weekday_iter = self ._weekday_field .iter (start_from = curr_weekday )
341336
342- for _ in range (4 ):
343- for weekday in it .cycle (it .chain (weekday_iter , (None ,))):
344- if weekday is None :
345- curr_day += (8 - curr_weekday )
346- curr_weekday = calendar .weekday (year , month , curr_day ) + 1
347- weekday_iter = self ._weekday_field .iter ()
348- break
349- else :
350- curr_day += (weekday - curr_weekday )
351- curr_weekday = calendar .weekday (year , month , curr_day ) + 1
352-
337+ for _ in range (5 ):
338+ for weekday in weekday_iter :
339+ curr_day += (weekday - curr_weekday )
340+ curr_weekday += (weekday - curr_weekday )
353341 if curr_day > calendar .monthrange (year , month )[1 ]:
354342 return
355343
356344 yield curr_day
357345
346+ curr_day += (8 - curr_weekday )
347+ curr_weekday = 1
348+ if curr_day > calendar .monthrange (year , month )[1 ]:
349+ return
350+
351+ weekday_iter = self ._weekday_field .iter ()
352+
358353
359354@dc .dataclass (frozen = True )
360355class Crontab :
0 commit comments