Code Duplication    Length = 23-26 lines in 2 locations

opcua/ua/uaprotocol_hand.py 2 locations

@@ 162-187 (lines=26) @@
159
        return ack
160
161
162
class AsymmetricAlgorithmHeader(uatypes.FrozenClass):
163
164
    def __init__(self):
165
        self.SecurityPolicyURI = "http://opcfoundation.org/UA/SecurityPolicy#None"
166
        self.SenderCertificate = None
167
        self.ReceiverCertificateThumbPrint = None
168
        self._freeze = True
169
170
    def to_binary(self):
171
        b = []
172
        b.append(uatypes.pack_string(self.SecurityPolicyURI))
173
        b.append(uatypes.pack_string(self.SenderCertificate))
174
        b.append(uatypes.pack_string(self.ReceiverCertificateThumbPrint))
175
        return b"".join(b)
176
177
    @staticmethod
178
    def from_binary(data):
179
        hdr = AsymmetricAlgorithmHeader()
180
        hdr.SecurityPolicyURI = uatypes.unpack_string(data)
181
        hdr.SenderCertificate = uatypes.unpack_bytes(data)
182
        hdr.ReceiverCertificateThumbPrint = uatypes.unpack_bytes(data)
183
        return hdr
184
185
    def __str__(self):
186
        return "{}(SecurityPolicy:{}, certificatesize:{}, receiverCertificatesize:{} )".format(self.__class__.__name__, self.SecurityPolicyURI, len(self.SenderCertificate), len(self.ReceiverCertificateThumbPrint))
187
    __repr__ = __str__
188
189
190
class SymmetricAlgorithmHeader(uatypes.FrozenClass):
@@ 110-132 (lines=23) @@
107
    __repr__ = __str__
108
109
110
class ErrorMessage(uatypes.FrozenClass):
111
112
    def __init__(self):
113
        self.Error = uatypes.StatusCode()
114
        self.Reason = ""
115
        self._freeze = True
116
117
    def to_binary(self):
118
        b = []
119
        b.append(self.Error.to_binary())
120
        b.append(uatypes.pack_string(self.Reason))
121
        return b"".join(b)
122
123
    @staticmethod
124
    def from_binary(data):
125
        ack = ErrorMessage()
126
        ack.Error = uatypes.StatusCode.from_binary(data)
127
        ack.Reason = uatypes.unpack_string(data)
128
        return ack
129
130
    def __str__(self):
131
        return "MessageAbort(error:{}, reason:{})".format(self.Error, self.Reason)
132
    __repr__ = __str__
133
134
135
class Acknowledge(uatypes.FrozenClass):