From d3a5834815998d7e7ce8b0af87048bee798c5462 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 17:40:04 -0500 Subject: [PATCH 01/33] Update models.py --- pyipp/models.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/pyipp/models.py b/pyipp/models.py index 897f1d884..fef5f3bf1 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -27,11 +27,23 @@ class Info: @staticmethod def from_dict(data: dict): """Return Info object from IPP response.""" - make_model = data.get("printer-make-and-model", "IPP Printer") + printer_name = data.get("printer-name", "") + make_model = data.get("printer-make-and-model", "") device_id = data.get("printer-device-id", "") uuid = data.get("printer-uuid") - make, model = parse_make_and_model(make_model) + if len(printer_name) > 0: + name = printer_name + elif len(make_model) > 0: + name = make_model + else + name = "IPP Printer" + + if len(make_model) > 0: + make, model = parse_make_and_model(make_model) + else: + make = model = None + cmd = "Unknown" serial = None @@ -55,7 +67,7 @@ def from_dict(data: dict): name=make_model, manufacturer=make, model=model, - printer_name=data.get("printer-name", None), + printer_name=printer_name, printer_info=data.get("printer-info", None), printer_uri_supported=data.get("printer-uri-supported", []), serial=serial, From b4279aaf5d7ff3658b27c24a98d1924d901a9d57 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 17:48:02 -0500 Subject: [PATCH 02/33] Update test_models.py --- tests/test_models.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tests/test_models.py b/tests/test_models.py index 31aa3e8ee..ee40f8a94 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -6,6 +6,38 @@ from . import IPPE10_PRINTER_ATTRS, load_fixture_binary +@pytest.mark.asyncio +async def test_info(): + """Test Info model.""" + parsed = parser.parse(load_fixture_binary("get-printer-attributes-epsonxp6000.bin")) + data = parsed["printers"][0] + info = models.Info.from_dict(data) + + assert info + assert info.command_set == "ESCPL2,BDC,D4,D4PX,ESCPR7,END4,GENEP,URF" + assert info.location == "" + assert info.name == "EPSON XP-6000 Series" + assert info.manufacturer == "EPSON" + assert info.model == "XP-6000 Series" + assert info.printer_name == "" + assert info.printer_info == "EPSON XP-6000 Series" + assert info.printer_uri_supported == [ + "ipps://epson761251.local.:631/ipp/print", + "ipp://epson761251.local.:631/ipp/print", + ] + assert info.serial == "583434593035343012" + assert info.uuid == "cfe92100-67c4-11d4-a45f-f8d027761251" + assert info.version == "20.44.NU20K2" + assert info.uptime == 4119 + + data["printer-name"] = "Printy" + info = models.Info.from_dict(data) + + assert info + assert info.name = "Printy" + assert info.printer_name = "Printy" + + @pytest.mark.asyncio async def test_printer(): """Test Printer model.""" @@ -20,6 +52,7 @@ async def test_printer(): assert printer.info.name == "EPSON XP-6000 Series" assert printer.info.manufacturer == "EPSON" assert printer.info.model == "XP-6000 Series" + assert info.printer_name == "" assert printer.info.printer_info == "EPSON XP-6000 Series" assert printer.info.printer_uri_supported == [ "ipps://epson761251.local.:631/ipp/print", From 71ec3a98c6f4ecafe7cf1a1147131baf945a7001 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 17:49:41 -0500 Subject: [PATCH 03/33] Update models.py --- pyipp/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyipp/models.py b/pyipp/models.py index fef5f3bf1..5f57aff60 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -36,7 +36,7 @@ def from_dict(data: dict): name = printer_name elif len(make_model) > 0: name = make_model - else + else: name = "IPP Printer" if len(make_model) > 0: From 969d42b4f246c4a41369308187d3e227efc75c01 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 18:00:23 -0500 Subject: [PATCH 04/33] Update test_models.py --- tests/test_models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_models.py b/tests/test_models.py index ee40f8a94..6baaf7f60 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -34,8 +34,8 @@ async def test_info(): info = models.Info.from_dict(data) assert info - assert info.name = "Printy" - assert info.printer_name = "Printy" + assert info.name == "Printy" + assert info.printer_name == "Printy" @pytest.mark.asyncio From dbb497c0f7549881180d1f15f16070c8d8fb968c Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 18:00:46 -0500 Subject: [PATCH 05/33] Update models.py --- pyipp/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyipp/models.py b/pyipp/models.py index 5f57aff60..1d3aa6620 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -64,7 +64,7 @@ def from_dict(data: dict): return Info( command_set=cmd, location=data.get("printer-location", ""), - name=make_model, + name=name, manufacturer=make, model=model, printer_name=printer_name, From 3ab2763e4546e2decd76c49885e3cb0134fef8a0 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 18:04:22 -0500 Subject: [PATCH 06/33] Update models.py --- pyipp/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyipp/models.py b/pyipp/models.py index 1d3aa6620..44d9e89a5 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -14,8 +14,8 @@ class Info: command_set: str location: str name: str - manufacturer: str - model: str + manufacturer: Optional[str] + model: Optional[str] printer_name: str printer_info: str printer_uri_supported: list From cbb5e8768fb71c736c58a52d3bfb5ccd405b4d90 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 18:04:54 -0500 Subject: [PATCH 07/33] Update test_models.py --- tests/test_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_models.py b/tests/test_models.py index 6baaf7f60..27b9864bc 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -52,7 +52,7 @@ async def test_printer(): assert printer.info.name == "EPSON XP-6000 Series" assert printer.info.manufacturer == "EPSON" assert printer.info.model == "XP-6000 Series" - assert info.printer_name == "" + assert printer.info.printer_name == "" assert printer.info.printer_info == "EPSON XP-6000 Series" assert printer.info.printer_uri_supported == [ "ipps://epson761251.local.:631/ipp/print", From a7b6c9d25ee80daa35c8e5bda2cd41f89d7ee902 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 18:07:03 -0500 Subject: [PATCH 08/33] Update test_models.py --- tests/test_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_models.py b/tests/test_models.py index 27b9864bc..9941b8abd 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -32,7 +32,7 @@ async def test_info(): data["printer-name"] = "Printy" info = models.Info.from_dict(data) - + assert info assert info.name == "Printy" assert info.printer_name == "Printy" From 94ed259a41002922b7833141816be49021e27fe3 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 18:13:28 -0500 Subject: [PATCH 09/33] Update models.py --- pyipp/models.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pyipp/models.py b/pyipp/models.py index 44d9e89a5..a76520641 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -39,10 +39,7 @@ def from_dict(data: dict): else: name = "IPP Printer" - if len(make_model) > 0: - make, model = parse_make_and_model(make_model) - else: - make = model = None + make, model = parse_make_and_model(make_model) cmd = "Unknown" serial = None From 47a20fda60aab707119c064569e99973073f7bf0 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 18:26:07 -0500 Subject: [PATCH 10/33] Update test_models.py --- tests/test_models.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tests/test_models.py b/tests/test_models.py index 9941b8abd..bb56d13e6 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -37,6 +37,14 @@ async def test_info(): assert info.name == "Printy" assert info.printer_name == "Printy" + data["printer-name"] = "" + data["printer-make-and-model"] = "" + info = models.Info.from_dict(data) + + assert info + assert info.name == "IPP Printer" + assert info.printer_name == "" + @pytest.mark.asyncio async def test_printer(): @@ -52,7 +60,7 @@ async def test_printer(): assert printer.info.name == "EPSON XP-6000 Series" assert printer.info.manufacturer == "EPSON" assert printer.info.model == "XP-6000 Series" - assert printer.info.printer_name == "" + assert printer.info.printer_name == "ipp/print" assert printer.info.printer_info == "EPSON XP-6000 Series" assert printer.info.printer_uri_supported == [ "ipps://epson761251.local.:631/ipp/print", From 880fecdde8aa59fec370ca9346a346427b18f422 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 18:40:53 -0500 Subject: [PATCH 11/33] Update models.py --- pyipp/models.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/pyipp/models.py b/pyipp/models.py index a76520641..72cd0e945 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -27,13 +27,26 @@ class Info: @staticmethod def from_dict(data: dict): """Return Info object from IPP response.""" + name = "" printer_name = data.get("printer-name", "") make_model = data.get("printer-make-and-model", "") device_id = data.get("printer-device-id", "") + uri_supported = data.get("printer-uri-supported", []) uuid = data.get("printer-uuid") - if len(printer_name) > 0: - name = printer_name + _printer_name = printer_name + + if isinstance(uri_supported, List): + for uri in uri_supported: + uri_path = "" + if uri_path == _printer_name: + _printer_name = "' + break + else: + uri_supported = [] + + if len(_printer_name) > 0: + name = _printer_name elif len(make_model) > 0: name = make_model else: @@ -66,7 +79,7 @@ def from_dict(data: dict): model=model, printer_name=printer_name, printer_info=data.get("printer-info", None), - printer_uri_supported=data.get("printer-uri-supported", []), + printer_uri_supported=uri_supported, serial=serial, uptime=data.get("printer-up-time", 0), uuid=uuid[9:] if uuid else None, From 4157f810b9b1506c9151159004cc83f23c53c7ec Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 18:43:02 -0500 Subject: [PATCH 12/33] Update models.py --- pyipp/models.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pyipp/models.py b/pyipp/models.py index 72cd0e945..3ae3d3487 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -2,6 +2,8 @@ from dataclasses import dataclass from typing import List, Optional +from yarl import URL + from .parser import parse_ieee1284_device_id, parse_make_and_model PRINTER_STATES = {3: "idle", 4: "printing", 5: "stopped"} @@ -38,7 +40,7 @@ def from_dict(data: dict): if isinstance(uri_supported, List): for uri in uri_supported: - uri_path = "" + uri_path = URL(uri).path if uri_path == _printer_name: _printer_name = "' break From ff702b588288a5f9d75841d99f82b1aa813d64b2 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 18:44:20 -0500 Subject: [PATCH 13/33] Update models.py --- pyipp/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyipp/models.py b/pyipp/models.py index 3ae3d3487..510a5aad8 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -40,8 +40,8 @@ def from_dict(data: dict): if isinstance(uri_supported, List): for uri in uri_supported: - uri_path = URL(uri).path - if uri_path == _printer_name: + uri_path = URL(uri).path.lstrip("/") + if uri_path == _printer_name.lstrip("/"): _printer_name = "' break else: From 3f94c17f6fd8b382adfb36cd53b4a74ca995c79a Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 18:46:48 -0500 Subject: [PATCH 14/33] Update models.py --- pyipp/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyipp/models.py b/pyipp/models.py index 510a5aad8..c471a0896 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -42,7 +42,7 @@ def from_dict(data: dict): for uri in uri_supported: uri_path = URL(uri).path.lstrip("/") if uri_path == _printer_name.lstrip("/"): - _printer_name = "' + _printer_name = "" break else: uri_supported = [] From 6390ed025acdd4124ede0e1d1c0d02b443008376 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 18:50:38 -0500 Subject: [PATCH 15/33] Update models.py --- pyipp/models.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyipp/models.py b/pyipp/models.py index c471a0896..18238e17b 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -40,10 +40,10 @@ def from_dict(data: dict): if isinstance(uri_supported, List): for uri in uri_supported: - uri_path = URL(uri).path.lstrip("/") - if uri_path == _printer_name.lstrip("/"): - _printer_name = "" - break + uri_path = URL(uri).path.lstrip("/") + if uri_path == _printer_name.lstrip("/"): + _printer_name = "" + break else: uri_supported = [] From 22bcbc734027541b2a8ef5e16c7f2ad79476893e Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 18:54:50 -0500 Subject: [PATCH 16/33] Update test_models.py --- tests/test_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_models.py b/tests/test_models.py index bb56d13e6..ef53edba6 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -19,7 +19,7 @@ async def test_info(): assert info.name == "EPSON XP-6000 Series" assert info.manufacturer == "EPSON" assert info.model == "XP-6000 Series" - assert info.printer_name == "" + assert info.printer_name == "ipp/print" assert info.printer_info == "EPSON XP-6000 Series" assert info.printer_uri_supported == [ "ipps://epson761251.local.:631/ipp/print", From f46afd1f306c7c3cee86b57873f25c99c1c1776f Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 18:58:09 -0500 Subject: [PATCH 17/33] Update models.py --- pyipp/models.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/pyipp/models.py b/pyipp/models.py index 18238e17b..daf071d78 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -44,8 +44,6 @@ def from_dict(data: dict): if uri_path == _printer_name.lstrip("/"): _printer_name = "" break - else: - uri_supported = [] if len(_printer_name) > 0: name = _printer_name From fa55ec6d62229cb722f37bf8d236ea93f40a7beb Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 19:02:15 -0500 Subject: [PATCH 18/33] Update test_models.py --- tests/test_models.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/test_models.py b/tests/test_models.py index ef53edba6..f74f48b9e 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -30,6 +30,7 @@ async def test_info(): assert info.version == "20.44.NU20K2" assert info.uptime == 4119 + # custom printer name data["printer-name"] = "Printy" info = models.Info.from_dict(data) @@ -37,6 +38,7 @@ async def test_info(): assert info.name == "Printy" assert info.printer_name == "Printy" + # no name, no make/model data["printer-name"] = "" data["printer-make-and-model"] = "" info = models.Info.from_dict(data) @@ -44,6 +46,20 @@ async def test_info(): assert info assert info.name == "IPP Printer" assert info.printer_name == "" + assert info.manufacturer == "EPSON" + assert info.model == "XP-6000 Series" + + # no name, no make/model, no device id + data["printer-name"] = "" + data["printer-make-and-model"] = "" + data["printer-device-id"] = "" + info = models.Info.from_dict(data) + + assert info + assert info.name == "IPP Printer" + assert info.printer_name == "" + assert info.manufacturer == "Unknown" + assert info.model == "Unknown" @pytest.mark.asyncio From b31d7b96ffce2fbfcfb3c9a833b879f4a44a6547 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 19:04:21 -0500 Subject: [PATCH 19/33] Update test_models.py --- tests/test_models.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_models.py b/tests/test_models.py index f74f48b9e..fc67e4b9a 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -38,18 +38,18 @@ async def test_info(): assert info.name == "Printy" assert info.printer_name == "Printy" - # no name, no make/model - data["printer-name"] = "" + # no custom name, no make/model + data["printer-name"] = "ipp/print" data["printer-make-and-model"] = "" info = models.Info.from_dict(data) assert info assert info.name == "IPP Printer" - assert info.printer_name == "" + assert info.printer_name == "ipp/print" assert info.manufacturer == "EPSON" assert info.model == "XP-6000 Series" - # no name, no make/model, no device id + # no custom name, no make/model, no device id data["printer-name"] = "" data["printer-make-and-model"] = "" data["printer-device-id"] = "" From f2518812de33e5ce06825fe89c00b79c7deba5e3 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 19:06:50 -0500 Subject: [PATCH 20/33] Update test_models.py --- tests/test_models.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tests/test_models.py b/tests/test_models.py index fc67e4b9a..42bef29d4 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -30,6 +30,14 @@ async def test_info(): assert info.version == "20.44.NU20K2" assert info.uptime == 4119 + # printer name is URI path + data["printer-name"] = "ipp/print" + info = models.Info.from_dict(data) + + assert info + assert info.name == "EPSON XP-6000 Series" + assert info.printer_name == "ipp/print" + # custom printer name data["printer-name"] = "Printy" info = models.Info.from_dict(data) @@ -39,13 +47,13 @@ async def test_info(): assert info.printer_name == "Printy" # no custom name, no make/model - data["printer-name"] = "ipp/print" + data["printer-name"] = "" data["printer-make-and-model"] = "" info = models.Info.from_dict(data) assert info assert info.name == "IPP Printer" - assert info.printer_name == "ipp/print" + assert info.printer_name == "" assert info.manufacturer == "EPSON" assert info.model == "XP-6000 Series" From fd8bdd817bc0d98f47ec24e50f94e8778a9fde68 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 19:16:02 -0500 Subject: [PATCH 21/33] Update models.py --- pyipp/models.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/pyipp/models.py b/pyipp/models.py index daf071d78..497858557 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -30,14 +30,12 @@ class Info: def from_dict(data: dict): """Return Info object from IPP response.""" name = "" - printer_name = data.get("printer-name", "") + _printer_name = printer_name = data.get("printer-name", "") make_model = data.get("printer-make-and-model", "") device_id = data.get("printer-device-id", "") uri_supported = data.get("printer-uri-supported", []) uuid = data.get("printer-uuid") - _printer_name = printer_name - if isinstance(uri_supported, List): for uri in uri_supported: uri_path = URL(uri).path.lstrip("/") @@ -45,10 +43,10 @@ def from_dict(data: dict): _printer_name = "" break - if len(_printer_name) > 0: - name = _printer_name - elif len(make_model) > 0: + if len(make_model) > 0: name = make_model + elif len(_printer_name) > 0: + name = _printer_name else: name = "IPP Printer" From cddd779db4af73a9a2b59b33dea0bc5ee79d7bf7 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 19:29:21 -0500 Subject: [PATCH 22/33] Update test_models.py --- tests/test_models.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/tests/test_models.py b/tests/test_models.py index 42bef29d4..9031b6d77 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -30,25 +30,31 @@ async def test_info(): assert info.version == "20.44.NU20K2" assert info.uptime == 4119 - # printer name is URI path + # no make/model, URI name, device id + data["printer-make-and-model"] = "" data["printer-name"] = "ipp/print" info = models.Info.from_dict(data) assert info - assert info.name == "EPSON XP-6000 Series" + assert info.name == "IPP Printer" assert info.printer_name == "ipp/print" + assert info.manufacturer == "EPSON" + assert info.model == "XP-6000 Series" - # custom printer name + # no make/model, name, device id + data["printer-make-and-model"] = "" data["printer-name"] = "Printy" info = models.Info.from_dict(data) assert info assert info.name == "Printy" assert info.printer_name == "Printy" + assert info.manufacturer == "EPSON" + assert info.model == "XP-6000 Series" - # no custom name, no make/model - data["printer-name"] = "" + # no make/model, no name, device id data["printer-make-and-model"] = "" + data["printer-name"] = "" info = models.Info.from_dict(data) assert info @@ -57,9 +63,9 @@ async def test_info(): assert info.manufacturer == "EPSON" assert info.model == "XP-6000 Series" - # no custom name, no make/model, no device id - data["printer-name"] = "" + # no make/model, no name, no device id data["printer-make-and-model"] = "" + data["printer-name"] = "" data["printer-device-id"] = "" info = models.Info.from_dict(data) From 066617952deae9d1cc5eaccb991b579829aa76ff Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 19:52:25 -0500 Subject: [PATCH 23/33] Update models.py --- pyipp/models.py | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/pyipp/models.py b/pyipp/models.py index 497858557..497d2fd81 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -43,13 +43,6 @@ def from_dict(data: dict): _printer_name = "" break - if len(make_model) > 0: - name = make_model - elif len(_printer_name) > 0: - name = _printer_name - else: - name = "IPP Printer" - make, model = parse_make_and_model(make_model) cmd = "Unknown" @@ -57,11 +50,20 @@ def from_dict(data: dict): parsed_device_id = parse_ieee1284_device_id(device_id) - if parsed_device_id.get("MFG") is not None: + assumed_name = [] + if ( + parsed_device_id.get("MFG") is not None and + len(parsed_device_id["MFG"]) > 0 + ): make = parsed_device_id["MFG"] + assumed_name.append(make) - if parsed_device_id.get("MDL") is not None: + if ( + parsed_device_id.get("MDL") is not None and + len(parsed_device_id["MDL"]) > 0 + ): model = parsed_device_id["MDL"] + assumed_name.append(model) if parsed_device_id.get("CMD") is not None: cmd = parsed_device_id["CMD"] @@ -69,6 +71,15 @@ def from_dict(data: dict): if parsed_device_id.get("SN") is not None: serial = parsed_device_id["SN"] + if len(make_model) > 0: + name = make_model + elsif len(assumed_name) > 0: + name = assumed_name.join(" ") + elif len(_printer_name) > 0: + name = _printer_name + else: + name = "IPP Printer" + return Info( command_set=cmd, location=data.get("printer-location", ""), From d03ebf1ed452ff3cc51623137aa42f398ab9dbf7 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 19:59:20 -0500 Subject: [PATCH 24/33] Update test_models.py --- tests/test_models.py | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/tests/test_models.py b/tests/test_models.py index 9031b6d77..1341a7d0a 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -30,43 +30,44 @@ async def test_info(): assert info.version == "20.44.NU20K2" assert info.uptime == 4119 - # no make/model, URI name, device id + # no make/model, device id data["printer-make-and-model"] = "" - data["printer-name"] = "ipp/print" info = models.Info.from_dict(data) assert info - assert info.name == "IPP Printer" + assert info.name == "EPSON XP-6000 Series" assert info.printer_name == "ipp/print" assert info.manufacturer == "EPSON" assert info.model == "XP-6000 Series" - # no make/model, name, device id + # no make/model, no device id, URI name + data["printer-device-id"] = "" data["printer-make-and-model"] = "" - data["printer-name"] = "Printy" + data["printer-name"] = "ipp/print" info = models.Info.from_dict(data) assert info - assert info.name == "Printy" - assert info.printer_name == "Printy" - assert info.manufacturer == "EPSON" - assert info.model == "XP-6000 Series" + assert info.name == "IPP Printer" + assert info.printer_name == "ipp/print" + assert info.manufacturer == "Unknown" + assert info.model == "Unknown" - # no make/model, no name, device id + # no make/model, no device id, name + data["printer-device-id"] = "" data["printer-make-and-model"] = "" - data["printer-name"] = "" + data["printer-name"] = "Printy" info = models.Info.from_dict(data) assert info - assert info.name == "IPP Printer" - assert info.printer_name == "" - assert info.manufacturer == "EPSON" - assert info.model == "XP-6000 Series" + assert info.name == "Printy" + assert info.printer_name == "Printy" + assert info.manufacturer == "Unknown" + assert info.model == "Unknown" - # no make/model, no name, no device id + # no make/model, no device id, no name + data["printer-device-id"] = "" data["printer-make-and-model"] = "" data["printer-name"] = "" - data["printer-device-id"] = "" info = models.Info.from_dict(data) assert info From 1db80920a0234dd6732ad02eef4b4e773eb8e661 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 21:11:02 -0500 Subject: [PATCH 25/33] Update models.py --- pyipp/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyipp/models.py b/pyipp/models.py index 497d2fd81..9e72c8a36 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -73,7 +73,7 @@ def from_dict(data: dict): if len(make_model) > 0: name = make_model - elsif len(assumed_name) > 0: + elif len(assumed_name) > 0: name = assumed_name.join(" ") elif len(_printer_name) > 0: name = _printer_name From 168e3c34852678c150640e0a6ee1a60718fac666 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 21:24:44 -0500 Subject: [PATCH 26/33] Update models.py --- pyipp/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyipp/models.py b/pyipp/models.py index 9e72c8a36..882561684 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -74,7 +74,7 @@ def from_dict(data: dict): if len(make_model) > 0: name = make_model elif len(assumed_name) > 0: - name = assumed_name.join(" ") + name = " ".join(assumed_name) elif len(_printer_name) > 0: name = _printer_name else: From 4517318a408766a50c979643afe4ccae72e3702a Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 21:27:06 -0500 Subject: [PATCH 27/33] Update models.py --- pyipp/models.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/pyipp/models.py b/pyipp/models.py index 882561684..907f24de1 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -51,24 +51,18 @@ def from_dict(data: dict): parsed_device_id = parse_ieee1284_device_id(device_id) assumed_name = [] - if ( - parsed_device_id.get("MFG") is not None and - len(parsed_device_id["MFG"]) > 0 - ): + if parsed_device_id.get("MFG") is not None and len(parsed_device_id["MFG"]) > 0: make = parsed_device_id["MFG"] assumed_name.append(make) - if ( - parsed_device_id.get("MDL") is not None and - len(parsed_device_id["MDL"]) > 0 - ): + if parsed_device_id.get("MDL") is not None and len(parsed_device_id["MDL"]) > 0: model = parsed_device_id["MDL"] assumed_name.append(model) - if parsed_device_id.get("CMD") is not None: + if parsed_device_id.get("CMD") is not None and len(parsed_device_id["CMD"]) > 0: cmd = parsed_device_id["CMD"] - if parsed_device_id.get("SN") is not None: + if parsed_device_id.get("SN") is not None and len(parsed_device_id["SN"]) > 0: serial = parsed_device_id["SN"] if len(make_model) > 0: From 97dcf761631bf355e25e15c0b4808c71c862875f Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 21:45:14 -0500 Subject: [PATCH 28/33] Update models.py --- pyipp/models.py | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/pyipp/models.py b/pyipp/models.py index 907f24de1..4c047682b 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -29,7 +29,10 @@ class Info: @staticmethod def from_dict(data: dict): """Return Info object from IPP response.""" - name = "" + cmd = "Unknown" + name = "IPP Printer" + name_parts = [] + serial = None _printer_name = printer_name = data.get("printer-name", "") make_model = data.get("printer-make-and-model", "") device_id = data.get("printer-device-id", "") @@ -44,20 +47,15 @@ def from_dict(data: dict): break make, model = parse_make_and_model(make_model) - - cmd = "Unknown" - serial = None - parsed_device_id = parse_ieee1284_device_id(device_id) - - assumed_name = [] + if parsed_device_id.get("MFG") is not None and len(parsed_device_id["MFG"]) > 0: make = parsed_device_id["MFG"] - assumed_name.append(make) + name_parts.append(make) if parsed_device_id.get("MDL") is not None and len(parsed_device_id["MDL"]) > 0: model = parsed_device_id["MDL"] - assumed_name.append(model) + name_parts.append(model) if parsed_device_id.get("CMD") is not None and len(parsed_device_id["CMD"]) > 0: cmd = parsed_device_id["CMD"] @@ -67,12 +65,10 @@ def from_dict(data: dict): if len(make_model) > 0: name = make_model - elif len(assumed_name) > 0: - name = " ".join(assumed_name) + elif len(name_parts) == 2: + name = " ".join(name_parts) elif len(_printer_name) > 0: name = _printer_name - else: - name = "IPP Printer" return Info( command_set=cmd, @@ -85,7 +81,7 @@ def from_dict(data: dict): printer_uri_supported=uri_supported, serial=serial, uptime=data.get("printer-up-time", 0), - uuid=uuid[9:] if uuid else None, + uuid=uuid[9:] if uuid else None, # strip urn:uuid: from uuid version=data.get("printer-firmware-string-version", None), ) From 7e966c33cc707f25a15aeac60d076e535e49151b Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 21:48:07 -0500 Subject: [PATCH 29/33] Update models.py --- pyipp/models.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pyipp/models.py b/pyipp/models.py index 4c047682b..e6975cfc2 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -13,15 +13,15 @@ class Info: """Object holding information from IPP.""" - command_set: str + command_set: Optional[str] = None location: str name: str - manufacturer: Optional[str] - model: Optional[str] + manufacturer: Optional[str] = None + model: Optional[str] = None printer_name: str - printer_info: str + printer_info: Optional[str] = None printer_uri_supported: list - serial: Optional[str] + serial: Optional[str] = None uptime: int uuid: str version: str @@ -29,7 +29,7 @@ class Info: @staticmethod def from_dict(data: dict): """Return Info object from IPP response.""" - cmd = "Unknown" + cmd = None name = "IPP Printer" name_parts = [] serial = None From 921d0a9c021e9f47f9abf3739e8b9d1ceb917a80 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 21:51:08 -0500 Subject: [PATCH 30/33] Update ipp.py --- pyipp/ipp.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/pyipp/ipp.py b/pyipp/ipp.py index a7932054d..600221e43 100644 --- a/pyipp/ipp.py +++ b/pyipp/ipp.py @@ -100,9 +100,6 @@ async def _request( self._session = aiohttp.ClientSession() self._close_session = True - if data is None: - data = {} - if isinstance(data, dict): data = encode_dict(data) From 75c2e762064c445823db0a52118c66488470d62c Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 21:58:45 -0500 Subject: [PATCH 31/33] Update models.py --- pyipp/models.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/pyipp/models.py b/pyipp/models.py index e6975cfc2..f831d98d0 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -12,19 +12,18 @@ @dataclass(frozen=True) class Info: """Object holding information from IPP.""" - - command_set: Optional[str] = None - location: str name: str + printer_name: str + printer_uri_supported: list + uptime: int + command_set: Optional[str] = None + location: Optional[str] = None manufacturer: Optional[str] = None model: Optional[str] = None - printer_name: str printer_info: Optional[str] = None - printer_uri_supported: list serial: Optional[str] = None - uptime: int - uuid: str - version: str + uuid: Optional[str] + version: Optional[str] = None @staticmethod def from_dict(data: dict): From d3fde3c36b77fa864b7d4ac92c033bbe47bbf86d Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 22:00:56 -0500 Subject: [PATCH 32/33] Update models.py --- pyipp/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyipp/models.py b/pyipp/models.py index f831d98d0..533b81792 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -22,7 +22,7 @@ class Info: model: Optional[str] = None printer_info: Optional[str] = None serial: Optional[str] = None - uuid: Optional[str] + uuid: Optional[str] = None version: Optional[str] = None @staticmethod From 7862bcf808faeec6c5239a02d35fc5fa97ec8e7d Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 12 Apr 2020 22:03:06 -0500 Subject: [PATCH 33/33] Update models.py --- pyipp/models.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyipp/models.py b/pyipp/models.py index 533b81792..407811b68 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -12,6 +12,7 @@ @dataclass(frozen=True) class Info: """Object holding information from IPP.""" + name: str printer_name: str printer_uri_supported: list @@ -47,7 +48,7 @@ def from_dict(data: dict): make, model = parse_make_and_model(make_model) parsed_device_id = parse_ieee1284_device_id(device_id) - + if parsed_device_id.get("MFG") is not None and len(parsed_device_id["MFG"]) > 0: make = parsed_device_id["MFG"] name_parts.append(make)