Changeset ef8df33 for server/lib/gutenbach/server/requests.py
- Timestamp:
- Dec 20, 2011, 3:11:32 PM (12 years ago)
- Branches:
- no-cups
- Children:
- 59a1d4a
- Parents:
- cad7502
- git-author:
- Jessica B. Hamrick <jhamrick@…> (12/20/11 15:11:32)
- git-committer:
- Jessica B. Hamrick <jhamrick@…> (12/20/11 15:11:32)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
server/lib/gutenbach/server/requests.py
rcad7502 ref8df33 2 2 import gutenbach.ipp as ipp 3 3 import gutenbach.ipp.constants as const 4 from gutenbach.ipp.constants import job_attribute_value_tags, printer_attribute_value_tags5 4 import logging 6 5 … … 28 27 self.default = "test" 29 28 30 def handle(self, request , response):29 def handle(self, request): 31 30 # look up the handler 32 31 handler = None … … 42 41 handler = getattr(self, handler_name) 43 42 logger.info("Handling request of type '%s'" % handler_name) 44 handler(request, response) 45 46 def unknown_operation(self, request, response): 43 response = handler(request) 44 return response 45 46 def unknown_operation(self, request): 47 47 logger.warning("Received unknown operation 0x%x" % request.operation_id) 48 response = ipp.ops.make_empty_response(request) 48 49 response.operation_id = const.StatusCodes.OPERATION_NOT_SUPPORTED 49 50 ##### Helper functions 51 52 def _get_printer_attributes(self, printer, request, response): 53 attrs = printer.get_printer_attributes(request) 54 ipp_attrs = [] 55 for attr, vals in attrs: 56 ipp_vals = [ipp.Value( 57 tag=printer_attribute_value_tags[attr], 58 value=val) for val in vals] 59 ipp_attrs.append(ipp.Attribute(name=attr, values=ipp_vals)) 60 response.attribute_groups.append(ipp.AttributeGroup( 61 const.AttributeTags.PRINTER, ipp_attrs)) 62 63 def _get_job_attributes(self, job, request, response): 64 attrs = job.get_job_attributes(request) 65 ipp_attrs = [] 66 for attr, vals in attrs: 67 ipp_vals = [ipp.Value( 68 tag=job_attribute_value_tags[attr], 69 value=val) for val in vals] 70 ipp_attrs.append(ipp.Attribute(name=attr, values=ipp_vals)) 71 response.attribute_groups.append(ipp.AttributeGroup( 72 const.AttributeTags.JOB, ipp_attrs)) 73 74 def _get_job_id(self, request): 75 pass 50 return response 76 51 77 52 ##### Printer Commands 78 53 79 def print_job(self, request , response):80 pass 81 82 def validate_job(self, request , response):54 def print_job(self, request): 55 pass 56 57 def validate_job(self, request): 83 58 pass 84 59 85 60 @handler_for(const.Operations.GET_JOBS) 86 def get_jobs(self, request , response):61 def get_jobs(self, request): 87 62 """RFC 2911: 3.2.6 Get-Jobs Operation 88 63 … … 99 74 """ 100 75 101 req dict = ipp.ops.verify_get_jobs_request(request)102 printer_name = req dict['printer-uri']76 req_dict = ipp.ops.verify_get_jobs_request(request) 77 printer_name = req_dict['printer-uri'] 103 78 if printer_name not in self.printers: 104 79 raise ipp.errors.Attributes( … … 107 82 108 83 # Each job will append a new job attribute group. 109 # XXX: we need to honor the things that the request actually asks for 110 for job in self.printers[printer_name].get_jobs(): 111 self._get_job_attributes(job, request, response) 112 113 def print_uri(self, request, response): 114 pass 115 116 def create_job(self, request, response): 117 pass 118 119 def pause_printer(self, request, response): 120 pass 121 122 def resume_printer(self, request, response): 84 jobs = [job.get_job_attributes(request) for job in \ 85 self.printers[printer_name].get_jobs()] 86 response = ipp.ops.make_get_jobs_response(jobs, request) 87 return response 88 89 def print_uri(self, request): 90 pass 91 92 def create_job(self, request): 93 pass 94 95 def pause_printer(self, request): 96 pass 97 98 def resume_printer(self, request): 123 99 pass 124 100 125 101 @handler_for(const.Operations.GET_PRINTER_ATTRIBUTES) 126 def get_printer_attributes(self, request , response):102 def get_printer_attributes(self, request): 127 103 """RFC 2911: 3.2.5 Get-Printer-Attributes Operation 128 104 … … 169 145 # this is just like cups_get_default, except the printer name 170 146 # is given 171 req dict = ipp.ops.verify_get_printer_attributes_request(request)172 printer_name = req dict['printer-uri']147 req_dict = ipp.ops.verify_get_printer_attributes_request(request) 148 printer_name = req_dict['printer-uri'] 173 149 if printer_name not in self.printers: 174 150 raise ipp.errors.Attributes( … … 176 152 [request.attribute_groups[0].attributes[2]]) 177 153 178 self._get_printer_attributes(self.printers[printer_name], request, response) 179 180 def set_printer_attributes(self, request, response): 154 response = ipp.ops.make_get_printer_attributes_response( 155 self.printers[printer_name].get_printer_attributes(request), request) 156 return response 157 158 def set_printer_attributes(self, request): 181 159 pass 182 160 183 161 ##### Job Commands 184 162 185 def cancel_job(self, request , response):186 pass 187 188 def send_document(self, request , response):189 pass 190 191 def send_uri(self, request , response):192 pass 193 194 def get_job_attributes(self, request , response):195 req dict = ipp.ops.verify_get_jobs_request(request)196 printer_name = req dict['printer-uri']197 job_id = req dict['job-id']163 def cancel_job(self, request): 164 pass 165 166 def send_document(self, request): 167 pass 168 169 def send_uri(self, request): 170 pass 171 172 def get_job_attributes(self, request): 173 req_dict = ipp.ops.verify_get_jobs_request(request) 174 printer_name = req_dict['printer-uri'] 175 job_id = req_dict['job-id'] 198 176 199 177 if printer_name not in self.printers: … … 210 188 # Each job will append a new job attribute group. 211 189 # XXX: we need to honor the things that the request actually asks for 212 self._get_job_attributes(job, request, response) 213 214 def set_job_attributes(self, request, response): 215 pass 216 217 def cups_get_document(self, request, response): 218 pass 219 220 def restart_job(self, request, response): 221 pass 222 223 def promote_job(self, request, response): 190 response = ipp.ops.make_get_job_attributes_response( 191 job.get_job_attributes(request), request) 192 return response 193 194 def set_job_attributes(self, request): 195 pass 196 197 def cups_get_document(self, request): 198 pass 199 200 def restart_job(self, request): 201 pass 202 203 def promote_job(self, request): 224 204 pass 225 205 … … 227 207 228 208 @handler_for(const.Operations.CUPS_GET_DEFAULT) 229 def cups_get_default(self, request , response):209 def cups_get_default(self, request): 230 210 """The CUPS-Get-Default operation (0x4001) returns the default 231 211 printer URI and attributes. 232 212 233 CUPS-Get-Default Request234 ------------------------235 236 The following groups of attributes are supplied as part of the237 CUPS-Get-Default request:238 239 Group 1: Operation Attributes240 Natural Language and Character Set:241 The 'attributes-charset' and242 'attributes-natural-language' attributes as described243 in section 3.1.4.1 of the IPP Model and Semantics244 document.245 'requested-attributes' (1setOf keyword):246 The client OPTIONALLY supplies a set of attribute247 names and/or attribute group names in whose values the248 requester is interested. If the client omits this249 attribute, the server responds as if this attribute250 had been supplied with a value of 'all'.251 252 CUPS-Get-Default Response253 -------------------------254 255 The following groups of attributes are send as part of the256 CUPS-Get-Default Response:257 258 Group 1: Operation Attributes259 Status Message:260 The standard response status message.261 Natural Language and Character Set:262 The 'attributes-charset' and263 'attributes-natural-language' attributes as described264 in section 3.1.4.2 of the IPP Model and Semantics265 document.266 267 Group 2: Printer Object Attributes268 The set of requested attributes and their current values.269 270 213 (Source: http://www.cups.org/documentation.php/spec-ipp.html#CUPS_GET_DEFAULT ) 271 214 272 215 """ 273 274 self._get_printer_attributes(self.printers[self.default], request, response) 216 217 req_dict = ipp.ops.verify_cups_get_default_request(request) 218 response = ipp.ops.make_get_printer_attributes_response( 219 self.printers[self.default].get_printer_attributes(request), request) 220 return response 275 221 276 222 @handler_for(const.Operations.CUPS_GET_PRINTERS) 277 def cups_get_printers(self, request, response): 278 """ 279 The CUPS-Get-Printers operation (0x4002) returns the printer 280 attributes for every printer known to the system. This may 281 include printers that are not served directly by the server. 282 283 CUPS-Get-Printers Request 284 ------------------------- 285 286 The following groups of attributes are supplied as part of the 287 CUPS-Get-Printers request: 288 289 Group 1: Operation Attributes 290 Natural Language and Character Set: 291 The 'attributes-charset' and 292 'attributes-natural-language' attributes as described 293 in section 3.1.4.1 of the IPP Model and Semantics 294 document. 295 'first-printer-name' (name(127)):CUPS 1.2/Mac OS X 10.5 296 The client OPTIONALLY supplies this attribute to 297 select the first printer that is returned. 298 'limit' (integer (1:MAX)): 299 The client OPTIONALLY supplies this attribute limiting 300 the number of printers that are returned. 301 'printer-location' (text(127)): CUPS 1.1.7 302 The client OPTIONALLY supplies this attribute to 303 select which printers are returned. 304 'printer-type' (type2 enum): CUPS 1.1.7 305 The client OPTIONALLY supplies a printer type 306 enumeration to select which printers are returned. 307 'printer-type-mask' (type2 enum): CUPS 1.1.7 308 The client OPTIONALLY supplies a printer type mask 309 enumeration to select which bits are used in the 310 'printer-type' attribute. 311 'requested-attributes' (1setOf keyword) : 312 The client OPTIONALLY supplies a set of attribute 313 names and/or attribute group names in whose values the 314 requester is interested. If the client omits this 315 attribute, the server responds as if this attribute 316 had been supplied with a value of 'all'. 317 'requested-user-name' (name(127)) : CUPS 1.2/Mac OS X 10.5 318 The client OPTIONALLY supplies a user name that is 319 used to filter the returned printers. 320 321 CUPS-Get-Printers Response 322 -------------------------- 323 324 The following groups of attributes are send as part of the 325 CUPS-Get-Printers Response: 326 327 Group 1: Operation Attributes 328 Status Message: 329 The standard response status message. 330 Natural Language and Character Set: 331 The 'attributes-charset' and 332 'attributes-natural-language' attributes as described 333 in section 3.1.4.2 of the IPP Model and Semantics 334 document. 335 336 Group 2: Printer Object Attributes 337 The set of requested attributes and their current values 338 for each printer. 223 def cups_get_printers(self, request): 224 """The CUPS-Get-Printers operation (0x4002) returns the 225 printer attributes for every printer known to the system. This 226 may include printers that are not served directly by the 227 server. 339 228 340 229 (Source: http://www.cups.org/documentation.php/spec-ipp.html#CUPS_GET_PRINTERS ) … … 342 231 """ 343 232 344 # Each printer will append a new printer attribute group. 345 for printer in self.printers: 346 self._get_printer_attributes(self.printers[printer], request, response) 233 req_dict = ipp.ops.verify_cups_get_printers_request(request) 234 attrs = [self.printers[printer].get_printer_attributes(request) \ 235 for printer in self.printers] 236 response = ipp.ops.make_cups_get_printers_response(attrs, request) 237 return response 347 238 348 239 @handler_for(const.Operations.CUPS_GET_CLASSES) 349 def cups_get_classes(self, request , response):240 def cups_get_classes(self, request): 350 241 """The CUPS-Get-Classes operation (0x4005) returns the printer 351 242 attributes for every printer class known to the system. This 352 243 may include printer classes that are not served directly by 353 244 the server. 354 355 CUPS-Get-Classes Request 356 ------------------------ 357 358 The following groups of attributes are supplied as part of the 359 CUPS-Get-Classes request: 360 361 Group 1: Operation Attributes 362 Natural Language and Character Set: 363 The 'attributes-charset' and 364 'attributes-natural-language' attributes as described 365 in section 3.1.4.1 of the IPP Model and Semantics 366 document. 367 'first-printer-name' (name(127)):CUPS 1.2/Mac OS X 10.5 368 The client OPTIONALLY supplies this attribute to 369 select the first printer that is returned. 370 'limit' (integer (1:MAX)): 371 The client OPTIONALLY supplies this attribute limiting 372 the number of printer classes that are returned. 373 'printer-location' (text(127)): CUPS 1.1.7 374 The client OPTIONALLY supplies this attribute to 375 select which printer classes are returned. 376 'printer-type' (type2 enum): CUPS 1.1.7 377 The client OPTIONALLY supplies a printer type 378 enumeration to select which printer classes are 379 returned. 380 'printer-type-mask' (type2 enum): CUPS 1.1.7 381 The client OPTIONALLY supplies a printer type mask 382 enumeration to select which bits are used in the 383 'printer-type' attribute. 384 'requested-attributes' (1setOf keyword) : 385 The client OPTIONALLY supplies a set of attribute 386 names and/or attribute group names in whose values the 387 requester is interested. If the client omits this 388 attribute, the server responds as if this attribute 389 had been supplied with a value of 'all'. 390 'requested-user-name' (name(127)) : CUPS 1.2/Mac OS X 10.5 391 The client OPTIONALLY supplies a user name that is 392 used to filter the returned printers. 393 394 CUPS-Get-Classes Response 395 ------------------------- 396 397 The following groups of attributes are send as part of the 398 CUPS-Get-Classes Response: 399 400 Group 1: Operation Attributes 401 Status Message: 402 The standard response status message. 403 Natural Language and Character Set: 404 The 'attributes-charset' and 405 'attributes-natural-language' attributes as described 406 in section 3.1.4.2 of the IPP Model and Semantics 407 document. 408 409 Group 2: Printer Class Object Attributes 410 The set of requested attributes and their current values 411 for each printer class. 412 245 413 246 (Source: http://www.cups.org/documentation.php/spec-ipp.html#CUPS_GET_CLASSES ) 414 247 415 248 """ 416 417 # We have no printer classes, so we don't need to do anything 418 pass 249 250 req_dict = ipp.ops.verify_cups_get_classes_request(request) 251 response = ipp.ops.make_cups_get_classes_response(request) 252 return response
Note: See TracChangeset
for help on using the changeset viewer.