Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
marvel
GitHub Repository: marvel/qnf
Path: blob/master/elisp/emacs-for-python/rope-dist/rope/base/taskhandle.py
1415 views
1
import warnings
2
3
from rope.base import exceptions
4
5
6
class TaskHandle(object):
7
8
def __init__(self, name='Task', interrupts=True):
9
"""Construct a TaskHandle
10
11
If `interrupts` is `False` the task won't be interrupted by
12
calling `TaskHandle.stop()`.
13
14
"""
15
self.name = name
16
self.interrupts = interrupts
17
self.stopped = False
18
self.job_sets = []
19
self.observers = []
20
21
def stop(self):
22
"""Interrupts the refactoring"""
23
if self.interrupts:
24
self.stopped = True
25
self._inform_observers()
26
27
def current_jobset(self):
28
"""Return the current `JobSet`"""
29
if self.job_sets:
30
return self.job_sets[-1]
31
32
def add_observer(self, observer):
33
"""Register an observer for this task handle
34
35
The observer is notified whenever the task is stopped or
36
a job gets finished.
37
38
"""
39
self.observers.append(observer)
40
41
def is_stopped(self):
42
return self.stopped
43
44
def get_jobsets(self):
45
return self.job_sets
46
47
def create_jobset(self, name='JobSet', count=None):
48
result = JobSet(self, name=name, count=count)
49
self.job_sets.append(result)
50
self._inform_observers()
51
return result
52
53
def _inform_observers(self):
54
for observer in list(self.observers):
55
observer()
56
57
58
class JobSet(object):
59
60
def __init__(self, handle, name, count):
61
self.handle = handle
62
self.name = name
63
self.count = count
64
self.done = 0
65
self.job_name = None
66
67
def started_job(self, name):
68
self.check_status()
69
self.job_name = name
70
self.handle._inform_observers()
71
72
def finished_job(self):
73
self.check_status()
74
self.done += 1
75
self.handle._inform_observers()
76
self.job_name = None
77
78
def check_status(self):
79
if self.handle.is_stopped():
80
raise exceptions.InterruptedTaskError()
81
82
def get_active_job_name(self):
83
return self.job_name
84
85
def get_percent_done(self):
86
if self.count is not None and self.count > 0:
87
percent = self.done * 100 // self.count
88
return min(percent, 100)
89
90
def get_name(self):
91
return self.name
92
93
94
class NullTaskHandle(object):
95
96
def __init__(self):
97
pass
98
99
def is_stopped(self):
100
return False
101
102
def stop(self):
103
pass
104
105
def create_jobset(self, *args, **kwds):
106
return NullJobSet()
107
108
def get_jobsets(self):
109
return []
110
111
def add_observer(self, observer):
112
pass
113
114
115
class NullJobSet(object):
116
117
def started_job(self, name):
118
pass
119
120
def finished_job(self):
121
pass
122
123
def check_status(self):
124
pass
125
126
def get_active_job_name(self):
127
pass
128
129
def get_percent_done(self):
130
pass
131
132
def get_name(self):
133
pass
134
135