30 lines
1.2 KiB
Python
30 lines
1.2 KiB
Python
from typing import Any
|
|
from google.protobuf.message import Message
|
|
|
|
class MessageHelper:
|
|
@staticmethod
|
|
def get_field(message: Message, field_name: str):
|
|
"""
|
|
Retrieves the value of a field from a Protobuf message.
|
|
|
|
:param message: A Protobuf Message object.
|
|
:param field_name: The name of the field to retrieve.
|
|
:return: The value of the specified field.
|
|
:raises ValueError: If the input parameters are invalid.
|
|
"""
|
|
if not message or not field_name or not isinstance(field_name, str) or not field_name.strip():
|
|
raise ValueError("Some parameter is missing")
|
|
|
|
descriptor = message.DESCRIPTOR
|
|
field_descriptor = descriptor.fields[field_name]
|
|
if not field_descriptor:
|
|
raise ValueError(f"Field '{field_name}' not found in message descriptor")
|
|
|
|
return getattr(field_descriptor, field_name)
|
|
|
|
@staticmethod
|
|
def set_field(message: Message, field_name: str, value: Any) -> None:
|
|
if message is None or not field_name.strip() or value is None:
|
|
raise ValueError("Some parameter is missing")
|
|
|
|
setattr(message, message.DESCRIPTOR.fields[field_name], value)
|