Skip to content

protobuf.wkt

Protobuf Well-Known types.

Any

Any(*, type_url='', value=b'')

Bases: Message[_AnyFields], AnyMixin

Any contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message.

In its binary encoding, an Any is an ordinary message; but in other wire forms like JSON, it has a special encoding. The format of the type URL is described on the type_url field.

Protobuf APIs provide utilities to interact with Any values:

  • A 'pack' operation accepts a message and constructs a generic Any wrapper around it.
  • An 'unpack' operation reads the content of an Any message, either into an existing message or a new one. Unpack operations must check the type of the value they unpack against the declared type_url.
  • An 'is' operation decides whether an Any contains a message of the given type, i.e. whether it can 'unpack' that type.

The JSON format representation of an Any follows one of these cases:

  • For types without special-cased JSON encodings, the JSON format representation of the Any is the same as that of the message, with an additional @type field which contains the type URL.
  • For types with special-cased JSON encodings (typically called 'well-known' types, listed in https://protobuf.dev/programming-guides/json/#any), the JSON format representation has a key @type which contains the type URL and a key value which contains the JSON-serialized value.

The text format representation of an Any is like a message with one field whose name is the type URL in brackets. For example, an Any containing a foo.Bar message may be written [type.googleapis.com/foo.Bar] { a: 2 }.

message google.protobuf.Any

Attributes:

Name Type Description
type_url str

Identifies the type of the serialized Protobuf message with a URI reference consisting of a prefix ending in a slash and the fully-qualified type name.

Example: type.googleapis.com/google.protobuf.StringValue

This string must contain at least one / character, and the content after the last / must be the fully-qualified name of the type in canonical form, without a leading dot. Do not write a scheme on these URI references so that clients do not attempt to contact them.

The prefix is arbitrary and Protobuf implementations are expected to simply strip off everything up to and including the last / to identify the type. type.googleapis.com/ is a common default prefix that some legacy implementations require. This prefix does not indicate the origin of the type, and URIs containing it are not expected to respond to any requests.

All type URL strings must be legal URI references with the additional restriction (for the text format) that the content of the reference must consist only of alphanumeric characters, percent-encoded escapes, and characters in the following set (not including the outer backticks): /-.~_!$&()*+,;=. Despite our allowing percent encodings, implementations should not unescape them to prevent confusion with existing parsers. For example, type.googleapis.com%2FFoo should be rejected.

In the original design of Any, the possibility of launching a type resolution service at these type URLs was considered but Protobuf never implemented one and considers contacting these URLs to be problematic and a potential security issue. Do not attempt to contact type URLs.

string type_url = 1;
value bytes

Holds a Protobuf serialization of the type described by type_url.

bytes value = 2;

pack classmethod

pack(message)

Creates an Any from a message.

is_type

is_type(type_info)

Returns true if the Any contains the type given by schema or type name.

unpack

unpack(type_info: DescMessage) -> Message | None
unpack(type_info: type[T]) -> T | None

Unpacks the message the Any represents.

Returns:

Type Description
T | None

The unpacked message, or None if the Any is empty or does not contain the type given by schema.

FileDescriptorProto

FileDescriptorProto(
    *,
    name=None,
    package=None,
    dependency=None,
    public_dependency=None,
    weak_dependency=None,
    option_dependency=None,
    message_type=None,
    enum_type=None,
    service=None,
    extension=None,
    options=None,
    source_code_info=None,
    syntax=None,
    edition=None,
)

Bases: Message[_FileDescriptorProtoFields]

Describes a complete .proto file.

message google.protobuf.FileDescriptorProto

Attributes:

Name Type Description
name str

file name, relative to root of source tree

optional string name = 1;
package str

e.g. "foo", "foo.bar", etc.

optional string package = 2;
dependency list[str]

Names of files imported by this file.

repeated string dependency = 3;
public_dependency list[int]

Indexes of the public imported files in the dependency list above.

repeated int32 public_dependency = 10 [packed = false];
weak_dependency list[int]

Indexes of the weak imported files in the dependency list. For Google-internal migration only. Do not use.

repeated int32 weak_dependency = 11 [packed = false];
option_dependency list[str]

Names of files imported by this file purely for the purpose of providing option extensions. These are excluded from the dependency list above.

repeated string option_dependency = 15;
message_type list[DescriptorProto]

All top-level definitions in this file.

repeated google.protobuf.DescriptorProto message_type = 4;
enum_type list[EnumDescriptorProto]
repeated google.protobuf.EnumDescriptorProto enum_type = 5;
service list[ServiceDescriptorProto]
repeated google.protobuf.ServiceDescriptorProto service = 6;
extension list[FieldDescriptorProto]
repeated google.protobuf.FieldDescriptorProto extension = 7;
options FileOptions | None
optional google.protobuf.FileOptions options = 8;
source_code_info SourceCodeInfo | None

This field contains optional information about the original source code. You may safely remove this entire field without harming runtime functionality of the descriptors -- the information is needed only by development tools.

optional google.protobuf.SourceCodeInfo source_code_info = 9;
syntax str

The syntax of the proto file. The supported values are "proto2", "proto3", and "editions".

If edition is present, this value must be "editions". WARNING: This field should only be used by protobuf plugins or special cases like the proto compiler. Other uses are discouraged and developers should rely on the protoreflect APIs for their client language.

optional string syntax = 12;
edition Edition

The edition of the proto file. WARNING: This field should only be used by protobuf plugins or special cases like the proto compiler. Other uses are discouraged and developers should rely on the protoreflect APIs for their client language.

optional google.protobuf.Edition edition = 14;

FileDescriptorSet

FileDescriptorSet(*, file=None)

Bases: Message[_FileDescriptorSetFields], FileDescriptorSetMixin

The protocol compiler can output a FileDescriptorSet containing the .proto files it parses.

message google.protobuf.FileDescriptorSet

Attributes:

Name Type Description
file list[FileDescriptorProto]
repeated google.protobuf.FileDescriptorProto file = 1;

to_registry

to_registry()

Converts the file descriptors in this set into a Registry.

Duration

Duration(*, seconds=0, nanos=0)

Bases: Message[_DurationFields], DurationMixin

A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years.

Examples

Example 1: Compute Duration from two Timestamps in pseudo code.

Timestamp start = ...;
Timestamp end = ...;
Duration duration = ...;

duration.seconds = end.seconds - start.seconds;
duration.nanos = end.nanos - start.nanos;

if (duration.seconds < 0 && duration.nanos > 0) {
  duration.seconds += 1;
  duration.nanos -= 1000000000;
} else if (duration.seconds > 0 && duration.nanos < 0) {
  duration.seconds -= 1;
  duration.nanos += 1000000000;
}

Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.

Timestamp start = ...;
Duration duration = ...;
Timestamp end = ...;

end.seconds = start.seconds + duration.seconds;
end.nanos = start.nanos + duration.nanos;

if (end.nanos < 0) {
  end.seconds -= 1;
  end.nanos += 1000000000;
} else if (end.nanos >= 1000000000) {
  end.seconds += 1;
  end.nanos -= 1000000000;
}

Example 3: Compute Duration from datetime.timedelta in Python.

td = datetime.timedelta(days=3, minutes=10)
duration = Duration()
duration.FromTimedelta(td)

JSON Mapping

In JSON format, the Duration type is encoded as a string rather than an object, where the string ends in the suffix "s" (indicating seconds) and is preceded by the number of seconds, with nanoseconds expressed as fractional seconds. For example, 3 seconds with 0 nanoseconds should be encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should be expressed in JSON format as "3.000000001s", and 3 seconds and 1 microsecond should be expressed in JSON format as "3.000001s".

message google.protobuf.Duration

Attributes:

Name Type Description
seconds int

Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years

int64 seconds = 1;
nanos int

Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 seconds field and a positive or negative nanos field. For durations of one second or more, a non-zero value for the nanos field must be of the same sign as the seconds field. Must be from -999,999,999 to +999,999,999 inclusive.

int32 nanos = 2;

from_nanos classmethod

from_nanos(nanos)

Create from a duration in nanoseconds.

from_timedelta classmethod

from_timedelta(td)

Create from the given timedelta.

to_timedelta

to_timedelta()

Convert to a timedelta.

to_nanos

to_nanos()

Convert to the number of nanoseconds.

Examples:

>>> from protobuf.wkt import Duration
>>> Duration(nanos=1_000).to_nanos()
1000
>>> Duration(seconds=10, nanos=100).to_nanos()
10000000100

to_seconds

to_seconds()

Convert to a number of seconds.

Parts of a second are expressed as fractional values.

Examples:

>>> from protobuf.wkt import Duration
>>> Duration(seconds=10).to_seconds()
10.0
>>> Duration(nanos=100).to_seconds()
1e-07
>>> Duration(seconds=10, nanos=100).to_seconds()
10.0000001

from_seconds classmethod

from_seconds(seconds)

Create a new Duration from a duration in seconds.

Parts of a second are expressed as fractional values.

Examples:

>>> from protobuf.wkt import Duration
>>> Duration.from_seconds(10)
Duration(seconds=10)
>>> Duration.from_seconds(10.1)
Duration(seconds=10, nanos=100000000)

Empty

Empty()

Bases: Message[_EmptyFields]

A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance:

service Foo {
  rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
}
message google.protobuf.Empty

FieldMask

FieldMask(*, paths=None)

Bases: Message[_FieldMaskFields]

FieldMask represents a set of symbolic field paths, for example:

paths: "f.a"
paths: "f.b.d"

Here f represents a field in some root message, a and b fields in the message found in f, and d a field found in the message in f.b.

Field masks are used to specify a subset of fields that should be returned by a get operation or modified by an update operation. Field masks also have a custom JSON encoding (see below).

Field Masks in Projections

When used in the context of a projection, a response message or sub-message is filtered by the API to only contain those fields as specified in the mask. For example, if the mask in the previous example is applied to a response message as follows:

f {
  a : 22
  b {
    d : 1
    x : 2
  }
  y : 13
}
z: 8

The result will not contain specific values for fields x,y and z (their value will be set to the default, and omitted in proto text output):

f {
  a : 22
  b {
    d : 1
  }
}

A repeated field is not allowed except at the last position of a paths string.

If a FieldMask object is not present in a get operation, the operation applies to all fields (as if a FieldMask of all fields had been specified).

Note that a field mask does not necessarily apply to the top-level response message. In case of a REST get operation, the field mask applies directly to the response, but in case of a REST list operation, the mask instead applies to each individual message in the returned resource list. In case of a REST custom method, other definitions may be used. Where the mask applies will be clearly documented together with its declaration in the API. In any case, the effect on the returned resource/resources is required behavior for APIs.

Field Masks in Update Operations

A field mask in update operations specifies which fields of the targeted resource are going to be updated. The API is required to only change the values of the fields as specified in the mask and leave the others untouched. If a resource is passed in to describe the updated values, the API ignores the values of all fields not covered by the mask.

If a repeated field is specified for an update operation, new values will be appended to the existing repeated field in the target resource. Note that a repeated field is only allowed in the last position of a paths string.

If a sub-message is specified in the last position of the field mask for an update operation, then new value will be merged into the existing sub-message in the target resource.

For example, given the target message:

f {
  b {
    d: 1
    x: 2
  }
  c: [1]
}

And an update message:

f {
  b {
    d: 10
  }
  c: [2]
}

then if the field mask is:

paths: ["f.b", "f.c"]

then the result will be:

f {
  b {
    d: 10
    x: 2
  }
  c: [1, 2]
}

An implementation may provide options to override this default behavior for repeated and message fields.

Note that libraries which implement FieldMask resolution have various different behaviors in the face of empty masks or the special "*" mask. When implementing a service you should confirm these cases have the appropriate behavior in the underlying FieldMask library that you desire, and you may need to special case those cases in your application code if the underlying field mask library behavior differs from your intended service semantics.

Update methods implementing https://google.aip.dev/134 - MUST support the special value * meaning "full replace" - MUST treat an omitted field mask as "replace fields which are present".

Other methods implementing https://google.aip.dev/157 - SHOULD support the special value "*" to mean "get all". - MUST treat an omitted field mask to mean "get all", unless otherwise documented.

Considerations for HTTP REST

The HTTP kind of an update operation which uses a field mask must be set to PATCH instead of PUT in order to satisfy HTTP semantics (PUT must only be used for full updates).

JSON Encoding of Field Masks

In JSON, a field mask is encoded as a single string where paths are separated by a comma. Fields name in each path are converted to/from lower-camel naming conventions.

As an example, consider the following message declarations:

message Profile {
  User user = 1;
  Photo photo = 2;
}
message User {
  string display_name = 1;
  string address = 2;
}

In proto a field mask for Profile may look as such:

mask {
  paths: "user.display_name"
  paths: "photo"
}

In JSON, the same mask is represented as below:

{
  mask: "user.displayName,photo"
}

Field Masks and Oneof Fields

Field masks treat fields in oneofs just as regular fields. Consider the following message:

message SampleMessage {
  oneof test_oneof {
    string name = 4;
    SubMessage sub_message = 9;
  }
}

The field mask can be:

mask {
  paths: "name"
}

Or:

mask {
  paths: "sub_message"
}

Note that oneof type names ("test_oneof" in this case) cannot be used in paths.

Field Mask Verification

The implementation of any API method which has a FieldMask type field in the request should verify the included field paths, and return an INVALID_ARGUMENT error if any path is unmappable.

message google.protobuf.FieldMask

Attributes:

Name Type Description
paths list[str]

The set of field mask paths.

repeated string paths = 1;

ListValue

ListValue(*, values=None)

Bases: Message[_ListValueFields], ListValueMixin

Represents a JSON array.

message google.protobuf.ListValue

Attributes:

Name Type Description
values list[Value]

Repeated field of dynamically typed values.

repeated google.protobuf.Value values = 1;

from_python classmethod

from_python(values)

Create a ListValue from a list of Python values.

Examples:

>>> from protobuf.wkt import ListValue
>>> ListValue.from_python([1, "foo"])
ListValue(values=[Value(kind=Oneof(field='number_value', value=1.0)), Value(kind=Oneof(field='string_value', value='foo'))])

to_python

to_python()

Convert this ListValue to a list of Python values.

Examples:

>>> from protobuf import Oneof
>>> from protobuf.wkt import ListValue, Value
>>> ListValue(
...     values=[
...         Value(kind=Oneof(field="number_value", value=1.0)),
...         Value(kind=Oneof(field="string_value", value="foo")),
...     ]
... ).to_python()
[1.0, 'foo']

NullValue

Bases: Enum

Represents a JSON null.

NullValue is a sentinel, using an enum with only one value to represent the null value for the Value type union.

A field of type NullValue with any value other than 0 is considered invalid. Most ProtoJSON serializers will emit a Value with a null_value set as a JSON null regardless of the integer value, and so will round trip to a 0 value.

enum google.protobuf.NullValue

Attributes:

Name Type Description
NULL_VALUE

Null value.

NULL_VALUE = 0

Struct

Struct(*, fields=None)

Bases: Message[_StructFields], StructMixin

Represents a JSON object.

An unordered key-value map, intending to perfectly capture the semantics of a JSON object. This enables parsing any arbitrary JSON payload as a message field in ProtoJSON format.

This follows RFC 8259 guidelines for interoperable JSON: notably this type cannot represent large Int64 values or NaN/Infinity numbers, since the JSON format generally does not support those values in its number type.

If you do not intend to parse arbitrary JSON into your message, a custom typed message should be preferred instead of using this type.

message google.protobuf.Struct

Attributes:

Name Type Description
fields dict[str, Value]

Unordered map of dynamically typed values.

map<string, google.protobuf.Value> fields = 1;

from_python classmethod

from_python(data)

Create a Struct from a Python dict.

Examples:

>>> from protobuf.wkt import Struct
>>> Struct.from_python({"a": 1, "b": "bear"})
Struct(fields={'a': Value(kind=Oneof(field='number_value', value=1.0)), 'b': Value(kind=Oneof(field='string_value', value='bear'))})

to_python

to_python()

Convert this Struct to a Python dict.

Examples:

>>> from protobuf import Oneof
>>> from protobuf.wkt import Struct, Value
>>> Struct(
...     fields={
...         "a": Value(kind=Oneof(field="number_value", value=1.0)),
...         "b": Value(kind=Oneof(field="string_value", value="bear")),
...     }
... ).to_python()
{'a': 1.0, 'b': 'bear'}

Value

Value(*, kind=None)

Bases: Message[_ValueFields], ValueMixin

Represents a JSON value.

Value represents a dynamically typed value which can be either null, a number, a string, a boolean, a recursive struct value, or a list of values. A producer of value is expected to set one of these variants. Absence of any variant is an invalid state.

message google.protobuf.Value

Attributes:

Name Type Description
kind Oneof[Literal['null_value'], NullValue] | Oneof[Literal['number_value'], float] | Oneof[Literal['string_value'], str] | Oneof[Literal['bool_value'], bool] | Oneof[Literal['struct_value'], Struct] | Oneof[Literal['list_value'], ListValue] | None

The kind of value.

oneof kind

from_python classmethod

from_python(value)

Create a Value from a Python value.

Parameters:

Name Type Description Default
value ValueTypeParam

The Python value to convert. int values are converted to float.

required

Returns:

Type Description
Self

A Value representing the given Python value.

Raises:

Type Description
TypeError

If the value is of an unsupported type, including bytes.

Examples:

>>> from protobuf.wkt import Value
>>> Value.from_python(None)
Value(kind=Oneof(field='null_value', value=NullValue.NULL_VALUE))
>>> Value.from_python(True)
Value(kind=Oneof(field='bool_value', value=True))
>>> Value.from_python(2)
Value(kind=Oneof(field='number_value', value=2.0))
>>> Value.from_python(3.14)
Value(kind=Oneof(field='number_value', value=3.14))
>>> Value.from_python("hello")
Value(kind=Oneof(field='string_value', value='hello'))
>>> Value.from_python([1, "foo"])
Value(kind=Oneof(field='list_value', value=ListValue(values=[Value(kind=Oneof(field='number_value', value=1.0)), Value(kind=Oneof(field='string_value', value='foo'))])))
>>> Value.from_python({"a": 1, "b": "bear"})
Value(kind=Oneof(field='struct_value', value=Struct(fields={'a': Value(kind=Oneof(field='number_value', value=1.0)), 'b': Value(kind=Oneof(field='string_value', value='bear'))})))

to_python

to_python()

Convert this Value to a Python value.

Examples:

>>> from protobuf import Oneof
>>> from protobuf.wkt import ListValue, NullValue, Struct, Value
>>> Value(
...     kind=Oneof(field="null_value", value=NullValue.NULL_VALUE)
... ).to_python()
>>> Value(kind=Oneof(field="bool_value", value=True)).to_python()
True
>>> Value(kind=Oneof(field="number_value", value=3.14)).to_python()
3.14
>>> Value(kind=Oneof(field="string_value", value="hello")).to_python()
'hello'
>>> Value(
...     kind=Oneof(
...         field="list_value",
...         value=ListValue(
...             values=[
...                 Value(kind=Oneof(field="number_value", value=1.0)),
...                 Value(kind=Oneof(field="string_value", value="foo")),
...             ]
...         ),
...     )
... ).to_python()
[1.0, 'foo']
>>> Value(
...     kind=Oneof(
...         field="struct_value",
...         value=Struct(
...             fields={
...                 "a": Value(kind=Oneof(field="number_value", value=1.0)),
...                 "b": Value(
...                     kind=Oneof(field="string_value", value="bear")
...                 ),
...             }
...         ),
...     )
... ).to_python()
{'a': 1.0, 'b': 'bear'}

Timestamp

Timestamp(*, seconds=0, nanos=0)

Bases: Message[_TimestampFields], TimestampMixin

A Timestamp represents a point in time independent of any time zone or local calendar, encoded as a count of seconds and fractions of seconds at nanosecond resolution. The count is relative to an epoch at UTC midnight on January 1, 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar backwards to year one.

All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap second table is needed for interpretation, using a 24-hour linear smear.

The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings.

Examples

Example 1: Compute Timestamp from POSIX time().

Timestamp timestamp;
timestamp.set_seconds(time(NULL));
timestamp.set_nanos(0);

Example 2: Compute Timestamp from POSIX gettimeofday().

struct timeval tv;
gettimeofday(&tv, NULL);

Timestamp timestamp;
timestamp.set_seconds(tv.tv_sec);
timestamp.set_nanos(tv.tv_usec * 1000);

Example 3: Compute Timestamp from Win32 GetSystemTimeAsFileTime().

FILETIME ft;
GetSystemTimeAsFileTime(&ft);
UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;

// A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
// is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
Timestamp timestamp;
timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));

