Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Unified Diff: tools/telemetry/third_party/rope/rope/base/taskhandle.py

Issue 1132103009: Example of refactoring using rope library. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « tools/telemetry/third_party/rope/rope/base/stdmods.py ('k') | tools/telemetry/third_party/rope/rope/base/utils.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698