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
Line 
1from ..attribute import Attribute
2from ..attributegroup import AttributeGroup
3from ..request import Request
4from ..value import Value
5from .. import errors
6from .. import constants as consts
7from .. import object_attributes
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:
19        raise errors.ClientErrorVersionNotSupported(str(request.version))
20
21    # XXX: check operation id
22    if False:
23        raise errors.ClientErrorOperationNotSupported(str(request.operation_id))
24
25    # check operation attributes tag
26    op_attrs = request.attribute_groups[0]
27    if op_attrs.tag != consts.AttributeTags.OPERATION:
28        raise errors.ClientErrorBadRequest(
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:
35    #     raise errors.ClientErrorCompressionNotSupported
36
37    # # check document format
38    # if False:
39    #     raise errors.ClientErrorDocumentFormatNotSupported
40
41    # # check document uri
42    # if False:
43    #     raise errors.ClientErrorUriSchemeNotSupported
44
45    # check charset
46    charset_attr = op_attrs.attributes[0]
47    if charset_attr != object_attributes.AttributesCharset('utf-8'):
48        raise errors.ClientErrorBadRequest
49
50    # check for attributes-natural-language
51    natlang_attr = op_attrs.attributes[1]
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
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)
65    uri = uri_attr.values[0].value.split("/")[-1]
66    return uri
67
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
72
73def make_empty_response(request):
74    # Operation attributes -- typically the same for any request
75    attributes = AttributeGroup(
76        consts.AttributeTags.OPERATION,
77        [object_attributes.AttributesCharset('utf-8'),
78         object_attributes.AttributesNaturalLanguage('en-us')])
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
86    response_kwargs['attribute_groups'] = [attributes]
87    response = Request(**response_kwargs)
88
89    return response
90
91def make_job_attributes(attrs, request, response):
92    response.attribute_groups.append(AttributeGroup(
93        consts.AttributeTags.JOB, attrs))
94
95def make_printer_attributes(attrs, request, response):
96    response.attribute_groups.append(AttributeGroup(
97        consts.AttributeTags.PRINTER, attrs))
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
101from cups_get_document import verify_cups_get_document_request, make_cups_get_document_response
102from cups_get_printers import verify_cups_get_printers_request, make_cups_get_printers_response
103
104from cancel_job import verify_cancel_job_request, make_cancel_job_response
105from create_job import verify_create_job_request, make_create_job_response
106from get_jobs import verify_get_jobs_request, make_get_jobs_response
107from get_printer_attributes import make_get_printer_attributes_response
108from get_printer_attributes import verify_get_printer_attributes_request
109from pause_printer import verify_pause_printer_request, make_pause_printer_response
110from print_job import verify_print_job_request, make_print_job_response
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'
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.