diff --git a/pyipp/models.py b/pyipp/models.py index 8bdf30d7c..7b5a601cb 100644 --- a/pyipp/models.py +++ b/pyipp/models.py @@ -141,51 +141,22 @@ class Printer: state: State uris: List[Uri] - @staticmethod - def merge_uri_data(data): - """Return URI data from IPP response.""" - uris = [] - ulen = 0 - - _uris = [] - auth = [] - security = [] - - if isinstance(data.get("printer-uri-supported"), List): - _uris = data["printer-uri-supported"] - ulen = len(_uris) - - for k in range(ulen): - auth.append(None) - security.append(None) - - if isinstance(data.get("uri-authentication-supported"), List): - for k, v in enumerate(data["uri-authentication-supported"]): - if k < ulen: - auth[k] = v - - if isinstance(data.get("uri-security-supported"), List): - for k, v in enumerate(data["uri-security-supported"]): - if k < ulen: - security[k] = v - - if isinstance(_uris, List) and ulen > 0: - uris = [ - Uri( - uri=_uris[uri_id], - authentication=auth[uri_id], - security=security[uri_id], - ) - for uri_id in range(ulen) - ] - - return uris - @staticmethod def from_dict(data): """Return Printer object from IPP response.""" + return Printer( + info=Info.from_dict(data), + markers=Printer.merge_marker_data(data), + state=State.from_dict(data), + uris=Printer.merge_uri_data(data), + ) + + @staticmethod + def merge_marker_data(data): + """Return Marker data from IPP response.""" markers = [] mlen = 0 + marker_colors = [] marker_levels = [] marker_types = [] @@ -244,9 +215,44 @@ def from_dict(data): ] markers.sort(key=lambda x: x.name) - return Printer( - info=Info.from_dict(data), - markers=markers, - state=State.from_dict(data), - uris=Printer.merge_uri_data(data), - ) + return markers + + @staticmethod + def merge_uri_data(data): + """Return URI data from IPP response.""" + uris = [] + ulen = 0 + + _uris = [] + auth = [] + security = [] + + if isinstance(data.get("printer-uri-supported"), List): + _uris = data["printer-uri-supported"] + ulen = len(_uris) + + for k in range(ulen): + auth.append(None) + security.append(None) + + if isinstance(data.get("uri-authentication-supported"), List): + for k, v in enumerate(data["uri-authentication-supported"]): + if k < ulen: + auth[k] = v + + if isinstance(data.get("uri-security-supported"), List): + for k, v in enumerate(data["uri-security-supported"]): + if k < ulen: + security[k] = v + + if isinstance(_uris, List) and ulen > 0: + uris = [ + Uri( + uri=_uris[uri_id], + authentication=auth[uri_id], + security=security[uri_id], + ) + for uri_id in range(ulen) + ] + + return uris