@@ -58,6 +58,30 @@ def unwrap(msg: message.Message) -> celtypes.Value:
5858}
5959
6060
61+ class MessageType (celtypes .MapType ):
62+ msg : message .Message
63+ desc : descriptor .Descriptor
64+
65+ def __init__ (self , msg : message .Message ):
66+ super ().__init__ ()
67+ self .msg = msg
68+ self .desc = msg .DESCRIPTOR
69+ field : descriptor .FieldDescriptor
70+ for field in self .desc .fields :
71+ if field .containing_oneof is not None and not self .msg .HasField (field .name ):
72+ continue
73+ self [field .name ] = field_to_cel (self .msg , field )
74+
75+ def __getitem__ (self , name ):
76+ field = self .desc .fields_by_name [name ]
77+ if field .has_presence and not self .msg .HasField (name ):
78+ if in_has ():
79+ raise KeyError ()
80+ else :
81+ return _zero_value (field )
82+ return super ().__getitem__ (name )
83+
84+
6185def _msg_to_cel (msg : message .Message ) -> celtypes .Value :
6286 ctor = _MSG_TYPE_URL_TO_CTOR .get (msg .DESCRIPTOR .full_name )
6387 if ctor is not None :
@@ -226,30 +250,6 @@ def _set_path_element_map_key(
226250 raise CompilationError (msg )
227251
228252
229- class MessageType (celtypes .MapType ):
230- msg : message .Message
231- desc : descriptor .Descriptor
232-
233- def __init__ (self , msg : message .Message ):
234- super ().__init__ ()
235- self .msg = msg
236- self .desc = msg .DESCRIPTOR
237- field : descriptor .FieldDescriptor
238- for field in self .desc .fields :
239- if field .containing_oneof is not None and not self .msg .HasField (field .name ):
240- continue
241- self [field .name ] = field_to_cel (self .msg , field )
242-
243- def __getitem__ (self , name ):
244- field = self .desc .fields_by_name [name ]
245- if field .has_presence and not self .msg .HasField (name ):
246- if in_has ():
247- raise KeyError ()
248- else :
249- return _zero_value (field )
250- return super ().__getitem__ (name )
251-
252-
253253class Violation :
254254 """A singular rule violation."""
255255
0 commit comments