Из API диалоговых потоков я получил протобуф.Даже после прочтения всей документации я понятия не имею, как исследовать объект и извлекать значения (например, строку из него)
Я покажу вам, что я сделал:
(Pdb) dir(parameter)
['ByteSize', 'Clear', 'ClearExtension', 'ClearField', 'CopyFrom', 'DESCRIPTOR', 'DiscardUnknownFields', 'Extensions', 'FieldsEntry', 'FindInitializationErrors', 'FromString', 'HasExtension', 'HasField', 'IsInitialized', 'ListFields', 'MergeFrom', 'MergeFromString', 'ParseFromString', 'RegisterExtension', 'SerializePartialToString', 'SerializeToString', 'SetInParent', 'UnknownFields', 'WhichOneof', '_CheckCalledFromGeneratedFile', '_SetListener', '__class__', '__contains__', '__deepcopy__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__setstate__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', '__unicode__', '_extensions_by_name', '_extensions_by_number', 'fields', 'get_or_create_list', 'get_or_create_struct', 'items', 'keys', 'update', 'values']
(Pdb) parameter.ListFields
<built-in method ListFields of Struct object at 0x7f5e0c17e920>
(Pdb) parameter.ListFields()
[(<google.protobuf.pyext._message.FieldDescriptor object at 0x7f5e0c191a10>, {'endDate': string_value: "2019-07-31T23:59:59+02:00"
, 'startDate': string_value: "2019-07-01T00:00:00+02:00"
})]
(Pdb) parameter.endDate
*** AttributeError: endDate
(Pdb) parameter
fields {
key: "endDate"
value {
string_value: "2019-07-31T23:59:59+02:00"
}
}
fields {
key: "startDate"
value {
string_value: "2019-07-01T00:00:00+02:00"
}
}
(Pdb) parameter.fields
{'endDate': string_value: "2019-07-31T23:59:59+02:00"
, 'startDate': string_value: "2019-07-01T00:00:00+02:00"
}
(Pdb) type(parameter.fields)
<class 'google.protobuf.pyext._message.MessageMapContainer'>
(Pdb) parameter.fields.get('endDate')
string_value: "2019-07-31T23:59:59+02:00"
Моя цель -извлечь startDate
и endDate
.
Может кто-нибудь помочь объяснить, как систематически анализировать такой недокументированный protobuf и извлекать из него значения?