Skip to content

Commit 1f6960e

Browse files
committed
iter method refactored.
1 parent 018befc commit 1f6960e

File tree

1 file changed

+15
-20
lines changed

1 file changed

+15
-20
lines changed

crontools/crontab.py

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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]):

0 commit comments

Comments
 (0)