Example 4: Compute Timestamp from Java System.currentTimeMillis().

long millis = System.currentTimeMillis();

Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
    .setNanos((int) ((millis % 1000) * 1000000)).build();

Example 5: Compute Timestamp from Java Instant.now().

Instant now = Instant.now();

Timestamp timestamp =
    Timestamp.newBuilder().setSeconds(now.getEpochSecond())
        .setNanos(now.getNano()).build();

Example 6: Compute Timestamp from current time in Python.

timestamp = Timestamp()
timestamp.GetCurrentTime()

JSON Mapping

In JSON format, the Timestamp type is encoded as a string in the RFC 3339 format. That is, the format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" where {year} is always expressed using four digits while {month}, {day}, {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone is required. A ProtoJSON serializer should always use UTC (as indicated by "Z") when printing the Timestamp type and a ProtoJSON parser should be able to accept both UTC and other timezones (as indicated by an offset).

For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past 01:30 UTC on January 15, 2017.

In JavaScript, one can convert a Date object to this format using the standard toISOString() method. In Python, a standard datetime.datetime object can be converted to this format using strftime with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use the Joda Time's ISODateTimeFormat.dateTime() to obtain a formatter capable of generating timestamps in this format.

message google.protobuf.Timestamp

Attributes:

Name Type Description
seconds int

Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be between -62135596800 and 253402300799 inclusive (which corresponds to 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z).

