0
# Types
1
2
Google Cloud Pub/Sub provides a comprehensive set of protobuf message types for all API operations. These types define the structure for topics, subscriptions, messages, requests, responses, and configuration objects.
3
4
## Capabilities
5
6
### Core Message Types
7
8
Fundamental types for Pub/Sub messaging operations.
9
10
```python { .api }
11
class PubsubMessage:
12
"""
13
A message published to or received from Pub/Sub.
14
15
Attributes:
16
- data: Message payload as bytes
17
- attributes: Key-value pairs for message metadata
18
- message_id: Server-assigned message ID
19
- publish_time: Time when message was published
20
- ordering_key: Optional key for message ordering
21
"""
22
23
data: bytes
24
attributes: MutableMapping[str, str]
25
message_id: str
26
publish_time: Timestamp
27
ordering_key: str
28
29
class ReceivedMessage:
30
"""
31
Message received from a pull operation.
32
33
Attributes:
34
- ack_id: Acknowledgment ID for the message
35
- message: The actual Pub/Sub message
36
- delivery_attempt: Number of delivery attempts
37
"""
38
39
ack_id: str
40
message: PubsubMessage
41
delivery_attempt: int
42
```
43
44
### Resource Types
45
46
Types representing Pub/Sub resources like topics and subscriptions.
47
48
```python { .api }
49
class Topic:
50
"""
51
A Pub/Sub topic resource.
52
53
Attributes:
54
- name: Topic resource name
55
- labels: User-defined labels
56
- message_storage_policy: Message storage policy
57
- kms_key_name: KMS key for encryption
58
- schema_settings: Schema validation settings
59
- satisfies_pzs: Whether topic satisfies PZS
60
- message_retention_duration: Message retention duration
61
"""
62
63
name: str
64
labels: MutableMapping[str, str]
65
message_storage_policy: MessageStoragePolicy
66
kms_key_name: str
67
schema_settings: SchemaSettings
68
satisfies_pzs: bool
69
message_retention_duration: Duration
70
71
class Subscription:
72
"""
73
A Pub/Sub subscription resource.
74
75
Attributes:
76
- name: Subscription resource name
77
- topic: Topic name this subscription receives messages from
78
- push_config: Push delivery configuration
79
- bigquery_config: BigQuery delivery configuration
80
- cloud_storage_config: Cloud Storage delivery configuration
81
- ack_deadline_seconds: Message acknowledgment deadline
82
- retain_acked_messages: Whether to retain acknowledged messages
83
- message_retention_duration: How long to retain messages
84
- labels: User-defined labels
85
- enable_message_ordering: Whether to enable message ordering
86
- expiration_policy: Subscription expiration policy
87
- filter: Message filter expression
88
- dead_letter_policy: Dead letter queue policy
89
- retry_policy: Message retry policy
90
- detached: Whether subscription is detached from topic
91
- enable_exactly_once_delivery: Whether to enable exactly-once delivery
92
- topic_message_retention_duration: Topic's message retention duration
93
- state: Current subscription state
94
"""
95
96
name: str
97
topic: str
98
push_config: PushConfig
99
bigquery_config: BigQueryConfig
100
cloud_storage_config: CloudStorageConfig
101
ack_deadline_seconds: int
102
retain_acked_messages: bool
103
message_retention_duration: Duration
104
labels: MutableMapping[str, str]
105
enable_message_ordering: bool
106
expiration_policy: ExpirationPolicy
107
filter: str
108
dead_letter_policy: DeadLetterPolicy
109
retry_policy: RetryPolicy
110
detached: bool
111
enable_exactly_once_delivery: bool
112
topic_message_retention_duration: Duration
113
state: Subscription.State
114
115
class Snapshot:
116
"""
117
A Pub/Sub snapshot resource.
118
119
Attributes:
120
- name: Snapshot resource name
121
- topic: Topic name the snapshot was created from
122
- expire_time: When the snapshot expires
123
- labels: User-defined labels
124
"""
125
126
name: str
127
topic: str
128
expire_time: Timestamp
129
labels: MutableMapping[str, str]
130
```
131
132
### Request and Response Types
133
134
Types for API requests and responses.
135
136
```python { .api }
137
class PublishRequest:
138
"""
139
Request to publish messages to a topic.
140
141
Attributes:
142
- topic: Topic name to publish to
143
- messages: Messages to publish
144
"""
145
146
topic: str
147
messages: Sequence[PubsubMessage]
148
149
class PublishResponse:
150
"""
151
Response from publish operation.
152
153
Attributes:
154
- message_ids: IDs of published messages
155
"""
156
157
message_ids: Sequence[str]
158
159
class PullRequest:
160
"""
161
Request to pull messages from subscription.
162
163
Attributes:
164
- subscription: Subscription name to pull from
165
- return_immediately: Whether to return immediately if no messages
166
- max_messages: Maximum number of messages to return
167
"""
168
169
subscription: str
170
return_immediately: bool
171
max_messages: int
172
173
class PullResponse:
174
"""
175
Response from pull operation.
176
177
Attributes:
178
- received_messages: Messages received from subscription
179
"""
180
181
received_messages: Sequence[ReceivedMessage]
182
183
class StreamingPullRequest:
184
"""
185
Request for streaming pull operation.
186
187
Attributes:
188
- subscription: Subscription name
189
- ack_ids: Message IDs to acknowledge
190
- modify_deadline_seconds: Deadline modifications
191
- modify_deadline_ack_ids: Message IDs for deadline modification
192
- stream_ack_deadline_seconds: Stream acknowledgment deadline
193
- client_id: Client identifier
194
- max_extension_period: Maximum lease extension period
195
"""
196
197
subscription: str
198
ack_ids: Sequence[str]
199
modify_deadline_seconds: Sequence[int]
200
modify_deadline_ack_ids: Sequence[str]
201
stream_ack_deadline_seconds: int
202
client_id: str
203
max_extension_period: Duration
204
205
class StreamingPullResponse:
206
"""
207
Response from streaming pull operation.
208
209
Attributes:
210
- received_messages: Messages received
211
- acknowledge_confirmation: Acknowledgment confirmations
212
- modify_ack_deadline_confirmation: Deadline modification confirmations
213
- subscription_properties: Subscription properties
214
"""
215
216
received_messages: Sequence[ReceivedMessage]
217
acknowledge_confirmation: AcknowledgeConfirmation
218
modify_ack_deadline_confirmation: ModifyAckDeadlineConfirmation
219
subscription_properties: StreamingPullResponse.SubscriptionProperties
220
```
221
222
### Configuration Types
223
224
Types for configuring Pub/Sub behavior.
225
226
```python { .api }
227
class PushConfig:
228
"""
229
Configuration for push delivery to HTTP endpoints.
230
231
Attributes:
232
- push_endpoint: URL to push messages to
233
- attributes: Endpoint configuration attributes
234
- oidc_token: OIDC token configuration
235
- pubsub_wrapper: Pub/Sub wrapper format
236
- no_wrapper: No wrapper configuration
237
"""
238
239
push_endpoint: str
240
attributes: MutableMapping[str, str]
241
oidc_token: PushConfig.OidcToken
242
pubsub_wrapper: PushConfig.PubsubWrapper
243
no_wrapper: PushConfig.NoWrapper
244
245
class BigQueryConfig:
246
"""
247
Configuration for BigQuery delivery.
248
249
Attributes:
250
- table: BigQuery table name
251
- use_topic_schema: Whether to use topic schema
252
- write_metadata: Whether to write metadata
253
- drop_unknown_fields: Whether to drop unknown fields
254
- state: Current configuration state
255
- use_table_schema: Whether to use table schema
256
- service_account_email: Service account for BigQuery access
257
"""
258
259
table: str
260
use_topic_schema: bool
261
write_metadata: bool
262
drop_unknown_fields: bool
263
state: BigQueryConfig.State
264
use_table_schema: bool
265
service_account_email: str
266
267
class CloudStorageConfig:
268
"""
269
Configuration for Cloud Storage delivery.
270
271
Attributes:
272
- bucket: Cloud Storage bucket name
273
- filename_prefix: Prefix for generated filenames
274
- filename_suffix: Suffix for generated filenames
275
- filename_datetime_format: Datetime format for filenames
276
- text_config: Text format configuration
277
- avro_config: Avro format configuration
278
- max_duration: Maximum duration before file write
279
- max_bytes: Maximum bytes before file write
280
- max_messages: Maximum messages before file write
281
- state: Current configuration state
282
- service_account_email: Service account for Cloud Storage access
283
"""
284
285
bucket: str
286
filename_prefix: str
287
filename_suffix: str
288
filename_datetime_format: str
289
text_config: CloudStorageConfig.TextConfig
290
avro_config: CloudStorageConfig.AvroConfig
291
max_duration: Duration
292
max_bytes: int
293
max_messages: int
294
state: CloudStorageConfig.State
295
service_account_email: str
296
297
class DeadLetterPolicy:
298
"""
299
Dead letter queue policy for failed messages.
300
301
Attributes:
302
- dead_letter_topic: Topic to send failed messages to
303
- max_delivery_attempts: Maximum delivery attempts before dead lettering
304
"""
305
306
dead_letter_topic: str
307
max_delivery_attempts: int
308
309
class RetryPolicy:
310
"""
311
Retry policy for message delivery.
312
313
Attributes:
314
- minimum_backoff: Minimum backoff duration
315
- maximum_backoff: Maximum backoff duration
316
"""
317
318
minimum_backoff: Duration
319
maximum_backoff: Duration
320
321
class ExpirationPolicy:
322
"""
323
Subscription expiration policy.
324
325
Attributes:
326
- ttl: Time-to-live for subscription
327
"""
328
329
ttl: Duration
330
331
class MessageStoragePolicy:
332
"""
333
Policy for message storage location.
334
335
Attributes:
336
- allowed_persistence_regions: Allowed storage regions
337
- enforce_in_transit: Whether to enforce in-transit requirements
338
"""
339
340
allowed_persistence_regions: Sequence[str]
341
enforce_in_transit: bool
342
343
class SchemaSettings:
344
"""
345
Schema validation settings.
346
347
Attributes:
348
- schema: Schema resource name
349
- encoding: Message encoding (JSON or BINARY)
350
- first_revision_id: First revision ID to validate against
351
- last_revision_id: Last revision ID to validate against
352
"""
353
354
schema: str
355
encoding: Encoding
356
first_revision_id: str
357
last_revision_id: str
358
```
359
360
### List Operation Types
361
362
Types for listing resources and their responses.
363
364
```python { .api }
365
class ListTopicsRequest:
366
"""
367
Request to list topics.
368
369
Attributes:
370
- project: Project to list topics from
371
- page_size: Maximum number of topics to return
372
- page_token: Token for pagination
373
"""
374
375
project: str
376
page_size: int
377
page_token: str
378
379
class ListTopicsResponse:
380
"""
381
Response from list topics operation.
382
383
Attributes:
384
- topics: Topics in the project
385
- next_page_token: Token for next page
386
"""
387
388
topics: Sequence[Topic]
389
next_page_token: str
390
391
class ListSubscriptionsRequest:
392
"""
393
Request to list subscriptions.
394
395
Attributes:
396
- project: Project to list subscriptions from
397
- page_size: Maximum number of subscriptions to return
398
- page_token: Token for pagination
399
"""
400
401
project: str
402
page_size: int
403
page_token: str
404
405
class ListSubscriptionsResponse:
406
"""
407
Response from list subscriptions operation.
408
409
Attributes:
410
- subscriptions: Subscriptions in the project
411
- next_page_token: Token for next page
412
"""
413
414
subscriptions: Sequence[Subscription]
415
next_page_token: str
416
417
class ListSnapshotsRequest:
418
"""
419
Request to list snapshots.
420
421
Attributes:
422
- project: Project to list snapshots from
423
- page_size: Maximum number of snapshots to return
424
- page_token: Token for pagination
425
"""
426
427
project: str
428
page_size: int
429
page_token: str
430
431
class ListSnapshotsResponse:
432
"""
433
Response from list snapshots operation.
434
435
Attributes:
436
- snapshots: Snapshots in the project
437
- next_page_token: Token for next page
438
"""
439
440
snapshots: Sequence[Snapshot]
441
next_page_token: str
442
```
443
444
### Management Operation Types
445
446
Types for creating, updating, and deleting resources.
447
448
```python { .api }
449
class CreateTopicRequest:
450
"""
451
Request to create a topic.
452
453
Attributes:
454
- name: Topic name
455
- topic: Topic configuration
456
"""
457
458
name: str
459
topic: Topic
460
461
class UpdateTopicRequest:
462
"""
463
Request to update a topic.
464
465
Attributes:
466
- topic: Updated topic configuration
467
- update_mask: Fields to update
468
"""
469
470
topic: Topic
471
update_mask: FieldMask
472
473
class DeleteTopicRequest:
474
"""
475
Request to delete a topic.
476
477
Attributes:
478
- topic: Topic name to delete
479
"""
480
481
topic: str
482
483
class CreateSubscriptionRequest:
484
"""
485
Request to create a subscription.
486
487
Attributes:
488
- name: Subscription name
489
- subscription: Subscription configuration
490
"""
491
492
name: str
493
subscription: Subscription
494
495
class UpdateSubscriptionRequest:
496
"""
497
Request to update a subscription.
498
499
Attributes:
500
- subscription: Updated subscription configuration
501
- update_mask: Fields to update
502
"""
503
504
subscription: Subscription
505
update_mask: FieldMask
506
507
class DeleteSubscriptionRequest:
508
"""
509
Request to delete a subscription.
510
511
Attributes:
512
- subscription: Subscription name to delete
513
"""
514
515
subscription: str
516
517
class DetachSubscriptionRequest:
518
"""
519
Request to detach a subscription from its topic.
520
521
Attributes:
522
- subscription: Subscription name to detach
523
"""
524
525
subscription: str
526
527
class DetachSubscriptionResponse:
528
"""
529
Response from detach subscription operation.
530
"""
531
pass
532
```
533
534
### Schema Types
535
536
Types for schema service operations.
537
538
```python { .api }
539
class Schema:
540
"""
541
A schema resource for message validation.
542
543
Attributes:
544
- name: Schema resource name
545
- type: Schema type (AVRO or PROTOCOL_BUFFER)
546
- definition: Schema definition string
547
- revision_id: Current revision ID
548
- revision_create_time: When revision was created
549
"""
550
551
name: str
552
type: Schema.Type
553
definition: str
554
revision_id: str
555
revision_create_time: Timestamp
556
557
class CreateSchemaRequest:
558
"""
559
Request to create a schema.
560
561
Attributes:
562
- parent: Parent project path
563
- schema: Schema definition
564
- schema_id: ID for the new schema
565
"""
566
567
parent: str
568
schema: Schema
569
schema_id: str
570
571
class ValidateSchemaRequest:
572
"""
573
Request to validate a schema.
574
575
Attributes:
576
- parent: Parent project path
577
- schema: Schema to validate
578
"""
579
580
parent: str
581
schema: Schema
582
583
class ValidateSchemaResponse:
584
"""
585
Response from schema validation.
586
"""
587
pass
588
589
class ValidateMessageRequest:
590
"""
591
Request to validate a message against a schema.
592
593
Attributes:
594
- parent: Parent project path
595
- name: Schema name (alternative to schema)
596
- schema: Schema definition (alternative to name)
597
- message: Message to validate
598
- encoding: Message encoding
599
"""
600
601
parent: str
602
name: str
603
schema: Schema
604
message: bytes
605
encoding: Encoding
606
607
class ValidateMessageResponse:
608
"""
609
Response from message validation.
610
"""
611
pass
612
```
613
614
### Acknowledgment and Response Types
615
616
Types for acknowledgment operations and their responses.
617
618
```python { .api }
619
class AcknowledgeRequest:
620
"""
621
Request for acknowledging messages.
622
623
Attributes:
624
- subscription: Subscription name
625
- ack_ids: List of acknowledgment IDs to acknowledge
626
"""
627
628
subscription: str
629
ack_ids: Sequence[str]
630
631
class ModifyAckDeadlineRequest:
632
"""
633
Request for modifying acknowledgment deadlines.
634
635
Attributes:
636
- subscription: Subscription name
637
- ack_ids: List of acknowledgment IDs to modify
638
- ack_deadline_seconds: New acknowledgment deadline in seconds
639
"""
640
641
subscription: str
642
ack_ids: Sequence[str]
643
ack_deadline_seconds: int
644
645
class AcknowledgeConfirmation:
646
"""
647
Confirmation response for acknowledgment operations.
648
649
Attributes:
650
- ack_ids: List of acknowledged message IDs
651
- temporary_failure_ack_ids: List of temporarily failed acknowledgments
652
- unknown_ack_ids: List of unknown acknowledgment IDs
653
"""
654
655
ack_ids: Sequence[str]
656
temporary_failure_ack_ids: Sequence[str]
657
unknown_ack_ids: Sequence[str]
658
659
class ModifyAckDeadlineConfirmation:
660
"""
661
Confirmation response for deadline modification operations.
662
663
Attributes:
664
- ack_ids: List of successfully modified acknowledgment IDs
665
- temporary_failure_ack_ids: List of temporarily failed modifications
666
- unknown_ack_ids: List of unknown acknowledgment IDs
667
"""
668
669
ack_ids: Sequence[str]
670
temporary_failure_ack_ids: Sequence[str]
671
unknown_ack_ids: Sequence[str]
672
```
673
674
### Seek Operation Types
675
676
Types for seeking subscriptions to specific points in time.
677
678
```python { .api }
679
class SeekRequest:
680
"""
681
Request to seek a subscription.
682
683
Attributes:
684
- subscription: Subscription name to seek
685
- time: Seek to a specific timestamp
686
- snapshot: Seek to a specific snapshot
687
"""
688
689
subscription: str
690
time: Timestamp
691
snapshot: str
692
693
class SeekResponse:
694
"""
695
Response from seek operation.
696
"""
697
pass
698
```
699
700
### Additional Request Types
701
702
Supplementary request types for various operations.
703
704
```python { .api }
705
class GetTopicRequest:
706
"""
707
Request to get a topic.
708
709
Attributes:
710
- topic: Topic name to retrieve
711
"""
712
713
topic: str
714
715
class GetSubscriptionRequest:
716
"""
717
Request to get a subscription.
718
719
Attributes:
720
- subscription: Subscription name to retrieve
721
"""
722
723
subscription: str
724
725
class GetSnapshotRequest:
726
"""
727
Request to get a snapshot.
728
729
Attributes:
730
- snapshot: Snapshot name to retrieve
731
"""
732
733
snapshot: str
734
735
class ListTopicSubscriptionsRequest:
736
"""
737
Request to list subscriptions for a topic.
738
739
Attributes:
740
- topic: Topic name
741
- page_size: Maximum number of subscriptions to return
742
- page_token: Token for pagination
743
"""
744
745
topic: str
746
page_size: int
747
page_token: str
748
749
class ListTopicSubscriptionsResponse:
750
"""
751
Response from listing topic subscriptions.
752
753
Attributes:
754
- subscriptions: List of subscription names
755
- next_page_token: Token for next page
756
"""
757
758
subscriptions: Sequence[str]
759
next_page_token: str
760
761
class ListTopicSnapshotsRequest:
762
"""
763
Request to list snapshots for a topic.
764
765
Attributes:
766
- topic: Topic name
767
- page_size: Maximum number of snapshots to return
768
- page_token: Token for pagination
769
"""
770
771
topic: str
772
page_size: int
773
page_token: str
774
775
class ListTopicSnapshotsResponse:
776
"""
777
Response from listing topic snapshots.
778
779
Attributes:
780
- snapshots: List of snapshot names
781
- next_page_token: Token for next page
782
"""
783
784
snapshots: Sequence[str]
785
next_page_token: str
786
787
class CreateSnapshotRequest:
788
"""
789
Request to create a snapshot.
790
791
Attributes:
792
- name: Snapshot name
793
- subscription: Subscription to create snapshot from
794
- labels: User-defined labels
795
"""
796
797
name: str
798
subscription: str
799
labels: MutableMapping[str, str]
800
801
class UpdateSnapshotRequest:
802
"""
803
Request to update a snapshot.
804
805
Attributes:
806
- snapshot: Updated snapshot configuration
807
- update_mask: Fields to update
808
"""
809
810
snapshot: Snapshot
811
update_mask: FieldMask
812
```
813
814
### Field Mask and Common Types
815
816
Types for field masks and common protobuf types.
817
818
```python { .api }
819
class FieldMask:
820
"""
821
Field mask for specifying which fields to update.
822
823
Attributes:
824
- paths: List of field paths to update
825
"""
826
827
paths: Sequence[str]
828
829
class Timestamp:
830
"""
831
Protobuf timestamp representation.
832
833
Attributes:
834
- seconds: Seconds since Unix epoch
835
- nanos: Nanoseconds within the second
836
"""
837
838
seconds: int
839
nanos: int
840
841
class Duration:
842
"""
843
Protobuf duration representation.
844
845
Attributes:
846
- seconds: Duration in seconds
847
- nanos: Nanoseconds within the second
848
"""
849
850
seconds: int
851
nanos: int
852
```
853
854
### Enum Types
855
856
Enumeration types used throughout the API.
857
858
```python { .api }
859
class Encoding(Enum):
860
"""
861
Message encoding types.
862
"""
863
864
JSON = "JSON"
865
BINARY = "BINARY"
866
867
class SchemaView(Enum):
868
"""
869
Schema view types for retrieval.
870
"""
871
872
BASIC = "BASIC" # Name and type only
873
FULL = "FULL" # Complete schema definition
874
875
class Subscription.State(Enum):
876
"""
877
Subscription states.
878
"""
879
880
ACTIVE = "ACTIVE"
881
RESOURCE_ERROR = "RESOURCE_ERROR"
882
```
883
884
## Usage Examples
885
886
### Working with Message Types
887
888
```python
889
from google.cloud.pubsub_v1 import types
890
from google.protobuf.timestamp_pb2 import Timestamp
891
import time
892
893
# Create a PubsubMessage
894
message = types.PubsubMessage(
895
data=b"Hello, World!",
896
attributes={
897
"event_type": "user_action",
898
"user_id": "12345"
899
},
900
ordering_key="user-12345"
901
)
902
903
# Create a publish request
904
publish_request = types.PublishRequest(
905
topic="projects/my-project/topics/my-topic",
906
messages=[message]
907
)
908
```
909
910
### Topic and Subscription Configuration
911
912
```python
913
from google.cloud.pubsub_v1 import types
914
from google.protobuf.duration_pb2 import Duration
915
916
# Create topic with schema settings
917
schema_settings = types.SchemaSettings(
918
schema="projects/my-project/schemas/user-events",
919
encoding=types.Encoding.JSON
920
)
921
922
topic = types.Topic(
923
name="projects/my-project/topics/user-events",
924
schema_settings=schema_settings,
925
labels={"environment": "production"}
926
)
927
928
# Create subscription with dead letter policy
929
dead_letter_policy = types.DeadLetterPolicy(
930
dead_letter_topic="projects/my-project/topics/user-events-dlq",
931
max_delivery_attempts=5
932
)
933
934
retry_policy = types.RetryPolicy(
935
minimum_backoff=Duration(seconds=10),
936
maximum_backoff=Duration(seconds=300)
937
)
938
939
subscription = types.Subscription(
940
name="projects/my-project/subscriptions/user-events-sub",
941
topic="projects/my-project/topics/user-events",
942
ack_deadline_seconds=60,
943
dead_letter_policy=dead_letter_policy,
944
retry_policy=retry_policy,
945
enable_message_ordering=True,
946
enable_exactly_once_delivery=True
947
)
948
```
949
950
### Push Configuration
951
952
```python
953
# Configure push endpoint
954
push_config = types.PushConfig(
955
push_endpoint="https://my-app.example.com/webhook",
956
attributes={
957
"x-goog-version": "v1"
958
}
959
)
960
961
# Subscription with push delivery
962
push_subscription = types.Subscription(
963
name="projects/my-project/subscriptions/push-sub",
964
topic="projects/my-project/topics/my-topic",
965
push_config=push_config
966
)
967
```
968
969
### BigQuery Configuration
970
971
```python
972
# Configure BigQuery delivery
973
bigquery_config = types.BigQueryConfig(
974
table="my-dataset.my-table",
975
use_topic_schema=True,
976
write_metadata=True,
977
drop_unknown_fields=False
978
)
979
980
bq_subscription = types.Subscription(
981
name="projects/my-project/subscriptions/bq-sub",
982
topic="projects/my-project/topics/my-topic",
983
bigquery_config=bigquery_config
984
)
985
```