feat: add new PhotoSequence resource and RPCs

feat: add gps_record_timestamp_unix_epoch field to Pose resource

PiperOrigin-RevId: 475858723
pull/735/merge
Google APIs 3 years ago committed by Copybara-Service
parent 4adc478b2c
commit b4f7b1eabc
  1. 19
      google/streetview/publish/v1/BUILD.bazel
  2. 292
      google/streetview/publish/v1/resources.proto
  3. 131
      google/streetview/publish/v1/rpcmessages.proto
  4. 105
      google/streetview/publish/v1/streetview_publish.proto

@ -32,6 +32,7 @@ proto_library(
"//google/longrunning:operations_proto",
"//google/rpc:status_proto",
"//google/type:latlng_proto",
"@com_google_protobuf//:duration_proto",
"@com_google_protobuf//:empty_proto",
"@com_google_protobuf//:field_mask_proto",
"@com_google_protobuf//:timestamp_proto",
@ -74,6 +75,7 @@ java_gapic_library(
srcs = [":publish_proto_with_info"],
gapic_yaml = "streetview_publish_gapic.yaml",
grpc_service_config = "streetview_publish_grpc_service_config.json",
rest_numeric_enums = False,
service_yaml = "streetviewpublish.yaml",
test_deps = [
":publish_java_grpc",
@ -97,6 +99,7 @@ java_gapic_test(
# Open Source Packages
java_gapic_assembly_gradle_pkg(
name = "google-cloud-streetview-publish-v1-java",
include_samples = True,
transport = "grpc+rest",
deps = [
":publish_java_gapic",
@ -136,6 +139,7 @@ go_gapic_library(
grpc_service_config = "streetview_publish_grpc_service_config.json",
importpath = "google.golang.org/google/streetview/publish/v1;publish",
metadata = True,
rest_numeric_enums = False,
service_yaml = "streetviewpublish.yaml",
transport = "grpc+rest",
deps = [
@ -143,6 +147,7 @@ go_gapic_library(
"//google/longrunning:longrunning_go_proto",
"@com_google_cloud_go//longrunning:go_default_library",
"@com_google_cloud_go//longrunning/autogen:go_default_library",
"@io_bazel_rules_go//proto/wkt:duration_go_proto",
],
)
@ -171,13 +176,18 @@ load(
"@com_google_googleapis_imports//:imports.bzl",
"py_gapic_assembly_pkg",
"py_gapic_library",
"py_test",
)
py_gapic_library(
name = "publish_py_gapic",
srcs = [":publish_proto"],
grpc_service_config = "streetview_publish_grpc_service_config.json",
rest_numeric_enums = False,
service_yaml = "streetviewpublish.yaml",
transport = "grpc",
deps = [
],
)
# Uncomment once https://github.com/googleapis/gapic-generator-python/issues/1375 is fixed
@ -188,9 +198,7 @@ py_gapic_library(
# "publish_py_gapic_test.py",
# ],
# legacy_create_init = False,
# deps = [
# ":publish_py_gapic",
# ],
# deps = [":publish_py_gapic"],
#)
# Open Source Packages
@ -227,6 +235,7 @@ php_gapic_library(
name = "publish_php_gapic",
srcs = [":publish_proto_with_info"],
grpc_service_config = "streetview_publish_grpc_service_config.json",
rest_numeric_enums = False,
service_yaml = "streetviewpublish.yaml",
deps = [
":publish_php_grpc",
@ -260,6 +269,7 @@ nodejs_gapic_library(
extra_protoc_parameters = ["metadata"],
grpc_service_config = "streetview_publish_grpc_service_config.json",
package = "google.streetview.publish.v1",
rest_numeric_enums = False,
service_yaml = "streetviewpublish.yaml",
deps = [],
)
@ -299,6 +309,8 @@ ruby_cloud_gapic_library(
srcs = [":publish_proto_with_info"],
extra_protoc_parameters = ["ruby-cloud-gem-name=google-cloud-publish-v1"],
grpc_service_config = "streetview_publish_grpc_service_config.json",
rest_numeric_enums = False,
service_yaml = "streetviewpublish.yaml",
deps = [
":publish_ruby_grpc",
":publish_ruby_proto",
@ -342,6 +354,7 @@ csharp_gapic_library(
srcs = [":publish_proto_with_info"],
common_resources_config = "@gax_dotnet//:Google.Api.Gax/ResourceNames/CommonResourcesConfig.json",
grpc_service_config = "streetview_publish_grpc_service_config.json",
rest_numeric_enums = False,
service_yaml = "streetviewpublish.yaml",
deps = [
":publish_csharp_grpc",

@ -1,4 +1,4 @@
// Copyright 2021 Google LLC
// Copyright 2022 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@ -17,6 +17,7 @@ syntax = "proto3";
package google.streetview.publish.v1;
import "google/api/field_behavior.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/timestamp.proto";
import "google/type/latlng.proto";
@ -86,6 +87,9 @@ message Pose {
// NaN indicates an unmeasured quantity.
double roll = 5;
// Time of the GPS record since UTC epoch.
google.protobuf.Timestamp gps_record_timestamp_unix_epoch = 6;
// Level (the floor in a building) used to configure vertical navigation.
Level level = 7;
@ -98,6 +102,36 @@ message Pose {
float accuracy_meters = 9;
}
// IMU data from the device sensors.
message Imu {
// A Generic 3d measurement sample.
message Measurement3d {
// The timestamp of the IMU measurement.
google.protobuf.Timestamp capture_time = 1;
// The sensor measurement in the x axis.
float x = 2;
// The sensor measurement in the y axis.
float y = 3;
// The sensor measurement in the z axis.
float z = 4;
}
// The accelerometer measurements in meters/sec^2 with increasing timestamps
// from devices.
repeated Measurement3d accel_mpsps = 1;
// The gyroscope measurements in radians/sec with increasing timestamps from
// devices.
repeated Measurement3d gyro_rps = 2;
// The magnetometer measurements of the magnetic field in microtesla (uT) with
// increasing timestamps from devices.
repeated Measurement3d mag_ut = 3;
}
// Place metadata for an entity.
message Place {
// Place identifier, as described in
@ -214,3 +248,259 @@ message Photo {
// Output only. Status in Google Maps, whether this photo was published or rejected.
MapsPublishStatus maps_publish_status = 13 [(google.api.field_behavior) = OUTPUT_ONLY];
}
// A sequence of 360 photos along with metadata.
message PhotoSequence {
// Primary source of GPS measurements.
enum GpsSource {
// GPS in raw_gps_timeline takes precedence if it exists.
PHOTO_SEQUENCE = 0;
// GPS in Camera Motion Metadata Track (CAMM) takes precedence if it exists.
CAMERA_MOTION_METADATA_TRACK = 1;
}
// Output only. Unique identifier for the photo sequence.
// This also acts as a long running operation ID if uploading is performed
// asynchronously.
string id = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. Photos with increasing timestamps.
repeated Photo photos = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
// Input only. Required when creating photo sequence. The resource name
// where the bytes of the photo sequence (in the form of video) are uploaded.
UploadRef upload_reference = 3 [(google.api.field_behavior) = INPUT_ONLY];
// Optional. Absolute time when the photo sequence starts to be captured.
// If the photo sequence is a video, this is the start time of the video.
// If this field is populated in input, it overrides the capture time in the
// video or XDM file.
google.protobuf.Timestamp capture_time_override = 4 [(google.api.field_behavior) = OPTIONAL];
// Output only. The time this photo sequence was created in uSV Store service.
google.protobuf.Timestamp upload_time = 18 [(google.api.field_behavior) = OUTPUT_ONLY];
// Input only. Raw GPS measurements with increasing timestamps from the device that
// aren't time synced with each photo.
// These raw measurements will be used to infer the pose of each frame.
// Required in input when InputType is VIDEO and raw GPS measurements are not
// in Camera Motion Metadata Track (CAMM).
// User can indicate which takes precedence using gps_source if raw GPS
// measurements are provided in both raw_gps_timeline and
// Camera Motion Metadata Track (CAMM).
repeated Pose raw_gps_timeline = 7 [(google.api.field_behavior) = INPUT_ONLY];
// Input only. If both raw_gps_timeline and
// the Camera Motion Metadata Track (CAMM) contain GPS measurements,
// indicate which takes precedence.
GpsSource gps_source = 8 [(google.api.field_behavior) = INPUT_ONLY];
// Input only. Three axis IMU data for the collection.
// If this data is too large to put in the request, then it should be put in
// the CAMM track for the video. This data always takes precedence over the
// equivalent CAMM data, if it exists.
Imu imu = 11 [(google.api.field_behavior) = INPUT_ONLY];
// Output only. The processing state of this sequence.
ProcessingState processing_state = 12 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. If this sequence has processing_state = FAILED, this will contain the
// reason why it failed. If the processing_state is any other value, this
// field will be unset.
ProcessingFailureReason failure_reason = 13 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. If this sequence has `failure_reason` set, this may contain additional
// details about the failure.
ProcessingFailureDetails failure_details = 23 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The computed distance of the photo sequence in meters.
double distance_meters = 16 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. A rectangular box that encapsulates every image in this photo sequence.
LatLngBounds sequence_bounds = 20 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The total number of views that all the published images in this
// PhotoSequence have received.
int64 view_count = 21 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The filename of the upload. Does not include the directory path. Only
// available if the sequence was uploaded on a platform that provides the
// filename.
string filename = 22 [(google.api.field_behavior) = OUTPUT_ONLY];
}
// A rectangle in geographical coordinates.
message LatLngBounds {
// The southwest corner of these bounds.
google.type.LatLng southwest = 1;
// The northeast corner of these bounds.
google.type.LatLng northeast = 2;
}
// The processing state of the sequence. The states move as follows:
//
// ```
// +-------------------------+
// | |
// +---v---+ +----------+ +----+----+
// |PENDING+-->PROCESSING+-->PROCESSED|
// +---+---+ +----+-----+ +----+----+
// | | |
// | +--v---+ |
// +-------->FAILED<---------+
// +------+
// ```
//
// The sequence may move to FAILED from any state. Additionally, a processed
// sequence may be re-processed at any time.
enum ProcessingState {
// The state is unspecified, this is the default value.
PROCESSING_STATE_UNSPECIFIED = 0;
// The sequence has not yet started processing.
PENDING = 1;
// The sequence is currently in processing.
PROCESSING = 2;
// The sequence has finished processing including refining position.
PROCESSED = 3;
// The sequence failed processing. See FailureReason for more details.
FAILED = 4;
}
// The possible reasons this [PhotoSequence]
// [google.streetview.publish.v1.PhotoSequence] failed to process.
enum ProcessingFailureReason {
// The failure reason is unspecified, this is the default value.
PROCESSING_FAILURE_REASON_UNSPECIFIED = 0;
// Video frame's resolution is too small.
LOW_RESOLUTION = 1;
// This video has been uploaded before.
DUPLICATE = 2;
// Too few GPS points.
INSUFFICIENT_GPS = 3;
// No overlap between the time frame of GPS track and the time frame of
// video.
NO_OVERLAP_GPS = 4;
// GPS is invalid (e.x. all GPS points are at (0,0))
INVALID_GPS = 5;
// The sequence of photos could not be accurately located in the world.
FAILED_TO_REFINE_POSITIONS = 6;
// The sequence was taken down for policy reasons.
TAKEDOWN = 7;
// The video file was corrupt or could not be decoded.
CORRUPT_VIDEO = 8;
// A permanent failure in the underlying system occurred.
INTERNAL = 9;
// The video format is invalid or unsupported.
INVALID_VIDEO_FORMAT = 10;
// Invalid image aspect ratio found.
INVALID_VIDEO_DIMENSIONS = 11;
// Invalid capture time. Timestamps were from the future.
INVALID_CAPTURE_TIME = 12;
// GPS data contains a gap greater than 5 seconds in duration.
GPS_DATA_GAP = 13;
// GPS data is too erratic to be processed.
JUMPY_GPS = 14;
// IMU (Accelerometer, Gyroscope, etc.) data are not valid. They may be
// missing required fields (x, y, z or time), may not be formatted correctly,
// or any other issue that prevents our systems from parsing it.
INVALID_IMU = 15;
// Too few IMU points.
INSUFFICIENT_IMU = 21;
// Insufficient overlap in the time frame between GPS, IMU, and other time
// series data.
INSUFFICIENT_OVERLAP_TIME_SERIES = 22;
// IMU (Accelerometer, Gyroscope, etc.) data contain gaps greater than 0.1
// seconds in duration.
IMU_DATA_GAP = 16;
// The camera is not supported.
UNSUPPORTED_CAMERA = 17;
// Some frames were indoors, which is unsupported.
NOT_OUTDOORS = 18;
// Not enough video frames.
INSUFFICIENT_VIDEO_FRAMES = 19;
}
// Additional details to accompany the ProcessingFailureReason enum.
// This message is always expected to be used in conjunction with
// ProcessingFailureReason, and the oneof value set in this message should match
// the FailureReason.
message ProcessingFailureDetails {
// Only one set of details will be set, and must match the corresponding enum
// in ProcessingFailureReason.
oneof details {
// See InsufficientGpsFailureDetails.
InsufficientGpsFailureDetails insufficient_gps_details = 1;
// See GpsDataGapFailureDetails.
GpsDataGapFailureDetails gps_data_gap_details = 2;
// See ImuDataGapFailureDetails.
ImuDataGapFailureDetails imu_data_gap_details = 3;
// See NotOutdoorsFailureDetails.
NotOutdoorsFailureDetails not_outdoors_details = 4;
}
}
// Details related to ProcessingFailureReason#INSUFFICIENT_GPS.
message InsufficientGpsFailureDetails {
// The number of GPS points that were found in the video.
optional int32 gps_points_found = 1;
}
// Details related to ProcessingFailureReason#GPS_DATA_GAP.
// If there are multiple GPS data gaps, only the one with the largest duration
// is reported here.
message GpsDataGapFailureDetails {
// The duration of the gap in GPS data that was found.
optional google.protobuf.Duration gap_duration = 1;
// Relative time (from the start of the video stream) when the gap started.
optional google.protobuf.Duration gap_start_time = 2;
}
// Details related to ProcessingFailureReason#IMU_DATA_GAP.
// If there are multiple IMU data gaps, only the one with the largest duration
// is reported here.
message ImuDataGapFailureDetails {
// The duration of the gap in IMU data that was found.
optional google.protobuf.Duration gap_duration = 1;
// Relative time (from the start of the video stream) when the gap started.
optional google.protobuf.Duration gap_start_time = 2;
}
// Details related to ProcessingFailureReason#NOT_OUTDOORS.
// If there are multiple indoor frames found, the first frame is recorded here.
message NotOutdoorsFailureDetails {
// Relative time (from the start of the video stream) when an indoor frame was
// found.
optional google.protobuf.Duration start_time = 1;
}

@ -1,4 +1,4 @@
// Copyright 2021 Google LLC
// Copyright 2022 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@ -17,6 +17,7 @@ syntax = "proto3";
package google.streetview.publish.v1;
import "google/api/field_behavior.proto";
import "google/longrunning/operations.proto";
import "google/protobuf/field_mask.proto";
import "google/rpc/status.proto";
import "google/streetview/publish/v1/resources.proto";
@ -143,7 +144,9 @@ message ListPhotosRequest {
// Optional. The filter expression. For example: `placeId=ChIJj61dQgK6j4AR4GeTYWZsKWw`.
//
// The filters supported at the moment are: `placeId`.
// The filters supported are: `placeId`, `min_latitude`, `max_latitude`,
// `min_longitude`, and `max_longitude`. See https://google.aip.dev/160 for
// more information.
string filter = 4 [(google.api.field_behavior) = OPTIONAL];
// Optional. The BCP-47 language code, such as "en-US" or "sr-Latn". For more
@ -234,6 +237,67 @@ message BatchDeletePhotosRequest {
repeated string photo_ids = 1 [(google.api.field_behavior) = REQUIRED];
}
// Request to create a
// [PhotoSequence][google.streetview.publish.v1.PhotoSequence] from a video.
message CreatePhotoSequenceRequest {
// Input forms of [PhotoSequence][google.streetview.publish.v1.PhotoSequence].
enum InputType {
// Not specified. Server will return [google.rpc.Code.INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT].
INPUT_TYPE_UNSPECIFIED = 0;
// 360 Video.
VIDEO = 1;
// Extensible Device Metadata, http://www.xdm.org
XDM = 2;
}
// Required. [PhotoSequence][google.streetview.publish.v1.PhotoSequence] to
// create.
PhotoSequence photo_sequence = 1 [(google.api.field_behavior) = REQUIRED];
// Required. The input form of
// [PhotoSequence][google.streetview.publish.v1.PhotoSequence].
InputType input_type = 2 [(google.api.field_behavior) = REQUIRED];
}
// Request to get a [PhotoSequence][google.streetview.publish.v1.PhotoSequence].
//
// By default
//
// * does not return the download URL for the
// [PhotoSequence][google.streetview.publish.v1.PhotoSequence].
//
// Parameters:
//
// * `view` controls if the download URL for the
// [PhotoSequence][google.streetview.publish.v1.PhotoSequence] is
// returned.
message GetPhotoSequenceRequest {
// Required. ID of the photo sequence.
string sequence_id = 1 [(google.api.field_behavior) = REQUIRED];
// Specifies if a download URL for the photo sequence should be returned in
// `download_url` of individual photos in the
// [PhotoSequence][google.streetview.publish.v1.PhotoSequence] response.
// > Note: Currently not implemented.
PhotoView view = 2 [deprecated = true];
// Optional. The filter expression. For example: `published_status=PUBLISHED`.
//
// The filters supported are: `published_status`. See
// https://google.aip.dev/160 for more information.
string filter = 3 [(google.api.field_behavior) = OPTIONAL];
}
// Request to delete a
// [PhotoSequence][google.streetview.publish.v1.PhotoSequence].
message DeletePhotoSequenceRequest {
// Required. ID of the
// [PhotoSequence][google.streetview.publish.v1.PhotoSequence].
string sequence_id = 1 [(google.api.field_behavior) = REQUIRED];
}
// Response to batch delete of one or more
// [Photos][google.streetview.publish.v1.Photo].
message BatchDeletePhotosResponse {
@ -242,6 +306,69 @@ message BatchDeletePhotosResponse {
repeated google.rpc.Status status = 1;
}
// Request to list all photo sequences that belong to the user sending the
// request.
//
// Parameters:
//
// * `pageSize` determines the maximum number of photo sequences to return.
// * `pageToken` is the next page token value returned from a previous
// [ListPhotoSequences][google.streetview.publish.v1.StreetViewPublishService.ListPhotoSequences]
// request, if any.
message ListPhotoSequencesRequest {
// Optional. The maximum number of photo sequences to return.
// `pageSize` must be non-negative. If `pageSize` is zero or is not
// provided, the default page size of 100 is used.
// The number of photo sequences returned in the response may be less than
// `pageSize` if the number of matches is less than `pageSize`.
// This is currently unimplemented but is in process.
int32 page_size = 1 [(google.api.field_behavior) = OPTIONAL];
// Optional. The
// [nextPageToken][google.streetview.publish.v1.ListPhotosResponse.next_page_token]
// value returned from a previous
// [ListPhotoSequences][google.streetview.publish.v1.StreetViewPublishService.ListPhotoSequences]
// request, if any.
string page_token = 2 [(google.api.field_behavior) = OPTIONAL];
// Optional. The filter expression. For example: `imagery_type=SPHERICAL`.
//
// The filters supported are: `imagery_type`, `processing_state`,
// `min_latitude`, `max_latitude`, `min_longitude`, `max_longitude`, and
// `filename_query`. See https://google.aip.dev/160 for more information.
// Filename queries should sent as a Phrase in order to support multple words
// and special characters by adding escaped quotes. Ex:
// filename_query="example of a phrase.mp4"
string filter = 4 [(google.api.field_behavior) = OPTIONAL];
}
// Response to list all photo sequences that belong to a user.
message ListPhotoSequencesResponse {
// List of photo sequences via [Operation][google.longrunning.Operation]
// interface.
//
// The maximum number of items returned is based on the
// [pageSize][google.streetview.publish.v1.ListPhotoSequencesRequest.page_size]
// field in the request.
//
// Each item in the list can have three possible states,
//
// * `Operation.done` = false, if the processing of
// [PhotoSequence][google.streetview.publish.v1.PhotoSequence] is not
// finished yet.
// * `Operation.done` = true and `Operation.error` is populated, if there was
// an error in processing.
// * `Operation.done` = true and `Operation.response` contains a
// [PhotoSequence][google.streetview.publish.v1.PhotoSequence] message,
// In each sequence, only
// [Id][google.streetview.publish.v1.PhotoSequence.id] is populated.
repeated google.longrunning.Operation photo_sequences = 1;
// Token to retrieve the next page of results, or empty if there are no more
// results in the list.
string next_page_token = 2;
}
// Specifies which view of the [Photo][google.streetview.publish.v1.Photo]
// to include in the response.
enum PhotoView {

@ -1,4 +1,4 @@
// Copyright 2021 Google LLC
// Copyright 2022 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@ -18,6 +18,7 @@ package google.streetview.publish.v1;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/longrunning/operations.proto";
import "google/protobuf/empty.proto";
import "google/streetview/publish/v1/resources.proto";
import "google/streetview/publish/v1/rpcmessages.proto";
@ -243,4 +244,106 @@ service StreetViewPublishService {
};
option (google.api.method_signature) = "photo_ids";
}
// Creates an upload session to start uploading photo sequence data.
// The upload URL of the returned
// [UploadRef][google.streetview.publish.v1.UploadRef] is used to upload the
// data for the `photoSequence`.
//
// After the upload is complete, the
// [UploadRef][google.streetview.publish.v1.UploadRef] is used with
// [CreatePhotoSequence][google.streetview.publish.v1.StreetViewPublishService.CreatePhotoSequence]
// to create the [PhotoSequence][google.streetview.publish.v1.PhotoSequence]
// object entry.
rpc StartPhotoSequenceUpload(google.protobuf.Empty) returns (UploadRef) {
option (google.api.http) = {
post: "/v1/photoSequence:startUpload"
body: "*"
};
}
// After the client finishes uploading the
// [PhotoSequence][google.streetview.publish.v1.PhotoSequence] with the
// returned [UploadRef][google.streetview.publish.v1.UploadRef],
// [CreatePhotoSequence][google.streetview.publish.v1.StreetViewPublishService.CreatePhotoSequence]
// extracts a sequence of 360 photos from a video or Extensible Device
// Metadata (XDM, http://www.xdm.org/) to be published to Street View on
// Google Maps.
//
// `CreatePhotoSequence` returns an [Operation][google.longrunning.Operation],
// with the [PhotoSequence][google.streetview.publish.v1.PhotoSequence] Id set
// in the `Operation.name` field.
//
// This method returns the following error codes:
//
// * [google.rpc.Code.INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT] if the request is malformed.
// * [google.rpc.Code.NOT_FOUND][google.rpc.Code.NOT_FOUND] if the upload reference does not exist.
rpc CreatePhotoSequence(CreatePhotoSequenceRequest) returns (google.longrunning.Operation) {
option (google.api.http) = {
post: "/v1/photoSequence"
body: "photo_sequence"
};
option (google.api.method_signature) = "photo_sequence,input_type";
option (google.longrunning.operation_info) = {
response_type: "PhotoSequence"
metadata_type: "google.protobuf.Empty"
};
}
// Gets the metadata of the specified
// [PhotoSequence][google.streetview.publish.v1.PhotoSequence] via the
// [Operation][google.longrunning.Operation] interface.
//
// This method returns the following three types of responses:
//
// * `Operation.done` = false, if the processing of
// [PhotoSequence][google.streetview.publish.v1.PhotoSequence] is not
// finished yet.
// * `Operation.done` = true and `Operation.error` is populated, if there was
// an error in processing.
// * `Operation.done` = true and `Operation.response` is poulated, which
// contains a [PhotoSequence][google.streetview.publish.v1.PhotoSequence]
// message.
//
// This method returns the following error codes:
//
// * [google.rpc.Code.PERMISSION_DENIED][google.rpc.Code.PERMISSION_DENIED] if the requesting user did not
// create the requested
// [PhotoSequence][google.streetview.publish.v1.PhotoSequence].
// * [google.rpc.Code.NOT_FOUND][google.rpc.Code.NOT_FOUND] if the requested
// [PhotoSequence][google.streetview.publish.v1.PhotoSequence] does not exist.
rpc GetPhotoSequence(GetPhotoSequenceRequest) returns (google.longrunning.Operation) {
option (google.api.http) = {
get: "/v1/photoSequence/{sequence_id}"
};
option (google.longrunning.operation_info) = {
response_type: "PhotoSequence"
metadata_type: "google.protobuf.Empty"
};
}
// Lists all the [PhotoSequences][google.streetview.publish.v1.PhotoSequence]
// that belong to the user, in descending CreatePhotoSequence timestamp order.
rpc ListPhotoSequences(ListPhotoSequencesRequest) returns (ListPhotoSequencesResponse) {
option (google.api.http) = {
get: "/v1/photoSequences"
};
}
// Deletes a [PhotoSequence][google.streetview.publish.v1.PhotoSequence] and
// its metadata.
//
// This method returns the following error codes:
//
// * [google.rpc.Code.PERMISSION_DENIED][google.rpc.Code.PERMISSION_DENIED] if the requesting user did not
// create the requested photo sequence.
// * [google.rpc.Code.NOT_FOUND][google.rpc.Code.NOT_FOUND] if the photo sequence ID does not exist.
// * [google.rpc.Code.FAILED_PRECONDITION][google.rpc.Code.FAILED_PRECONDITION] if the photo sequence ID is not
// yet finished processing.
rpc DeletePhotoSequence(DeletePhotoSequenceRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v1/photoSequence/{sequence_id}"
};
option (google.api.method_signature) = "sequence_id";
}
}

Loading…
Cancel
Save