int64 seconds = 1;
nanos int

Non-negative fractions of a second at nanosecond resolution. This field is the nanosecond portion of the duration, not an alternative to seconds. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be between 0 and 999,999,999 inclusive.

int32 nanos = 2;

now classmethod

now()

Create for the current time.

from_nanos classmethod

from_nanos(nanos)

Create from a Unix timestamp in nanoseconds.

from_datetime classmethod

from_datetime(dt)

Create from the given datetime.

Examples:

>>> from datetime import datetime, timezone, timedelta
>>> from protobuf.wkt import Timestamp
>>> Timestamp.from_datetime(datetime(1970, 1, 1, tzinfo=timezone.utc))
Timestamp()
>>> Timestamp.from_datetime(
...     datetime(1970, 1, 1, 0, 0, 10, tzinfo=timezone.utc)
... )
Timestamp(seconds=10)
>>> Timestamp.from_datetime(
...     datetime(
...         1970, 1, 1, tzinfo=timezone(timedelta(hours=5, minutes=30))
...     )
... )
Timestamp(seconds=-19800)

to_datetime

to_datetime()

Convert to a UTC datetime with timezone set.

Note that the upper half of the very last microsecond in the valid range of a Timestamp is not representable as a datetime and will raise an OverflowError.

To convert to a different timezone, use datetime.astimezone() on the result.

