source: server/lib/gutenbach/ipp/operations/__init__.py @ aded2d1

no-cups
Last change on this file since aded2d1 was aded2d1, checked in by Jessica B. Hamrick <jhamrick@…>, 12 years ago

Checkpoint, creating classes for specific IPP attributes

  • Property mode set to 100644
File size: 6.8 KB
RevLine 
[5e44432]1from ..attribute import Attribute
2from ..attributegroup import AttributeGroup
3from ..request import Request
4from ..value import Value
5from .. import errors
6from .. import constants as consts
[aded2d1]7from .. import object_attributes
[5e44432]8
9def 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]
[aded2d1]47    if charset_attr != object_attributes.AttributesCharset('utf-8'):
48        raise errors.ClientErrorBadRequest
[5e44432]49
50    # check for attributes-natural-language
51    natlang_attr = op_attrs.attributes[1]
[aded2d1]52    if natlang_attr != object_attributes.AttributesNaturalLanguage('en-us'):
53        raise errors.ClientErrorBadRequest
54
55    return dict([(attr.name, attr) for attr in op_attrs.attributes])
56
57def verify_printer_uri(uri_attr):
58    if uri_attr != object_attributes.PrinterUri(uri_attr.values[0].value):
59        raise errors.ClientErrorBadRequest
[5e44432]60   
61    # actually get the printer name
62    # XXX: hack -- CUPS will strip the port from the request, so
63    # we can't do an exact comparison (also the hostname might be
64    # different, depending on the CNAME or whether it's localhost)
[aded2d1]65    uri = uri_attr.values[0].value.split("/")[-1]
[5e44432]66    return uri
67
[aded2d1]68def verify_requesting_username(username_attr):
69    if username_attr != object_attributes.RequestingUserName(username_attr.values[0].value):
70        raise errors.ClientErrorBadRequest
71    return username_attr.values[0].value
[5e44432]72
73def make_empty_response(request):
74    # Operation attributes -- typically the same for any request
[aded2d1]75    attributes = AttributeGroup(
[5e44432]76        consts.AttributeTags.OPERATION,
[aded2d1]77        [object_attributes.AttributesCharset('utf-8'),
78         object_attributes.AttributesNaturalLanguage('en-us')])
[5e44432]79
80    # Set up the default response -- handlers will override these
81    # values if they need to
82    response_kwargs = {}
83    response_kwargs['version']          = request.version
84    response_kwargs['operation_id']     = consts.StatusCodes.OK
85    response_kwargs['request_id']       = request.request_id
[aded2d1]86    response_kwargs['attribute_groups'] = [attributes]
[5e44432]87    response = Request(**response_kwargs)
88
89    return response
90
91def make_job_attributes(attrs, request, response):
92    response.attribute_groups.append(AttributeGroup(
[aded2d1]93        consts.AttributeTags.JOB, attrs))
[5e44432]94
95def make_printer_attributes(attrs, request, response):
96    response.attribute_groups.append(AttributeGroup(
[aded2d1]97        consts.AttributeTags.PRINTER, attrs))
[5e44432]98
99from cups_get_classes import verify_cups_get_classes_request, make_cups_get_classes_response
100from cups_get_default import verify_cups_get_default_request, make_cups_get_default_response
[e70c020]101from cups_get_document import verify_cups_get_document_request, make_cups_get_document_response
[5e44432]102from cups_get_printers import verify_cups_get_printers_request, make_cups_get_printers_response
103
[e70c020]104from cancel_job import verify_cancel_job_request, make_cancel_job_response
105from create_job import verify_create_job_request, make_create_job_response
[5e44432]106from get_jobs import verify_get_jobs_request, make_get_jobs_response
107from get_printer_attributes import make_get_printer_attributes_response
[e70c020]108from get_printer_attributes import verify_get_printer_attributes_request
109from pause_printer import verify_pause_printer_request, make_pause_printer_response
[7a7a09e]110from print_job import verify_print_job_request, make_print_job_response
[e70c020]111from print_uri import verify_print_uri_request, make_print_uri_response
112from promote_job import verify_promote_job_request, make_promote_job_response
113from restart_job import verify_restart_job_request, make_restart_job_response
114from resume_printer import verify_resume_printer_request, make_resume_printer_response
115from send_document import verify_send_document_request, make_send_document_response
116from send_uri import verify_send_uri_request, make_send_uri_response
117from set_job_attributes import make_set_job_attributes_response
118from set_job_attributes import verify_set_job_attributes_request
119from set_printer_attributes import make_set_printer_attributes_response
120from set_printer_attributes import verify_set_printer_attributes_request
121from validate_job import verify_validate_job_request, make_validate_job_response
122
123
124
125__all__ = ['verify_cups_get_classes_request', 'make_cups_get_classes_response'
126           'verify_cups_get_default_request', 'make_cups_get_default_response'
127           'verify_cups_get_document_request', 'make_cups_get_document_response'
128           'verify_cups_get_printers_request', 'make_cups_get_printers_response'
129
130           'verify_cancel_job_request', 'make_cancel_job_response'
131           'verify_create_job_request', 'make_create_job_response'
132           'verify_get_jobs_request', 'make_get_jobs_response'
133           'make_get_printer_attributes_response'
134           'verify_get_printer_attributes_request'
135           'verify_pause_printer_request', 'make_pause_printer_response'
136           'verify_print_job_request', 'make_print_job_response'
137           'verify_print_uri_request', 'make_print_uri_response'
138           'verify_promote_job_request', 'make_promote_job_response'
139           'verify_restart_job_request', 'make_restart_job_response'
140           'verify_resume_printer_request', 'make_resume_printer_response'
141           'verify_send_document_request', 'make_send_document_response'
142           'verify_send_uri_request', 'make_send_uri_response'
143           'make_set_job_attributes_response'
144           'verify_set_job_attributes_request'
145           'make_set_printer_attributes_response'
146           'verify_set_printer_attributes_request'
147           'verify_validate_job_request', 'make_validate_job_response'
[5e44432]148
149           'verify_operations',
150           'verify_printer_uri',
151           'verify_requesting_username',
152
153           'make_empty_response',
154           'make_job_attributes',
155           'make_printer_attributes']
Note: See TracBrowser for help on using the repository browser.