Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions pyipptool/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
resume_printer_form,
hold_new_jobs_form,
release_held_new_jobs_form,
cancel_subscription_form,
)


Expand Down Expand Up @@ -440,6 +441,20 @@ def get_subscriptions(uri,
return response['Tests'][0]['ResponseAttributes']


def cancel_subscription(uri,
printer_uri=None,
requesting_user_name=colander.null,
notify_subscription_id=None):
kw = {'header':
{'operation_attributes':
{'printer_uri': printer_uri,
'requesting_user_name': requesting_user_name,
'notify_subscription_id': notify_subscription_id}}}
request = cancel_subscription_form.render(kw)
response = _call_ipptool(uri, request)
return response['Tests'][0]['ResponseAttributes']


def _pause_or_resume_printer(form, uri, printer_uri=None,
requesting_user_name=colander.null):
kw = {'header': {'operation_attributes':
Expand Down
2 changes: 2 additions & 0 deletions pyipptool/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
resume_printer_schema,
hold_new_jobs_schema,
release_held_new_jobs_schema,
cancel_subscription_schema,
)

default_dir = resource_filename('pyipptool', 'templates/')
Expand Down Expand Up @@ -53,3 +54,4 @@
resume_printer_form = deform.Form(resume_printer_schema)
hold_new_jobs_form = deform.Form(hold_new_jobs_schema)
release_held_new_jobs_form = deform.Form(release_held_new_jobs_schema)
cancel_subscription_form = deform.Form(cancel_subscription_schema)
17 changes: 17 additions & 0 deletions pyipptool/schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,12 @@ class SubscriptionOperationAttributes(OperationAttributesWithPrinterUri):
widget=IPPAttributeWidget())


class CancelSubscriptionOperationAttributes(SubscriptionOperationAttributes):
notify_subscription_id = colander.SchemaNode(
colander.Integer(),
widget=IPPAttributeWidget())


class HoldNewJobsOperationAttributes(SubscriptionOperationAttributes):
printer_message_from_operator = colander.SchemaNode(
Text(), widget=IPPAttributeWidget())
Expand Down Expand Up @@ -418,6 +424,15 @@ class ReleaseHeldNewJobsSchema(HoldNewJobsSchema):
operation = 'Release-Held-New-Jobs'


class CancelSubscriptionSchema(BaseIPPSchema):
name = 'Cancel Subscription'
operation = 'Cancel-Subscription'
header = HeaderIPPSchema(widget=IPPConstantTupleWidget())
header['operation_attributes'] = CancelSubscriptionOperationAttributes(
widget=IPPTupleWidget())
object_attributes_tag = colander.null


cancel_job_schema = CancelJobSchema(widget=IPPBodyWidget())

release_job_schema = ReleaseJobSchema(widget=IPPBodyWidget())
Expand Down Expand Up @@ -465,3 +480,5 @@ class ReleaseHeldNewJobsSchema(HoldNewJobsSchema):
hold_new_jobs_schema = HoldNewJobsSchema(widget=IPPBodyWidget())

release_held_new_jobs_schema = ReleaseHeldNewJobsSchema(widget=IPPBodyWidget())

cancel_subscription_schema = CancelSubscriptionSchema(widget=IPPBodyWidget())
15 changes: 15 additions & 0 deletions tests/test_form.py
Original file line number Diff line number Diff line change
Expand Up @@ -392,3 +392,18 @@ def test_release_held_new_jobs_form():
assert 'ATTR uri printer-uri ipp://server:port/printers/name' in request
assert 'ATTR name requesting-user-name yoda' in request
assert 'ATTR text printer-message-from-operator "melt jobs"' in request


def test_cancel_subscription_form():
from pyipptool.forms import cancel_subscription_form
request = cancel_subscription_form.render(
{'header':
{'operation_attributes':
{'printer_uri': 'ipp://server:port/printers/name',
'requesting_user_name': 'yoda',
'notify_subscription_id': 5}}})
assert 'NAME "Cancel Subscription"' in request
assert 'OPERATION "Cancel-Subscription"' in request
assert 'ATTR uri printer-uri ipp://server:port/printers/name' in request
assert 'ATTR name requesting-user-name yoda' in request
assert 'ATTR integer notify-subscription-id 5' in request, request
10 changes: 10 additions & 0 deletions tests/test_highlevel.py
Original file line number Diff line number Diff line change
Expand Up @@ -272,3 +272,13 @@ def test_resume_printer(_call_ipptool):
_call_ipptool.return_value = {'Tests': [{'ResponseAttributes': ''}]}
resume_printer('https://localhost:631/', printer_uri='')
assert _call_ipptool._mock_mock_calls[0][1][0] == 'https://localhost:631/'


@mock.patch.object(pyipptool, '_call_ipptool')
def test_cancel_subscription(_call_ipptool):
from pyipptool import cancel_subscription
_call_ipptool.return_value = {'Tests': [{'ResponseAttributes': ''}]}
cancel_subscription('https://localhost:631/',
printer_uri='',
notify_subscription_id=3)
assert _call_ipptool._mock_mock_calls[0][1][0] == 'https://localhost:631/'