[5e44432] | 1 | from ..attribute import Attribute |
---|
| 2 | from ..attributegroup import AttributeGroup |
---|
| 3 | from ..request import Request |
---|
| 4 | from ..value import Value |
---|
| 5 | from .. import errors |
---|
| 6 | from .. import constants as consts |
---|
[aded2d1] | 7 | from .. import object_attributes |
---|
[5e44432] | 8 | |
---|
| 9 | def verify_operations(request): |
---|
| 10 | """Pretty much all requests have the first attribute group for |
---|
| 11 | operation attributes, and these all have 'attributes-charset' and |
---|
| 12 | 'attributes-natural-language' as the first two attributes. This |
---|
| 13 | method just generically verifies that these attributes are there. |
---|
| 14 | |
---|
| 15 | """ |
---|
| 16 | |
---|
| 17 | # XXX: check version |
---|
| 18 | if False: |
---|
[aded2d1] | 19 | raise errors.ClientErrorVersionNotSupported(str(request.version)) |
---|
[5e44432] | 20 | |
---|
| 21 | # XXX: check operation id |
---|
| 22 | if False: |
---|
[aded2d1] | 23 | raise errors.ClientErrorOperationNotSupported(str(request.operation_id)) |
---|
[5e44432] | 24 | |
---|
| 25 | # check operation attributes tag |
---|
| 26 | op_attrs = request.attribute_groups[0] |
---|
| 27 | if op_attrs.tag != consts.AttributeTags.OPERATION: |
---|
[aded2d1] | 28 | raise errors.ClientErrorBadRequest( |
---|
[5e44432] | 29 | "Attribute group does not have OPERATION tag: 0x%x" % op_attrs.tag) |
---|
| 30 | |
---|
| 31 | # XXX: if these aren't valid, then you HAVE to return something |
---|
| 32 | # special. See RFC 2911 3.1.6.1 |
---|
| 33 | # # check compression |
---|
| 34 | # if False: |
---|
[aded2d1] | 35 | # raise errors.ClientErrorCompressionNotSupported |
---|
[5e44432] | 36 | |
---|
| 37 | # # check document format |
---|
| 38 | # if False: |
---|
[aded2d1] | 39 | # raise errors.ClientErrorDocumentFormatNotSupported |
---|
[5e44432] | 40 | |
---|
| 41 | # # check document uri |
---|
| 42 | # if False: |
---|
[aded2d1] | 43 | # raise errors.ClientErrorUriSchemeNotSupported |
---|
[5e44432] | 44 | |
---|
| 45 | # check charset |
---|
| 46 | charset_attr = op_attrs.attributes[0] |
---|
[b828a96] | 47 | expected = object_attributes.AttributesCharset('utf-8') |
---|
| 48 | if charset_attr != expected: |
---|
| 49 | raise errors.ClientErrorBadRequest("%s != %s" % (charset_attr, expected)) |
---|
[5e44432] | 50 | |
---|
| 51 | # check for attributes-natural-language |
---|
| 52 | natlang_attr = op_attrs.attributes[1] |
---|
[b828a96] | 53 | expected = object_attributes.AttributesNaturalLanguage('en-us') |
---|
| 54 | if natlang_attr != expected: |
---|
| 55 | raise errors.ClientErrorBadRequest("%s != %s" % (natlang_attr, expected)) |
---|
[aded2d1] | 56 | |
---|
| 57 | return dict([(attr.name, attr) for attr in op_attrs.attributes]) |
---|
| 58 | |
---|
| 59 | def verify_printer_uri(uri_attr): |
---|
[b828a96] | 60 | expected = object_attributes.PrinterUri(uri_attr.values[0].value) |
---|
| 61 | if uri_attr != expected: |
---|
| 62 | raise errors.ClientErrorBadRequest("%s != %s" % (uri_attr, expected)) |
---|
[5e44432] | 63 | |
---|
| 64 | # actually get the printer name |
---|
| 65 | # XXX: hack -- CUPS will strip the port from the request, so |
---|
| 66 | # we can't do an exact comparison (also the hostname might be |
---|
| 67 | # different, depending on the CNAME or whether it's localhost) |
---|
[aded2d1] | 68 | uri = uri_attr.values[0].value.split("/")[-1] |
---|
[5e44432] | 69 | return uri |
---|
| 70 | |
---|
[aded2d1] | 71 | def verify_requesting_username(username_attr): |
---|
[b828a96] | 72 | expected = object_attributes.RequestingUserName(username_attr.values[0].value) |
---|
| 73 | if username_attr != expected: |
---|
| 74 | raise errors.ClientErrorBadRequest("%s != %s" % (username_attr, expected)) |
---|
[aded2d1] | 75 | return username_attr.values[0].value |
---|
[5e44432] | 76 | |
---|
| 77 | def make_empty_response(request): |
---|
| 78 | # Operation attributes -- typically the same for any request |
---|
[aded2d1] | 79 | attributes = AttributeGroup( |
---|
[5e44432] | 80 | consts.AttributeTags.OPERATION, |
---|
[aded2d1] | 81 | [object_attributes.AttributesCharset('utf-8'), |
---|
| 82 | object_attributes.AttributesNaturalLanguage('en-us')]) |
---|
[5e44432] | 83 | |
---|
| 84 | # Set up the default response -- handlers will override these |
---|
| 85 | # values if they need to |
---|
| 86 | response_kwargs = {} |
---|
| 87 | response_kwargs['version'] = request.version |
---|
| 88 | response_kwargs['operation_id'] = consts.StatusCodes.OK |
---|
| 89 | response_kwargs['request_id'] = request.request_id |
---|
[aded2d1] | 90 | response_kwargs['attribute_groups'] = [attributes] |
---|
[5e44432] | 91 | response = Request(**response_kwargs) |
---|
| 92 | |
---|
| 93 | return response |
---|
| 94 | |
---|
| 95 | def make_job_attributes(attrs, request, response): |
---|
| 96 | response.attribute_groups.append(AttributeGroup( |
---|
[aded2d1] | 97 | consts.AttributeTags.JOB, attrs)) |
---|
[5e44432] | 98 | |
---|
| 99 | def make_printer_attributes(attrs, request, response): |
---|
| 100 | response.attribute_groups.append(AttributeGroup( |
---|
[aded2d1] | 101 | consts.AttributeTags.PRINTER, attrs)) |
---|
[5e44432] | 102 | |
---|
| 103 | from cups_get_classes import verify_cups_get_classes_request, make_cups_get_classes_response |
---|
| 104 | from cups_get_default import verify_cups_get_default_request, make_cups_get_default_response |
---|
[e70c020] | 105 | from cups_get_document import verify_cups_get_document_request, make_cups_get_document_response |
---|
[5e44432] | 106 | from cups_get_printers import verify_cups_get_printers_request, make_cups_get_printers_response |
---|
| 107 | |
---|
[e70c020] | 108 | from cancel_job import verify_cancel_job_request, make_cancel_job_response |
---|
| 109 | from create_job import verify_create_job_request, make_create_job_response |
---|
[5e44432] | 110 | from get_jobs import verify_get_jobs_request, make_get_jobs_response |
---|
| 111 | from get_printer_attributes import make_get_printer_attributes_response |
---|
[e70c020] | 112 | from get_printer_attributes import verify_get_printer_attributes_request |
---|
| 113 | from pause_printer import verify_pause_printer_request, make_pause_printer_response |
---|
[7a7a09e] | 114 | from print_job import verify_print_job_request, make_print_job_response |
---|
[e70c020] | 115 | from print_uri import verify_print_uri_request, make_print_uri_response |
---|
| 116 | from promote_job import verify_promote_job_request, make_promote_job_response |
---|
| 117 | from restart_job import verify_restart_job_request, make_restart_job_response |
---|
| 118 | from resume_printer import verify_resume_printer_request, make_resume_printer_response |
---|
| 119 | from send_document import verify_send_document_request, make_send_document_response |
---|
| 120 | from send_uri import verify_send_uri_request, make_send_uri_response |
---|
| 121 | from set_job_attributes import make_set_job_attributes_response |
---|
| 122 | from set_job_attributes import verify_set_job_attributes_request |
---|
| 123 | from set_printer_attributes import make_set_printer_attributes_response |
---|
| 124 | from set_printer_attributes import verify_set_printer_attributes_request |
---|
| 125 | from validate_job import verify_validate_job_request, make_validate_job_response |
---|
| 126 | |
---|
| 127 | __all__ = ['verify_cups_get_classes_request', 'make_cups_get_classes_response' |
---|
| 128 | 'verify_cups_get_default_request', 'make_cups_get_default_response' |
---|
| 129 | 'verify_cups_get_document_request', 'make_cups_get_document_response' |
---|
| 130 | 'verify_cups_get_printers_request', 'make_cups_get_printers_response' |
---|
| 131 | |
---|
| 132 | 'verify_cancel_job_request', 'make_cancel_job_response' |
---|
| 133 | 'verify_create_job_request', 'make_create_job_response' |
---|
| 134 | 'verify_get_jobs_request', 'make_get_jobs_response' |
---|
| 135 | 'make_get_printer_attributes_response' |
---|
| 136 | 'verify_get_printer_attributes_request' |
---|
| 137 | 'verify_pause_printer_request', 'make_pause_printer_response' |
---|
| 138 | 'verify_print_job_request', 'make_print_job_response' |
---|
| 139 | 'verify_print_uri_request', 'make_print_uri_response' |
---|
| 140 | 'verify_promote_job_request', 'make_promote_job_response' |
---|
| 141 | 'verify_restart_job_request', 'make_restart_job_response' |
---|
| 142 | 'verify_resume_printer_request', 'make_resume_printer_response' |
---|
| 143 | 'verify_send_document_request', 'make_send_document_response' |
---|
| 144 | 'verify_send_uri_request', 'make_send_uri_response' |
---|
| 145 | 'make_set_job_attributes_response' |
---|
| 146 | 'verify_set_job_attributes_request' |
---|
| 147 | 'make_set_printer_attributes_response' |
---|
| 148 | 'verify_set_printer_attributes_request' |
---|
| 149 | 'verify_validate_job_request', 'make_validate_job_response' |
---|
[5e44432] | 150 | |
---|
| 151 | 'verify_operations', |
---|
| 152 | 'verify_printer_uri', |
---|
| 153 | 'verify_requesting_username', |
---|
| 154 | |
---|
| 155 | 'make_empty_response', |
---|
| 156 | 'make_job_attributes', |
---|
| 157 | 'make_printer_attributes'] |
---|