diff --git a/pyipptool/__init__.py b/pyipptool/__init__.py index d709918..0565c70 100644 --- a/pyipptool/__init__.py +++ b/pyipptool/__init__.py @@ -423,16 +423,18 @@ def get_printer_attributes(uri, def get_subscriptions(uri, printer_uri=None, + requesting_user_name=colander.null, + notify_job_id=colander.null, limit=colander.null, requested_attributes=colander.null, - which_jobs=colander.null, - my_jobs=colander.null): + my_subscriptions=colander.null): kw = {'header': {'operation_attributes': {'printer_uri': printer_uri, + 'requesting_user_name': requesting_user_name, + 'notify_job_id': notify_job_id, 'limit': limit, 'requested_attributes': requested_attributes, - 'which_jobs': which_jobs, - 'my_jobs': my_jobs}}} + 'my_subscriptions': my_subscriptions}}} request = get_subscriptions_form.render(kw) response = _call_ipptool(uri, request) return response['Tests'][0]['ResponseAttributes'] diff --git a/pyipptool/schemas.py b/pyipptool/schemas.py index f695ff6..a8c36a8 100644 --- a/pyipptool/schemas.py +++ b/pyipptool/schemas.py @@ -109,6 +109,24 @@ class MoveJobOperationAttributes(OperationAttributesWithPrinterUri): job_uri = colander.SchemaNode(Uri(), widget=IPPAttributeWidget()) +class GetSubscriptionsAttributes(OperationAttributesWithPrinterUri): + requesting_user_name = colander.SchemaNode( + Name(), + widget=IPPAttributeWidget()) + notify_job_id = colander.SchemaNode( + colander.Integer(), + widget=IPPAttributeWidget()) + limit = colander.SchemaNode( + colander.Integer(), + widget=IPPAttributeWidget()) + requested_attributes = colander.SchemaNode( + Keyword(), + widget=IPPAttributeWidget()) + my_subscriptions = colander.SchemaNode( + colander.Boolean(false_val=0, true_val=1), + widget=IPPAttributeWidget()) + + class CupsGetPPDsSchemaOperationAttributes(GetDevicesOperationAttributes): ppd_make = colander.SchemaNode(Text(), widget=IPPAttributeWidget()) ppd_make_and_model = colander.SchemaNode( @@ -360,9 +378,13 @@ class GetPrinterAttributesSchema(BaseIPPSchema): object_attributes_tag = colander.null -class GetSubscriptionsSchema(GetJobsSchema): +class GetSubscriptionsSchema(BaseIPPSchema): name = 'Get Subscriptions' operation = 'Get-Subscriptions' + header = HeaderIPPSchema(widget=IPPConstantTupleWidget()) + header['operation_attributes'] = GetSubscriptionsAttributes( + widget=IPPTupleWidget()) + object_attributes_tag = colander.null class PausePrinterSchema(BaseIPPSchema): diff --git a/tests/test_form.py b/tests/test_form.py index 038533d..f61335b 100644 --- a/tests/test_form.py +++ b/tests/test_form.py @@ -319,20 +319,23 @@ def test_get_printer_attributes_form(): def test_get_subscriptions_form(): from pyipptool.forms import get_subscriptions_form - request = get_subscriptions_form.render({'header': - {'operation_attributes': - {'limit': 1, - 'requested_attributes': - 'job-uri', - 'which_jobs': 'pending', - 'my_jobs': True}}}) + request = get_subscriptions_form.render( + {'header': + {'operation_attributes': + {'printer_uri': 'https://localhost:631/printers/p0', + 'requesting_user_name': 'yoda', + 'notify_job_id': 3, + 'limit': 1, + 'requested_attributes': 'notify-recipient-uri', + 'my_subscriptions': True}}}) assert 'NAME "Get Subscriptions"' in request assert 'OPERATION "Get-Subscriptions"' in request + assert 'ATTR uri printer-uri https://localhost:631/printers/p0' in request + assert 'ATTR name requesting-user-name yoda' in request + assert 'ATTR integer notify-job-id 3' in request assert 'ATTR integer limit 1' in request - assert 'ATTR keyword requested-attributes job-uri' in request - assert 'ATTR keyword which-jobs pending' in request - assert 'ATTR boolean my-jobs 1' in request, request - assert 'ATTR boolean my-jobs 1' in request, request + assert 'ATTR keyword requested-attributes notify-recipient-uri' in request + assert 'ATTR boolean my-subscriptions 1' in request def test_pause_printer_form():