-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprogressor.py
32 lines (25 loc) · 899 Bytes
/
progressor.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from dataclasses import dataclass
from arcpy import SetProgressor, SetProgressorLabel, SetProgressorPosition, ResetProgressor
from typing import Literal
@dataclass(slots=True)
class Progressor:
label: str
style: Literal['default', 'step'] = 'step'
range: range
def __post_init__(self):
self._position: int = 0
def __enter__(self):
SetProgressor(self.style, self.label, self.range.start, self.range.stop, self.range.step)
return self
def __exit__(self, exc_type, exc_value, exc_traceback):
ResetProgressor()
def __iter__(self):
return self
def __call__(self, label: str):
SetProgressorLabel(label)
def __next__(self):
SetProgressorPosition()
self._position += 1
if self._position > self.range.stop: # inclusive range
raise StopIteration
yield self._position