1010)
1111
1212from osi3trace .osi_trace import OSITrace
13+ import google .protobuf .descriptor
1314import google .protobuf .message
1415
1516from importlib import resources as impresources
@@ -125,6 +126,17 @@ def register_issue(
125126 )
126127
127128
129+ if hasattr (google .protobuf .descriptor .FieldDescriptor , "is_repeated" ):
130+
131+ def field_descriptor_is_repeated (field_descriptor ) -> bool :
132+ return bool (field_descriptor .is_repeated )
133+
134+ else :
135+
136+ def field_descriptor_is_repeated (field_descriptor ) -> bool :
137+ return field_descriptor .label == field_descriptor .LABEL_REPEATED
138+
139+
128140def evaluate_rule_condition (
129141 message : google .protobuf .message .Message , field_name : str , rule : dict
130142) -> bool :
@@ -134,7 +146,7 @@ def evaluate_rule_condition(
134146 f"Field '{ field_name } ' not found in message '{ message .DESCRIPTOR .full_name } '. Rule evaluation skipped."
135147 )
136148 return False
137- if field_descriptor . is_repeated :
149+ if field_descriptor_is_repeated ( field_descriptor ) :
138150 values = getattr (message , field_name )
139151 else :
140152 values = [getattr (message , field_name )] if message .HasField (field_name ) else []
@@ -198,7 +210,7 @@ def check_message_against_rules(
198210 f"Field '{ field_name } ' not found in message '{ message .DESCRIPTOR .full_name } '. Skipping rules check."
199211 )
200212 continue
201- if field_descriptor . is_repeated :
213+ if field_descriptor_is_repeated ( field_descriptor ) :
202214 has_field = True
203215 values = getattr (message , field_name )
204216 else :
@@ -264,7 +276,7 @@ def check_message_against_rules(
264276
265277 # Process other rules for each set field
266278 for field , value in message .ListFields ():
267- values = value if field . is_repeated else [value ]
279+ values = value if field_descriptor_is_repeated ( field ) else [value ]
268280 for rule_uid , rule in field_rules .get (field .name , []):
269281 if "is_greater_than" in rule and not all (
270282 [value > rule ["is_greater_than" ] for value in values ]
0 commit comments