Changeset 33ea505 for server/lib/gutenbach/server/job.py
- Timestamp:
- Jan 11, 2012, 6:58:43 PM (12 years ago)
- Branches:
- no-cups
- Children:
- 09790fe
- Parents:
- 4126d3d
- git-author:
- Jessica B. Hamrick <jhamrick@…> (01/11/12 18:58:43)
- git-committer:
- Jessica B. Hamrick <jhamrick@…> (01/11/12 18:58:43)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
server/lib/gutenbach/server/job.py
r34a4e5d r33ea505 1 from . import InvalidJobStateException, MissingDataException1 from .errors import InvalidJobStateException, MissingDataException 2 2 from .player import Player 3 3 from gutenbach.ipp import JobStates as States 4 import logging 4 5 import os 5 import gutenbach.ipp as ipp6 import logging7 6 8 7 # initialize logger 9 8 logger = logging.getLogger(__name__) 10 9 11 class Job(object):10 class GutenbachJob(object): 12 11 13 # for IPP 14 attributes = [ 15 "job-id", 16 "job-name", 17 "job-originating-user-name", 18 "job-k-octets", 19 "job-state", 20 "job-printer-uri" 21 ] 22 23 def __init__(self, job_id=-1, printer=None, creator=None, name=None, size=None): 12 def __init__(self, job_id=None, creator=None, name=None): 24 13 """Create an empty Gutenbach job. 25 14 26 15 """ 27 16 28 self.printer = printer29 17 self.player = None 30 18 … … 32 20 self.creator = creator 33 21 self.name = name 34 self.size = size35 22 self.state = States.HELD 36 23 self.priority = 1 24 self.document = None 37 25 38 self.document_name = None39 self.document_format = None40 self.document_natural_language = None41 self.compression = None42 43 26 def __repr__(self): 44 27 return str(self) … … 67 50 except TypeError: 68 51 self._id = -1 69 70 @property71 def uri(self):72 return self.uris[0]73 74 @property75 def uris(self):76 return ["ipp://localhost/jobs/%d" % self.id,77 "ipp://localhost:8000/jobs/%d" % self.id]78 52 79 53 @property … … 109 83 110 84 """ 111 return self._size112 @size.setter113 def size(self, val):114 85 try: 115 self._size = int(val) 116 except TypeError: 117 self._size = 0 86 size = os.path.getsize(self.document) 87 except: 88 size = 0 89 return size 118 90 119 91 @property … … 135 107 ###################################################################### 136 108 109 def spool(self, document, username=None): 110 if self.state != States.HELD: 111 raise InvalidJobStateException(self.state) 112 113 self.document = document.name 114 self.player = Player(document) 115 self.creator = username 116 self.state = States.PENDING 117 118 logger.debug("document for job %d is '%s'" % (self.id, self.document)) 119 120 137 121 def play(self): 138 """Non-blocking play function. 122 """Non-blocking play function. Sets the job state to 123 PROCESSING. 124 125 Raises 126 ------ 127 InvalidJobStateException 128 If the job is not ready to be played. 139 129 140 130 """ … … 142 132 # make sure the job is waiting to be played and that it's 143 133 # valid 144 if self.state != States.PENDING:134 if not self.is_ready: 145 135 raise InvalidJobStateException(self.state) 146 136 147 137 # and set the state to processing if we're good to go 148 138 logger.info("playing job %s" % str(self)) 139 140 def _completed(): 141 logger.info("completed job %s" % str(self)) 142 self.state = States.COMPLETE 143 self.player = None 144 149 145 self.state = States.PROCESSING 150 self.player.callback = self._completed146 self.player.callback = _completed 151 147 self.player.start() 152 148 153 149 def pause(self): 154 if self.is_playing: 155 self.player.mplayer_pause() 156 self.state = States.STOPPED 150 """Non-blocking pause function. Sets the job state to 151 STOPPED. 152 153 """ 154 155 if not self.is_playing: 156 raise InvalidJobStateException(self.state) 157 158 self.player.mplayer_pause() 159 self.state = States.STOPPED 157 160 158 161 def cancel(self): 162 def _canceled(): 163 logger.info("canceled job %s" % str(self)) 164 self.state = States.CANCELLED 165 self.player = None 166 159 167 if self.is_playing: 160 self.player.callback = self._canceled168 self.player.callback = _canceled 161 169 self.player.mplayer_stop() 170 elif self.is_finished: 171 raise InvalidJobStateException(self.state) 172 162 173 self.state = States.CANCELLED 163 174 164 175 def abort(self): 176 def _aborted(): 177 logger.info("aborted job %s" % str(self)) 178 self.state = States.ABORTED 179 self.player = None 180 165 181 if self.is_playing: 166 self.player.callback = self._aborted182 self.player.callback = _aborted 167 183 self.player.mplayer_stop() 168 self.state = states.ABORTED 169 170 def _completed(self): 171 logger.info("completed job %s" % str(self)) 172 self.state = States.COMPLETE 173 self.player = None 174 175 def _canceled(self): 176 logger.info("canceled job %s" % str(self)) 177 self.state = States.CANCELLED 178 self.player = None 179 180 def _aborted(self): 181 logger.info("aborted job %s" % str(self)) 184 elif self.is_finished: 185 raise InvalidJobStateException(self.state) 186 182 187 self.state = States.ABORTED 183 self.player = None184 185 ######################################################################186 ### IPP Attributes ###187 ######################################################################188 189 @property190 def job_id(self):191 return ipp.JobId(self.id)192 193 @property194 def job_name(self):195 return ipp.JobName(self.name)196 197 @property198 def job_originating_user_name(self):199 return ipp.JobOriginatingUserName(self.creator)200 201 @property202 def job_k_octets(self):203 return ipp.JobKOctets(self.size)204 205 @property206 def job_state(self):207 return ipp.JobState(self.state)208 209 @property210 def job_printer_uri(self):211 return ipp.JobPrinterUri(self.printer.uri)212 188 213 189 214 ######################################################################215 ### IPP Operations ###216 ######################################################################217 218 def cancel_job(self):219 pass220 221 def send_document(self, document, document_name=None,222 document_format=None, document_natural_language=None,223 requesting_user_name=None, compression=None,224 last_document=None):225 226 if self.state != States.HELD:227 raise InvalidJobStateException(self.state)228 229 self.player = Player(document)230 231 if self.size == 0:232 self.size = os.path.getsize(document.name)233 234 self.document_name = str(document_name)235 self.document_format = str(document_format)236 self.document_natural_language = str(document_natural_language)237 self.creator = str(requesting_user_name)238 self.compression = str(compression)239 self.state = States.PENDING240 241 logger.debug("document for job %d is '%s'" % (self.id, self.document_name))242 243 def send_uri(self):244 pass245 246 def get_job_attributes(self, requested_attributes=None):247 if requested_attributes is None:248 requested = self.attributes249 else:250 requested = [a for a in self.attributes if a in requested_attributes]251 252 _attributes = [attr.replace("-", "_") for attr in requested]253 attributes = [getattr(self, attr) for attr in _attributes]254 return attributes255 256 def set_job_attributes(self):257 pass258 259 def restart_job(self):260 pass261 262 def promote_job(self):263 pass
Note: See TracChangeset
for help on using the changeset viewer.