Examples:

>>> from datetime import timezone, timedelta
>>> from protobuf.wkt import Timestamp
>>> Timestamp(seconds=10).to_datetime()
datetime.datetime(1970, 1, 1, 0, 0, 10, tzinfo=datetime.timezone.utc)
>>> Timestamp(seconds=10).to_datetime().astimezone(
...     timezone(timedelta(hours=5, minutes=30))
... )
datetime.datetime(1970, 1, 1, 5, 30, 10, tzinfo=datetime.timezone(datetime.timedelta(seconds=19800)))

to_nanos

to_nanos()

Convert to the number of nanoseconds since Unix epoch 1970-01-01T00:00:00Z.

Examples:

>>> from protobuf.wkt import Timestamp
>>> Timestamp(nanos=1_000).to_nanos()
1000
>>> Timestamp(seconds=10, nanos=100).to_nanos()
10000000100

to_seconds

to_seconds()

Convert to a number of seconds since Unix epoch 1970-01-01T00:00:00Z.

Parts of a second are expressed as fractional values.

Examples:

>>> from protobuf.wkt import Timestamp
>>> Timestamp(seconds=10).to_seconds()
10.0
>>> Timestamp(nanos=100).to_seconds()
1e-07
>>> Timestamp(seconds=10, nanos=100).to_seconds()
10.0000001

