Code Duplication    Length = 61-74 lines in 2 locations

opcua/ua/uaprotocol_auto.py 1 location

@@ 297-370 (lines=74) @@
294
    ReferenceType = 1371236
295
    View = 1335532
296
297
298
class AttributeWriteMask(IntEnum):
299
    '''
300
    Define bits used to indicate which attributes are writable.
301
302
    :ivar None_:
303
    :vartype None_: 0
304
    :ivar AccessLevel:
305
    :vartype AccessLevel: 1
306
    :ivar ArrayDimensions:
307
    :vartype ArrayDimensions: 2
308
    :ivar BrowseName:
309
    :vartype BrowseName: 4
310
    :ivar ContainsNoLoops:
311
    :vartype ContainsNoLoops: 8
312
    :ivar DataType:
313
    :vartype DataType: 16
314
    :ivar Description:
315
    :vartype Description: 32
316
    :ivar DisplayName:
317
    :vartype DisplayName: 64
318
    :ivar EventNotifier:
319
    :vartype EventNotifier: 128
320
    :ivar Executable:
321
    :vartype Executable: 256
322
    :ivar Historizing:
323
    :vartype Historizing: 512
324
    :ivar InverseName:
325
    :vartype InverseName: 1024
326
    :ivar IsAbstract:
327
    :vartype IsAbstract: 2048
328
    :ivar MinimumSamplingInterval:
329
    :vartype MinimumSamplingInterval: 4096
330
    :ivar NodeClass:
331
    :vartype NodeClass: 8192
332
    :ivar NodeId:
333
    :vartype NodeId: 16384
334
    :ivar Symmetric:
335
    :vartype Symmetric: 32768
336
    :ivar UserAccessLevel:
337
    :vartype UserAccessLevel: 65536
338
    :ivar UserExecutable:
339
    :vartype UserExecutable: 131072
340
    :ivar UserWriteMask:
341
    :vartype UserWriteMask: 262144
342
    :ivar ValueRank:
343
    :vartype ValueRank: 524288
344
    :ivar WriteMask:
345
    :vartype WriteMask: 1048576
346
    :ivar ValueForVariableType:
347
    :vartype ValueForVariableType: 2097152
348
    '''
349
    None_ = 0
350
    AccessLevel = 1
351
    ArrayDimensions = 2
352
    BrowseName = 4
353
    ContainsNoLoops = 8
354
    DataType = 16
355
    Description = 32
356
    DisplayName = 64
357
    EventNotifier = 128
358
    Executable = 256
359
    Historizing = 512
360
    InverseName = 1024
361
    IsAbstract = 2048
362
    MinimumSamplingInterval = 4096
363
    NodeClass = 8192
364
    NodeId = 16384
365
    Symmetric = 32768
366
    UserAccessLevel = 65536
367
    UserExecutable = 131072
368
    UserWriteMask = 262144
369
    ValueRank = 524288
370
    WriteMask = 1048576
371
    ValueForVariableType = 2097152
372
373

opcua/ua/uatypes.py 1 location

@@ 805-865 (lines=61) @@
802
    def __str__(self):
803
        return "Variant(val:{!s},type:{})".format(self.Value, self.VariantType)
804
    __repr__ = __str__
805
806
    def to_binary(self):
807
        b = []
808
        encoding = self.VariantType.value & 0b111111
809
        if type(self.Value) in (list, tuple):
810
            if self.Dimensions is not None:
811
                encoding = uabin.set_bit(encoding, 6)
812
            encoding = uabin.set_bit(encoding, 7)
813
            b.append(uabin.Primitives.UInt8.pack(encoding))
814
            b.append(uabin.pack_uatype_array(self.VariantType, flatten(self.Value)))
815
            if self.Dimensions is not None:
816
                b.append(uabin.pack_uatype_array(VariantType.Int32, self.Dimensions))
817
        else:
818
            b.append(uabin.Primitives.UInt8.pack(encoding))
819
            b.append(uabin.pack_uatype(self.VariantType, self.Value))
820
821
        return b"".join(b)
822
823
    @staticmethod
824
    def from_binary(data):
825
        dimensions = None
826
        encoding = ord(data.read(1))
827
        int_type = encoding & 0b00111111
828
        vtype = DataType_to_VariantType(int_type)
829
        if vtype == VariantType.Null:
830
            return Variant(None, vtype, encoding)
831
        if uabin.test_bit(encoding, 7):
832
            value = uabin.unpack_uatype_array(vtype, data)
833
        else:
834
            value = uabin.unpack_uatype(vtype, data)
835
        if uabin.test_bit(encoding, 6):
836
            dimensions = uabin.unpack_uatype_array(VariantType.Int32, data)
837
            value = reshape(value, dimensions)
838
839
        return Variant(value, vtype, dimensions)
840
841
842
def reshape(flat, dims):
843
    subdims = dims[1:]
844
    subsize = 1
845
    for i in subdims:
846
        if i == 0:
847
            i = 1
848
        subsize *= i
849
    while dims[0] * subsize > len(flat):
850
        flat.append([])
851
    if not subdims or subdims == [0]:
852
        return flat
853
    return [reshape(flat[i: i + subsize], subdims) for i in range(0, len(flat), subsize)]
854
855
856
def _split_list(l, n):
857
    n = max(1, n)
858
    return [l[i:i + n] for i in range(0, len(l), n)]
859
860
861
def flatten_and_get_shape(mylist):
862
    dims = []
863
    dims.append(len(mylist))
864
    while isinstance(mylist[0], (list, tuple)):
865
        dims.append(len(mylist[0]))
866
        mylist = [item for sublist in mylist for item in sublist]
867
        if len(mylist) == 0:
868
            break