Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/google/protobuf/unknown_fields.py: 7%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

54 statements  

1# Protocol Buffers - Google's data interchange format 

2# Copyright 2008 Google Inc. All rights reserved. 

3# 

4# Use of this source code is governed by a BSD-style 

5# license that can be found in the LICENSE file or at 

6# https://developers.google.com/open-source/licenses/bsd 

7"""Contains Unknown Fields APIs. 

8 

9Simple usage example: 

10 unknown_field_set = UnknownFieldSet(message) 

11 for unknown_field in unknown_field_set: 

12 wire_type = unknown_field.wire_type 

13 field_number = unknown_field.field_number 

14 data = unknown_field.data 

15""" 

16 

17from google.protobuf.internal import api_implementation 

18 

19if api_implementation._c_module is not None: # pylint: disable=protected-access 

20 UnknownFieldSet = api_implementation._c_module.UnknownFieldSet # pylint: disable=protected-access 

21else: 

22 from google.protobuf.internal import decoder # pylint: disable=g-import-not-at-top 

23 from google.protobuf.internal import wire_format # pylint: disable=g-import-not-at-top 

24 

25 class UnknownField: 

26 """A parsed unknown field.""" 

27 

28 # Disallows assignment to other attributes. 

29 __slots__ = ['_field_number', '_wire_type', '_data'] 

30 

31 def __init__(self, field_number, wire_type, data): 

32 self._field_number = field_number 

33 self._wire_type = wire_type 

34 self._data = data 

35 return 

36 

37 @property 

38 def field_number(self): 

39 return self._field_number 

40 

41 @property 

42 def wire_type(self): 

43 return self._wire_type 

44 

45 @property 

46 def data(self): 

47 return self._data 

48 

49 class UnknownFieldSet: 

50 """UnknownField container.""" 

51 

52 # Disallows assignment to other attributes. 

53 __slots__ = ['_values'] 

54 

55 def __init__(self, msg): 

56 

57 def InternalAdd(field_number, wire_type, data): 

58 unknown_field = UnknownField(field_number, wire_type, data) 

59 self._values.append(unknown_field) 

60 

61 self._values = [] 

62 msg_des = msg.DESCRIPTOR 

63 # pylint: disable=protected-access 

64 unknown_fields = msg._unknown_fields 

65 if msg_des.has_options and msg_des.GetOptions().message_set_wire_format: 

66 local_decoder = decoder.UnknownMessageSetItemDecoder() 

67 for _, buffer in unknown_fields: 

68 field_number, data = local_decoder(memoryview(buffer)) 

69 InternalAdd(field_number, wire_format.WIRETYPE_LENGTH_DELIMITED, data) 

70 else: 

71 for tag_bytes, buffer in unknown_fields: 

72 field_number, wire_type = decoder.DecodeTag(tag_bytes) 

73 if field_number == 0: 

74 raise RuntimeError('Field number 0 is illegal.') 

75 data, _ = decoder._DecodeUnknownField( 

76 memoryview(buffer), 0, len(buffer), field_number, wire_type 

77 ) 

78 InternalAdd(field_number, wire_type, data) 

79 

80 def __getitem__(self, index): 

81 size = len(self._values) 

82 if index < 0: 

83 index += size 

84 if index < 0 or index >= size: 

85 raise IndexError('index %d out of range'.index) 

86 

87 return self._values[index] 

88 

89 def __len__(self): 

90 return len(self._values) 

91 

92 def __iter__(self): 

93 return iter(self._values)