from_seconds classmethod

from_seconds(seconds)

Create a new Timestamp from a timestamp expressed in seconds since Unix epoch 1970-01-01T00:00:00Z.

Parts of a second are expressed as fractional values.

Examples:

>>> from protobuf.wkt import Timestamp
>>> Timestamp.from_seconds(10)
Timestamp(seconds=10)
>>> Timestamp.from_seconds(10.1)
Timestamp(seconds=10, nanos=100000000)
>>> Timestamp.from_seconds(-10.1)
Timestamp(seconds=-11, nanos=900000000)

BoolValue

BoolValue(*, value=False)

Bases: Message[_BoolValueFields]

Wrapper message for bool.

The JSON representation for BoolValue is JSON true and false.

Not recommended for use in new APIs, but still useful for legacy APIs and has no plan to be removed.

message google.protobuf.BoolValue

Attributes:

Name Type Description
value bool

The bool value.

bool value = 1;

BytesValue

BytesValue(*, value=b'')

Bases: Message[_BytesValueFields]

Wrapper message for bytes.

The JSON representation for BytesValue is JSON string.

Not recommended for use in new APIs, but still useful for legacy APIs and has no plan to be removed.

message google.protobuf.BytesValue

Attributes:

Name Type Description
value bytes

The bytes value.

