Changeset 345c476 for server/lib/gutenbach/server/job.py
- Timestamp:
- Jan 11, 2012, 8:36:27 PM (12 years ago)
- Branches:
- no-cups
- Children:
- a2b0582
- Parents:
- 09790fe
- git-author:
- Jessica B. Hamrick <jhamrick@…> (01/11/12 20:36:27)
- git-committer:
- Jessica B. Hamrick <jhamrick@…> (01/11/12 20:36:27)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
server/lib/gutenbach/server/job.py
r33ea505 r345c476 10 10 class GutenbachJob(object): 11 11 12 def __init__(self, job_id=None, creator=None, name=None): 12 def __init__(self, job_id=None, creator=None, name=None, 13 priority=None, document=None): 13 14 """Create an empty Gutenbach job. 14 15 … … 16 17 17 18 self.player = None 19 self.document = None 18 20 19 21 self.id = job_id 20 22 self.creator = creator 21 23 self.name = name 22 self.state = States.HELD 23 self.priority = 1 24 self.document = None 24 self.priority = priority 25 self._why_done = None 26 27 if document is not None: 28 self.spool(document) 25 29 26 30 def __repr__(self): … … 47 51 def id(self, val): 48 52 try: 49 self._id = int(val)53 self._id = max(int(val), -1) 50 54 except TypeError: 51 55 self._id = -1 56 57 @property 58 def priority(self): 59 return self._priority 60 @priority.setter 61 def priority(self, val): 62 try: 63 self._priority = max(int(val), 1) 64 except TypeError: 65 self._priority = 1 52 66 53 67 @property … … 90 104 91 105 @property 106 def is_valid(self): 107 """Whether the job is ready to be manipulated (spooled, 108 played, etc). Note that playing the job still requires it to 109 be spooled first. 110 111 """ 112 return self.id > 0 and \ 113 self.priority > 0 114 115 @property 116 def is_ready(self): 117 """Whether the job is ready to be played. 118 119 """ 120 return self.is_valid and \ 121 self.player is not None and \ 122 not self.player.is_playing and \ 123 not self._why_done == "cancelled" and \ 124 not self._why_done == "aborted" 125 126 @property 92 127 def is_playing(self): 93 return self.state == States.PROCESSING 94 95 @property 96 def is_ready(self): 97 return self.state == States.PENDING 98 99 @property 100 def is_finished(self): 101 return self.state != States.PENDING and \ 102 self.state != States.PROCESSING and \ 103 self.state != States.HELD 104 128 """Whether the job is currently playing (regardless of whether 129 it's paused). 130 131 """ 132 return self.is_valid and \ 133 self.player is not None and \ 134 self.player.is_playing 135 136 @property 137 def is_paused(self): 138 """Whether the job is currently paused. 139 140 """ 141 return self.is_valid and \ 142 self.player is not None and \ 143 self.player.is_paused 144 145 @property 146 def is_done(self): 147 return (self.is_valid and \ 148 self.player is not None and \ 149 self.player.is_done) or \ 150 (self._why_done == "cancelled" or \ 151 self._why_done == "aborted") 152 153 @property 154 def state(self): 155 if self.is_ready: 156 state = States.PENDING 157 elif self.is_playing and not self.is_paused: 158 state = States.PROCESSING 159 elif self.is_playing and self.is_paused: 160 state = States.STOPPED 161 elif self.is_done and self._why_done == "completed": 162 state = States.COMPLETE 163 elif self.is_done and self._why_done == "cancelled": 164 state = States.CANCELLED 165 elif self.is_done and self._why_done == "aborted": 166 state = States.ABORTED 167 else: 168 state = States.HELD 169 return state 170 105 171 ###################################################################### 106 172 ### Methods ### 107 173 ###################################################################### 108 174 109 def spool(self, document, username=None): 110 if self.state != States.HELD: 111 raise InvalidJobStateException(self.state) 112 175 def spool(self, document): 176 if not self.is_valid: 177 raise InvalidJobStateException(self.state) 113 178 self.document = document.name 114 179 self.player = Player(document) 115 self.creator = username116 self.state = States.PENDING117 118 180 logger.debug("document for job %d is '%s'" % (self.id, self.document)) 119 120 181 121 182 def play(self): … … 140 201 def _completed(): 141 202 logger.info("completed job %s" % str(self)) 142 self.state = States.COMPLETE 143 self.player = None 144 145 self.state = States.PROCESSING 203 self._why_done = "completed" 146 204 self.player.callback = _completed 147 205 self.player.start() … … 155 213 if not self.is_playing: 156 214 raise InvalidJobStateException(self.state) 157 158 215 self.player.mplayer_pause() 159 self.state = States.STOPPED160 216 161 217 def cancel(self): 162 def _canceled(): 163 logger.info("canceled job %s" % str(self)) 164 self.state = States.CANCELLED 165 self.player = None 218 def _cancelled(): 219 logger.info("cancelled job %s" % str(self)) 220 self._why_done = "cancelled" 166 221 167 222 if self.is_playing: 168 self.player.callback = _cancel ed223 self.player.callback = _cancelled 169 224 self.player.mplayer_stop() 170 elif self.is_ finished:171 raise InvalidJobStateException(self.state) 172 173 self.state = States.CANCELLED225 elif self.is_done and not self._why_done == "cancelled": 226 raise InvalidJobStateException(self.state) 227 else: 228 _cancelled() 174 229 175 230 def abort(self): 176 231 def _aborted(): 177 232 logger.info("aborted job %s" % str(self)) 178 self.state = States.ABORTED 179 self.player = None 233 self._why_done = "aborted" 180 234 181 235 if self.is_playing: 182 236 self.player.callback = _aborted 183 237 self.player.mplayer_stop() 184 elif self.is_ finished:185 raise InvalidJobStateException(self.state) 186 187 self.state = States.ABORTED188 189 238 elif self.is_done and not self._why_done == "aborted": 239 raise InvalidJobStateException(self.state) 240 else: 241 _aborted() 242 243
Note: See TracChangeset
for help on using the changeset viewer.