Changeset 279640c for server/lib/gutenbach
- Timestamp:
- Jan 21, 2012, 5:20:56 PM (12 years ago)
- Branches:
- no-cups
- Children:
- 7f1098c
- Parents:
- f70792f (diff), 57bc2dc (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - git-author:
- Daniel Cooper <danny@…> (01/21/12 17:20:56)
- git-committer:
- Daniel Cooper <danny@…> (01/21/12 17:20:56)
- Location:
- server/lib/gutenbach/server
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
server/lib/gutenbach/server/job.py
r9225351 r57bc2dc 53 53 """ 54 54 return cmp(self.priority, other.priority) 55 56 def __del__(self): 57 if self.player: 58 self.player.mplayer_stop() 59 self.player = None 60 if self.document and not self.document.closed: 61 self.document.close() 62 self.document = None 63 64 self.id = None 65 self.creator = None 66 self.name = None 67 self.priority = None 68 self._why_done = None 55 69 56 70 ###################################################################### … … 259 273 if not hasattr(document, "close"): 260 274 raise errors.InvalidDocument, "no close attribute" 275 if not hasattr(document, "closed"): 276 raise errors.InvalidDocument, "no closed attribute" 261 277 262 278 def spool(self, document=None): -
server/lib/gutenbach/server/printer.py
r9225351 r57bc2dc 9 9 import traceback 10 10 import sys 11 import tempfile 11 12 from . import sync 12 13 … … 361 362 ###################################################################### 362 363 363 def print_job(self): 364 pass 365 366 def validate_job(self): 367 pass 364 def print_job(self, document, document_name=None, document_format=None, 365 document_natural_language=None, requesting_user_name=None, 366 compression=None, job_name=None, job_k_octets=None): 367 368 # create the job 369 job_id = self.create_job( 370 requesting_user_name=requesting_user_name, 371 job_name=job_name, 372 job_k_octets=job_k_octets) 373 374 # send the document 375 self.send_document( 376 job_id, 377 document, 378 document_name=document_name, 379 document_format=document_format, 380 document_natural_language=document_natural_language, 381 requesting_user_name=requesting_user_name, 382 compression=compression, 383 last_document=False) 384 385 return job_id 386 387 def verify_job(self, document_name=None, document_format=None, 388 document_natural_language=None, requesting_user_name=None, 389 compression=None, job_name=None, job_k_octets=None): 390 391 job_id = self._next_job_id 392 job = GutenbachJob( 393 job_id, 394 creator=requesting_user_name, 395 name=job_name) 396 job.spool(tempfile.TemporaryFile()) 397 job.abort() 398 del job 368 399 369 400 def get_jobs(self, requesting_user_name=None, which_jobs=None, … … 397 428 pass 398 429 399 def create_job(self, requesting_user_name=None, job_name=None, job_k_octets=None): 430 def create_job(self, requesting_user_name=None, job_name=None, 431 job_k_octets=None): 432 400 433 job_id = self._next_job_id 401 434 self._next_job_id += 1 … … 405 438 creator=requesting_user_name, 406 439 name=job_name) 407 440 408 441 self.jobs[job_id] = job 409 442 self.pending_jobs.append(job_id) … … 425 458 self.paused = True 426 459 427 428 429 460 @sync 430 461 def resume_printer(self): … … 441 472 self.paused = False 442 473 474 @sync 443 475 def get_printer_attributes(self, requested_attributes=None): 444 476 if requested_attributes is None: … … 452 484 return attributes 453 485 486 @sync 454 487 def set_printer_attributes(self, job_id, attributes): 455 488 for attr in attributes: … … 459 492 raise ipp.errors.ClientErrorAttributes 460 493 494 @sync 461 495 def cancel_job(self, job_id, requesting_user_name=None): 462 496 job = self.get_job(job_id) … … 467 501 raise 468 502 503 @sync 469 504 def send_document(self, job_id, document, document_name=None, 470 505 document_format=None, document_natural_language=None, … … 475 510 job.spool(document) 476 511 512 @sync 477 513 def send_uri(self, job_id, document_uri, document_name=None, 478 514 document_format=None, document_natural_language=None, … … 484 520 #job.spool_uri(document_uri) 485 521 522 @sync 486 523 def get_job_attributes(self, job_id, requested_attributes=None): 487 524 if requested_attributes is None: … … 495 532 return attributes 496 533 534 @sync 497 535 def set_job_attributes(self, job_id, attributes): 498 536 job = self.get_job(job_id) … … 504 542 elif attr == "job-originating-user-name": 505 543 job.creator = attributes[attr] # XXX: do we want this? 506 544 545 @sync 507 546 def restart_job(self, job_id, requesting_user_name=None): 508 547 job = self.get_job(job_id) … … 513 552 raise ipp.errors.ClientErrorNotPossible 514 553 515 with self.lock:516 self.finished_jobs.remove(job_id)517 self.pending_jobs.append(job_id) 518 554 self.finished_jobs.remove(job_id) 555 self.pending_jobs.append(job_id) 556 557 @sync 519 558 def promote_job(self, job_id, requesting_user_name=None): 520 559 # According to RFC 3998, we need to put the job at the front -
server/lib/gutenbach/server/requests.py
rc1dc25f rf70792f 169 169 170 170 """ 171 operation = request.attribute_groups[0] 172 # requested printer uri 173 if 'printer-uri' not in operation: 174 raise ipp.errors.ClientErrorBadRequest("Missing 'printer-uri' attribute") 175 printer_uri = verify_attribute(operation['printer-uri'], ipp.PrinterUri)[0] 176 if printer_uri not in self.printer.uris: 177 raise ipp.errors.ClientErrorAttributes( 178 str(operation['printer-uri']), operation['printer-uri']) 179 180 if 'requesting-user-name' in operation: 181 user_name = verify_attribute( 182 operation['requesting-user-name'], ipp.RequestingUserName)[0] 183 184 if 'job-name' in operation: 185 job_name = verify_attribute( 186 operation['job-name'], ipp.JobName)[0] 187 188 if 'job-k-octets' in operation: 189 job_k_octets = verify_attribute( 190 operation['job-k-octets'], ipp.JobKOctets)[0] 191 192 if 'ipp-attribute-fidelity' in operation: 193 pass # don't care 194 if 'job-impressions' in operation: 195 pass # don't care 196 if 'job-media-sheets' in operation: 197 pass # don't care 198 199 # get attributes from the printer and add to response 200 job_id = self.printer.create_job( 201 requesting_user_name=requesting_user_name, 202 job_name=job_name, 203 job_k_octets=job_k_octets) 204 attrs = self.printer.get_job_attributes(job_id) 205 response.attribute_groups.append(ipp.AttributeGroup( 206 ipp.AttributeTags.JOB, attrs)) 207 #raise ipp.errors.ServerErrorOperationNotSupported 208 # Get nescessary information for calling send_document 209 # Any field being set to None here just means that we either aren't using or haven't implemented parsing it 210 document = request.attribute_groups[2] 211 #XXX 212 document_format = None 213 document_natural_language = None 214 compression = None 215 last_document = None 216 217 171 218 172 raise ipp.errors.ServerErrorOperationNotSupported 173 219 # Actually put the document in the job 220 self.printer.send_document(job_id,document, 221 document_name = document_name, 222 document_format = document_format, 223 document_natural_language = document_natural_language, 224 requesting_user_name = requesting_user_name, 225 compression = compression, 226 last_document = last_document) 227 #fix this once jess pushes 228 self.print_job() 174 229 @handler_for(ipp.OperationCodes.VALIDATE_JOB) 175 230 def validate_job(self, request, response):
Note: See TracChangeset
for help on using the changeset viewer.