bytes value = 1;

DoubleValue

DoubleValue(*, value=0)

Bases: Message[_DoubleValueFields]

Wrapper message for double.

The JSON representation for DoubleValue is JSON number.

Not recommended for use in new APIs, but still useful for legacy APIs and has no plan to be removed.

message google.protobuf.DoubleValue

Attributes:

Name Type Description
value float

The double value.

double value = 1;

FloatValue

FloatValue(*, value=0)

Bases: Message[_FloatValueFields]

Wrapper message for float.

The JSON representation for FloatValue is JSON number.

Not recommended for use in new APIs, but still useful for legacy APIs and has no plan to be removed.

message google.protobuf.FloatValue

Attributes:

Name Type Description
value float

The float value.

float value = 1;

Int32Value

Int32Value(*, value=0)

Bases: Message[_Int32ValueFields]

Wrapper message for int32.

The JSON representation for Int32Value is JSON number.

Not recommended for use in new APIs, but still useful for legacy APIs and has no plan to be removed.

message google.protobuf.Int32Value

Attributes:

Name Type Description
value int

The int32 value.

int32 value = 1;

Int64Value

Int64Value(*, value=0)

Bases: Message[_Int64ValueFields]

Wrapper message for int64.

The JSON representation for Int64Value is JSON string.

