| Index: tools/telemetry/third_party/rope/rope/base/taskhandle.py
|
| diff --git a/tools/telemetry/third_party/rope/rope/base/taskhandle.py b/tools/telemetry/third_party/rope/rope/base/taskhandle.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c1f01b984399454ca6ad6a095e83905904035a0e
|
| --- /dev/null
|
| +++ b/tools/telemetry/third_party/rope/rope/base/taskhandle.py
|
| @@ -0,0 +1,131 @@
|
| +from rope.base import exceptions
|
| +
|
| +
|
| +class TaskHandle(object):
|
| +
|
| + def __init__(self, name='Task', interrupts=True):
|
| + """Construct a TaskHandle
|
| +
|
| + If `interrupts` is `False` the task won't be interrupted by
|
| + calling `TaskHandle.stop()`.
|
| +
|
| + """
|
| + self.name = name
|
| + self.interrupts = interrupts
|
| + self.stopped = False
|
| + self.job_sets = []
|
| + self.observers = []
|
| +
|
| + def stop(self):
|
| + """Interrupts the refactoring"""
|
| + if self.interrupts:
|
| + self.stopped = True
|
| + self._inform_observers()
|
| +
|
| + def current_jobset(self):
|
| + """Return the current `JobSet`"""
|
| + if self.job_sets:
|
| + return self.job_sets[-1]
|
| +
|
| + def add_observer(self, observer):
|
| + """Register an observer for this task handle
|
| +
|
| + The observer is notified whenever the task is stopped or
|
| + a job gets finished.
|
| +
|
| + """
|
| + self.observers.append(observer)
|
| +
|
| + def is_stopped(self):
|
| + return self.stopped
|
| +
|
| + def get_jobsets(self):
|
| + return self.job_sets
|
| +
|
| + def create_jobset(self, name='JobSet', count=None):
|
| + result = JobSet(self, name=name, count=count)
|
| + self.job_sets.append(result)
|
| + self._inform_observers()
|
| + return result
|
| +
|
| + def _inform_observers(self):
|
| + for observer in list(self.observers):
|
| + observer()
|
| +
|
| +
|
| +class JobSet(object):
|
| +
|
| + def __init__(self, handle, name, count):
|
| + self.handle = handle
|
| + self.name = name
|
| + self.count = count
|
| + self.done = 0
|
| + self.job_name = None
|
| +
|
| + def started_job(self, name):
|
| + self.check_status()
|
| + self.job_name = name
|
| + self.handle._inform_observers()
|
| +
|
| + def finished_job(self):
|
| + self.check_status()
|
| + self.done += 1
|
| + self.handle._inform_observers()
|
| + self.job_name = None
|
| +
|
| + def check_status(self):
|
| + if self.handle.is_stopped():
|
| + raise exceptions.InterruptedTaskError()
|
| +
|
| + def get_active_job_name(self):
|
| + return self.job_name
|
| +
|
| + def get_percent_done(self):
|
| + if self.count is not None and self.count > 0:
|
| + percent = self.done * 100 // self.count
|
| + return min(percent, 100)
|
| +
|
| + def get_name(self):
|
| + return self.name
|
| +
|
| +
|
| +class NullTaskHandle(object):
|
| +
|
| + def __init__(self):
|
| + pass
|
| +
|
| + def is_stopped(self):
|
| + return False
|
| +
|
| + def stop(self):
|
| + pass
|
| +
|
| + def create_jobset(self, *args, **kwds):
|
| + return NullJobSet()
|
| +
|
| + def get_jobsets(self):
|
| + return []
|
| +
|
| + def add_observer(self, observer):
|
| + pass
|
| +
|
| +
|
| +class NullJobSet(object):
|
| +
|
| + def started_job(self, name):
|
| + pass
|
| +
|
| + def finished_job(self):
|
| + pass
|
| +
|
| + def check_status(self):
|
| + pass
|
| +
|
| + def get_active_job_name(self):
|
| + pass
|
| +
|
| + def get_percent_done(self):
|
| + pass
|
| +
|
| + def get_name(self):
|
| + pass
|
|
|