|
65 | 65 |
|
66 | 66 |
|
67 | 67 | # Fields that use a fixed amount of space (4 or 8 bytes)
|
68 |
| -FIXED_TYPES = [ |
69 |
| - TYPE_FLOAT, |
70 |
| - TYPE_DOUBLE, |
71 |
| - TYPE_FIXED32, |
72 |
| - TYPE_SFIXED32, |
73 |
| - TYPE_FIXED64, |
74 |
| - TYPE_SFIXED64, |
75 |
| -] |
| 68 | +FIXED_TYPES = frozenset( |
| 69 | + { |
| 70 | + TYPE_FLOAT, |
| 71 | + TYPE_DOUBLE, |
| 72 | + TYPE_FIXED32, |
| 73 | + TYPE_SFIXED32, |
| 74 | + TYPE_FIXED64, |
| 75 | + TYPE_SFIXED64, |
| 76 | + } |
| 77 | +) |
76 | 78 |
|
77 | 79 | # Fields that are numerical 64-bit types
|
78 |
| -INT_64_TYPES = [TYPE_INT64, TYPE_UINT64, TYPE_SINT64, TYPE_FIXED64, TYPE_SFIXED64] |
79 |
| - |
80 |
| -# Fields that are efficiently packed when |
81 |
| -PACKED_TYPES = [ |
82 |
| - TYPE_ENUM, |
83 |
| - TYPE_BOOL, |
84 |
| - TYPE_INT32, |
85 |
| - TYPE_INT64, |
86 |
| - TYPE_UINT32, |
87 |
| - TYPE_UINT64, |
88 |
| - TYPE_SINT32, |
89 |
| - TYPE_SINT64, |
90 |
| - TYPE_FLOAT, |
91 |
| - TYPE_DOUBLE, |
92 |
| - TYPE_FIXED32, |
93 |
| - TYPE_SFIXED32, |
94 |
| - TYPE_FIXED64, |
95 |
| - TYPE_SFIXED64, |
96 |
| -] |
| 80 | +INT_64_TYPES = frozenset( |
| 81 | + {TYPE_INT64, TYPE_UINT64, TYPE_SINT64, TYPE_FIXED64, TYPE_SFIXED64} |
| 82 | +) |
| 83 | + |
| 84 | +# Fields that are efficiently packed when serialised |
| 85 | +PACKED_TYPES = frozenset( |
| 86 | + { |
| 87 | + TYPE_ENUM, |
| 88 | + TYPE_BOOL, |
| 89 | + TYPE_INT32, |
| 90 | + TYPE_INT64, |
| 91 | + TYPE_UINT32, |
| 92 | + TYPE_UINT64, |
| 93 | + TYPE_SINT32, |
| 94 | + TYPE_SINT64, |
| 95 | + TYPE_FLOAT, |
| 96 | + TYPE_DOUBLE, |
| 97 | + TYPE_FIXED32, |
| 98 | + TYPE_SFIXED32, |
| 99 | + TYPE_FIXED64, |
| 100 | + TYPE_SFIXED64, |
| 101 | + } |
| 102 | +) |
97 | 103 |
|
98 | 104 | # Wire types
|
99 | 105 | # https://developers.google.com/protocol-buffers/docs/encoding#structure
|
|
103 | 109 | WIRE_FIXED_32 = 5
|
104 | 110 |
|
105 | 111 | # Mappings of which Proto 3 types correspond to which wire types.
|
106 |
| -WIRE_VARINT_TYPES = [ |
107 |
| - TYPE_ENUM, |
108 |
| - TYPE_BOOL, |
109 |
| - TYPE_INT32, |
110 |
| - TYPE_INT64, |
111 |
| - TYPE_UINT32, |
112 |
| - TYPE_UINT64, |
113 |
| - TYPE_SINT32, |
114 |
| - TYPE_SINT64, |
115 |
| -] |
116 |
| - |
117 |
| -WIRE_FIXED_32_TYPES = [TYPE_FLOAT, TYPE_FIXED32, TYPE_SFIXED32] |
118 |
| -WIRE_FIXED_64_TYPES = [TYPE_DOUBLE, TYPE_FIXED64, TYPE_SFIXED64] |
119 |
| -WIRE_LEN_DELIM_TYPES = [TYPE_STRING, TYPE_BYTES, TYPE_MESSAGE, TYPE_MAP] |
| 112 | +WIRE_VARINT_TYPES = frozenset( |
| 113 | + { |
| 114 | + TYPE_ENUM, |
| 115 | + TYPE_BOOL, |
| 116 | + TYPE_INT32, |
| 117 | + TYPE_INT64, |
| 118 | + TYPE_UINT32, |
| 119 | + TYPE_UINT64, |
| 120 | + TYPE_SINT32, |
| 121 | + TYPE_SINT64, |
| 122 | + } |
| 123 | +) |
| 124 | + |
| 125 | +WIRE_FIXED_32_TYPES = frozenset({TYPE_FLOAT, TYPE_FIXED32, TYPE_SFIXED32}) |
| 126 | +WIRE_FIXED_64_TYPES = frozenset({TYPE_DOUBLE, TYPE_FIXED64, TYPE_SFIXED64}) |
| 127 | +WIRE_LEN_DELIM_TYPES = frozenset({TYPE_STRING, TYPE_BYTES, TYPE_MESSAGE, TYPE_MAP}) |
120 | 128 |
|
121 | 129 |
|
122 | 130 | # Protobuf datetimes start at the Unix Epoch in 1970 in UTC.
|
@@ -358,16 +366,16 @@ def encode_varint(value: int) -> bytes:
|
358 | 366 |
|
359 | 367 | def _preprocess_single(proto_type: str, wraps: str, value: Any) -> bytes:
|
360 | 368 | """Adjusts values before serialization."""
|
361 |
| - if proto_type in ( |
| 369 | + if proto_type in { |
362 | 370 | TYPE_ENUM,
|
363 | 371 | TYPE_BOOL,
|
364 | 372 | TYPE_INT32,
|
365 | 373 | TYPE_INT64,
|
366 | 374 | TYPE_UINT32,
|
367 | 375 | TYPE_UINT64,
|
368 |
| - ): |
| 376 | + }: |
369 | 377 | return encode_varint(value)
|
370 |
| - elif proto_type in (TYPE_SINT32, TYPE_SINT64): |
| 378 | + elif proto_type in {TYPE_SINT32, TYPE_SINT64}: |
371 | 379 | # Handle zig-zag encoding.
|
372 | 380 | return encode_varint(value << 1 if value >= 0 else (value << 1) ^ (~0))
|
373 | 381 | elif proto_type in FIXED_TYPES:
|
@@ -917,18 +925,18 @@ def _postprocess_single(
|
917 | 925 | ) -> Any:
|
918 | 926 | """Adjusts values after parsing."""
|
919 | 927 | if wire_type == WIRE_VARINT:
|
920 |
| - if meta.proto_type in (TYPE_INT32, TYPE_INT64): |
| 928 | + if meta.proto_type in {TYPE_INT32, TYPE_INT64}: |
921 | 929 | bits = int(meta.proto_type[3:])
|
922 | 930 | value = value & ((1 << bits) - 1)
|
923 | 931 | signbit = 1 << (bits - 1)
|
924 | 932 | value = int((value ^ signbit) - signbit)
|
925 |
| - elif meta.proto_type in (TYPE_SINT32, TYPE_SINT64): |
| 933 | + elif meta.proto_type in {TYPE_SINT32, TYPE_SINT64}: |
926 | 934 | # Undo zig-zag encoding
|
927 | 935 | value = (value >> 1) ^ (-(value & 1))
|
928 | 936 | elif meta.proto_type == TYPE_BOOL:
|
929 | 937 | # Booleans use a varint encoding, so convert it to true/false.
|
930 | 938 | value = value > 0
|
931 |
| - elif wire_type in (WIRE_FIXED_32, WIRE_FIXED_64): |
| 939 | + elif wire_type in {WIRE_FIXED_32, WIRE_FIXED_64}: |
932 | 940 | fmt = _pack_fmt(meta.proto_type)
|
933 | 941 | value = struct.unpack(fmt, value)[0]
|
934 | 942 | elif wire_type == WIRE_LEN_DELIM:
|
@@ -992,10 +1000,10 @@ def parse(self: T, data: bytes) -> T:
|
992 | 1000 | pos = 0
|
993 | 1001 | value = []
|
994 | 1002 | while pos < len(parsed.value):
|
995 |
| - if meta.proto_type in (TYPE_FLOAT, TYPE_FIXED32, TYPE_SFIXED32): |
| 1003 | + if meta.proto_type in {TYPE_FLOAT, TYPE_FIXED32, TYPE_SFIXED32}: |
996 | 1004 | decoded, pos = parsed.value[pos : pos + 4], pos + 4
|
997 | 1005 | wire_type = WIRE_FIXED_32
|
998 |
| - elif meta.proto_type in (TYPE_DOUBLE, TYPE_FIXED64, TYPE_SFIXED64): |
| 1006 | + elif meta.proto_type in {TYPE_DOUBLE, TYPE_FIXED64, TYPE_SFIXED64}: |
999 | 1007 | decoded, pos = parsed.value[pos : pos + 8], pos + 8
|
1000 | 1008 | wire_type = WIRE_FIXED_64
|
1001 | 1009 | else:
|
@@ -1169,7 +1177,7 @@ def to_dict(
|
1169 | 1177 | else:
|
1170 | 1178 | enum_class = field_types[field_name] # noqa
|
1171 | 1179 | output[cased_name] = enum_class(value).name
|
1172 |
| - elif meta.proto_type in (TYPE_FLOAT, TYPE_DOUBLE): |
| 1180 | + elif meta.proto_type in {TYPE_FLOAT, TYPE_DOUBLE}: |
1173 | 1181 | if field_is_repeated:
|
1174 | 1182 | output[cased_name] = [_dump_float(n) for n in value]
|
1175 | 1183 | else:
|
@@ -1373,7 +1381,7 @@ def to_timedelta(self) -> timedelta:
|
1373 | 1381 | def delta_to_json(delta: timedelta) -> str:
|
1374 | 1382 | parts = str(delta.total_seconds()).split(".")
|
1375 | 1383 | if len(parts) > 1:
|
1376 |
| - while len(parts[1]) not in (3, 6, 9): |
| 1384 | + while len(parts[1]) not in {3, 6, 9}: |
1377 | 1385 | parts[1] = f"{parts[1]}0"
|
1378 | 1386 | return f"{'.'.join(parts)}s"
|
1379 | 1387 |
|
|
0 commit comments