Not recommended for use in new APIs, but still useful for legacy APIs and has no plan to be removed.

message google.protobuf.Int64Value

Attributes:

Name Type Description
value int

The int64 value.

int64 value = 1;

StringValue

StringValue(*, value='')

Bases: Message[_StringValueFields]

Wrapper message for string.

The JSON representation for StringValue is JSON string.

Not recommended for use in new APIs, but still useful for legacy APIs and has no plan to be removed.

message google.protobuf.StringValue

Attributes:

Name Type Description
value str

The string value.

string value = 1;

UInt32Value

UInt32Value(*, value=0)

Bases: Message[_UInt32ValueFields]

Wrapper message for uint32.

The JSON representation for UInt32Value is JSON number.

Not recommended for use in new APIs, but still useful for legacy APIs and has no plan to be removed.

message google.protobuf.UInt32Value

Attributes:

Name Type Description
value int

The uint32 value.

uint32 value = 1;

UInt64Value

UInt64Value(*, value=0)

Bases: Message[_UInt64ValueFields]

Wrapper message for uint64.

The JSON representation for UInt64Value is JSON string.

Not recommended for use in new APIs, but still useful for legacy APIs and has no plan to be removed.

message google.protobuf.UInt64Value

Attributes:

Name Type Description
value int

The uint64 value.

uint64 value = 1;