diff --git a/pyipptool/core.py b/pyipptool/core.py index 727a1fd..dd7a9cd 100644 --- a/pyipptool/core.py +++ b/pyipptool/core.py @@ -302,6 +302,7 @@ def create_job(self, @pyipptool_coroutine def print_job(self, printer_uri=None, + requesting_user_name=colander.null, job_name=colander.null, ipp_attribute_fidelity=colander.null, document_name=colander.null, @@ -322,6 +323,7 @@ def print_job(self, orientation_requested=colander.null, printer_resolution=colander.null, print_quality=colander.null, + ezeep_job_uuid=colander.null, notify_recipient_uri=colander.null, notify_events=colander.null, notify_time_interval=colander.null, @@ -329,10 +331,12 @@ def print_job(self, job_billing=colander.null, job_sheets=colander.null, media=colander.null, - document_content=None): + document_content=None, + ): filename, delete = _get_filename_for_content(document_content) kw = {'operation_attributes_tag': {'printer_uri': printer_uri, + 'requesting_user_name': requesting_user_name, 'job_name': job_name, 'ipp_attribute_fidelity': ipp_attribute_fidelity, 'document_name': document_name, @@ -357,7 +361,9 @@ def print_job(self, 'orientation_requested': orientation_requested, 'media': media, 'printer_resolution': printer_resolution, - 'print_quality': print_quality}, + 'print_quality': print_quality, + 'ezeep_job_uuid': ezeep_job_uuid, + }, 'subscription_attributes_tag': {'notify_recipient_uri': notify_recipient_uri, 'notify_events': notify_events, diff --git a/pyipptool/schemas.py b/pyipptool/schemas.py index 903dbed..760679b 100644 --- a/pyipptool/schemas.py +++ b/pyipptool/schemas.py @@ -1,8 +1,11 @@ import re import colander -from .widgets import (IPPAttributeWidget, IPPBodyWidget, IPPFileWidget, - IPPGroupWidget, IPPNameWidget) +from .widgets import (IPPAttributeWidget, + IPPBodyWidget, + IPPFileWidget, + IPPGroupWidget, + IPPNameWidget) class IntegerOrTuple(colander.List): @@ -243,6 +246,10 @@ class JobAttributesGroup(colander.Schema): widget=IPPAttributeWidget()) print_quality = colander.SchemaNode(Enum(), widget=IPPAttributeWidget()) + # Arbitrary Job Attributes + ezeep_job_uuid = colander.SchemaNode(Text(), + widget=IPPAttributeWidget()) + class SubscriptionGroup(colander.Schema): notify_recipient_uri = colander.SchemaNode(Uri(), diff --git a/tests/test_highlevel.py b/tests/test_highlevel.py index 613f7e0..ce36e0e 100644 --- a/tests/test_highlevel.py +++ b/tests/test_highlevel.py @@ -643,6 +643,7 @@ def test_print_job(_call_ipptool): with open(filename, 'rb') as tmp: print_job(printer_uri='ipp://cups:631/classes/p', job_name='foo', + requesting_user_name='john-rambo', ipp_attribute_fidelity=False, document_name='foo.txt', compression='gzip', @@ -666,7 +667,8 @@ def test_print_job(_call_ipptool): media='iso-a4-white', printer_resolution='600dpi', print_quality='5', - document_content=tmp.read()) + document_content=tmp.read(), + ezeep_job_uuid='bla') request = _call_ipptool._mock_mock_calls[0][1][-1] expected_request = textwrap.dedent(""" { @@ -676,6 +678,7 @@ def test_print_job(_call_ipptool): ATTR charset attributes-charset utf-8 ATTR language attributes-natural-language en ATTR uri printer-uri ipp://cups:631/classes/p + ATTR name requesting-user-name john-rambo ATTR name job-name foo ATTR boolean ipp-attribute-fidelity 0 ATTR integer job-k-octets 1024 @@ -701,6 +704,7 @@ def test_print_job(_call_ipptool): ATTR keyword media iso-a4-white ATTR resolution printer-resolution 600dpi ATTR enum print-quality 5 + ATTR text ezeep-job-uuid "bla" GROUP subscription-attributes-tag GROUP document-attributes-tag FILE /tmp/