Project import generated by Copybara.
GitOrigin-RevId: d9e9e3fb4e31372ec1fb43b178994ca78fa8fe70
diff --git a/api/api_proto/__init__.py b/api/api_proto/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/api/api_proto/__init__.py
diff --git a/api/api_proto/common.proto b/api/api_proto/common.proto
new file mode 100644
index 0000000..0ff0750
--- /dev/null
+++ b/api/api_proto/common.proto
@@ -0,0 +1,109 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+// This file defines small protobufs that are included as parts of
+// multiple services or *_objects.proto PBs.
+//
+// "Ref" objects contain enough information for a UI to display
+// something to the user, and identifying info so that the client can
+// request more info from the server.
+
+syntax = "proto3";
+
+package monorail;
+
+
+// Next available tag: 3
+message ComponentRef {
+ string path = 1;
+ bool is_derived = 2;
+}
+
+
+// Next available tag: 9
+enum FieldType {
+ NO_TYPE = 0;
+ ENUM_TYPE = 1;
+ INT_TYPE = 2;
+ STR_TYPE = 3;
+ USER_TYPE = 4;
+ DATE_TYPE = 5;
+ BOOL_TYPE = 6;
+ URL_TYPE = 7;
+ APPROVAL_TYPE = 8;
+}
+
+
+// Next available tag: 5
+message FieldRef {
+ // TODO(crbug.com/monorail/4062): Don't use field IDs to identify fields.
+ uint64 field_id = 1;
+ string field_name = 2;
+ FieldType type = 3;
+ string approval_name = 4;
+}
+
+
+// Next available tag: 3
+message LabelRef {
+ string label = 1;
+ bool is_derived = 2;
+}
+
+
+// Next available tag: 4
+message StatusRef {
+ string status = 1;
+ bool means_open = 2;
+ bool is_derived = 3;
+}
+
+
+// Next available tag: 4
+message IssueRef {
+ string project_name = 1;
+ uint32 local_id = 2;
+ string ext_identifier = 3; // For referencing external issues, e.g. b/1234.
+}
+
+
+// Next available tag: 4
+message UserRef {
+ uint64 user_id = 1;
+ string display_name = 2; // email, or obscured like "usern...@example.com".
+ bool is_derived = 3;
+}
+
+
+// Next available tag: 4
+message HotlistRef {
+ // TODO(4131): Don't use hotlist IDs to identify hotlists.
+ uint64 hotlist_id = 1;
+ string name = 2;
+ UserRef owner = 3;
+}
+
+
+// Next available tag: 3
+message ValueAndWhy {
+ string value = 1;
+ string why = 2;
+}
+
+
+// Next available tag: 3
+message Pagination {
+ uint32 max_items = 1;
+ uint32 start = 2;
+}
+
+
+// Next available tag: 5
+message SavedQuery {
+ uint64 query_id = 1;
+ string name = 2;
+ string query = 3;
+ repeated string project_names = 4;
+}
diff --git a/api/api_proto/common_pb2.py b/api/api_proto/common_pb2.py
new file mode 100644
index 0000000..1d31b51
--- /dev/null
+++ b/api/api_proto/common_pb2.py
@@ -0,0 +1,610 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: api/api_proto/common.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf.internal import enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='api/api_proto/common.proto',
+ package='monorail',
+ syntax='proto3',
+ serialized_options=None,
+ serialized_pb=_b('\n\x1a\x61pi/api_proto/common.proto\x12\x08monorail\"0\n\x0c\x43omponentRef\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x12\n\nis_derived\x18\x02 \x01(\x08\"j\n\x08\x46ieldRef\x12\x10\n\x08\x66ield_id\x18\x01 \x01(\x04\x12\x12\n\nfield_name\x18\x02 \x01(\t\x12!\n\x04type\x18\x03 \x01(\x0e\x32\x13.monorail.FieldType\x12\x15\n\rapproval_name\x18\x04 \x01(\t\"-\n\x08LabelRef\x12\r\n\x05label\x18\x01 \x01(\t\x12\x12\n\nis_derived\x18\x02 \x01(\x08\"C\n\tStatusRef\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x12\n\nmeans_open\x18\x02 \x01(\x08\x12\x12\n\nis_derived\x18\x03 \x01(\x08\"J\n\x08IssueRef\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12\x10\n\x08local_id\x18\x02 \x01(\r\x12\x16\n\x0e\x65xt_identifier\x18\x03 \x01(\t\"D\n\x07UserRef\x12\x0f\n\x07user_id\x18\x01 \x01(\x04\x12\x14\n\x0c\x64isplay_name\x18\x02 \x01(\t\x12\x12\n\nis_derived\x18\x03 \x01(\x08\"P\n\nHotlistRef\x12\x12\n\nhotlist_id\x18\x01 \x01(\x04\x12\x0c\n\x04name\x18\x02 \x01(\t\x12 \n\x05owner\x18\x03 \x01(\x0b\x32\x11.monorail.UserRef\")\n\x0bValueAndWhy\x12\r\n\x05value\x18\x01 \x01(\t\x12\x0b\n\x03why\x18\x02 \x01(\t\".\n\nPagination\x12\x11\n\tmax_items\x18\x01 \x01(\r\x12\r\n\x05start\x18\x02 \x01(\r\"R\n\nSavedQuery\x12\x10\n\x08query_id\x18\x01 \x01(\x04\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\r\n\x05query\x18\x03 \x01(\t\x12\x15\n\rproject_names\x18\x04 \x03(\t*\x91\x01\n\tFieldType\x12\x0b\n\x07NO_TYPE\x10\x00\x12\r\n\tENUM_TYPE\x10\x01\x12\x0c\n\x08INT_TYPE\x10\x02\x12\x0c\n\x08STR_TYPE\x10\x03\x12\r\n\tUSER_TYPE\x10\x04\x12\r\n\tDATE_TYPE\x10\x05\x12\r\n\tBOOL_TYPE\x10\x06\x12\x0c\n\x08URL_TYPE\x10\x07\x12\x11\n\rAPPROVAL_TYPE\x10\x08\x62\x06proto3')
+)
+
+_FIELDTYPE = _descriptor.EnumDescriptor(
+ name='FieldType',
+ full_name='monorail.FieldType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='NO_TYPE', index=0, number=0,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ENUM_TYPE', index=1, number=1,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INT_TYPE', index=2, number=2,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='STR_TYPE', index=3, number=3,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='USER_TYPE', index=4, number=4,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DATE_TYPE', index=5, number=5,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='BOOL_TYPE', index=6, number=6,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='URL_TYPE', index=7, number=7,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='APPROVAL_TYPE', index=8, number=8,
+ serialized_options=None,
+ type=None),
+ ],
+ containing_type=None,
+ serialized_options=None,
+ serialized_start=718,
+ serialized_end=863,
+)
+_sym_db.RegisterEnumDescriptor(_FIELDTYPE)
+
+FieldType = enum_type_wrapper.EnumTypeWrapper(_FIELDTYPE)
+NO_TYPE = 0
+ENUM_TYPE = 1
+INT_TYPE = 2
+STR_TYPE = 3
+USER_TYPE = 4
+DATE_TYPE = 5
+BOOL_TYPE = 6
+URL_TYPE = 7
+APPROVAL_TYPE = 8
+
+
+
+_COMPONENTREF = _descriptor.Descriptor(
+ name='ComponentRef',
+ full_name='monorail.ComponentRef',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='path', full_name='monorail.ComponentRef.path', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='is_derived', full_name='monorail.ComponentRef.is_derived', index=1,
+ number=2, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=40,
+ serialized_end=88,
+)
+
+
+_FIELDREF = _descriptor.Descriptor(
+ name='FieldRef',
+ full_name='monorail.FieldRef',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='field_id', full_name='monorail.FieldRef.field_id', index=0,
+ number=1, type=4, cpp_type=4, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='field_name', full_name='monorail.FieldRef.field_name', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='type', full_name='monorail.FieldRef.type', index=2,
+ number=3, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='approval_name', full_name='monorail.FieldRef.approval_name', index=3,
+ number=4, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=90,
+ serialized_end=196,
+)
+
+
+_LABELREF = _descriptor.Descriptor(
+ name='LabelRef',
+ full_name='monorail.LabelRef',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='label', full_name='monorail.LabelRef.label', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='is_derived', full_name='monorail.LabelRef.is_derived', index=1,
+ number=2, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=198,
+ serialized_end=243,
+)
+
+
+_STATUSREF = _descriptor.Descriptor(
+ name='StatusRef',
+ full_name='monorail.StatusRef',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='status', full_name='monorail.StatusRef.status', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='means_open', full_name='monorail.StatusRef.means_open', index=1,
+ number=2, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='is_derived', full_name='monorail.StatusRef.is_derived', index=2,
+ number=3, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=245,
+ serialized_end=312,
+)
+
+
+_ISSUEREF = _descriptor.Descriptor(
+ name='IssueRef',
+ full_name='monorail.IssueRef',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.IssueRef.project_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='local_id', full_name='monorail.IssueRef.local_id', index=1,
+ number=2, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='ext_identifier', full_name='monorail.IssueRef.ext_identifier', index=2,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=314,
+ serialized_end=388,
+)
+
+
+_USERREF = _descriptor.Descriptor(
+ name='UserRef',
+ full_name='monorail.UserRef',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='user_id', full_name='monorail.UserRef.user_id', index=0,
+ number=1, type=4, cpp_type=4, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='display_name', full_name='monorail.UserRef.display_name', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='is_derived', full_name='monorail.UserRef.is_derived', index=2,
+ number=3, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=390,
+ serialized_end=458,
+)
+
+
+_HOTLISTREF = _descriptor.Descriptor(
+ name='HotlistRef',
+ full_name='monorail.HotlistRef',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='hotlist_id', full_name='monorail.HotlistRef.hotlist_id', index=0,
+ number=1, type=4, cpp_type=4, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='name', full_name='monorail.HotlistRef.name', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='owner', full_name='monorail.HotlistRef.owner', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=460,
+ serialized_end=540,
+)
+
+
+_VALUEANDWHY = _descriptor.Descriptor(
+ name='ValueAndWhy',
+ full_name='monorail.ValueAndWhy',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='value', full_name='monorail.ValueAndWhy.value', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='why', full_name='monorail.ValueAndWhy.why', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=542,
+ serialized_end=583,
+)
+
+
+_PAGINATION = _descriptor.Descriptor(
+ name='Pagination',
+ full_name='monorail.Pagination',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='max_items', full_name='monorail.Pagination.max_items', index=0,
+ number=1, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='start', full_name='monorail.Pagination.start', index=1,
+ number=2, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=585,
+ serialized_end=631,
+)
+
+
+_SAVEDQUERY = _descriptor.Descriptor(
+ name='SavedQuery',
+ full_name='monorail.SavedQuery',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='query_id', full_name='monorail.SavedQuery.query_id', index=0,
+ number=1, type=4, cpp_type=4, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='name', full_name='monorail.SavedQuery.name', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='query', full_name='monorail.SavedQuery.query', index=2,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='project_names', full_name='monorail.SavedQuery.project_names', index=3,
+ number=4, type=9, cpp_type=9, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=633,
+ serialized_end=715,
+)
+
+_FIELDREF.fields_by_name['type'].enum_type = _FIELDTYPE
+_HOTLISTREF.fields_by_name['owner'].message_type = _USERREF
+DESCRIPTOR.message_types_by_name['ComponentRef'] = _COMPONENTREF
+DESCRIPTOR.message_types_by_name['FieldRef'] = _FIELDREF
+DESCRIPTOR.message_types_by_name['LabelRef'] = _LABELREF
+DESCRIPTOR.message_types_by_name['StatusRef'] = _STATUSREF
+DESCRIPTOR.message_types_by_name['IssueRef'] = _ISSUEREF
+DESCRIPTOR.message_types_by_name['UserRef'] = _USERREF
+DESCRIPTOR.message_types_by_name['HotlistRef'] = _HOTLISTREF
+DESCRIPTOR.message_types_by_name['ValueAndWhy'] = _VALUEANDWHY
+DESCRIPTOR.message_types_by_name['Pagination'] = _PAGINATION
+DESCRIPTOR.message_types_by_name['SavedQuery'] = _SAVEDQUERY
+DESCRIPTOR.enum_types_by_name['FieldType'] = _FIELDTYPE
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+ComponentRef = _reflection.GeneratedProtocolMessageType('ComponentRef', (_message.Message,), dict(
+ DESCRIPTOR = _COMPONENTREF,
+ __module__ = 'api.api_proto.common_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ComponentRef)
+ ))
+_sym_db.RegisterMessage(ComponentRef)
+
+FieldRef = _reflection.GeneratedProtocolMessageType('FieldRef', (_message.Message,), dict(
+ DESCRIPTOR = _FIELDREF,
+ __module__ = 'api.api_proto.common_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.FieldRef)
+ ))
+_sym_db.RegisterMessage(FieldRef)
+
+LabelRef = _reflection.GeneratedProtocolMessageType('LabelRef', (_message.Message,), dict(
+ DESCRIPTOR = _LABELREF,
+ __module__ = 'api.api_proto.common_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.LabelRef)
+ ))
+_sym_db.RegisterMessage(LabelRef)
+
+StatusRef = _reflection.GeneratedProtocolMessageType('StatusRef', (_message.Message,), dict(
+ DESCRIPTOR = _STATUSREF,
+ __module__ = 'api.api_proto.common_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.StatusRef)
+ ))
+_sym_db.RegisterMessage(StatusRef)
+
+IssueRef = _reflection.GeneratedProtocolMessageType('IssueRef', (_message.Message,), dict(
+ DESCRIPTOR = _ISSUEREF,
+ __module__ = 'api.api_proto.common_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.IssueRef)
+ ))
+_sym_db.RegisterMessage(IssueRef)
+
+UserRef = _reflection.GeneratedProtocolMessageType('UserRef', (_message.Message,), dict(
+ DESCRIPTOR = _USERREF,
+ __module__ = 'api.api_proto.common_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.UserRef)
+ ))
+_sym_db.RegisterMessage(UserRef)
+
+HotlistRef = _reflection.GeneratedProtocolMessageType('HotlistRef', (_message.Message,), dict(
+ DESCRIPTOR = _HOTLISTREF,
+ __module__ = 'api.api_proto.common_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.HotlistRef)
+ ))
+_sym_db.RegisterMessage(HotlistRef)
+
+ValueAndWhy = _reflection.GeneratedProtocolMessageType('ValueAndWhy', (_message.Message,), dict(
+ DESCRIPTOR = _VALUEANDWHY,
+ __module__ = 'api.api_proto.common_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ValueAndWhy)
+ ))
+_sym_db.RegisterMessage(ValueAndWhy)
+
+Pagination = _reflection.GeneratedProtocolMessageType('Pagination', (_message.Message,), dict(
+ DESCRIPTOR = _PAGINATION,
+ __module__ = 'api.api_proto.common_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.Pagination)
+ ))
+_sym_db.RegisterMessage(Pagination)
+
+SavedQuery = _reflection.GeneratedProtocolMessageType('SavedQuery', (_message.Message,), dict(
+ DESCRIPTOR = _SAVEDQUERY,
+ __module__ = 'api.api_proto.common_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.SavedQuery)
+ ))
+_sym_db.RegisterMessage(SavedQuery)
+
+
+# @@protoc_insertion_point(module_scope)
diff --git a/api/api_proto/common_prpc_pb2.py b/api/api_proto/common_prpc_pb2.py
new file mode 100644
index 0000000..fb73302
--- /dev/null
+++ b/api/api_proto/common_prpc_pb2.py
@@ -0,0 +1,4 @@
+# Generated by the pRPC protocol buffer compiler plugin. DO NOT EDIT!
+# source: api/api_proto/common.proto
+
+from google.protobuf import descriptor_pb2
diff --git a/api/api_proto/features.proto b/api/api_proto/features.proto
new file mode 100644
index 0000000..7d7f2fc
--- /dev/null
+++ b/api/api_proto/features.proto
@@ -0,0 +1,229 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+syntax = "proto3";
+
+package monorail;
+
+import "api/api_proto/common.proto";
+import "api/api_proto/features_objects.proto";
+
+
+service Features {
+ rpc ListHotlistsByUser (ListHotlistsByUserRequest) returns (ListHotlistsByUserResponse) {}
+ rpc ListHotlistsByIssue (ListHotlistsByIssueRequest) returns (ListHotlistsByIssueResponse) {}
+ rpc ListRecentlyVisitedHotlists (ListRecentlyVisitedHotlistsRequest) returns (ListRecentlyVisitedHotlistsResponse) {}
+ rpc ListStarredHotlists (ListStarredHotlistsRequest) returns (ListStarredHotlistsResponse) {}
+ rpc GetHotlistStarCount (GetHotlistStarCountRequest) returns (GetHotlistStarCountResponse) {}
+ rpc StarHotlist (StarHotlistRequest) returns (StarHotlistResponse) {}
+ rpc GetHotlist (GetHotlistRequest) returns (GetHotlistResponse) {}
+ rpc ListHotlistItems (ListHotlistItemsRequest) returns (ListHotlistItemsResponse) {}
+ rpc CreateHotlist (CreateHotlistRequest) returns (CreateHotlistResponse) {}
+ rpc CheckHotlistName (CheckHotlistNameRequest) returns (CheckHotlistNameResponse) {}
+ rpc RemoveIssuesFromHotlists (RemoveIssuesFromHotlistsRequest) returns (RemoveIssuesFromHotlistsResponse) {}
+ rpc AddIssuesToHotlists (AddIssuesToHotlistsRequest) returns (AddIssuesToHotlistsResponse) {}
+ rpc RerankHotlistIssues (RerankHotlistIssuesRequest) returns (RerankHotlistIssuesResponse) {}
+ rpc UpdateHotlistIssueNote (UpdateHotlistIssueNoteRequest) returns (UpdateHotlistIssueNoteResponse) {}
+ rpc DeleteHotlist (DeleteHotlistRequest) returns (DeleteHotlistResponse) {}
+ rpc PredictComponent (PredictComponentRequest) returns (PredictComponentResponse) {}
+}
+
+
+// Next available tag: 3
+message ListHotlistsByUserRequest {
+ UserRef user = 2;
+}
+
+
+// Next available tag: 2
+message ListHotlistsByUserResponse {
+ repeated Hotlist hotlists = 1;
+}
+
+
+// Next available tag: 3
+message ListHotlistsByIssueRequest {
+ IssueRef issue = 2;
+}
+
+
+// Next available tag: 2
+message ListHotlistsByIssueResponse {
+ repeated Hotlist hotlists = 1;
+}
+
+
+// Next available tag: 2
+message ListRecentlyVisitedHotlistsRequest {
+}
+
+
+// Next available tag: 2
+message ListRecentlyVisitedHotlistsResponse {
+ repeated Hotlist hotlists = 1;
+}
+
+
+// Next available tag: 2
+message ListStarredHotlistsRequest {
+}
+
+
+// Next available tag: 2
+message ListStarredHotlistsResponse {
+ repeated Hotlist hotlists = 1;
+}
+
+
+// Next available tag: 3
+message GetHotlistStarCountRequest {
+ HotlistRef hotlist_ref = 2;
+}
+
+
+// Next available tag: 2
+message GetHotlistStarCountResponse {
+ uint32 star_count = 1;
+}
+
+
+// Next available tag: 4
+message StarHotlistRequest {
+ HotlistRef hotlist_ref = 2;
+ bool starred = 3;
+}
+
+
+// Next available tag: 2
+message StarHotlistResponse {
+ uint32 star_count = 1;
+}
+
+// Next available tag: 2
+message GetHotlistRequest {
+ HotlistRef hotlist_ref = 1;
+}
+
+// Next available tag: 2
+message GetHotlistResponse {
+ Hotlist hotlist = 1;
+}
+
+
+// Next available tag: 7
+message ListHotlistItemsRequest {
+ HotlistRef hotlist_ref = 2;
+ Pagination pagination = 3;
+ uint32 can = 4;
+ string sort_spec = 5;
+ string group_by_spec = 6;
+}
+
+
+// Next available tag: 2
+message ListHotlistItemsResponse {
+ repeated HotlistItem items = 1;
+}
+
+
+// Next available tag: 7
+message CreateHotlistRequest {
+ string name = 2;
+ string summary = 3;
+ string description = 4;
+ repeated UserRef editor_refs = 5;
+ repeated IssueRef issue_refs = 6;
+ bool is_private = 7;
+}
+
+
+// Next available tag: 1
+message CreateHotlistResponse {
+}
+
+
+// Next available tag: 3
+message CheckHotlistNameRequest {
+ string name = 2;
+}
+
+
+// Next available tag: 1
+message CheckHotlistNameResponse {
+ string error = 1;
+}
+
+
+// Next available tag: 4
+message RemoveIssuesFromHotlistsRequest {
+ repeated HotlistRef hotlist_refs = 2;
+ repeated IssueRef issue_refs = 3;
+}
+
+
+// Next available tag: 1
+message RemoveIssuesFromHotlistsResponse {
+}
+
+
+// Next available tag: 5
+message AddIssuesToHotlistsRequest {
+ repeated HotlistRef hotlist_refs = 2;
+ repeated IssueRef issue_refs = 3;
+ string note = 4;
+}
+
+
+// Next available tag: 1
+message AddIssuesToHotlistsResponse {
+}
+
+// Next available tag: 5
+message RerankHotlistIssuesRequest{
+ HotlistRef hotlist_ref = 1;
+ repeated IssueRef moved_refs = 2;
+ IssueRef target_ref = 3;
+ bool split_above = 4;
+}
+
+// Next available tag: 1
+message RerankHotlistIssuesResponse{
+}
+
+// Next available tag: 5
+message UpdateHotlistIssueNoteRequest {
+ HotlistRef hotlist_ref = 2;
+ IssueRef issue_ref = 3;
+ string note = 4;
+}
+
+
+// Next available tag: 1
+message UpdateHotlistIssueNoteResponse {
+}
+
+
+// Next available tag: 2
+message DeleteHotlistRequest {
+ HotlistRef hotlist_ref = 1;
+}
+
+
+// Next available tag: 1
+message DeleteHotlistResponse {
+}
+
+
+// Next available tag: 4
+message PredictComponentRequest {
+ string text = 2;
+ string project_name = 3;
+}
+
+
+// Next available tag: 2
+message PredictComponentResponse {
+ ComponentRef component_ref = 1;
+}
diff --git a/api/api_proto/features_objects.proto b/api/api_proto/features_objects.proto
new file mode 100644
index 0000000..14b61ac
--- /dev/null
+++ b/api/api_proto/features_objects.proto
@@ -0,0 +1,43 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+syntax = "proto3";
+
+package monorail;
+
+import "api/api_proto/common.proto";
+import "api/api_proto/issue_objects.proto";
+
+
+// Next available tag: 9
+message Hotlist {
+ UserRef owner_ref = 1;
+ repeated UserRef editor_refs = 5;
+ repeated UserRef follower_refs = 6;
+ string name = 2;
+ string summary = 3;
+ string description = 4;
+ string default_col_spec = 7;
+ bool is_private = 8;
+}
+
+
+// Next available tag: 6
+message HotlistItem {
+ Issue issue = 1;
+ uint32 rank = 2;
+ UserRef adder_ref = 3;
+ uint32 added_timestamp = 4;
+ string note = 5;
+}
+
+
+// Next available tag: 5
+message HotlistPeopleDelta {
+ UserRef new_owner_ref = 1;
+ repeated UserRef add_editor_refs = 2;
+ repeated UserRef add_follower_refs = 3;
+ repeated UserRef remove_user_refs = 4;
+}
\ No newline at end of file
diff --git a/api/api_proto/features_objects_pb2.py b/api/api_proto/features_objects_pb2.py
new file mode 100644
index 0000000..63d8091
--- /dev/null
+++ b/api/api_proto/features_objects_pb2.py
@@ -0,0 +1,257 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: api/api_proto/features_objects.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from api.api_proto import common_pb2 as api_dot_api__proto_dot_common__pb2
+from api.api_proto import issue_objects_pb2 as api_dot_api__proto_dot_issue__objects__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='api/api_proto/features_objects.proto',
+ package='monorail',
+ syntax='proto3',
+ serialized_options=None,
+ serialized_pb=_b('\n$api/api_proto/features_objects.proto\x12\x08monorail\x1a\x1a\x61pi/api_proto/common.proto\x1a!api/api_proto/issue_objects.proto\"\xe3\x01\n\x07Hotlist\x12$\n\towner_ref\x18\x01 \x01(\x0b\x32\x11.monorail.UserRef\x12&\n\x0b\x65\x64itor_refs\x18\x05 \x03(\x0b\x32\x11.monorail.UserRef\x12(\n\rfollower_refs\x18\x06 \x03(\x0b\x32\x11.monorail.UserRef\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07summary\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x04 \x01(\t\x12\x18\n\x10\x64\x65\x66\x61ult_col_spec\x18\x07 \x01(\t\x12\x12\n\nis_private\x18\x08 \x01(\x08\"\x88\x01\n\x0bHotlistItem\x12\x1e\n\x05issue\x18\x01 \x01(\x0b\x32\x0f.monorail.Issue\x12\x0c\n\x04rank\x18\x02 \x01(\r\x12$\n\tadder_ref\x18\x03 \x01(\x0b\x32\x11.monorail.UserRef\x12\x17\n\x0f\x61\x64\x64\x65\x64_timestamp\x18\x04 \x01(\r\x12\x0c\n\x04note\x18\x05 \x01(\t\"\xc5\x01\n\x12HotlistPeopleDelta\x12(\n\rnew_owner_ref\x18\x01 \x01(\x0b\x32\x11.monorail.UserRef\x12*\n\x0f\x61\x64\x64_editor_refs\x18\x02 \x03(\x0b\x32\x11.monorail.UserRef\x12,\n\x11\x61\x64\x64_follower_refs\x18\x03 \x03(\x0b\x32\x11.monorail.UserRef\x12+\n\x10remove_user_refs\x18\x04 \x03(\x0b\x32\x11.monorail.UserRefb\x06proto3')
+ ,
+ dependencies=[api_dot_api__proto_dot_common__pb2.DESCRIPTOR,api_dot_api__proto_dot_issue__objects__pb2.DESCRIPTOR,])
+
+
+
+
+_HOTLIST = _descriptor.Descriptor(
+ name='Hotlist',
+ full_name='monorail.Hotlist',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='owner_ref', full_name='monorail.Hotlist.owner_ref', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='editor_refs', full_name='monorail.Hotlist.editor_refs', index=1,
+ number=5, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='follower_refs', full_name='monorail.Hotlist.follower_refs', index=2,
+ number=6, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='name', full_name='monorail.Hotlist.name', index=3,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='summary', full_name='monorail.Hotlist.summary', index=4,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='description', full_name='monorail.Hotlist.description', index=5,
+ number=4, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='default_col_spec', full_name='monorail.Hotlist.default_col_spec', index=6,
+ number=7, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='is_private', full_name='monorail.Hotlist.is_private', index=7,
+ number=8, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=114,
+ serialized_end=341,
+)
+
+
+_HOTLISTITEM = _descriptor.Descriptor(
+ name='HotlistItem',
+ full_name='monorail.HotlistItem',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue', full_name='monorail.HotlistItem.issue', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='rank', full_name='monorail.HotlistItem.rank', index=1,
+ number=2, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='adder_ref', full_name='monorail.HotlistItem.adder_ref', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='added_timestamp', full_name='monorail.HotlistItem.added_timestamp', index=3,
+ number=4, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='note', full_name='monorail.HotlistItem.note', index=4,
+ number=5, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=344,
+ serialized_end=480,
+)
+
+
+_HOTLISTPEOPLEDELTA = _descriptor.Descriptor(
+ name='HotlistPeopleDelta',
+ full_name='monorail.HotlistPeopleDelta',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='new_owner_ref', full_name='monorail.HotlistPeopleDelta.new_owner_ref', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='add_editor_refs', full_name='monorail.HotlistPeopleDelta.add_editor_refs', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='add_follower_refs', full_name='monorail.HotlistPeopleDelta.add_follower_refs', index=2,
+ number=3, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='remove_user_refs', full_name='monorail.HotlistPeopleDelta.remove_user_refs', index=3,
+ number=4, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=483,
+ serialized_end=680,
+)
+
+_HOTLIST.fields_by_name['owner_ref'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_HOTLIST.fields_by_name['editor_refs'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_HOTLIST.fields_by_name['follower_refs'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_HOTLISTITEM.fields_by_name['issue'].message_type = api_dot_api__proto_dot_issue__objects__pb2._ISSUE
+_HOTLISTITEM.fields_by_name['adder_ref'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_HOTLISTPEOPLEDELTA.fields_by_name['new_owner_ref'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_HOTLISTPEOPLEDELTA.fields_by_name['add_editor_refs'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_HOTLISTPEOPLEDELTA.fields_by_name['add_follower_refs'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_HOTLISTPEOPLEDELTA.fields_by_name['remove_user_refs'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+DESCRIPTOR.message_types_by_name['Hotlist'] = _HOTLIST
+DESCRIPTOR.message_types_by_name['HotlistItem'] = _HOTLISTITEM
+DESCRIPTOR.message_types_by_name['HotlistPeopleDelta'] = _HOTLISTPEOPLEDELTA
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+Hotlist = _reflection.GeneratedProtocolMessageType('Hotlist', (_message.Message,), dict(
+ DESCRIPTOR = _HOTLIST,
+ __module__ = 'api.api_proto.features_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.Hotlist)
+ ))
+_sym_db.RegisterMessage(Hotlist)
+
+HotlistItem = _reflection.GeneratedProtocolMessageType('HotlistItem', (_message.Message,), dict(
+ DESCRIPTOR = _HOTLISTITEM,
+ __module__ = 'api.api_proto.features_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.HotlistItem)
+ ))
+_sym_db.RegisterMessage(HotlistItem)
+
+HotlistPeopleDelta = _reflection.GeneratedProtocolMessageType('HotlistPeopleDelta', (_message.Message,), dict(
+ DESCRIPTOR = _HOTLISTPEOPLEDELTA,
+ __module__ = 'api.api_proto.features_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.HotlistPeopleDelta)
+ ))
+_sym_db.RegisterMessage(HotlistPeopleDelta)
+
+
+# @@protoc_insertion_point(module_scope)
diff --git a/api/api_proto/features_pb2.py b/api/api_proto/features_pb2.py
new file mode 100644
index 0000000..c415a35
--- /dev/null
+++ b/api/api_proto/features_pb2.py
@@ -0,0 +1,1543 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: api/api_proto/features.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from api.api_proto import common_pb2 as api_dot_api__proto_dot_common__pb2
+from api.api_proto import features_objects_pb2 as api_dot_api__proto_dot_features__objects__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='api/api_proto/features.proto',
+ package='monorail',
+ syntax='proto3',
+ serialized_options=None,
+ serialized_pb=_b('\n\x1c\x61pi/api_proto/features.proto\x12\x08monorail\x1a\x1a\x61pi/api_proto/common.proto\x1a$api/api_proto/features_objects.proto\"<\n\x19ListHotlistsByUserRequest\x12\x1f\n\x04user\x18\x02 \x01(\x0b\x32\x11.monorail.UserRef\"A\n\x1aListHotlistsByUserResponse\x12#\n\x08hotlists\x18\x01 \x03(\x0b\x32\x11.monorail.Hotlist\"?\n\x1aListHotlistsByIssueRequest\x12!\n\x05issue\x18\x02 \x01(\x0b\x32\x12.monorail.IssueRef\"B\n\x1bListHotlistsByIssueResponse\x12#\n\x08hotlists\x18\x01 \x03(\x0b\x32\x11.monorail.Hotlist\"$\n\"ListRecentlyVisitedHotlistsRequest\"J\n#ListRecentlyVisitedHotlistsResponse\x12#\n\x08hotlists\x18\x01 \x03(\x0b\x32\x11.monorail.Hotlist\"\x1c\n\x1aListStarredHotlistsRequest\"B\n\x1bListStarredHotlistsResponse\x12#\n\x08hotlists\x18\x01 \x03(\x0b\x32\x11.monorail.Hotlist\"G\n\x1aGetHotlistStarCountRequest\x12)\n\x0bhotlist_ref\x18\x02 \x01(\x0b\x32\x14.monorail.HotlistRef\"1\n\x1bGetHotlistStarCountResponse\x12\x12\n\nstar_count\x18\x01 \x01(\r\"P\n\x12StarHotlistRequest\x12)\n\x0bhotlist_ref\x18\x02 \x01(\x0b\x32\x14.monorail.HotlistRef\x12\x0f\n\x07starred\x18\x03 \x01(\x08\")\n\x13StarHotlistResponse\x12\x12\n\nstar_count\x18\x01 \x01(\r\">\n\x11GetHotlistRequest\x12)\n\x0bhotlist_ref\x18\x01 \x01(\x0b\x32\x14.monorail.HotlistRef\"8\n\x12GetHotlistResponse\x12\"\n\x07hotlist\x18\x01 \x01(\x0b\x32\x11.monorail.Hotlist\"\xa5\x01\n\x17ListHotlistItemsRequest\x12)\n\x0bhotlist_ref\x18\x02 \x01(\x0b\x32\x14.monorail.HotlistRef\x12(\n\npagination\x18\x03 \x01(\x0b\x32\x14.monorail.Pagination\x12\x0b\n\x03\x63\x61n\x18\x04 \x01(\r\x12\x11\n\tsort_spec\x18\x05 \x01(\t\x12\x15\n\rgroup_by_spec\x18\x06 \x01(\t\"@\n\x18ListHotlistItemsResponse\x12$\n\x05items\x18\x01 \x03(\x0b\x32\x15.monorail.HotlistItem\"\xae\x01\n\x14\x43reateHotlistRequest\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07summary\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x04 \x01(\t\x12&\n\x0b\x65\x64itor_refs\x18\x05 \x03(\x0b\x32\x11.monorail.UserRef\x12&\n\nissue_refs\x18\x06 \x03(\x0b\x32\x12.monorail.IssueRef\x12\x12\n\nis_private\x18\x07 \x01(\x08\"\x17\n\x15\x43reateHotlistResponse\"\'\n\x17\x43heckHotlistNameRequest\x12\x0c\n\x04name\x18\x02 \x01(\t\")\n\x18\x43heckHotlistNameResponse\x12\r\n\x05\x65rror\x18\x01 \x01(\t\"u\n\x1fRemoveIssuesFromHotlistsRequest\x12*\n\x0chotlist_refs\x18\x02 \x03(\x0b\x32\x14.monorail.HotlistRef\x12&\n\nissue_refs\x18\x03 \x03(\x0b\x32\x12.monorail.IssueRef\"\"\n RemoveIssuesFromHotlistsResponse\"~\n\x1a\x41\x64\x64IssuesToHotlistsRequest\x12*\n\x0chotlist_refs\x18\x02 \x03(\x0b\x32\x14.monorail.HotlistRef\x12&\n\nissue_refs\x18\x03 \x03(\x0b\x32\x12.monorail.IssueRef\x12\x0c\n\x04note\x18\x04 \x01(\t\"\x1d\n\x1b\x41\x64\x64IssuesToHotlistsResponse\"\xac\x01\n\x1aRerankHotlistIssuesRequest\x12)\n\x0bhotlist_ref\x18\x01 \x01(\x0b\x32\x14.monorail.HotlistRef\x12&\n\nmoved_refs\x18\x02 \x03(\x0b\x32\x12.monorail.IssueRef\x12&\n\ntarget_ref\x18\x03 \x01(\x0b\x32\x12.monorail.IssueRef\x12\x13\n\x0bsplit_above\x18\x04 \x01(\x08\"\x1d\n\x1bRerankHotlistIssuesResponse\"\x7f\n\x1dUpdateHotlistIssueNoteRequest\x12)\n\x0bhotlist_ref\x18\x02 \x01(\x0b\x32\x14.monorail.HotlistRef\x12%\n\tissue_ref\x18\x03 \x01(\x0b\x32\x12.monorail.IssueRef\x12\x0c\n\x04note\x18\x04 \x01(\t\" \n\x1eUpdateHotlistIssueNoteResponse\"A\n\x14\x44\x65leteHotlistRequest\x12)\n\x0bhotlist_ref\x18\x01 \x01(\x0b\x32\x14.monorail.HotlistRef\"\x17\n\x15\x44\x65leteHotlistResponse\"=\n\x17PredictComponentRequest\x12\x0c\n\x04text\x18\x02 \x01(\t\x12\x14\n\x0cproject_name\x18\x03 \x01(\t\"I\n\x18PredictComponentResponse\x12-\n\rcomponent_ref\x18\x01 \x01(\x0b\x32\x16.monorail.ComponentRef2\xa5\x0c\n\x08\x46\x65\x61tures\x12\x61\n\x12ListHotlistsByUser\x12#.monorail.ListHotlistsByUserRequest\x1a$.monorail.ListHotlistsByUserResponse\"\x00\x12\x64\n\x13ListHotlistsByIssue\x12$.monorail.ListHotlistsByIssueRequest\x1a%.monorail.ListHotlistsByIssueResponse\"\x00\x12|\n\x1bListRecentlyVisitedHotlists\x12,.monorail.ListRecentlyVisitedHotlistsRequest\x1a-.monorail.ListRecentlyVisitedHotlistsResponse\"\x00\x12\x64\n\x13ListStarredHotlists\x12$.monorail.ListStarredHotlistsRequest\x1a%.monorail.ListStarredHotlistsResponse\"\x00\x12\x64\n\x13GetHotlistStarCount\x12$.monorail.GetHotlistStarCountRequest\x1a%.monorail.GetHotlistStarCountResponse\"\x00\x12L\n\x0bStarHotlist\x12\x1c.monorail.StarHotlistRequest\x1a\x1d.monorail.StarHotlistResponse\"\x00\x12I\n\nGetHotlist\x12\x1b.monorail.GetHotlistRequest\x1a\x1c.monorail.GetHotlistResponse\"\x00\x12[\n\x10ListHotlistItems\x12!.monorail.ListHotlistItemsRequest\x1a\".monorail.ListHotlistItemsResponse\"\x00\x12R\n\rCreateHotlist\x12\x1e.monorail.CreateHotlistRequest\x1a\x1f.monorail.CreateHotlistResponse\"\x00\x12[\n\x10\x43heckHotlistName\x12!.monorail.CheckHotlistNameRequest\x1a\".monorail.CheckHotlistNameResponse\"\x00\x12s\n\x18RemoveIssuesFromHotlists\x12).monorail.RemoveIssuesFromHotlistsRequest\x1a*.monorail.RemoveIssuesFromHotlistsResponse\"\x00\x12\x64\n\x13\x41\x64\x64IssuesToHotlists\x12$.monorail.AddIssuesToHotlistsRequest\x1a%.monorail.AddIssuesToHotlistsResponse\"\x00\x12\x64\n\x13RerankHotlistIssues\x12$.monorail.RerankHotlistIssuesRequest\x1a%.monorail.RerankHotlistIssuesResponse\"\x00\x12m\n\x16UpdateHotlistIssueNote\x12\'.monorail.UpdateHotlistIssueNoteRequest\x1a(.monorail.UpdateHotlistIssueNoteResponse\"\x00\x12R\n\rDeleteHotlist\x12\x1e.monorail.DeleteHotlistRequest\x1a\x1f.monorail.DeleteHotlistResponse\"\x00\x12[\n\x10PredictComponent\x12!.monorail.PredictComponentRequest\x1a\".monorail.PredictComponentResponse\"\x00\x62\x06proto3')
+ ,
+ dependencies=[api_dot_api__proto_dot_common__pb2.DESCRIPTOR,api_dot_api__proto_dot_features__objects__pb2.DESCRIPTOR,])
+
+
+
+
+_LISTHOTLISTSBYUSERREQUEST = _descriptor.Descriptor(
+ name='ListHotlistsByUserRequest',
+ full_name='monorail.ListHotlistsByUserRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='user', full_name='monorail.ListHotlistsByUserRequest.user', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=108,
+ serialized_end=168,
+)
+
+
+_LISTHOTLISTSBYUSERRESPONSE = _descriptor.Descriptor(
+ name='ListHotlistsByUserResponse',
+ full_name='monorail.ListHotlistsByUserResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='hotlists', full_name='monorail.ListHotlistsByUserResponse.hotlists', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=170,
+ serialized_end=235,
+)
+
+
+_LISTHOTLISTSBYISSUEREQUEST = _descriptor.Descriptor(
+ name='ListHotlistsByIssueRequest',
+ full_name='monorail.ListHotlistsByIssueRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue', full_name='monorail.ListHotlistsByIssueRequest.issue', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=237,
+ serialized_end=300,
+)
+
+
+_LISTHOTLISTSBYISSUERESPONSE = _descriptor.Descriptor(
+ name='ListHotlistsByIssueResponse',
+ full_name='monorail.ListHotlistsByIssueResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='hotlists', full_name='monorail.ListHotlistsByIssueResponse.hotlists', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=302,
+ serialized_end=368,
+)
+
+
+_LISTRECENTLYVISITEDHOTLISTSREQUEST = _descriptor.Descriptor(
+ name='ListRecentlyVisitedHotlistsRequest',
+ full_name='monorail.ListRecentlyVisitedHotlistsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=370,
+ serialized_end=406,
+)
+
+
+_LISTRECENTLYVISITEDHOTLISTSRESPONSE = _descriptor.Descriptor(
+ name='ListRecentlyVisitedHotlistsResponse',
+ full_name='monorail.ListRecentlyVisitedHotlistsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='hotlists', full_name='monorail.ListRecentlyVisitedHotlistsResponse.hotlists', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=408,
+ serialized_end=482,
+)
+
+
+_LISTSTARREDHOTLISTSREQUEST = _descriptor.Descriptor(
+ name='ListStarredHotlistsRequest',
+ full_name='monorail.ListStarredHotlistsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=484,
+ serialized_end=512,
+)
+
+
+_LISTSTARREDHOTLISTSRESPONSE = _descriptor.Descriptor(
+ name='ListStarredHotlistsResponse',
+ full_name='monorail.ListStarredHotlistsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='hotlists', full_name='monorail.ListStarredHotlistsResponse.hotlists', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=514,
+ serialized_end=580,
+)
+
+
+_GETHOTLISTSTARCOUNTREQUEST = _descriptor.Descriptor(
+ name='GetHotlistStarCountRequest',
+ full_name='monorail.GetHotlistStarCountRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='hotlist_ref', full_name='monorail.GetHotlistStarCountRequest.hotlist_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=582,
+ serialized_end=653,
+)
+
+
+_GETHOTLISTSTARCOUNTRESPONSE = _descriptor.Descriptor(
+ name='GetHotlistStarCountResponse',
+ full_name='monorail.GetHotlistStarCountResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='star_count', full_name='monorail.GetHotlistStarCountResponse.star_count', index=0,
+ number=1, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=655,
+ serialized_end=704,
+)
+
+
+_STARHOTLISTREQUEST = _descriptor.Descriptor(
+ name='StarHotlistRequest',
+ full_name='monorail.StarHotlistRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='hotlist_ref', full_name='monorail.StarHotlistRequest.hotlist_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='starred', full_name='monorail.StarHotlistRequest.starred', index=1,
+ number=3, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=706,
+ serialized_end=786,
+)
+
+
+_STARHOTLISTRESPONSE = _descriptor.Descriptor(
+ name='StarHotlistResponse',
+ full_name='monorail.StarHotlistResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='star_count', full_name='monorail.StarHotlistResponse.star_count', index=0,
+ number=1, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=788,
+ serialized_end=829,
+)
+
+
+_GETHOTLISTREQUEST = _descriptor.Descriptor(
+ name='GetHotlistRequest',
+ full_name='monorail.GetHotlistRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='hotlist_ref', full_name='monorail.GetHotlistRequest.hotlist_ref', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=831,
+ serialized_end=893,
+)
+
+
+_GETHOTLISTRESPONSE = _descriptor.Descriptor(
+ name='GetHotlistResponse',
+ full_name='monorail.GetHotlistResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='hotlist', full_name='monorail.GetHotlistResponse.hotlist', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=895,
+ serialized_end=951,
+)
+
+
+_LISTHOTLISTITEMSREQUEST = _descriptor.Descriptor(
+ name='ListHotlistItemsRequest',
+ full_name='monorail.ListHotlistItemsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='hotlist_ref', full_name='monorail.ListHotlistItemsRequest.hotlist_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='pagination', full_name='monorail.ListHotlistItemsRequest.pagination', index=1,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='can', full_name='monorail.ListHotlistItemsRequest.can', index=2,
+ number=4, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='sort_spec', full_name='monorail.ListHotlistItemsRequest.sort_spec', index=3,
+ number=5, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='group_by_spec', full_name='monorail.ListHotlistItemsRequest.group_by_spec', index=4,
+ number=6, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=954,
+ serialized_end=1119,
+)
+
+
+_LISTHOTLISTITEMSRESPONSE = _descriptor.Descriptor(
+ name='ListHotlistItemsResponse',
+ full_name='monorail.ListHotlistItemsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='items', full_name='monorail.ListHotlistItemsResponse.items', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1121,
+ serialized_end=1185,
+)
+
+
+_CREATEHOTLISTREQUEST = _descriptor.Descriptor(
+ name='CreateHotlistRequest',
+ full_name='monorail.CreateHotlistRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='name', full_name='monorail.CreateHotlistRequest.name', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='summary', full_name='monorail.CreateHotlistRequest.summary', index=1,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='description', full_name='monorail.CreateHotlistRequest.description', index=2,
+ number=4, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='editor_refs', full_name='monorail.CreateHotlistRequest.editor_refs', index=3,
+ number=5, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='issue_refs', full_name='monorail.CreateHotlistRequest.issue_refs', index=4,
+ number=6, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='is_private', full_name='monorail.CreateHotlistRequest.is_private', index=5,
+ number=7, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1188,
+ serialized_end=1362,
+)
+
+
+_CREATEHOTLISTRESPONSE = _descriptor.Descriptor(
+ name='CreateHotlistResponse',
+ full_name='monorail.CreateHotlistResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1364,
+ serialized_end=1387,
+)
+
+
+_CHECKHOTLISTNAMEREQUEST = _descriptor.Descriptor(
+ name='CheckHotlistNameRequest',
+ full_name='monorail.CheckHotlistNameRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='name', full_name='monorail.CheckHotlistNameRequest.name', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1389,
+ serialized_end=1428,
+)
+
+
+_CHECKHOTLISTNAMERESPONSE = _descriptor.Descriptor(
+ name='CheckHotlistNameResponse',
+ full_name='monorail.CheckHotlistNameResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='error', full_name='monorail.CheckHotlistNameResponse.error', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1430,
+ serialized_end=1471,
+)
+
+
+_REMOVEISSUESFROMHOTLISTSREQUEST = _descriptor.Descriptor(
+ name='RemoveIssuesFromHotlistsRequest',
+ full_name='monorail.RemoveIssuesFromHotlistsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='hotlist_refs', full_name='monorail.RemoveIssuesFromHotlistsRequest.hotlist_refs', index=0,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='issue_refs', full_name='monorail.RemoveIssuesFromHotlistsRequest.issue_refs', index=1,
+ number=3, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1473,
+ serialized_end=1590,
+)
+
+
+_REMOVEISSUESFROMHOTLISTSRESPONSE = _descriptor.Descriptor(
+ name='RemoveIssuesFromHotlistsResponse',
+ full_name='monorail.RemoveIssuesFromHotlistsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1592,
+ serialized_end=1626,
+)
+
+
+_ADDISSUESTOHOTLISTSREQUEST = _descriptor.Descriptor(
+ name='AddIssuesToHotlistsRequest',
+ full_name='monorail.AddIssuesToHotlistsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='hotlist_refs', full_name='monorail.AddIssuesToHotlistsRequest.hotlist_refs', index=0,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='issue_refs', full_name='monorail.AddIssuesToHotlistsRequest.issue_refs', index=1,
+ number=3, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='note', full_name='monorail.AddIssuesToHotlistsRequest.note', index=2,
+ number=4, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1628,
+ serialized_end=1754,
+)
+
+
+_ADDISSUESTOHOTLISTSRESPONSE = _descriptor.Descriptor(
+ name='AddIssuesToHotlistsResponse',
+ full_name='monorail.AddIssuesToHotlistsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1756,
+ serialized_end=1785,
+)
+
+
+_RERANKHOTLISTISSUESREQUEST = _descriptor.Descriptor(
+ name='RerankHotlistIssuesRequest',
+ full_name='monorail.RerankHotlistIssuesRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='hotlist_ref', full_name='monorail.RerankHotlistIssuesRequest.hotlist_ref', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='moved_refs', full_name='monorail.RerankHotlistIssuesRequest.moved_refs', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='target_ref', full_name='monorail.RerankHotlistIssuesRequest.target_ref', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='split_above', full_name='monorail.RerankHotlistIssuesRequest.split_above', index=3,
+ number=4, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1788,
+ serialized_end=1960,
+)
+
+
+_RERANKHOTLISTISSUESRESPONSE = _descriptor.Descriptor(
+ name='RerankHotlistIssuesResponse',
+ full_name='monorail.RerankHotlistIssuesResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1962,
+ serialized_end=1991,
+)
+
+
+_UPDATEHOTLISTISSUENOTEREQUEST = _descriptor.Descriptor(
+ name='UpdateHotlistIssueNoteRequest',
+ full_name='monorail.UpdateHotlistIssueNoteRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='hotlist_ref', full_name='monorail.UpdateHotlistIssueNoteRequest.hotlist_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='issue_ref', full_name='monorail.UpdateHotlistIssueNoteRequest.issue_ref', index=1,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='note', full_name='monorail.UpdateHotlistIssueNoteRequest.note', index=2,
+ number=4, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1993,
+ serialized_end=2120,
+)
+
+
+_UPDATEHOTLISTISSUENOTERESPONSE = _descriptor.Descriptor(
+ name='UpdateHotlistIssueNoteResponse',
+ full_name='monorail.UpdateHotlistIssueNoteResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2122,
+ serialized_end=2154,
+)
+
+
+_DELETEHOTLISTREQUEST = _descriptor.Descriptor(
+ name='DeleteHotlistRequest',
+ full_name='monorail.DeleteHotlistRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='hotlist_ref', full_name='monorail.DeleteHotlistRequest.hotlist_ref', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2156,
+ serialized_end=2221,
+)
+
+
+_DELETEHOTLISTRESPONSE = _descriptor.Descriptor(
+ name='DeleteHotlistResponse',
+ full_name='monorail.DeleteHotlistResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2223,
+ serialized_end=2246,
+)
+
+
+_PREDICTCOMPONENTREQUEST = _descriptor.Descriptor(
+ name='PredictComponentRequest',
+ full_name='monorail.PredictComponentRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='text', full_name='monorail.PredictComponentRequest.text', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.PredictComponentRequest.project_name', index=1,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2248,
+ serialized_end=2309,
+)
+
+
+_PREDICTCOMPONENTRESPONSE = _descriptor.Descriptor(
+ name='PredictComponentResponse',
+ full_name='monorail.PredictComponentResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='component_ref', full_name='monorail.PredictComponentResponse.component_ref', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2311,
+ serialized_end=2384,
+)
+
+_LISTHOTLISTSBYUSERREQUEST.fields_by_name['user'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_LISTHOTLISTSBYUSERRESPONSE.fields_by_name['hotlists'].message_type = api_dot_api__proto_dot_features__objects__pb2._HOTLIST
+_LISTHOTLISTSBYISSUEREQUEST.fields_by_name['issue'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_LISTHOTLISTSBYISSUERESPONSE.fields_by_name['hotlists'].message_type = api_dot_api__proto_dot_features__objects__pb2._HOTLIST
+_LISTRECENTLYVISITEDHOTLISTSRESPONSE.fields_by_name['hotlists'].message_type = api_dot_api__proto_dot_features__objects__pb2._HOTLIST
+_LISTSTARREDHOTLISTSRESPONSE.fields_by_name['hotlists'].message_type = api_dot_api__proto_dot_features__objects__pb2._HOTLIST
+_GETHOTLISTSTARCOUNTREQUEST.fields_by_name['hotlist_ref'].message_type = api_dot_api__proto_dot_common__pb2._HOTLISTREF
+_STARHOTLISTREQUEST.fields_by_name['hotlist_ref'].message_type = api_dot_api__proto_dot_common__pb2._HOTLISTREF
+_GETHOTLISTREQUEST.fields_by_name['hotlist_ref'].message_type = api_dot_api__proto_dot_common__pb2._HOTLISTREF
+_GETHOTLISTRESPONSE.fields_by_name['hotlist'].message_type = api_dot_api__proto_dot_features__objects__pb2._HOTLIST
+_LISTHOTLISTITEMSREQUEST.fields_by_name['hotlist_ref'].message_type = api_dot_api__proto_dot_common__pb2._HOTLISTREF
+_LISTHOTLISTITEMSREQUEST.fields_by_name['pagination'].message_type = api_dot_api__proto_dot_common__pb2._PAGINATION
+_LISTHOTLISTITEMSRESPONSE.fields_by_name['items'].message_type = api_dot_api__proto_dot_features__objects__pb2._HOTLISTITEM
+_CREATEHOTLISTREQUEST.fields_by_name['editor_refs'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_CREATEHOTLISTREQUEST.fields_by_name['issue_refs'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_REMOVEISSUESFROMHOTLISTSREQUEST.fields_by_name['hotlist_refs'].message_type = api_dot_api__proto_dot_common__pb2._HOTLISTREF
+_REMOVEISSUESFROMHOTLISTSREQUEST.fields_by_name['issue_refs'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_ADDISSUESTOHOTLISTSREQUEST.fields_by_name['hotlist_refs'].message_type = api_dot_api__proto_dot_common__pb2._HOTLISTREF
+_ADDISSUESTOHOTLISTSREQUEST.fields_by_name['issue_refs'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_RERANKHOTLISTISSUESREQUEST.fields_by_name['hotlist_ref'].message_type = api_dot_api__proto_dot_common__pb2._HOTLISTREF
+_RERANKHOTLISTISSUESREQUEST.fields_by_name['moved_refs'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_RERANKHOTLISTISSUESREQUEST.fields_by_name['target_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_UPDATEHOTLISTISSUENOTEREQUEST.fields_by_name['hotlist_ref'].message_type = api_dot_api__proto_dot_common__pb2._HOTLISTREF
+_UPDATEHOTLISTISSUENOTEREQUEST.fields_by_name['issue_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_DELETEHOTLISTREQUEST.fields_by_name['hotlist_ref'].message_type = api_dot_api__proto_dot_common__pb2._HOTLISTREF
+_PREDICTCOMPONENTRESPONSE.fields_by_name['component_ref'].message_type = api_dot_api__proto_dot_common__pb2._COMPONENTREF
+DESCRIPTOR.message_types_by_name['ListHotlistsByUserRequest'] = _LISTHOTLISTSBYUSERREQUEST
+DESCRIPTOR.message_types_by_name['ListHotlistsByUserResponse'] = _LISTHOTLISTSBYUSERRESPONSE
+DESCRIPTOR.message_types_by_name['ListHotlistsByIssueRequest'] = _LISTHOTLISTSBYISSUEREQUEST
+DESCRIPTOR.message_types_by_name['ListHotlistsByIssueResponse'] = _LISTHOTLISTSBYISSUERESPONSE
+DESCRIPTOR.message_types_by_name['ListRecentlyVisitedHotlistsRequest'] = _LISTRECENTLYVISITEDHOTLISTSREQUEST
+DESCRIPTOR.message_types_by_name['ListRecentlyVisitedHotlistsResponse'] = _LISTRECENTLYVISITEDHOTLISTSRESPONSE
+DESCRIPTOR.message_types_by_name['ListStarredHotlistsRequest'] = _LISTSTARREDHOTLISTSREQUEST
+DESCRIPTOR.message_types_by_name['ListStarredHotlistsResponse'] = _LISTSTARREDHOTLISTSRESPONSE
+DESCRIPTOR.message_types_by_name['GetHotlistStarCountRequest'] = _GETHOTLISTSTARCOUNTREQUEST
+DESCRIPTOR.message_types_by_name['GetHotlistStarCountResponse'] = _GETHOTLISTSTARCOUNTRESPONSE
+DESCRIPTOR.message_types_by_name['StarHotlistRequest'] = _STARHOTLISTREQUEST
+DESCRIPTOR.message_types_by_name['StarHotlistResponse'] = _STARHOTLISTRESPONSE
+DESCRIPTOR.message_types_by_name['GetHotlistRequest'] = _GETHOTLISTREQUEST
+DESCRIPTOR.message_types_by_name['GetHotlistResponse'] = _GETHOTLISTRESPONSE
+DESCRIPTOR.message_types_by_name['ListHotlistItemsRequest'] = _LISTHOTLISTITEMSREQUEST
+DESCRIPTOR.message_types_by_name['ListHotlistItemsResponse'] = _LISTHOTLISTITEMSRESPONSE
+DESCRIPTOR.message_types_by_name['CreateHotlistRequest'] = _CREATEHOTLISTREQUEST
+DESCRIPTOR.message_types_by_name['CreateHotlistResponse'] = _CREATEHOTLISTRESPONSE
+DESCRIPTOR.message_types_by_name['CheckHotlistNameRequest'] = _CHECKHOTLISTNAMEREQUEST
+DESCRIPTOR.message_types_by_name['CheckHotlistNameResponse'] = _CHECKHOTLISTNAMERESPONSE
+DESCRIPTOR.message_types_by_name['RemoveIssuesFromHotlistsRequest'] = _REMOVEISSUESFROMHOTLISTSREQUEST
+DESCRIPTOR.message_types_by_name['RemoveIssuesFromHotlistsResponse'] = _REMOVEISSUESFROMHOTLISTSRESPONSE
+DESCRIPTOR.message_types_by_name['AddIssuesToHotlistsRequest'] = _ADDISSUESTOHOTLISTSREQUEST
+DESCRIPTOR.message_types_by_name['AddIssuesToHotlistsResponse'] = _ADDISSUESTOHOTLISTSRESPONSE
+DESCRIPTOR.message_types_by_name['RerankHotlistIssuesRequest'] = _RERANKHOTLISTISSUESREQUEST
+DESCRIPTOR.message_types_by_name['RerankHotlistIssuesResponse'] = _RERANKHOTLISTISSUESRESPONSE
+DESCRIPTOR.message_types_by_name['UpdateHotlistIssueNoteRequest'] = _UPDATEHOTLISTISSUENOTEREQUEST
+DESCRIPTOR.message_types_by_name['UpdateHotlistIssueNoteResponse'] = _UPDATEHOTLISTISSUENOTERESPONSE
+DESCRIPTOR.message_types_by_name['DeleteHotlistRequest'] = _DELETEHOTLISTREQUEST
+DESCRIPTOR.message_types_by_name['DeleteHotlistResponse'] = _DELETEHOTLISTRESPONSE
+DESCRIPTOR.message_types_by_name['PredictComponentRequest'] = _PREDICTCOMPONENTREQUEST
+DESCRIPTOR.message_types_by_name['PredictComponentResponse'] = _PREDICTCOMPONENTRESPONSE
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+ListHotlistsByUserRequest = _reflection.GeneratedProtocolMessageType('ListHotlistsByUserRequest', (_message.Message,), dict(
+ DESCRIPTOR = _LISTHOTLISTSBYUSERREQUEST,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListHotlistsByUserRequest)
+ ))
+_sym_db.RegisterMessage(ListHotlistsByUserRequest)
+
+ListHotlistsByUserResponse = _reflection.GeneratedProtocolMessageType('ListHotlistsByUserResponse', (_message.Message,), dict(
+ DESCRIPTOR = _LISTHOTLISTSBYUSERRESPONSE,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListHotlistsByUserResponse)
+ ))
+_sym_db.RegisterMessage(ListHotlistsByUserResponse)
+
+ListHotlistsByIssueRequest = _reflection.GeneratedProtocolMessageType('ListHotlistsByIssueRequest', (_message.Message,), dict(
+ DESCRIPTOR = _LISTHOTLISTSBYISSUEREQUEST,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListHotlistsByIssueRequest)
+ ))
+_sym_db.RegisterMessage(ListHotlistsByIssueRequest)
+
+ListHotlistsByIssueResponse = _reflection.GeneratedProtocolMessageType('ListHotlistsByIssueResponse', (_message.Message,), dict(
+ DESCRIPTOR = _LISTHOTLISTSBYISSUERESPONSE,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListHotlistsByIssueResponse)
+ ))
+_sym_db.RegisterMessage(ListHotlistsByIssueResponse)
+
+ListRecentlyVisitedHotlistsRequest = _reflection.GeneratedProtocolMessageType('ListRecentlyVisitedHotlistsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _LISTRECENTLYVISITEDHOTLISTSREQUEST,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListRecentlyVisitedHotlistsRequest)
+ ))
+_sym_db.RegisterMessage(ListRecentlyVisitedHotlistsRequest)
+
+ListRecentlyVisitedHotlistsResponse = _reflection.GeneratedProtocolMessageType('ListRecentlyVisitedHotlistsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _LISTRECENTLYVISITEDHOTLISTSRESPONSE,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListRecentlyVisitedHotlistsResponse)
+ ))
+_sym_db.RegisterMessage(ListRecentlyVisitedHotlistsResponse)
+
+ListStarredHotlistsRequest = _reflection.GeneratedProtocolMessageType('ListStarredHotlistsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _LISTSTARREDHOTLISTSREQUEST,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListStarredHotlistsRequest)
+ ))
+_sym_db.RegisterMessage(ListStarredHotlistsRequest)
+
+ListStarredHotlistsResponse = _reflection.GeneratedProtocolMessageType('ListStarredHotlistsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _LISTSTARREDHOTLISTSRESPONSE,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListStarredHotlistsResponse)
+ ))
+_sym_db.RegisterMessage(ListStarredHotlistsResponse)
+
+GetHotlistStarCountRequest = _reflection.GeneratedProtocolMessageType('GetHotlistStarCountRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETHOTLISTSTARCOUNTREQUEST,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetHotlistStarCountRequest)
+ ))
+_sym_db.RegisterMessage(GetHotlistStarCountRequest)
+
+GetHotlistStarCountResponse = _reflection.GeneratedProtocolMessageType('GetHotlistStarCountResponse', (_message.Message,), dict(
+ DESCRIPTOR = _GETHOTLISTSTARCOUNTRESPONSE,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetHotlistStarCountResponse)
+ ))
+_sym_db.RegisterMessage(GetHotlistStarCountResponse)
+
+StarHotlistRequest = _reflection.GeneratedProtocolMessageType('StarHotlistRequest', (_message.Message,), dict(
+ DESCRIPTOR = _STARHOTLISTREQUEST,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.StarHotlistRequest)
+ ))
+_sym_db.RegisterMessage(StarHotlistRequest)
+
+StarHotlistResponse = _reflection.GeneratedProtocolMessageType('StarHotlistResponse', (_message.Message,), dict(
+ DESCRIPTOR = _STARHOTLISTRESPONSE,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.StarHotlistResponse)
+ ))
+_sym_db.RegisterMessage(StarHotlistResponse)
+
+GetHotlistRequest = _reflection.GeneratedProtocolMessageType('GetHotlistRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETHOTLISTREQUEST,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetHotlistRequest)
+ ))
+_sym_db.RegisterMessage(GetHotlistRequest)
+
+GetHotlistResponse = _reflection.GeneratedProtocolMessageType('GetHotlistResponse', (_message.Message,), dict(
+ DESCRIPTOR = _GETHOTLISTRESPONSE,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetHotlistResponse)
+ ))
+_sym_db.RegisterMessage(GetHotlistResponse)
+
+ListHotlistItemsRequest = _reflection.GeneratedProtocolMessageType('ListHotlistItemsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _LISTHOTLISTITEMSREQUEST,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListHotlistItemsRequest)
+ ))
+_sym_db.RegisterMessage(ListHotlistItemsRequest)
+
+ListHotlistItemsResponse = _reflection.GeneratedProtocolMessageType('ListHotlistItemsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _LISTHOTLISTITEMSRESPONSE,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListHotlistItemsResponse)
+ ))
+_sym_db.RegisterMessage(ListHotlistItemsResponse)
+
+CreateHotlistRequest = _reflection.GeneratedProtocolMessageType('CreateHotlistRequest', (_message.Message,), dict(
+ DESCRIPTOR = _CREATEHOTLISTREQUEST,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.CreateHotlistRequest)
+ ))
+_sym_db.RegisterMessage(CreateHotlistRequest)
+
+CreateHotlistResponse = _reflection.GeneratedProtocolMessageType('CreateHotlistResponse', (_message.Message,), dict(
+ DESCRIPTOR = _CREATEHOTLISTRESPONSE,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.CreateHotlistResponse)
+ ))
+_sym_db.RegisterMessage(CreateHotlistResponse)
+
+CheckHotlistNameRequest = _reflection.GeneratedProtocolMessageType('CheckHotlistNameRequest', (_message.Message,), dict(
+ DESCRIPTOR = _CHECKHOTLISTNAMEREQUEST,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.CheckHotlistNameRequest)
+ ))
+_sym_db.RegisterMessage(CheckHotlistNameRequest)
+
+CheckHotlistNameResponse = _reflection.GeneratedProtocolMessageType('CheckHotlistNameResponse', (_message.Message,), dict(
+ DESCRIPTOR = _CHECKHOTLISTNAMERESPONSE,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.CheckHotlistNameResponse)
+ ))
+_sym_db.RegisterMessage(CheckHotlistNameResponse)
+
+RemoveIssuesFromHotlistsRequest = _reflection.GeneratedProtocolMessageType('RemoveIssuesFromHotlistsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _REMOVEISSUESFROMHOTLISTSREQUEST,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.RemoveIssuesFromHotlistsRequest)
+ ))
+_sym_db.RegisterMessage(RemoveIssuesFromHotlistsRequest)
+
+RemoveIssuesFromHotlistsResponse = _reflection.GeneratedProtocolMessageType('RemoveIssuesFromHotlistsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _REMOVEISSUESFROMHOTLISTSRESPONSE,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.RemoveIssuesFromHotlistsResponse)
+ ))
+_sym_db.RegisterMessage(RemoveIssuesFromHotlistsResponse)
+
+AddIssuesToHotlistsRequest = _reflection.GeneratedProtocolMessageType('AddIssuesToHotlistsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _ADDISSUESTOHOTLISTSREQUEST,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.AddIssuesToHotlistsRequest)
+ ))
+_sym_db.RegisterMessage(AddIssuesToHotlistsRequest)
+
+AddIssuesToHotlistsResponse = _reflection.GeneratedProtocolMessageType('AddIssuesToHotlistsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _ADDISSUESTOHOTLISTSRESPONSE,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.AddIssuesToHotlistsResponse)
+ ))
+_sym_db.RegisterMessage(AddIssuesToHotlistsResponse)
+
+RerankHotlistIssuesRequest = _reflection.GeneratedProtocolMessageType('RerankHotlistIssuesRequest', (_message.Message,), dict(
+ DESCRIPTOR = _RERANKHOTLISTISSUESREQUEST,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.RerankHotlistIssuesRequest)
+ ))
+_sym_db.RegisterMessage(RerankHotlistIssuesRequest)
+
+RerankHotlistIssuesResponse = _reflection.GeneratedProtocolMessageType('RerankHotlistIssuesResponse', (_message.Message,), dict(
+ DESCRIPTOR = _RERANKHOTLISTISSUESRESPONSE,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.RerankHotlistIssuesResponse)
+ ))
+_sym_db.RegisterMessage(RerankHotlistIssuesResponse)
+
+UpdateHotlistIssueNoteRequest = _reflection.GeneratedProtocolMessageType('UpdateHotlistIssueNoteRequest', (_message.Message,), dict(
+ DESCRIPTOR = _UPDATEHOTLISTISSUENOTEREQUEST,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.UpdateHotlistIssueNoteRequest)
+ ))
+_sym_db.RegisterMessage(UpdateHotlistIssueNoteRequest)
+
+UpdateHotlistIssueNoteResponse = _reflection.GeneratedProtocolMessageType('UpdateHotlistIssueNoteResponse', (_message.Message,), dict(
+ DESCRIPTOR = _UPDATEHOTLISTISSUENOTERESPONSE,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.UpdateHotlistIssueNoteResponse)
+ ))
+_sym_db.RegisterMessage(UpdateHotlistIssueNoteResponse)
+
+DeleteHotlistRequest = _reflection.GeneratedProtocolMessageType('DeleteHotlistRequest', (_message.Message,), dict(
+ DESCRIPTOR = _DELETEHOTLISTREQUEST,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.DeleteHotlistRequest)
+ ))
+_sym_db.RegisterMessage(DeleteHotlistRequest)
+
+DeleteHotlistResponse = _reflection.GeneratedProtocolMessageType('DeleteHotlistResponse', (_message.Message,), dict(
+ DESCRIPTOR = _DELETEHOTLISTRESPONSE,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.DeleteHotlistResponse)
+ ))
+_sym_db.RegisterMessage(DeleteHotlistResponse)
+
+PredictComponentRequest = _reflection.GeneratedProtocolMessageType('PredictComponentRequest', (_message.Message,), dict(
+ DESCRIPTOR = _PREDICTCOMPONENTREQUEST,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.PredictComponentRequest)
+ ))
+_sym_db.RegisterMessage(PredictComponentRequest)
+
+PredictComponentResponse = _reflection.GeneratedProtocolMessageType('PredictComponentResponse', (_message.Message,), dict(
+ DESCRIPTOR = _PREDICTCOMPONENTRESPONSE,
+ __module__ = 'api.api_proto.features_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.PredictComponentResponse)
+ ))
+_sym_db.RegisterMessage(PredictComponentResponse)
+
+
+
+_FEATURES = _descriptor.ServiceDescriptor(
+ name='Features',
+ full_name='monorail.Features',
+ file=DESCRIPTOR,
+ index=0,
+ serialized_options=None,
+ serialized_start=2387,
+ serialized_end=3960,
+ methods=[
+ _descriptor.MethodDescriptor(
+ name='ListHotlistsByUser',
+ full_name='monorail.Features.ListHotlistsByUser',
+ index=0,
+ containing_service=None,
+ input_type=_LISTHOTLISTSBYUSERREQUEST,
+ output_type=_LISTHOTLISTSBYUSERRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='ListHotlistsByIssue',
+ full_name='monorail.Features.ListHotlistsByIssue',
+ index=1,
+ containing_service=None,
+ input_type=_LISTHOTLISTSBYISSUEREQUEST,
+ output_type=_LISTHOTLISTSBYISSUERESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='ListRecentlyVisitedHotlists',
+ full_name='monorail.Features.ListRecentlyVisitedHotlists',
+ index=2,
+ containing_service=None,
+ input_type=_LISTRECENTLYVISITEDHOTLISTSREQUEST,
+ output_type=_LISTRECENTLYVISITEDHOTLISTSRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='ListStarredHotlists',
+ full_name='monorail.Features.ListStarredHotlists',
+ index=3,
+ containing_service=None,
+ input_type=_LISTSTARREDHOTLISTSREQUEST,
+ output_type=_LISTSTARREDHOTLISTSRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='GetHotlistStarCount',
+ full_name='monorail.Features.GetHotlistStarCount',
+ index=4,
+ containing_service=None,
+ input_type=_GETHOTLISTSTARCOUNTREQUEST,
+ output_type=_GETHOTLISTSTARCOUNTRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='StarHotlist',
+ full_name='monorail.Features.StarHotlist',
+ index=5,
+ containing_service=None,
+ input_type=_STARHOTLISTREQUEST,
+ output_type=_STARHOTLISTRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='GetHotlist',
+ full_name='monorail.Features.GetHotlist',
+ index=6,
+ containing_service=None,
+ input_type=_GETHOTLISTREQUEST,
+ output_type=_GETHOTLISTRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='ListHotlistItems',
+ full_name='monorail.Features.ListHotlistItems',
+ index=7,
+ containing_service=None,
+ input_type=_LISTHOTLISTITEMSREQUEST,
+ output_type=_LISTHOTLISTITEMSRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='CreateHotlist',
+ full_name='monorail.Features.CreateHotlist',
+ index=8,
+ containing_service=None,
+ input_type=_CREATEHOTLISTREQUEST,
+ output_type=_CREATEHOTLISTRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='CheckHotlistName',
+ full_name='monorail.Features.CheckHotlistName',
+ index=9,
+ containing_service=None,
+ input_type=_CHECKHOTLISTNAMEREQUEST,
+ output_type=_CHECKHOTLISTNAMERESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='RemoveIssuesFromHotlists',
+ full_name='monorail.Features.RemoveIssuesFromHotlists',
+ index=10,
+ containing_service=None,
+ input_type=_REMOVEISSUESFROMHOTLISTSREQUEST,
+ output_type=_REMOVEISSUESFROMHOTLISTSRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='AddIssuesToHotlists',
+ full_name='monorail.Features.AddIssuesToHotlists',
+ index=11,
+ containing_service=None,
+ input_type=_ADDISSUESTOHOTLISTSREQUEST,
+ output_type=_ADDISSUESTOHOTLISTSRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='RerankHotlistIssues',
+ full_name='monorail.Features.RerankHotlistIssues',
+ index=12,
+ containing_service=None,
+ input_type=_RERANKHOTLISTISSUESREQUEST,
+ output_type=_RERANKHOTLISTISSUESRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='UpdateHotlistIssueNote',
+ full_name='monorail.Features.UpdateHotlistIssueNote',
+ index=13,
+ containing_service=None,
+ input_type=_UPDATEHOTLISTISSUENOTEREQUEST,
+ output_type=_UPDATEHOTLISTISSUENOTERESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='DeleteHotlist',
+ full_name='monorail.Features.DeleteHotlist',
+ index=14,
+ containing_service=None,
+ input_type=_DELETEHOTLISTREQUEST,
+ output_type=_DELETEHOTLISTRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='PredictComponent',
+ full_name='monorail.Features.PredictComponent',
+ index=15,
+ containing_service=None,
+ input_type=_PREDICTCOMPONENTREQUEST,
+ output_type=_PREDICTCOMPONENTRESPONSE,
+ serialized_options=None,
+ ),
+])
+_sym_db.RegisterServiceDescriptor(_FEATURES)
+
+DESCRIPTOR.services_by_name['Features'] = _FEATURES
+
+# @@protoc_insertion_point(module_scope)
diff --git a/api/api_proto/features_prpc_pb2.py b/api/api_proto/features_prpc_pb2.py
new file mode 100644
index 0000000..17257e5
--- /dev/null
+++ b/api/api_proto/features_prpc_pb2.py
@@ -0,0 +1,274 @@
+# Generated by the pRPC protocol buffer compiler plugin. DO NOT EDIT!
+# source: api/api_proto/features.proto
+
+import base64
+import zlib
+
+from google.protobuf import descriptor_pb2
+
+# Includes description of the api/api_proto/features.proto and all of its transitive
+# dependencies. Includes source code info.
+FILE_DESCRIPTOR_SET = descriptor_pb2.FileDescriptorSet()
+FILE_DESCRIPTOR_SET.ParseFromString(zlib.decompress(base64.b64decode(
+ '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')))
+_INDEX = {
+ f.name: {
+ 'descriptor': f,
+ 'services': {s.name: s for s in f.service},
+ }
+ for f in FILE_DESCRIPTOR_SET.file
+}
+
+
+FeaturesServiceDescription = {
+ 'file_descriptor_set': FILE_DESCRIPTOR_SET,
+ 'file_descriptor': _INDEX[u'api/api_proto/features.proto']['descriptor'],
+ 'service_descriptor': _INDEX[u'api/api_proto/features.proto']['services'][u'Features'],
+}
diff --git a/api/api_proto/issue_objects.proto b/api/api_proto/issue_objects.proto
new file mode 100644
index 0000000..9343c98
--- /dev/null
+++ b/api/api_proto/issue_objects.proto
@@ -0,0 +1,207 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+// This file defines protobufs for issues and related business
+// objects, e.g., field values, comments, and attachments.
+
+syntax = "proto3";
+
+package monorail;
+
+import "google/protobuf/wrappers.proto";
+import "api/api_proto/common.proto";
+
+
+// Next available tag: 8
+message Approval {
+ FieldRef field_ref = 1;
+ repeated UserRef approver_refs = 2;
+ ApprovalStatus status = 3;
+ fixed32 set_on = 4;
+ UserRef setter_ref = 5;
+ PhaseRef phase_ref = 7;
+}
+
+
+// Next available tag: 8
+enum ApprovalStatus {
+ NOT_SET = 0;
+ NEEDS_REVIEW = 1;
+ NA = 2;
+ REVIEW_REQUESTED = 3;
+ REVIEW_STARTED = 4;
+ NEED_INFO = 5;
+ APPROVED = 6;
+ NOT_APPROVED = 7;
+}
+
+
+// This message is only suitable for displaying the amendment to users.
+// We don't currently offer structured amendments that client code can
+// reason about, field names can be ambiguous, and we don't have
+// old_value for most changes.
+// Next available tag: 4
+message Amendment {
+ // This may be the name of a built-in or custom field, or relative to
+ // an approval field name.
+ string field_name = 1;
+ // This may be a new value that overwrote the old value, e.g., "Assigned",
+ // or it may be a space-separated list of changes, e.g., "Size-L -Size-S".
+ string new_or_delta_value = 2;
+ // old_value is only used when the user changes the summary.
+ string old_value = 3;
+}
+
+
+// Next available tag: 9
+message Attachment {
+ uint64 attachment_id = 1;
+ string filename = 2;
+ uint64 size = 3; // Size in bytes.
+ string content_type = 4;
+ bool is_deleted = 5;
+ string thumbnail_url = 6;
+ string view_url = 7;
+ string download_url = 8;
+}
+
+
+// Next available tag: 16
+message Comment {
+ string project_name = 1;
+ uint32 local_id = 2;
+ uint32 sequence_num = 3;
+ bool is_deleted = 4;
+ UserRef commenter = 5;
+ fixed32 timestamp = 6;
+ string content = 7;
+ string inbound_message = 8;
+ repeated Amendment amendments = 9;
+ repeated Attachment attachments = 10;
+ FieldRef approval_ref = 11;
+ // If set, this comment is an issue description.
+ uint32 description_num = 12;
+ bool is_spam = 13;
+ bool can_delete = 14;
+ bool can_flag = 15;
+}
+
+
+// Next available tag: 5
+message FieldValue {
+ FieldRef field_ref = 1;
+ string value = 2;
+ bool is_derived = 3;
+ PhaseRef phase_ref = 4;
+}
+
+
+// Next available tag: 28
+message Issue {
+ string project_name = 1;
+ uint32 local_id = 2;
+ string summary = 3;
+ StatusRef status_ref = 4;
+ UserRef owner_ref = 5;
+ repeated UserRef cc_refs = 6;
+ repeated LabelRef label_refs = 7;
+ repeated ComponentRef component_refs = 8;
+ repeated IssueRef blocked_on_issue_refs = 9;
+ repeated IssueRef blocking_issue_refs = 10;
+ repeated IssueRef dangling_blocked_on_refs = 23;
+ repeated IssueRef dangling_blocking_refs = 24;
+ IssueRef merged_into_issue_ref = 11;
+ repeated FieldValue field_values = 12;
+ bool is_deleted = 13;
+ UserRef reporter_ref = 14;
+ fixed32 opened_timestamp = 15;
+ fixed32 closed_timestamp = 16;
+ fixed32 modified_timestamp = 17;
+ fixed32 component_modified_timestamp = 25;
+ fixed32 status_modified_timestamp = 26;
+ fixed32 owner_modified_timestamp = 27;
+ uint32 star_count = 18;
+ bool is_spam = 19;
+ uint32 attachment_count = 20;
+ repeated Approval approval_values = 21;
+ repeated PhaseDef phases = 22;
+}
+
+
+// Next available tag: 18
+message IssueDelta {
+ // Note: We use StringValue instead of string so that we can
+ // check if delta.HasField('status'). Proto3 only allows that
+ // for nested messages and provides "boxed" values for this purpose.
+ // In JSON, a StringValue is represented as a simple string.
+ google.protobuf.StringValue status = 1;
+ UserRef owner_ref = 2;
+ repeated UserRef cc_refs_add = 3;
+ repeated UserRef cc_refs_remove = 4;
+ repeated ComponentRef comp_refs_add = 5;
+ repeated ComponentRef comp_refs_remove = 6;
+ repeated LabelRef label_refs_add = 7;
+ repeated LabelRef label_refs_remove = 8;
+ repeated FieldValue field_vals_add = 9;
+ repeated FieldValue field_vals_remove = 10;
+ repeated FieldRef fields_clear = 11;
+ repeated IssueRef blocked_on_refs_add = 12;
+ repeated IssueRef blocked_on_refs_remove = 13;
+ repeated IssueRef blocking_refs_add = 14;
+ repeated IssueRef blocking_refs_remove = 15;
+ IssueRef merged_into_ref = 16;
+ google.protobuf.StringValue summary = 17;
+}
+
+
+// Next available tag: 7
+message ApprovalDelta {
+ ApprovalStatus status = 1;
+ repeated UserRef approver_refs_add = 2;
+ repeated UserRef approver_refs_remove = 3;
+ repeated FieldValue field_vals_add = 4;
+ repeated FieldValue field_vals_remove = 5;
+ repeated FieldRef fields_clear = 6;
+}
+
+
+// Next available tag: 3
+message AttachmentUpload {
+ string filename = 1;
+ bytes content = 2;
+}
+
+
+// Next available tag: 4
+message IssueSummary {
+ string project_name = 1;
+ uint32 local_id = 2;
+ string summary = 3;
+}
+
+
+// Next available tag: 3
+message PhaseDef {
+ PhaseRef phase_ref = 1;
+ uint32 rank = 2;
+}
+
+
+// Next available tag: 2
+message PhaseRef {
+ string phase_name = 1;
+}
+
+
+// Next available tag: 7
+enum SearchScope {
+ ALL = 0;
+ NEW = 1;
+ OPEN = 2;
+ OWNED = 3;
+ REPORTED = 4;
+ STARRED = 5;
+ TO_VERIFY = 6;
+}
diff --git a/api/api_proto/issue_objects_pb2.py b/api/api_proto/issue_objects_pb2.py
new file mode 100644
index 0000000..fa347e1
--- /dev/null
+++ b/api/api_proto/issue_objects_pb2.py
@@ -0,0 +1,1232 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: api/api_proto/issue_objects.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf.internal import enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2
+from api.api_proto import common_pb2 as api_dot_api__proto_dot_common__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='api/api_proto/issue_objects.proto',
+ package='monorail',
+ syntax='proto3',
+ serialized_options=None,
+ serialized_pb=_b('\n!api/api_proto/issue_objects.proto\x12\x08monorail\x1a\x1egoogle/protobuf/wrappers.proto\x1a\x1a\x61pi/api_proto/common.proto\"\xe3\x01\n\x08\x41pproval\x12%\n\tfield_ref\x18\x01 \x01(\x0b\x32\x12.monorail.FieldRef\x12(\n\rapprover_refs\x18\x02 \x03(\x0b\x32\x11.monorail.UserRef\x12(\n\x06status\x18\x03 \x01(\x0e\x32\x18.monorail.ApprovalStatus\x12\x0e\n\x06set_on\x18\x04 \x01(\x07\x12%\n\nsetter_ref\x18\x05 \x01(\x0b\x32\x11.monorail.UserRef\x12%\n\tphase_ref\x18\x07 \x01(\x0b\x32\x12.monorail.PhaseRef\"N\n\tAmendment\x12\x12\n\nfield_name\x18\x01 \x01(\t\x12\x1a\n\x12new_or_delta_value\x18\x02 \x01(\t\x12\x11\n\told_value\x18\x03 \x01(\t\"\xac\x01\n\nAttachment\x12\x15\n\rattachment_id\x18\x01 \x01(\x04\x12\x10\n\x08\x66ilename\x18\x02 \x01(\t\x12\x0c\n\x04size\x18\x03 \x01(\x04\x12\x14\n\x0c\x63ontent_type\x18\x04 \x01(\t\x12\x12\n\nis_deleted\x18\x05 \x01(\x08\x12\x15\n\rthumbnail_url\x18\x06 \x01(\t\x12\x10\n\x08view_url\x18\x07 \x01(\t\x12\x14\n\x0c\x64ownload_url\x18\x08 \x01(\t\"\x8c\x03\n\x07\x43omment\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12\x10\n\x08local_id\x18\x02 \x01(\r\x12\x14\n\x0csequence_num\x18\x03 \x01(\r\x12\x12\n\nis_deleted\x18\x04 \x01(\x08\x12$\n\tcommenter\x18\x05 \x01(\x0b\x32\x11.monorail.UserRef\x12\x11\n\ttimestamp\x18\x06 \x01(\x07\x12\x0f\n\x07\x63ontent\x18\x07 \x01(\t\x12\x17\n\x0finbound_message\x18\x08 \x01(\t\x12\'\n\namendments\x18\t \x03(\x0b\x32\x13.monorail.Amendment\x12)\n\x0b\x61ttachments\x18\n \x03(\x0b\x32\x14.monorail.Attachment\x12(\n\x0c\x61pproval_ref\x18\x0b \x01(\x0b\x32\x12.monorail.FieldRef\x12\x17\n\x0f\x64\x65scription_num\x18\x0c \x01(\r\x12\x0f\n\x07is_spam\x18\r \x01(\x08\x12\x12\n\ncan_delete\x18\x0e \x01(\x08\x12\x10\n\x08\x63\x61n_flag\x18\x0f \x01(\x08\"}\n\nFieldValue\x12%\n\tfield_ref\x18\x01 \x01(\x0b\x32\x12.monorail.FieldRef\x12\r\n\x05value\x18\x02 \x01(\t\x12\x12\n\nis_derived\x18\x03 \x01(\x08\x12%\n\tphase_ref\x18\x04 \x01(\x0b\x32\x12.monorail.PhaseRef\"\xc0\x07\n\x05Issue\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12\x10\n\x08local_id\x18\x02 \x01(\r\x12\x0f\n\x07summary\x18\x03 \x01(\t\x12\'\n\nstatus_ref\x18\x04 \x01(\x0b\x32\x13.monorail.StatusRef\x12$\n\towner_ref\x18\x05 \x01(\x0b\x32\x11.monorail.UserRef\x12\"\n\x07\x63\x63_refs\x18\x06 \x03(\x0b\x32\x11.monorail.UserRef\x12&\n\nlabel_refs\x18\x07 \x03(\x0b\x32\x12.monorail.LabelRef\x12.\n\x0e\x63omponent_refs\x18\x08 \x03(\x0b\x32\x16.monorail.ComponentRef\x12\x31\n\x15\x62locked_on_issue_refs\x18\t \x03(\x0b\x32\x12.monorail.IssueRef\x12/\n\x13\x62locking_issue_refs\x18\n \x03(\x0b\x32\x12.monorail.IssueRef\x12\x34\n\x18\x64\x61ngling_blocked_on_refs\x18\x17 \x03(\x0b\x32\x12.monorail.IssueRef\x12\x32\n\x16\x64\x61ngling_blocking_refs\x18\x18 \x03(\x0b\x32\x12.monorail.IssueRef\x12\x31\n\x15merged_into_issue_ref\x18\x0b \x01(\x0b\x32\x12.monorail.IssueRef\x12*\n\x0c\x66ield_values\x18\x0c \x03(\x0b\x32\x14.monorail.FieldValue\x12\x12\n\nis_deleted\x18\r \x01(\x08\x12\'\n\x0creporter_ref\x18\x0e \x01(\x0b\x32\x11.monorail.UserRef\x12\x18\n\x10opened_timestamp\x18\x0f \x01(\x07\x12\x18\n\x10\x63losed_timestamp\x18\x10 \x01(\x07\x12\x1a\n\x12modified_timestamp\x18\x11 \x01(\x07\x12$\n\x1c\x63omponent_modified_timestamp\x18\x19 \x01(\x07\x12!\n\x19status_modified_timestamp\x18\x1a \x01(\x07\x12 \n\x18owner_modified_timestamp\x18\x1b \x01(\x07\x12\x12\n\nstar_count\x18\x12 \x01(\r\x12\x0f\n\x07is_spam\x18\x13 \x01(\x08\x12\x18\n\x10\x61ttachment_count\x18\x14 \x01(\r\x12+\n\x0f\x61pproval_values\x18\x15 \x03(\x0b\x32\x12.monorail.Approval\x12\"\n\x06phases\x18\x16 \x03(\x0b\x32\x12.monorail.PhaseDef\"\x9a\x06\n\nIssueDelta\x12,\n\x06status\x18\x01 \x01(\x0b\x32\x1c.google.protobuf.StringValue\x12$\n\towner_ref\x18\x02 \x01(\x0b\x32\x11.monorail.UserRef\x12&\n\x0b\x63\x63_refs_add\x18\x03 \x03(\x0b\x32\x11.monorail.UserRef\x12)\n\x0e\x63\x63_refs_remove\x18\x04 \x03(\x0b\x32\x11.monorail.UserRef\x12-\n\rcomp_refs_add\x18\x05 \x03(\x0b\x32\x16.monorail.ComponentRef\x12\x30\n\x10\x63omp_refs_remove\x18\x06 \x03(\x0b\x32\x16.monorail.ComponentRef\x12*\n\x0elabel_refs_add\x18\x07 \x03(\x0b\x32\x12.monorail.LabelRef\x12-\n\x11label_refs_remove\x18\x08 \x03(\x0b\x32\x12.monorail.LabelRef\x12,\n\x0e\x66ield_vals_add\x18\t \x03(\x0b\x32\x14.monorail.FieldValue\x12/\n\x11\x66ield_vals_remove\x18\n \x03(\x0b\x32\x14.monorail.FieldValue\x12(\n\x0c\x66ields_clear\x18\x0b \x03(\x0b\x32\x12.monorail.FieldRef\x12/\n\x13\x62locked_on_refs_add\x18\x0c \x03(\x0b\x32\x12.monorail.IssueRef\x12\x32\n\x16\x62locked_on_refs_remove\x18\r \x03(\x0b\x32\x12.monorail.IssueRef\x12-\n\x11\x62locking_refs_add\x18\x0e \x03(\x0b\x32\x12.monorail.IssueRef\x12\x30\n\x14\x62locking_refs_remove\x18\x0f \x03(\x0b\x32\x12.monorail.IssueRef\x12+\n\x0fmerged_into_ref\x18\x10 \x01(\x0b\x32\x12.monorail.IssueRef\x12-\n\x07summary\x18\x11 \x01(\x0b\x32\x1c.google.protobuf.StringValue\"\xa1\x02\n\rApprovalDelta\x12(\n\x06status\x18\x01 \x01(\x0e\x32\x18.monorail.ApprovalStatus\x12,\n\x11\x61pprover_refs_add\x18\x02 \x03(\x0b\x32\x11.monorail.UserRef\x12/\n\x14\x61pprover_refs_remove\x18\x03 \x03(\x0b\x32\x11.monorail.UserRef\x12,\n\x0e\x66ield_vals_add\x18\x04 \x03(\x0b\x32\x14.monorail.FieldValue\x12/\n\x11\x66ield_vals_remove\x18\x05 \x03(\x0b\x32\x14.monorail.FieldValue\x12(\n\x0c\x66ields_clear\x18\x06 \x03(\x0b\x32\x12.monorail.FieldRef\"5\n\x10\x41ttachmentUpload\x12\x10\n\x08\x66ilename\x18\x01 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x02 \x01(\x0c\"G\n\x0cIssueSummary\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12\x10\n\x08local_id\x18\x02 \x01(\r\x12\x0f\n\x07summary\x18\x03 \x01(\t\"?\n\x08PhaseDef\x12%\n\tphase_ref\x18\x01 \x01(\x0b\x32\x12.monorail.PhaseRef\x12\x0c\n\x04rank\x18\x02 \x01(\r\"\x1e\n\x08PhaseRef\x12\x12\n\nphase_name\x18\x01 \x01(\t*\x90\x01\n\x0e\x41pprovalStatus\x12\x0b\n\x07NOT_SET\x10\x00\x12\x10\n\x0cNEEDS_REVIEW\x10\x01\x12\x06\n\x02NA\x10\x02\x12\x14\n\x10REVIEW_REQUESTED\x10\x03\x12\x12\n\x0eREVIEW_STARTED\x10\x04\x12\r\n\tNEED_INFO\x10\x05\x12\x0c\n\x08\x41PPROVED\x10\x06\x12\x10\n\x0cNOT_APPROVED\x10\x07*^\n\x0bSearchScope\x12\x07\n\x03\x41LL\x10\x00\x12\x07\n\x03NEW\x10\x01\x12\x08\n\x04OPEN\x10\x02\x12\t\n\x05OWNED\x10\x03\x12\x0c\n\x08REPORTED\x10\x04\x12\x0b\n\x07STARRED\x10\x05\x12\r\n\tTO_VERIFY\x10\x06\x62\x06proto3')
+ ,
+ dependencies=[google_dot_protobuf_dot_wrappers__pb2.DESCRIPTOR,api_dot_api__proto_dot_common__pb2.DESCRIPTOR,])
+
+_APPROVALSTATUS = _descriptor.EnumDescriptor(
+ name='ApprovalStatus',
+ full_name='monorail.ApprovalStatus',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='NOT_SET', index=0, number=0,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='NEEDS_REVIEW', index=1, number=1,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='NA', index=2, number=2,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='REVIEW_REQUESTED', index=3, number=3,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='REVIEW_STARTED', index=4, number=4,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='NEED_INFO', index=5, number=5,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='APPROVED', index=6, number=6,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='NOT_APPROVED', index=7, number=7,
+ serialized_options=None,
+ type=None),
+ ],
+ containing_type=None,
+ serialized_options=None,
+ serialized_start=3396,
+ serialized_end=3540,
+)
+_sym_db.RegisterEnumDescriptor(_APPROVALSTATUS)
+
+ApprovalStatus = enum_type_wrapper.EnumTypeWrapper(_APPROVALSTATUS)
+_SEARCHSCOPE = _descriptor.EnumDescriptor(
+ name='SearchScope',
+ full_name='monorail.SearchScope',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='ALL', index=0, number=0,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='NEW', index=1, number=1,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='OPEN', index=2, number=2,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='OWNED', index=3, number=3,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='REPORTED', index=4, number=4,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='STARRED', index=5, number=5,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='TO_VERIFY', index=6, number=6,
+ serialized_options=None,
+ type=None),
+ ],
+ containing_type=None,
+ serialized_options=None,
+ serialized_start=3542,
+ serialized_end=3636,
+)
+_sym_db.RegisterEnumDescriptor(_SEARCHSCOPE)
+
+SearchScope = enum_type_wrapper.EnumTypeWrapper(_SEARCHSCOPE)
+NOT_SET = 0
+NEEDS_REVIEW = 1
+NA = 2
+REVIEW_REQUESTED = 3
+REVIEW_STARTED = 4
+NEED_INFO = 5
+APPROVED = 6
+NOT_APPROVED = 7
+ALL = 0
+NEW = 1
+OPEN = 2
+OWNED = 3
+REPORTED = 4
+STARRED = 5
+TO_VERIFY = 6
+
+
+
+_APPROVAL = _descriptor.Descriptor(
+ name='Approval',
+ full_name='monorail.Approval',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='field_ref', full_name='monorail.Approval.field_ref', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='approver_refs', full_name='monorail.Approval.approver_refs', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='status', full_name='monorail.Approval.status', index=2,
+ number=3, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='set_on', full_name='monorail.Approval.set_on', index=3,
+ number=4, type=7, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='setter_ref', full_name='monorail.Approval.setter_ref', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='phase_ref', full_name='monorail.Approval.phase_ref', index=5,
+ number=7, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=108,
+ serialized_end=335,
+)
+
+
+_AMENDMENT = _descriptor.Descriptor(
+ name='Amendment',
+ full_name='monorail.Amendment',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='field_name', full_name='monorail.Amendment.field_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='new_or_delta_value', full_name='monorail.Amendment.new_or_delta_value', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='old_value', full_name='monorail.Amendment.old_value', index=2,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=337,
+ serialized_end=415,
+)
+
+
+_ATTACHMENT = _descriptor.Descriptor(
+ name='Attachment',
+ full_name='monorail.Attachment',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='attachment_id', full_name='monorail.Attachment.attachment_id', index=0,
+ number=1, type=4, cpp_type=4, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='filename', full_name='monorail.Attachment.filename', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='size', full_name='monorail.Attachment.size', index=2,
+ number=3, type=4, cpp_type=4, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='content_type', full_name='monorail.Attachment.content_type', index=3,
+ number=4, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='is_deleted', full_name='monorail.Attachment.is_deleted', index=4,
+ number=5, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='thumbnail_url', full_name='monorail.Attachment.thumbnail_url', index=5,
+ number=6, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='view_url', full_name='monorail.Attachment.view_url', index=6,
+ number=7, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='download_url', full_name='monorail.Attachment.download_url', index=7,
+ number=8, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=418,
+ serialized_end=590,
+)
+
+
+_COMMENT = _descriptor.Descriptor(
+ name='Comment',
+ full_name='monorail.Comment',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.Comment.project_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='local_id', full_name='monorail.Comment.local_id', index=1,
+ number=2, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='sequence_num', full_name='monorail.Comment.sequence_num', index=2,
+ number=3, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='is_deleted', full_name='monorail.Comment.is_deleted', index=3,
+ number=4, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='commenter', full_name='monorail.Comment.commenter', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='timestamp', full_name='monorail.Comment.timestamp', index=5,
+ number=6, type=7, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='content', full_name='monorail.Comment.content', index=6,
+ number=7, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='inbound_message', full_name='monorail.Comment.inbound_message', index=7,
+ number=8, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='amendments', full_name='monorail.Comment.amendments', index=8,
+ number=9, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='attachments', full_name='monorail.Comment.attachments', index=9,
+ number=10, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='approval_ref', full_name='monorail.Comment.approval_ref', index=10,
+ number=11, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='description_num', full_name='monorail.Comment.description_num', index=11,
+ number=12, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='is_spam', full_name='monorail.Comment.is_spam', index=12,
+ number=13, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='can_delete', full_name='monorail.Comment.can_delete', index=13,
+ number=14, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='can_flag', full_name='monorail.Comment.can_flag', index=14,
+ number=15, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=593,
+ serialized_end=989,
+)
+
+
+_FIELDVALUE = _descriptor.Descriptor(
+ name='FieldValue',
+ full_name='monorail.FieldValue',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='field_ref', full_name='monorail.FieldValue.field_ref', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='value', full_name='monorail.FieldValue.value', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='is_derived', full_name='monorail.FieldValue.is_derived', index=2,
+ number=3, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='phase_ref', full_name='monorail.FieldValue.phase_ref', index=3,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=991,
+ serialized_end=1116,
+)
+
+
+_ISSUE = _descriptor.Descriptor(
+ name='Issue',
+ full_name='monorail.Issue',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.Issue.project_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='local_id', full_name='monorail.Issue.local_id', index=1,
+ number=2, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='summary', full_name='monorail.Issue.summary', index=2,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='status_ref', full_name='monorail.Issue.status_ref', index=3,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='owner_ref', full_name='monorail.Issue.owner_ref', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cc_refs', full_name='monorail.Issue.cc_refs', index=5,
+ number=6, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='label_refs', full_name='monorail.Issue.label_refs', index=6,
+ number=7, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='component_refs', full_name='monorail.Issue.component_refs', index=7,
+ number=8, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='blocked_on_issue_refs', full_name='monorail.Issue.blocked_on_issue_refs', index=8,
+ number=9, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='blocking_issue_refs', full_name='monorail.Issue.blocking_issue_refs', index=9,
+ number=10, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='dangling_blocked_on_refs', full_name='monorail.Issue.dangling_blocked_on_refs', index=10,
+ number=23, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='dangling_blocking_refs', full_name='monorail.Issue.dangling_blocking_refs', index=11,
+ number=24, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='merged_into_issue_ref', full_name='monorail.Issue.merged_into_issue_ref', index=12,
+ number=11, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='field_values', full_name='monorail.Issue.field_values', index=13,
+ number=12, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='is_deleted', full_name='monorail.Issue.is_deleted', index=14,
+ number=13, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='reporter_ref', full_name='monorail.Issue.reporter_ref', index=15,
+ number=14, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='opened_timestamp', full_name='monorail.Issue.opened_timestamp', index=16,
+ number=15, type=7, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='closed_timestamp', full_name='monorail.Issue.closed_timestamp', index=17,
+ number=16, type=7, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='modified_timestamp', full_name='monorail.Issue.modified_timestamp', index=18,
+ number=17, type=7, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='component_modified_timestamp', full_name='monorail.Issue.component_modified_timestamp', index=19,
+ number=25, type=7, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='status_modified_timestamp', full_name='monorail.Issue.status_modified_timestamp', index=20,
+ number=26, type=7, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='owner_modified_timestamp', full_name='monorail.Issue.owner_modified_timestamp', index=21,
+ number=27, type=7, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='star_count', full_name='monorail.Issue.star_count', index=22,
+ number=18, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='is_spam', full_name='monorail.Issue.is_spam', index=23,
+ number=19, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='attachment_count', full_name='monorail.Issue.attachment_count', index=24,
+ number=20, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='approval_values', full_name='monorail.Issue.approval_values', index=25,
+ number=21, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='phases', full_name='monorail.Issue.phases', index=26,
+ number=22, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1119,
+ serialized_end=2079,
+)
+
+
+_ISSUEDELTA = _descriptor.Descriptor(
+ name='IssueDelta',
+ full_name='monorail.IssueDelta',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='status', full_name='monorail.IssueDelta.status', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='owner_ref', full_name='monorail.IssueDelta.owner_ref', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cc_refs_add', full_name='monorail.IssueDelta.cc_refs_add', index=2,
+ number=3, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cc_refs_remove', full_name='monorail.IssueDelta.cc_refs_remove', index=3,
+ number=4, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='comp_refs_add', full_name='monorail.IssueDelta.comp_refs_add', index=4,
+ number=5, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='comp_refs_remove', full_name='monorail.IssueDelta.comp_refs_remove', index=5,
+ number=6, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='label_refs_add', full_name='monorail.IssueDelta.label_refs_add', index=6,
+ number=7, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='label_refs_remove', full_name='monorail.IssueDelta.label_refs_remove', index=7,
+ number=8, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='field_vals_add', full_name='monorail.IssueDelta.field_vals_add', index=8,
+ number=9, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='field_vals_remove', full_name='monorail.IssueDelta.field_vals_remove', index=9,
+ number=10, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='fields_clear', full_name='monorail.IssueDelta.fields_clear', index=10,
+ number=11, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='blocked_on_refs_add', full_name='monorail.IssueDelta.blocked_on_refs_add', index=11,
+ number=12, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='blocked_on_refs_remove', full_name='monorail.IssueDelta.blocked_on_refs_remove', index=12,
+ number=13, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='blocking_refs_add', full_name='monorail.IssueDelta.blocking_refs_add', index=13,
+ number=14, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='blocking_refs_remove', full_name='monorail.IssueDelta.blocking_refs_remove', index=14,
+ number=15, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='merged_into_ref', full_name='monorail.IssueDelta.merged_into_ref', index=15,
+ number=16, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='summary', full_name='monorail.IssueDelta.summary', index=16,
+ number=17, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2082,
+ serialized_end=2876,
+)
+
+
+_APPROVALDELTA = _descriptor.Descriptor(
+ name='ApprovalDelta',
+ full_name='monorail.ApprovalDelta',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='status', full_name='monorail.ApprovalDelta.status', index=0,
+ number=1, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='approver_refs_add', full_name='monorail.ApprovalDelta.approver_refs_add', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='approver_refs_remove', full_name='monorail.ApprovalDelta.approver_refs_remove', index=2,
+ number=3, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='field_vals_add', full_name='monorail.ApprovalDelta.field_vals_add', index=3,
+ number=4, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='field_vals_remove', full_name='monorail.ApprovalDelta.field_vals_remove', index=4,
+ number=5, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='fields_clear', full_name='monorail.ApprovalDelta.fields_clear', index=5,
+ number=6, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2879,
+ serialized_end=3168,
+)
+
+
+_ATTACHMENTUPLOAD = _descriptor.Descriptor(
+ name='AttachmentUpload',
+ full_name='monorail.AttachmentUpload',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='filename', full_name='monorail.AttachmentUpload.filename', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='content', full_name='monorail.AttachmentUpload.content', index=1,
+ number=2, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3170,
+ serialized_end=3223,
+)
+
+
+_ISSUESUMMARY = _descriptor.Descriptor(
+ name='IssueSummary',
+ full_name='monorail.IssueSummary',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.IssueSummary.project_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='local_id', full_name='monorail.IssueSummary.local_id', index=1,
+ number=2, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='summary', full_name='monorail.IssueSummary.summary', index=2,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3225,
+ serialized_end=3296,
+)
+
+
+_PHASEDEF = _descriptor.Descriptor(
+ name='PhaseDef',
+ full_name='monorail.PhaseDef',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='phase_ref', full_name='monorail.PhaseDef.phase_ref', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='rank', full_name='monorail.PhaseDef.rank', index=1,
+ number=2, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3298,
+ serialized_end=3361,
+)
+
+
+_PHASEREF = _descriptor.Descriptor(
+ name='PhaseRef',
+ full_name='monorail.PhaseRef',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='phase_name', full_name='monorail.PhaseRef.phase_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3363,
+ serialized_end=3393,
+)
+
+_APPROVAL.fields_by_name['field_ref'].message_type = api_dot_api__proto_dot_common__pb2._FIELDREF
+_APPROVAL.fields_by_name['approver_refs'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_APPROVAL.fields_by_name['status'].enum_type = _APPROVALSTATUS
+_APPROVAL.fields_by_name['setter_ref'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_APPROVAL.fields_by_name['phase_ref'].message_type = _PHASEREF
+_COMMENT.fields_by_name['commenter'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_COMMENT.fields_by_name['amendments'].message_type = _AMENDMENT
+_COMMENT.fields_by_name['attachments'].message_type = _ATTACHMENT
+_COMMENT.fields_by_name['approval_ref'].message_type = api_dot_api__proto_dot_common__pb2._FIELDREF
+_FIELDVALUE.fields_by_name['field_ref'].message_type = api_dot_api__proto_dot_common__pb2._FIELDREF
+_FIELDVALUE.fields_by_name['phase_ref'].message_type = _PHASEREF
+_ISSUE.fields_by_name['status_ref'].message_type = api_dot_api__proto_dot_common__pb2._STATUSREF
+_ISSUE.fields_by_name['owner_ref'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_ISSUE.fields_by_name['cc_refs'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_ISSUE.fields_by_name['label_refs'].message_type = api_dot_api__proto_dot_common__pb2._LABELREF
+_ISSUE.fields_by_name['component_refs'].message_type = api_dot_api__proto_dot_common__pb2._COMPONENTREF
+_ISSUE.fields_by_name['blocked_on_issue_refs'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_ISSUE.fields_by_name['blocking_issue_refs'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_ISSUE.fields_by_name['dangling_blocked_on_refs'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_ISSUE.fields_by_name['dangling_blocking_refs'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_ISSUE.fields_by_name['merged_into_issue_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_ISSUE.fields_by_name['field_values'].message_type = _FIELDVALUE
+_ISSUE.fields_by_name['reporter_ref'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_ISSUE.fields_by_name['approval_values'].message_type = _APPROVAL
+_ISSUE.fields_by_name['phases'].message_type = _PHASEDEF
+_ISSUEDELTA.fields_by_name['status'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_ISSUEDELTA.fields_by_name['owner_ref'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_ISSUEDELTA.fields_by_name['cc_refs_add'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_ISSUEDELTA.fields_by_name['cc_refs_remove'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_ISSUEDELTA.fields_by_name['comp_refs_add'].message_type = api_dot_api__proto_dot_common__pb2._COMPONENTREF
+_ISSUEDELTA.fields_by_name['comp_refs_remove'].message_type = api_dot_api__proto_dot_common__pb2._COMPONENTREF
+_ISSUEDELTA.fields_by_name['label_refs_add'].message_type = api_dot_api__proto_dot_common__pb2._LABELREF
+_ISSUEDELTA.fields_by_name['label_refs_remove'].message_type = api_dot_api__proto_dot_common__pb2._LABELREF
+_ISSUEDELTA.fields_by_name['field_vals_add'].message_type = _FIELDVALUE
+_ISSUEDELTA.fields_by_name['field_vals_remove'].message_type = _FIELDVALUE
+_ISSUEDELTA.fields_by_name['fields_clear'].message_type = api_dot_api__proto_dot_common__pb2._FIELDREF
+_ISSUEDELTA.fields_by_name['blocked_on_refs_add'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_ISSUEDELTA.fields_by_name['blocked_on_refs_remove'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_ISSUEDELTA.fields_by_name['blocking_refs_add'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_ISSUEDELTA.fields_by_name['blocking_refs_remove'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_ISSUEDELTA.fields_by_name['merged_into_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_ISSUEDELTA.fields_by_name['summary'].message_type = google_dot_protobuf_dot_wrappers__pb2._STRINGVALUE
+_APPROVALDELTA.fields_by_name['status'].enum_type = _APPROVALSTATUS
+_APPROVALDELTA.fields_by_name['approver_refs_add'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_APPROVALDELTA.fields_by_name['approver_refs_remove'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_APPROVALDELTA.fields_by_name['field_vals_add'].message_type = _FIELDVALUE
+_APPROVALDELTA.fields_by_name['field_vals_remove'].message_type = _FIELDVALUE
+_APPROVALDELTA.fields_by_name['fields_clear'].message_type = api_dot_api__proto_dot_common__pb2._FIELDREF
+_PHASEDEF.fields_by_name['phase_ref'].message_type = _PHASEREF
+DESCRIPTOR.message_types_by_name['Approval'] = _APPROVAL
+DESCRIPTOR.message_types_by_name['Amendment'] = _AMENDMENT
+DESCRIPTOR.message_types_by_name['Attachment'] = _ATTACHMENT
+DESCRIPTOR.message_types_by_name['Comment'] = _COMMENT
+DESCRIPTOR.message_types_by_name['FieldValue'] = _FIELDVALUE
+DESCRIPTOR.message_types_by_name['Issue'] = _ISSUE
+DESCRIPTOR.message_types_by_name['IssueDelta'] = _ISSUEDELTA
+DESCRIPTOR.message_types_by_name['ApprovalDelta'] = _APPROVALDELTA
+DESCRIPTOR.message_types_by_name['AttachmentUpload'] = _ATTACHMENTUPLOAD
+DESCRIPTOR.message_types_by_name['IssueSummary'] = _ISSUESUMMARY
+DESCRIPTOR.message_types_by_name['PhaseDef'] = _PHASEDEF
+DESCRIPTOR.message_types_by_name['PhaseRef'] = _PHASEREF
+DESCRIPTOR.enum_types_by_name['ApprovalStatus'] = _APPROVALSTATUS
+DESCRIPTOR.enum_types_by_name['SearchScope'] = _SEARCHSCOPE
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+Approval = _reflection.GeneratedProtocolMessageType('Approval', (_message.Message,), dict(
+ DESCRIPTOR = _APPROVAL,
+ __module__ = 'api.api_proto.issue_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.Approval)
+ ))
+_sym_db.RegisterMessage(Approval)
+
+Amendment = _reflection.GeneratedProtocolMessageType('Amendment', (_message.Message,), dict(
+ DESCRIPTOR = _AMENDMENT,
+ __module__ = 'api.api_proto.issue_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.Amendment)
+ ))
+_sym_db.RegisterMessage(Amendment)
+
+Attachment = _reflection.GeneratedProtocolMessageType('Attachment', (_message.Message,), dict(
+ DESCRIPTOR = _ATTACHMENT,
+ __module__ = 'api.api_proto.issue_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.Attachment)
+ ))
+_sym_db.RegisterMessage(Attachment)
+
+Comment = _reflection.GeneratedProtocolMessageType('Comment', (_message.Message,), dict(
+ DESCRIPTOR = _COMMENT,
+ __module__ = 'api.api_proto.issue_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.Comment)
+ ))
+_sym_db.RegisterMessage(Comment)
+
+FieldValue = _reflection.GeneratedProtocolMessageType('FieldValue', (_message.Message,), dict(
+ DESCRIPTOR = _FIELDVALUE,
+ __module__ = 'api.api_proto.issue_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.FieldValue)
+ ))
+_sym_db.RegisterMessage(FieldValue)
+
+Issue = _reflection.GeneratedProtocolMessageType('Issue', (_message.Message,), dict(
+ DESCRIPTOR = _ISSUE,
+ __module__ = 'api.api_proto.issue_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.Issue)
+ ))
+_sym_db.RegisterMessage(Issue)
+
+IssueDelta = _reflection.GeneratedProtocolMessageType('IssueDelta', (_message.Message,), dict(
+ DESCRIPTOR = _ISSUEDELTA,
+ __module__ = 'api.api_proto.issue_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.IssueDelta)
+ ))
+_sym_db.RegisterMessage(IssueDelta)
+
+ApprovalDelta = _reflection.GeneratedProtocolMessageType('ApprovalDelta', (_message.Message,), dict(
+ DESCRIPTOR = _APPROVALDELTA,
+ __module__ = 'api.api_proto.issue_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ApprovalDelta)
+ ))
+_sym_db.RegisterMessage(ApprovalDelta)
+
+AttachmentUpload = _reflection.GeneratedProtocolMessageType('AttachmentUpload', (_message.Message,), dict(
+ DESCRIPTOR = _ATTACHMENTUPLOAD,
+ __module__ = 'api.api_proto.issue_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.AttachmentUpload)
+ ))
+_sym_db.RegisterMessage(AttachmentUpload)
+
+IssueSummary = _reflection.GeneratedProtocolMessageType('IssueSummary', (_message.Message,), dict(
+ DESCRIPTOR = _ISSUESUMMARY,
+ __module__ = 'api.api_proto.issue_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.IssueSummary)
+ ))
+_sym_db.RegisterMessage(IssueSummary)
+
+PhaseDef = _reflection.GeneratedProtocolMessageType('PhaseDef', (_message.Message,), dict(
+ DESCRIPTOR = _PHASEDEF,
+ __module__ = 'api.api_proto.issue_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.PhaseDef)
+ ))
+_sym_db.RegisterMessage(PhaseDef)
+
+PhaseRef = _reflection.GeneratedProtocolMessageType('PhaseRef', (_message.Message,), dict(
+ DESCRIPTOR = _PHASEREF,
+ __module__ = 'api.api_proto.issue_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.PhaseRef)
+ ))
+_sym_db.RegisterMessage(PhaseRef)
+
+
+# @@protoc_insertion_point(module_scope)
diff --git a/api/api_proto/issue_objects_prpc_pb2.py b/api/api_proto/issue_objects_prpc_pb2.py
new file mode 100644
index 0000000..fe96e84
--- /dev/null
+++ b/api/api_proto/issue_objects_prpc_pb2.py
@@ -0,0 +1,4 @@
+# Generated by the pRPC protocol buffer compiler plugin. DO NOT EDIT!
+# source: api/api_proto/issue_objects.proto
+
+from google.protobuf import descriptor_pb2
diff --git a/api/api_proto/issues.proto b/api/api_proto/issues.proto
new file mode 100644
index 0000000..7c39884
--- /dev/null
+++ b/api/api_proto/issues.proto
@@ -0,0 +1,417 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+syntax = "proto3";
+
+package monorail;
+
+import "google/protobuf/empty.proto";
+import "api/api_proto/common.proto";
+import "api/api_proto/issue_objects.proto";
+import "api/api_proto/project_objects.proto";
+
+
+service Issues {
+ rpc CreateIssue (CreateIssueRequest) returns (IssueResponse) {}
+ rpc GetIssue (GetIssueRequest) returns (IssueResponse) {}
+ rpc ListIssues (ListIssuesRequest) returns (ListIssuesResponse) {}
+ rpc ListReferencedIssues(ListReferencedIssuesRequest) returns (ListReferencedIssuesResponse) {}
+ rpc ListApplicableFieldDefs(ListApplicableFieldDefsRequest) returns (ListApplicableFieldDefsResponse) {}
+ rpc UpdateIssue (UpdateIssueRequest) returns (IssueResponse) {}
+ rpc StarIssue (StarIssueRequest) returns (StarIssueResponse) {}
+ rpc IsIssueStarred (IsIssueStarredRequest) returns (IsIssueStarredResponse) {}
+ rpc ListStarredIssues (ListStarredIssuesRequest) returns (ListStarredIssuesResponse) {}
+ // There is no CreateComment method because comments are created by updates,
+ // which may have just comment content and no delta.
+ // There is no GetComment method, clients should use ListComments.
+ rpc ListComments (ListCommentsRequest) returns (ListCommentsResponse) {}
+ rpc ListActivities (ListActivitiesRequest) returns (ListActivitiesResponse) {}
+ rpc DeleteComment (DeleteCommentRequest) returns (google.protobuf.Empty) {}
+ rpc BulkUpdateApprovals (BulkUpdateApprovalsRequest) returns (BulkUpdateApprovalsResponse) {}
+ rpc UpdateApproval (UpdateApprovalRequest) returns (UpdateApprovalResponse) {}
+ rpc ConvertIssueApprovalsTemplate (ConvertIssueApprovalsTemplateRequest) returns (ConvertIssueApprovalsTemplateResponse) {}
+ rpc IssueSnapshot (IssueSnapshotRequest) returns (IssueSnapshotResponse) {}
+ rpc PresubmitIssue (PresubmitIssueRequest) returns (PresubmitIssueResponse) {}
+ rpc RerankBlockedOnIssues (RerankBlockedOnIssuesRequest) returns (RerankBlockedOnIssuesResponse) {}
+ rpc DeleteIssue (DeleteIssueRequest) returns (DeleteIssueResponse) {}
+ rpc DeleteIssueComment (DeleteIssueCommentRequest) returns (DeleteIssueCommentResponse) {}
+ rpc DeleteAttachment (DeleteAttachmentRequest) returns (DeleteAttachmentResponse) {}
+ rpc FlagIssues (FlagIssuesRequest) returns (FlagIssuesResponse) {}
+ rpc FlagComment (FlagCommentRequest) returns (FlagCommentResponse) {}
+ rpc ListIssuePermissions (ListIssuePermissionsRequest) returns (ListIssuePermissionsResponse) {}
+ rpc MoveIssue (MoveIssueRequest) returns (MoveIssueResponse) {}
+ rpc CopyIssue (CopyIssueRequest) returns (CopyIssueResponse) {}
+}
+
+
+// Next available tag: 4
+message CreateIssueRequest {
+ string project_name = 2;
+ Issue issue = 3;
+}
+
+
+// Next available tag: 3
+message GetIssueRequest {
+ IssueRef issue_ref = 2;
+}
+
+
+// Next available tag: 3
+message IssueResponse {
+ Issue issue = 1;
+ IssueRef moved_to_ref = 2;
+}
+
+
+// Next available tag: 8
+message ListIssuesRequest {
+ string query = 2;
+ uint32 canned_query = 3;
+ repeated string project_names = 4;
+ Pagination pagination = 5;
+ string group_by_spec = 6;
+ string sort_spec = 7;
+}
+
+
+// Next available tag: 3
+message ListIssuesResponse {
+ repeated Issue issues = 1;
+ uint32 total_results = 2;
+}
+
+
+// Next available tag: 3
+message ListReferencedIssuesRequest {
+ repeated IssueRef issue_refs = 2;
+}
+
+
+// Next available tag: 2
+message ListReferencedIssuesResponse {
+ // TODO(ehmaldonado): monorail:4033 Rename these fields to issues rather than
+ // refs.
+ repeated Issue open_refs = 1;
+ repeated Issue closed_refs = 2;
+}
+
+
+// Next available tag: 3
+message ListApplicableFieldDefsRequest {
+ repeated IssueRef issue_refs = 2;
+}
+
+
+// Next available tag: 2
+message ListApplicableFieldDefsResponse {
+ repeated FieldDef field_defs = 1;
+}
+
+
+// Next available tag: 9
+message UpdateIssueRequest {
+ IssueRef issue_ref = 2;
+ bool send_email = 3;
+ IssueDelta delta = 4;
+ string comment_content = 5;
+ bool is_description = 6;
+ repeated AttachmentUpload uploads = 7;
+ repeated int64 kept_attachments = 8;
+}
+
+
+// Next available tag: 4
+message StarIssueRequest {
+ IssueRef issue_ref = 2;
+ bool starred = 3; // True to add a star, False to remove one.
+}
+
+
+// Next available tag: 2
+message StarIssueResponse {
+ uint32 star_count = 1;
+}
+
+
+// Next available tag: 3
+message IsIssueStarredRequest {
+ IssueRef issue_ref = 2;
+}
+
+
+// Next available tag: 2
+message IsIssueStarredResponse {
+ bool is_starred = 1;
+}
+
+
+// Next available tag: 1
+message ListStarredIssuesRequest {
+}
+
+
+// Next available tag: 2
+message ListStarredIssuesResponse {
+ repeated IssueRef starred_issue_refs = 1;
+}
+
+
+// Next available tag: 3
+message ListCommentsRequest {
+ IssueRef issue_ref = 2;
+}
+
+
+// Next available tag: 2
+message ListCommentsResponse {
+ // Comments are in chronological order. The list of comments may
+ // include deleted, spam, and description comments. Spam and
+ // deleted comments will only have content supplied if the user is
+ // allowed to see it.
+ repeated Comment comments = 1;
+}
+
+
+// Next available tag: 5
+message ListActivitiesRequest {
+ // TODO(tyreej) description
+ UserRef user_ref = 2;
+ fixed32 before = 3;
+ fixed32 after = 4;
+}
+
+
+// Next available tag: 3
+message ListActivitiesResponse {
+ // TODO(tyreej) description
+ repeated Comment comments = 1;
+ repeated IssueSummary issue_summaries = 2;
+}
+
+
+// Next available tag: 5
+message DeleteCommentRequest {
+ IssueRef issue_ref = 2;
+ int64 sequence_num = 3;
+ bool delete = 4; // True to delete, False to undelete.
+}
+
+
+// TODO: Consider eventually replacing calls to UpdateApprovalRequest
+// with BulkUpdateApprovalsRequest.
+// TODO: For now, block bulk attaching uploads and survey editing.
+// Next available tag: 7
+message BulkUpdateApprovalsRequest {
+ repeated IssueRef issue_refs = 2;
+ FieldRef field_ref = 3;
+ ApprovalDelta approval_delta = 4;
+ string comment_content = 5;
+ bool send_email = 6;
+}
+
+
+// Next available tag: 2
+message BulkUpdateApprovalsResponse {
+ repeated IssueRef issue_refs = 1;
+}
+
+
+// Next available tag: 10
+message UpdateApprovalRequest {
+ IssueRef issue_ref = 2;
+ FieldRef field_ref = 3;
+ ApprovalDelta approval_delta = 4;
+ string comment_content = 5;
+ bool send_email = 6;
+ bool is_description = 7;
+ repeated AttachmentUpload uploads = 8;
+ repeated int64 kept_attachments = 9;
+}
+
+
+// Next available tag: 2
+message UpdateApprovalResponse {
+ Approval approval = 1;
+ // TODO(jojwang): monorail:3895, add new_comment field.
+}
+
+
+// Next available tag: 6
+message ConvertIssueApprovalsTemplateRequest {
+ IssueRef issue_ref = 2;
+ string template_name = 3;
+ string comment_content = 4;
+ bool send_email = 5;
+}
+
+
+// Next available tag: 2
+message ConvertIssueApprovalsTemplateResponse {
+ Issue issue = 1;
+}
+
+
+// Next available tag: 9
+message IssueSnapshotRequest {
+ int32 timestamp = 2;
+ string query = 3;
+ int32 canned_query = 4;
+ string group_by = 5;
+ string label_prefix = 6;
+ string project_name = 7;
+ int32 hotlist_id = 8;
+}
+
+
+// Next available tag: 3
+message IssueSnapshotCount {
+ string dimension = 1;
+ int32 count = 2;
+}
+
+
+// Next available tag: 3
+message IssueSnapshotResponse {
+ repeated IssueSnapshotCount snapshot_count = 1;
+ repeated string unsupported_field = 2;
+ bool search_limit_reached = 3;
+}
+
+
+// Next available tag: 4
+message PresubmitIssueRequest {
+ IssueRef issue_ref = 2;
+ IssueDelta issue_delta = 3;
+}
+
+
+// Next available tag: 8
+message PresubmitIssueResponse {
+ string owner_availability = 1;
+ string owner_availability_state = 2;
+ repeated ValueAndWhy derived_labels = 3;
+ repeated ValueAndWhy derived_owners = 4;
+ repeated ValueAndWhy derived_ccs = 5;
+ repeated ValueAndWhy warnings = 6;
+ repeated ValueAndWhy errors = 7;
+}
+
+
+// Next available tag: 6
+message RerankBlockedOnIssuesRequest {
+ IssueRef issue_ref = 2;
+ IssueRef moved_ref = 3;
+ IssueRef target_ref = 4;
+ bool split_above = 5;
+}
+
+
+// Next available tag: 2
+message RerankBlockedOnIssuesResponse {
+ repeated IssueRef blocked_on_issue_refs = 1;
+}
+
+
+// Next available tag: 4
+message DeleteIssueRequest {
+ IssueRef issue_ref = 2;
+ bool delete = 3;
+}
+
+
+// Next available tag: 1
+message DeleteIssueResponse {
+}
+
+
+// Next available tag: 5
+message DeleteIssueCommentRequest {
+ IssueRef issue_ref = 2;
+ uint32 sequence_num = 3;
+ bool delete = 4;
+}
+
+
+// Next available tag: 1
+message DeleteIssueCommentResponse {
+}
+
+
+// Next available tag: 6
+message DeleteAttachmentRequest {
+ IssueRef issue_ref = 2;
+ uint32 sequence_num = 3;
+ uint32 attachment_id = 4;
+ bool delete = 5;
+}
+
+
+// Next available tag: 1
+message DeleteAttachmentResponse {
+}
+
+
+// Next available tag: 4
+message FlagIssuesRequest {
+ repeated IssueRef issue_refs = 2;
+ bool flag = 3;
+}
+
+
+// Next available tag: 1
+message FlagIssuesResponse {
+}
+
+
+// Next available tag: 5
+message FlagCommentRequest {
+ IssueRef issue_ref = 2;
+ uint32 sequence_num = 3;
+ bool flag = 4;
+}
+
+
+// Next available tag: 1
+message FlagCommentResponse {
+}
+
+
+// Next available tag: 3
+message ListIssuePermissionsRequest {
+ IssueRef issue_ref = 2;
+}
+
+
+// Next available tag: 2
+message ListIssuePermissionsResponse {
+ repeated string permissions = 1;
+}
+
+
+// Next available tag: 4
+message MoveIssueRequest {
+ IssueRef issue_ref = 2;
+ string target_project_name = 3;
+}
+
+
+// Next available tag: 2
+message MoveIssueResponse {
+ IssueRef new_issue_ref = 1;
+}
+
+
+// Next available tag: 4
+message CopyIssueRequest {
+ IssueRef issue_ref = 2;
+ string target_project_name = 3;
+}
+
+
+// Next available tag: 2
+message CopyIssueResponse {
+ IssueRef new_issue_ref = 1;
+}
diff --git a/api/api_proto/issues_pb2.py b/api/api_proto/issues_pb2.py
new file mode 100644
index 0000000..470fa21
--- /dev/null
+++ b/api/api_proto/issues_pb2.py
@@ -0,0 +1,2703 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: api/api_proto/issues.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
+from api.api_proto import common_pb2 as api_dot_api__proto_dot_common__pb2
+from api.api_proto import issue_objects_pb2 as api_dot_api__proto_dot_issue__objects__pb2
+from api.api_proto import project_objects_pb2 as api_dot_api__proto_dot_project__objects__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='api/api_proto/issues.proto',
+ package='monorail',
+ syntax='proto3',
+ serialized_options=None,
+ serialized_pb=_b('\n\x1a\x61pi/api_proto/issues.proto\x12\x08monorail\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1a\x61pi/api_proto/common.proto\x1a!api/api_proto/issue_objects.proto\x1a#api/api_proto/project_objects.proto\"J\n\x12\x43reateIssueRequest\x12\x14\n\x0cproject_name\x18\x02 \x01(\t\x12\x1e\n\x05issue\x18\x03 \x01(\x0b\x32\x0f.monorail.Issue\"8\n\x0fGetIssueRequest\x12%\n\tissue_ref\x18\x02 \x01(\x0b\x32\x12.monorail.IssueRef\"Y\n\rIssueResponse\x12\x1e\n\x05issue\x18\x01 \x01(\x0b\x32\x0f.monorail.Issue\x12(\n\x0cmoved_to_ref\x18\x02 \x01(\x0b\x32\x12.monorail.IssueRef\"\xa3\x01\n\x11ListIssuesRequest\x12\r\n\x05query\x18\x02 \x01(\t\x12\x14\n\x0c\x63\x61nned_query\x18\x03 \x01(\r\x12\x15\n\rproject_names\x18\x04 \x03(\t\x12(\n\npagination\x18\x05 \x01(\x0b\x32\x14.monorail.Pagination\x12\x15\n\rgroup_by_spec\x18\x06 \x01(\t\x12\x11\n\tsort_spec\x18\x07 \x01(\t\"L\n\x12ListIssuesResponse\x12\x1f\n\x06issues\x18\x01 \x03(\x0b\x32\x0f.monorail.Issue\x12\x15\n\rtotal_results\x18\x02 \x01(\r\"E\n\x1bListReferencedIssuesRequest\x12&\n\nissue_refs\x18\x02 \x03(\x0b\x32\x12.monorail.IssueRef\"h\n\x1cListReferencedIssuesResponse\x12\"\n\topen_refs\x18\x01 \x03(\x0b\x32\x0f.monorail.Issue\x12$\n\x0b\x63losed_refs\x18\x02 \x03(\x0b\x32\x0f.monorail.Issue\"H\n\x1eListApplicableFieldDefsRequest\x12&\n\nissue_refs\x18\x02 \x03(\x0b\x32\x12.monorail.IssueRef\"I\n\x1fListApplicableFieldDefsResponse\x12&\n\nfield_defs\x18\x01 \x03(\x0b\x32\x12.monorail.FieldDef\"\xec\x01\n\x12UpdateIssueRequest\x12%\n\tissue_ref\x18\x02 \x01(\x0b\x32\x12.monorail.IssueRef\x12\x12\n\nsend_email\x18\x03 \x01(\x08\x12#\n\x05\x64\x65lta\x18\x04 \x01(\x0b\x32\x14.monorail.IssueDelta\x12\x17\n\x0f\x63omment_content\x18\x05 \x01(\t\x12\x16\n\x0eis_description\x18\x06 \x01(\x08\x12+\n\x07uploads\x18\x07 \x03(\x0b\x32\x1a.monorail.AttachmentUpload\x12\x18\n\x10kept_attachments\x18\x08 \x03(\x03\"J\n\x10StarIssueRequest\x12%\n\tissue_ref\x18\x02 \x01(\x0b\x32\x12.monorail.IssueRef\x12\x0f\n\x07starred\x18\x03 \x01(\x08\"\'\n\x11StarIssueResponse\x12\x12\n\nstar_count\x18\x01 \x01(\r\">\n\x15IsIssueStarredRequest\x12%\n\tissue_ref\x18\x02 \x01(\x0b\x32\x12.monorail.IssueRef\",\n\x16IsIssueStarredResponse\x12\x12\n\nis_starred\x18\x01 \x01(\x08\"\x1a\n\x18ListStarredIssuesRequest\"K\n\x19ListStarredIssuesResponse\x12.\n\x12starred_issue_refs\x18\x01 \x03(\x0b\x32\x12.monorail.IssueRef\"<\n\x13ListCommentsRequest\x12%\n\tissue_ref\x18\x02 \x01(\x0b\x32\x12.monorail.IssueRef\";\n\x14ListCommentsResponse\x12#\n\x08\x63omments\x18\x01 \x03(\x0b\x32\x11.monorail.Comment\"[\n\x15ListActivitiesRequest\x12#\n\x08user_ref\x18\x02 \x01(\x0b\x32\x11.monorail.UserRef\x12\x0e\n\x06\x62\x65\x66ore\x18\x03 \x01(\x07\x12\r\n\x05\x61\x66ter\x18\x04 \x01(\x07\"n\n\x16ListActivitiesResponse\x12#\n\x08\x63omments\x18\x01 \x03(\x0b\x32\x11.monorail.Comment\x12/\n\x0fissue_summaries\x18\x02 \x03(\x0b\x32\x16.monorail.IssueSummary\"c\n\x14\x44\x65leteCommentRequest\x12%\n\tissue_ref\x18\x02 \x01(\x0b\x32\x12.monorail.IssueRef\x12\x14\n\x0csequence_num\x18\x03 \x01(\x03\x12\x0e\n\x06\x64\x65lete\x18\x04 \x01(\x08\"\xc9\x01\n\x1a\x42ulkUpdateApprovalsRequest\x12&\n\nissue_refs\x18\x02 \x03(\x0b\x32\x12.monorail.IssueRef\x12%\n\tfield_ref\x18\x03 \x01(\x0b\x32\x12.monorail.FieldRef\x12/\n\x0e\x61pproval_delta\x18\x04 \x01(\x0b\x32\x17.monorail.ApprovalDelta\x12\x17\n\x0f\x63omment_content\x18\x05 \x01(\t\x12\x12\n\nsend_email\x18\x06 \x01(\x08\"E\n\x1b\x42ulkUpdateApprovalsResponse\x12&\n\nissue_refs\x18\x01 \x03(\x0b\x32\x12.monorail.IssueRef\"\xa2\x02\n\x15UpdateApprovalRequest\x12%\n\tissue_ref\x18\x02 \x01(\x0b\x32\x12.monorail.IssueRef\x12%\n\tfield_ref\x18\x03 \x01(\x0b\x32\x12.monorail.FieldRef\x12/\n\x0e\x61pproval_delta\x18\x04 \x01(\x0b\x32\x17.monorail.ApprovalDelta\x12\x17\n\x0f\x63omment_content\x18\x05 \x01(\t\x12\x12\n\nsend_email\x18\x06 \x01(\x08\x12\x16\n\x0eis_description\x18\x07 \x01(\x08\x12+\n\x07uploads\x18\x08 \x03(\x0b\x32\x1a.monorail.AttachmentUpload\x12\x18\n\x10kept_attachments\x18\t \x03(\x03\">\n\x16UpdateApprovalResponse\x12$\n\x08\x61pproval\x18\x01 \x01(\x0b\x32\x12.monorail.Approval\"\x91\x01\n$ConvertIssueApprovalsTemplateRequest\x12%\n\tissue_ref\x18\x02 \x01(\x0b\x32\x12.monorail.IssueRef\x12\x15\n\rtemplate_name\x18\x03 \x01(\t\x12\x17\n\x0f\x63omment_content\x18\x04 \x01(\t\x12\x12\n\nsend_email\x18\x05 \x01(\x08\"G\n%ConvertIssueApprovalsTemplateResponse\x12\x1e\n\x05issue\x18\x01 \x01(\x0b\x32\x0f.monorail.Issue\"\xa0\x01\n\x14IssueSnapshotRequest\x12\x11\n\ttimestamp\x18\x02 \x01(\x05\x12\r\n\x05query\x18\x03 \x01(\t\x12\x14\n\x0c\x63\x61nned_query\x18\x04 \x01(\x05\x12\x10\n\x08group_by\x18\x05 \x01(\t\x12\x14\n\x0clabel_prefix\x18\x06 \x01(\t\x12\x14\n\x0cproject_name\x18\x07 \x01(\t\x12\x12\n\nhotlist_id\x18\x08 \x01(\x05\"6\n\x12IssueSnapshotCount\x12\x11\n\tdimension\x18\x01 \x01(\t\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"\x86\x01\n\x15IssueSnapshotResponse\x12\x34\n\x0esnapshot_count\x18\x01 \x03(\x0b\x32\x1c.monorail.IssueSnapshotCount\x12\x19\n\x11unsupported_field\x18\x02 \x03(\t\x12\x1c\n\x14search_limit_reached\x18\x03 \x01(\x08\"i\n\x15PresubmitIssueRequest\x12%\n\tissue_ref\x18\x02 \x01(\x0b\x32\x12.monorail.IssueRef\x12)\n\x0bissue_delta\x18\x03 \x01(\x0b\x32\x14.monorail.IssueDelta\"\xb0\x02\n\x16PresubmitIssueResponse\x12\x1a\n\x12owner_availability\x18\x01 \x01(\t\x12 \n\x18owner_availability_state\x18\x02 \x01(\t\x12-\n\x0e\x64\x65rived_labels\x18\x03 \x03(\x0b\x32\x15.monorail.ValueAndWhy\x12-\n\x0e\x64\x65rived_owners\x18\x04 \x03(\x0b\x32\x15.monorail.ValueAndWhy\x12*\n\x0b\x64\x65rived_ccs\x18\x05 \x03(\x0b\x32\x15.monorail.ValueAndWhy\x12\'\n\x08warnings\x18\x06 \x03(\x0b\x32\x15.monorail.ValueAndWhy\x12%\n\x06\x65rrors\x18\x07 \x03(\x0b\x32\x15.monorail.ValueAndWhy\"\xa9\x01\n\x1cRerankBlockedOnIssuesRequest\x12%\n\tissue_ref\x18\x02 \x01(\x0b\x32\x12.monorail.IssueRef\x12%\n\tmoved_ref\x18\x03 \x01(\x0b\x32\x12.monorail.IssueRef\x12&\n\ntarget_ref\x18\x04 \x01(\x0b\x32\x12.monorail.IssueRef\x12\x13\n\x0bsplit_above\x18\x05 \x01(\x08\"R\n\x1dRerankBlockedOnIssuesResponse\x12\x31\n\x15\x62locked_on_issue_refs\x18\x01 \x03(\x0b\x32\x12.monorail.IssueRef\"K\n\x12\x44\x65leteIssueRequest\x12%\n\tissue_ref\x18\x02 \x01(\x0b\x32\x12.monorail.IssueRef\x12\x0e\n\x06\x64\x65lete\x18\x03 \x01(\x08\"\x15\n\x13\x44\x65leteIssueResponse\"h\n\x19\x44\x65leteIssueCommentRequest\x12%\n\tissue_ref\x18\x02 \x01(\x0b\x32\x12.monorail.IssueRef\x12\x14\n\x0csequence_num\x18\x03 \x01(\r\x12\x0e\n\x06\x64\x65lete\x18\x04 \x01(\x08\"\x1c\n\x1a\x44\x65leteIssueCommentResponse\"}\n\x17\x44\x65leteAttachmentRequest\x12%\n\tissue_ref\x18\x02 \x01(\x0b\x32\x12.monorail.IssueRef\x12\x14\n\x0csequence_num\x18\x03 \x01(\r\x12\x15\n\rattachment_id\x18\x04 \x01(\r\x12\x0e\n\x06\x64\x65lete\x18\x05 \x01(\x08\"\x1a\n\x18\x44\x65leteAttachmentResponse\"I\n\x11\x46lagIssuesRequest\x12&\n\nissue_refs\x18\x02 \x03(\x0b\x32\x12.monorail.IssueRef\x12\x0c\n\x04\x66lag\x18\x03 \x01(\x08\"\x14\n\x12\x46lagIssuesResponse\"_\n\x12\x46lagCommentRequest\x12%\n\tissue_ref\x18\x02 \x01(\x0b\x32\x12.monorail.IssueRef\x12\x14\n\x0csequence_num\x18\x03 \x01(\r\x12\x0c\n\x04\x66lag\x18\x04 \x01(\x08\"\x15\n\x13\x46lagCommentResponse\"D\n\x1bListIssuePermissionsRequest\x12%\n\tissue_ref\x18\x02 \x01(\x0b\x32\x12.monorail.IssueRef\"3\n\x1cListIssuePermissionsResponse\x12\x13\n\x0bpermissions\x18\x01 \x03(\t\"V\n\x10MoveIssueRequest\x12%\n\tissue_ref\x18\x02 \x01(\x0b\x32\x12.monorail.IssueRef\x12\x1b\n\x13target_project_name\x18\x03 \x01(\t\">\n\x11MoveIssueResponse\x12)\n\rnew_issue_ref\x18\x01 \x01(\x0b\x32\x12.monorail.IssueRef\"V\n\x10\x43opyIssueRequest\x12%\n\tissue_ref\x18\x02 \x01(\x0b\x32\x12.monorail.IssueRef\x12\x1b\n\x13target_project_name\x18\x03 \x01(\t\">\n\x11\x43opyIssueResponse\x12)\n\rnew_issue_ref\x18\x01 \x01(\x0b\x32\x12.monorail.IssueRef2\xeb\x11\n\x06Issues\x12\x46\n\x0b\x43reateIssue\x12\x1c.monorail.CreateIssueRequest\x1a\x17.monorail.IssueResponse\"\x00\x12@\n\x08GetIssue\x12\x19.monorail.GetIssueRequest\x1a\x17.monorail.IssueResponse\"\x00\x12I\n\nListIssues\x12\x1b.monorail.ListIssuesRequest\x1a\x1c.monorail.ListIssuesResponse\"\x00\x12g\n\x14ListReferencedIssues\x12%.monorail.ListReferencedIssuesRequest\x1a&.monorail.ListReferencedIssuesResponse\"\x00\x12p\n\x17ListApplicableFieldDefs\x12(.monorail.ListApplicableFieldDefsRequest\x1a).monorail.ListApplicableFieldDefsResponse\"\x00\x12\x46\n\x0bUpdateIssue\x12\x1c.monorail.UpdateIssueRequest\x1a\x17.monorail.IssueResponse\"\x00\x12\x46\n\tStarIssue\x12\x1a.monorail.StarIssueRequest\x1a\x1b.monorail.StarIssueResponse\"\x00\x12U\n\x0eIsIssueStarred\x12\x1f.monorail.IsIssueStarredRequest\x1a .monorail.IsIssueStarredResponse\"\x00\x12^\n\x11ListStarredIssues\x12\".monorail.ListStarredIssuesRequest\x1a#.monorail.ListStarredIssuesResponse\"\x00\x12O\n\x0cListComments\x12\x1d.monorail.ListCommentsRequest\x1a\x1e.monorail.ListCommentsResponse\"\x00\x12U\n\x0eListActivities\x12\x1f.monorail.ListActivitiesRequest\x1a .monorail.ListActivitiesResponse\"\x00\x12I\n\rDeleteComment\x12\x1e.monorail.DeleteCommentRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x64\n\x13\x42ulkUpdateApprovals\x12$.monorail.BulkUpdateApprovalsRequest\x1a%.monorail.BulkUpdateApprovalsResponse\"\x00\x12U\n\x0eUpdateApproval\x12\x1f.monorail.UpdateApprovalRequest\x1a .monorail.UpdateApprovalResponse\"\x00\x12\x82\x01\n\x1d\x43onvertIssueApprovalsTemplate\x12..monorail.ConvertIssueApprovalsTemplateRequest\x1a/.monorail.ConvertIssueApprovalsTemplateResponse\"\x00\x12R\n\rIssueSnapshot\x12\x1e.monorail.IssueSnapshotRequest\x1a\x1f.monorail.IssueSnapshotResponse\"\x00\x12U\n\x0ePresubmitIssue\x12\x1f.monorail.PresubmitIssueRequest\x1a .monorail.PresubmitIssueResponse\"\x00\x12j\n\x15RerankBlockedOnIssues\x12&.monorail.RerankBlockedOnIssuesRequest\x1a\'.monorail.RerankBlockedOnIssuesResponse\"\x00\x12L\n\x0b\x44\x65leteIssue\x12\x1c.monorail.DeleteIssueRequest\x1a\x1d.monorail.DeleteIssueResponse\"\x00\x12\x61\n\x12\x44\x65leteIssueComment\x12#.monorail.DeleteIssueCommentRequest\x1a$.monorail.DeleteIssueCommentResponse\"\x00\x12[\n\x10\x44\x65leteAttachment\x12!.monorail.DeleteAttachmentRequest\x1a\".monorail.DeleteAttachmentResponse\"\x00\x12I\n\nFlagIssues\x12\x1b.monorail.FlagIssuesRequest\x1a\x1c.monorail.FlagIssuesResponse\"\x00\x12L\n\x0b\x46lagComment\x12\x1c.monorail.FlagCommentRequest\x1a\x1d.monorail.FlagCommentResponse\"\x00\x12g\n\x14ListIssuePermissions\x12%.monorail.ListIssuePermissionsRequest\x1a&.monorail.ListIssuePermissionsResponse\"\x00\x12\x46\n\tMoveIssue\x12\x1a.monorail.MoveIssueRequest\x1a\x1b.monorail.MoveIssueResponse\"\x00\x12\x46\n\tCopyIssue\x12\x1a.monorail.CopyIssueRequest\x1a\x1b.monorail.CopyIssueResponse\"\x00\x62\x06proto3')
+ ,
+ dependencies=[google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,api_dot_api__proto_dot_common__pb2.DESCRIPTOR,api_dot_api__proto_dot_issue__objects__pb2.DESCRIPTOR,api_dot_api__proto_dot_project__objects__pb2.DESCRIPTOR,])
+
+
+
+
+_CREATEISSUEREQUEST = _descriptor.Descriptor(
+ name='CreateIssueRequest',
+ full_name='monorail.CreateIssueRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.CreateIssueRequest.project_name', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='issue', full_name='monorail.CreateIssueRequest.issue', index=1,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=169,
+ serialized_end=243,
+)
+
+
+_GETISSUEREQUEST = _descriptor.Descriptor(
+ name='GetIssueRequest',
+ full_name='monorail.GetIssueRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_ref', full_name='monorail.GetIssueRequest.issue_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=245,
+ serialized_end=301,
+)
+
+
+_ISSUERESPONSE = _descriptor.Descriptor(
+ name='IssueResponse',
+ full_name='monorail.IssueResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue', full_name='monorail.IssueResponse.issue', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='moved_to_ref', full_name='monorail.IssueResponse.moved_to_ref', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=303,
+ serialized_end=392,
+)
+
+
+_LISTISSUESREQUEST = _descriptor.Descriptor(
+ name='ListIssuesRequest',
+ full_name='monorail.ListIssuesRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='query', full_name='monorail.ListIssuesRequest.query', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='canned_query', full_name='monorail.ListIssuesRequest.canned_query', index=1,
+ number=3, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='project_names', full_name='monorail.ListIssuesRequest.project_names', index=2,
+ number=4, type=9, cpp_type=9, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='pagination', full_name='monorail.ListIssuesRequest.pagination', index=3,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='group_by_spec', full_name='monorail.ListIssuesRequest.group_by_spec', index=4,
+ number=6, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='sort_spec', full_name='monorail.ListIssuesRequest.sort_spec', index=5,
+ number=7, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=395,
+ serialized_end=558,
+)
+
+
+_LISTISSUESRESPONSE = _descriptor.Descriptor(
+ name='ListIssuesResponse',
+ full_name='monorail.ListIssuesResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issues', full_name='monorail.ListIssuesResponse.issues', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='total_results', full_name='monorail.ListIssuesResponse.total_results', index=1,
+ number=2, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=560,
+ serialized_end=636,
+)
+
+
+_LISTREFERENCEDISSUESREQUEST = _descriptor.Descriptor(
+ name='ListReferencedIssuesRequest',
+ full_name='monorail.ListReferencedIssuesRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_refs', full_name='monorail.ListReferencedIssuesRequest.issue_refs', index=0,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=638,
+ serialized_end=707,
+)
+
+
+_LISTREFERENCEDISSUESRESPONSE = _descriptor.Descriptor(
+ name='ListReferencedIssuesResponse',
+ full_name='monorail.ListReferencedIssuesResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='open_refs', full_name='monorail.ListReferencedIssuesResponse.open_refs', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='closed_refs', full_name='monorail.ListReferencedIssuesResponse.closed_refs', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=709,
+ serialized_end=813,
+)
+
+
+_LISTAPPLICABLEFIELDDEFSREQUEST = _descriptor.Descriptor(
+ name='ListApplicableFieldDefsRequest',
+ full_name='monorail.ListApplicableFieldDefsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_refs', full_name='monorail.ListApplicableFieldDefsRequest.issue_refs', index=0,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=815,
+ serialized_end=887,
+)
+
+
+_LISTAPPLICABLEFIELDDEFSRESPONSE = _descriptor.Descriptor(
+ name='ListApplicableFieldDefsResponse',
+ full_name='monorail.ListApplicableFieldDefsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='field_defs', full_name='monorail.ListApplicableFieldDefsResponse.field_defs', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=889,
+ serialized_end=962,
+)
+
+
+_UPDATEISSUEREQUEST = _descriptor.Descriptor(
+ name='UpdateIssueRequest',
+ full_name='monorail.UpdateIssueRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_ref', full_name='monorail.UpdateIssueRequest.issue_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='send_email', full_name='monorail.UpdateIssueRequest.send_email', index=1,
+ number=3, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='delta', full_name='monorail.UpdateIssueRequest.delta', index=2,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='comment_content', full_name='monorail.UpdateIssueRequest.comment_content', index=3,
+ number=5, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='is_description', full_name='monorail.UpdateIssueRequest.is_description', index=4,
+ number=6, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='uploads', full_name='monorail.UpdateIssueRequest.uploads', index=5,
+ number=7, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='kept_attachments', full_name='monorail.UpdateIssueRequest.kept_attachments', index=6,
+ number=8, type=3, cpp_type=2, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=965,
+ serialized_end=1201,
+)
+
+
+_STARISSUEREQUEST = _descriptor.Descriptor(
+ name='StarIssueRequest',
+ full_name='monorail.StarIssueRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_ref', full_name='monorail.StarIssueRequest.issue_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='starred', full_name='monorail.StarIssueRequest.starred', index=1,
+ number=3, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1203,
+ serialized_end=1277,
+)
+
+
+_STARISSUERESPONSE = _descriptor.Descriptor(
+ name='StarIssueResponse',
+ full_name='monorail.StarIssueResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='star_count', full_name='monorail.StarIssueResponse.star_count', index=0,
+ number=1, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1279,
+ serialized_end=1318,
+)
+
+
+_ISISSUESTARREDREQUEST = _descriptor.Descriptor(
+ name='IsIssueStarredRequest',
+ full_name='monorail.IsIssueStarredRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_ref', full_name='monorail.IsIssueStarredRequest.issue_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1320,
+ serialized_end=1382,
+)
+
+
+_ISISSUESTARREDRESPONSE = _descriptor.Descriptor(
+ name='IsIssueStarredResponse',
+ full_name='monorail.IsIssueStarredResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='is_starred', full_name='monorail.IsIssueStarredResponse.is_starred', index=0,
+ number=1, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1384,
+ serialized_end=1428,
+)
+
+
+_LISTSTARREDISSUESREQUEST = _descriptor.Descriptor(
+ name='ListStarredIssuesRequest',
+ full_name='monorail.ListStarredIssuesRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1430,
+ serialized_end=1456,
+)
+
+
+_LISTSTARREDISSUESRESPONSE = _descriptor.Descriptor(
+ name='ListStarredIssuesResponse',
+ full_name='monorail.ListStarredIssuesResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='starred_issue_refs', full_name='monorail.ListStarredIssuesResponse.starred_issue_refs', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1458,
+ serialized_end=1533,
+)
+
+
+_LISTCOMMENTSREQUEST = _descriptor.Descriptor(
+ name='ListCommentsRequest',
+ full_name='monorail.ListCommentsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_ref', full_name='monorail.ListCommentsRequest.issue_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1535,
+ serialized_end=1595,
+)
+
+
+_LISTCOMMENTSRESPONSE = _descriptor.Descriptor(
+ name='ListCommentsResponse',
+ full_name='monorail.ListCommentsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='comments', full_name='monorail.ListCommentsResponse.comments', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1597,
+ serialized_end=1656,
+)
+
+
+_LISTACTIVITIESREQUEST = _descriptor.Descriptor(
+ name='ListActivitiesRequest',
+ full_name='monorail.ListActivitiesRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='user_ref', full_name='monorail.ListActivitiesRequest.user_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='before', full_name='monorail.ListActivitiesRequest.before', index=1,
+ number=3, type=7, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='after', full_name='monorail.ListActivitiesRequest.after', index=2,
+ number=4, type=7, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1658,
+ serialized_end=1749,
+)
+
+
+_LISTACTIVITIESRESPONSE = _descriptor.Descriptor(
+ name='ListActivitiesResponse',
+ full_name='monorail.ListActivitiesResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='comments', full_name='monorail.ListActivitiesResponse.comments', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='issue_summaries', full_name='monorail.ListActivitiesResponse.issue_summaries', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1751,
+ serialized_end=1861,
+)
+
+
+_DELETECOMMENTREQUEST = _descriptor.Descriptor(
+ name='DeleteCommentRequest',
+ full_name='monorail.DeleteCommentRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_ref', full_name='monorail.DeleteCommentRequest.issue_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='sequence_num', full_name='monorail.DeleteCommentRequest.sequence_num', index=1,
+ number=3, type=3, cpp_type=2, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='delete', full_name='monorail.DeleteCommentRequest.delete', index=2,
+ number=4, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1863,
+ serialized_end=1962,
+)
+
+
+_BULKUPDATEAPPROVALSREQUEST = _descriptor.Descriptor(
+ name='BulkUpdateApprovalsRequest',
+ full_name='monorail.BulkUpdateApprovalsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_refs', full_name='monorail.BulkUpdateApprovalsRequest.issue_refs', index=0,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='field_ref', full_name='monorail.BulkUpdateApprovalsRequest.field_ref', index=1,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='approval_delta', full_name='monorail.BulkUpdateApprovalsRequest.approval_delta', index=2,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='comment_content', full_name='monorail.BulkUpdateApprovalsRequest.comment_content', index=3,
+ number=5, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='send_email', full_name='monorail.BulkUpdateApprovalsRequest.send_email', index=4,
+ number=6, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1965,
+ serialized_end=2166,
+)
+
+
+_BULKUPDATEAPPROVALSRESPONSE = _descriptor.Descriptor(
+ name='BulkUpdateApprovalsResponse',
+ full_name='monorail.BulkUpdateApprovalsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_refs', full_name='monorail.BulkUpdateApprovalsResponse.issue_refs', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2168,
+ serialized_end=2237,
+)
+
+
+_UPDATEAPPROVALREQUEST = _descriptor.Descriptor(
+ name='UpdateApprovalRequest',
+ full_name='monorail.UpdateApprovalRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_ref', full_name='monorail.UpdateApprovalRequest.issue_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='field_ref', full_name='monorail.UpdateApprovalRequest.field_ref', index=1,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='approval_delta', full_name='monorail.UpdateApprovalRequest.approval_delta', index=2,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='comment_content', full_name='monorail.UpdateApprovalRequest.comment_content', index=3,
+ number=5, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='send_email', full_name='monorail.UpdateApprovalRequest.send_email', index=4,
+ number=6, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='is_description', full_name='monorail.UpdateApprovalRequest.is_description', index=5,
+ number=7, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='uploads', full_name='monorail.UpdateApprovalRequest.uploads', index=6,
+ number=8, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='kept_attachments', full_name='monorail.UpdateApprovalRequest.kept_attachments', index=7,
+ number=9, type=3, cpp_type=2, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2240,
+ serialized_end=2530,
+)
+
+
+_UPDATEAPPROVALRESPONSE = _descriptor.Descriptor(
+ name='UpdateApprovalResponse',
+ full_name='monorail.UpdateApprovalResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='approval', full_name='monorail.UpdateApprovalResponse.approval', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2532,
+ serialized_end=2594,
+)
+
+
+_CONVERTISSUEAPPROVALSTEMPLATEREQUEST = _descriptor.Descriptor(
+ name='ConvertIssueApprovalsTemplateRequest',
+ full_name='monorail.ConvertIssueApprovalsTemplateRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_ref', full_name='monorail.ConvertIssueApprovalsTemplateRequest.issue_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='template_name', full_name='monorail.ConvertIssueApprovalsTemplateRequest.template_name', index=1,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='comment_content', full_name='monorail.ConvertIssueApprovalsTemplateRequest.comment_content', index=2,
+ number=4, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='send_email', full_name='monorail.ConvertIssueApprovalsTemplateRequest.send_email', index=3,
+ number=5, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2597,
+ serialized_end=2742,
+)
+
+
+_CONVERTISSUEAPPROVALSTEMPLATERESPONSE = _descriptor.Descriptor(
+ name='ConvertIssueApprovalsTemplateResponse',
+ full_name='monorail.ConvertIssueApprovalsTemplateResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue', full_name='monorail.ConvertIssueApprovalsTemplateResponse.issue', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2744,
+ serialized_end=2815,
+)
+
+
+_ISSUESNAPSHOTREQUEST = _descriptor.Descriptor(
+ name='IssueSnapshotRequest',
+ full_name='monorail.IssueSnapshotRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='timestamp', full_name='monorail.IssueSnapshotRequest.timestamp', index=0,
+ number=2, type=5, cpp_type=1, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='query', full_name='monorail.IssueSnapshotRequest.query', index=1,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='canned_query', full_name='monorail.IssueSnapshotRequest.canned_query', index=2,
+ number=4, type=5, cpp_type=1, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='group_by', full_name='monorail.IssueSnapshotRequest.group_by', index=3,
+ number=5, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='label_prefix', full_name='monorail.IssueSnapshotRequest.label_prefix', index=4,
+ number=6, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.IssueSnapshotRequest.project_name', index=5,
+ number=7, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='hotlist_id', full_name='monorail.IssueSnapshotRequest.hotlist_id', index=6,
+ number=8, type=5, cpp_type=1, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2818,
+ serialized_end=2978,
+)
+
+
+_ISSUESNAPSHOTCOUNT = _descriptor.Descriptor(
+ name='IssueSnapshotCount',
+ full_name='monorail.IssueSnapshotCount',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='dimension', full_name='monorail.IssueSnapshotCount.dimension', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='count', full_name='monorail.IssueSnapshotCount.count', index=1,
+ number=2, type=5, cpp_type=1, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2980,
+ serialized_end=3034,
+)
+
+
+_ISSUESNAPSHOTRESPONSE = _descriptor.Descriptor(
+ name='IssueSnapshotResponse',
+ full_name='monorail.IssueSnapshotResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='snapshot_count', full_name='monorail.IssueSnapshotResponse.snapshot_count', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='unsupported_field', full_name='monorail.IssueSnapshotResponse.unsupported_field', index=1,
+ number=2, type=9, cpp_type=9, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='search_limit_reached', full_name='monorail.IssueSnapshotResponse.search_limit_reached', index=2,
+ number=3, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3037,
+ serialized_end=3171,
+)
+
+
+_PRESUBMITISSUEREQUEST = _descriptor.Descriptor(
+ name='PresubmitIssueRequest',
+ full_name='monorail.PresubmitIssueRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_ref', full_name='monorail.PresubmitIssueRequest.issue_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='issue_delta', full_name='monorail.PresubmitIssueRequest.issue_delta', index=1,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3173,
+ serialized_end=3278,
+)
+
+
+_PRESUBMITISSUERESPONSE = _descriptor.Descriptor(
+ name='PresubmitIssueResponse',
+ full_name='monorail.PresubmitIssueResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='owner_availability', full_name='monorail.PresubmitIssueResponse.owner_availability', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='owner_availability_state', full_name='monorail.PresubmitIssueResponse.owner_availability_state', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='derived_labels', full_name='monorail.PresubmitIssueResponse.derived_labels', index=2,
+ number=3, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='derived_owners', full_name='monorail.PresubmitIssueResponse.derived_owners', index=3,
+ number=4, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='derived_ccs', full_name='monorail.PresubmitIssueResponse.derived_ccs', index=4,
+ number=5, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='warnings', full_name='monorail.PresubmitIssueResponse.warnings', index=5,
+ number=6, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='errors', full_name='monorail.PresubmitIssueResponse.errors', index=6,
+ number=7, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3281,
+ serialized_end=3585,
+)
+
+
+_RERANKBLOCKEDONISSUESREQUEST = _descriptor.Descriptor(
+ name='RerankBlockedOnIssuesRequest',
+ full_name='monorail.RerankBlockedOnIssuesRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_ref', full_name='monorail.RerankBlockedOnIssuesRequest.issue_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='moved_ref', full_name='monorail.RerankBlockedOnIssuesRequest.moved_ref', index=1,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='target_ref', full_name='monorail.RerankBlockedOnIssuesRequest.target_ref', index=2,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='split_above', full_name='monorail.RerankBlockedOnIssuesRequest.split_above', index=3,
+ number=5, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3588,
+ serialized_end=3757,
+)
+
+
+_RERANKBLOCKEDONISSUESRESPONSE = _descriptor.Descriptor(
+ name='RerankBlockedOnIssuesResponse',
+ full_name='monorail.RerankBlockedOnIssuesResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='blocked_on_issue_refs', full_name='monorail.RerankBlockedOnIssuesResponse.blocked_on_issue_refs', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3759,
+ serialized_end=3841,
+)
+
+
+_DELETEISSUEREQUEST = _descriptor.Descriptor(
+ name='DeleteIssueRequest',
+ full_name='monorail.DeleteIssueRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_ref', full_name='monorail.DeleteIssueRequest.issue_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='delete', full_name='monorail.DeleteIssueRequest.delete', index=1,
+ number=3, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3843,
+ serialized_end=3918,
+)
+
+
+_DELETEISSUERESPONSE = _descriptor.Descriptor(
+ name='DeleteIssueResponse',
+ full_name='monorail.DeleteIssueResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3920,
+ serialized_end=3941,
+)
+
+
+_DELETEISSUECOMMENTREQUEST = _descriptor.Descriptor(
+ name='DeleteIssueCommentRequest',
+ full_name='monorail.DeleteIssueCommentRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_ref', full_name='monorail.DeleteIssueCommentRequest.issue_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='sequence_num', full_name='monorail.DeleteIssueCommentRequest.sequence_num', index=1,
+ number=3, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='delete', full_name='monorail.DeleteIssueCommentRequest.delete', index=2,
+ number=4, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3943,
+ serialized_end=4047,
+)
+
+
+_DELETEISSUECOMMENTRESPONSE = _descriptor.Descriptor(
+ name='DeleteIssueCommentResponse',
+ full_name='monorail.DeleteIssueCommentResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4049,
+ serialized_end=4077,
+)
+
+
+_DELETEATTACHMENTREQUEST = _descriptor.Descriptor(
+ name='DeleteAttachmentRequest',
+ full_name='monorail.DeleteAttachmentRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_ref', full_name='monorail.DeleteAttachmentRequest.issue_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='sequence_num', full_name='monorail.DeleteAttachmentRequest.sequence_num', index=1,
+ number=3, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='attachment_id', full_name='monorail.DeleteAttachmentRequest.attachment_id', index=2,
+ number=4, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='delete', full_name='monorail.DeleteAttachmentRequest.delete', index=3,
+ number=5, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4079,
+ serialized_end=4204,
+)
+
+
+_DELETEATTACHMENTRESPONSE = _descriptor.Descriptor(
+ name='DeleteAttachmentResponse',
+ full_name='monorail.DeleteAttachmentResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4206,
+ serialized_end=4232,
+)
+
+
+_FLAGISSUESREQUEST = _descriptor.Descriptor(
+ name='FlagIssuesRequest',
+ full_name='monorail.FlagIssuesRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_refs', full_name='monorail.FlagIssuesRequest.issue_refs', index=0,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='flag', full_name='monorail.FlagIssuesRequest.flag', index=1,
+ number=3, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4234,
+ serialized_end=4307,
+)
+
+
+_FLAGISSUESRESPONSE = _descriptor.Descriptor(
+ name='FlagIssuesResponse',
+ full_name='monorail.FlagIssuesResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4309,
+ serialized_end=4329,
+)
+
+
+_FLAGCOMMENTREQUEST = _descriptor.Descriptor(
+ name='FlagCommentRequest',
+ full_name='monorail.FlagCommentRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_ref', full_name='monorail.FlagCommentRequest.issue_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='sequence_num', full_name='monorail.FlagCommentRequest.sequence_num', index=1,
+ number=3, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='flag', full_name='monorail.FlagCommentRequest.flag', index=2,
+ number=4, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4331,
+ serialized_end=4426,
+)
+
+
+_FLAGCOMMENTRESPONSE = _descriptor.Descriptor(
+ name='FlagCommentResponse',
+ full_name='monorail.FlagCommentResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4428,
+ serialized_end=4449,
+)
+
+
+_LISTISSUEPERMISSIONSREQUEST = _descriptor.Descriptor(
+ name='ListIssuePermissionsRequest',
+ full_name='monorail.ListIssuePermissionsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_ref', full_name='monorail.ListIssuePermissionsRequest.issue_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4451,
+ serialized_end=4519,
+)
+
+
+_LISTISSUEPERMISSIONSRESPONSE = _descriptor.Descriptor(
+ name='ListIssuePermissionsResponse',
+ full_name='monorail.ListIssuePermissionsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='permissions', full_name='monorail.ListIssuePermissionsResponse.permissions', index=0,
+ number=1, type=9, cpp_type=9, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4521,
+ serialized_end=4572,
+)
+
+
+_MOVEISSUEREQUEST = _descriptor.Descriptor(
+ name='MoveIssueRequest',
+ full_name='monorail.MoveIssueRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_ref', full_name='monorail.MoveIssueRequest.issue_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='target_project_name', full_name='monorail.MoveIssueRequest.target_project_name', index=1,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4574,
+ serialized_end=4660,
+)
+
+
+_MOVEISSUERESPONSE = _descriptor.Descriptor(
+ name='MoveIssueResponse',
+ full_name='monorail.MoveIssueResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='new_issue_ref', full_name='monorail.MoveIssueResponse.new_issue_ref', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4662,
+ serialized_end=4724,
+)
+
+
+_COPYISSUEREQUEST = _descriptor.Descriptor(
+ name='CopyIssueRequest',
+ full_name='monorail.CopyIssueRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='issue_ref', full_name='monorail.CopyIssueRequest.issue_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='target_project_name', full_name='monorail.CopyIssueRequest.target_project_name', index=1,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4726,
+ serialized_end=4812,
+)
+
+
+_COPYISSUERESPONSE = _descriptor.Descriptor(
+ name='CopyIssueResponse',
+ full_name='monorail.CopyIssueResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='new_issue_ref', full_name='monorail.CopyIssueResponse.new_issue_ref', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4814,
+ serialized_end=4876,
+)
+
+_CREATEISSUEREQUEST.fields_by_name['issue'].message_type = api_dot_api__proto_dot_issue__objects__pb2._ISSUE
+_GETISSUEREQUEST.fields_by_name['issue_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_ISSUERESPONSE.fields_by_name['issue'].message_type = api_dot_api__proto_dot_issue__objects__pb2._ISSUE
+_ISSUERESPONSE.fields_by_name['moved_to_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_LISTISSUESREQUEST.fields_by_name['pagination'].message_type = api_dot_api__proto_dot_common__pb2._PAGINATION
+_LISTISSUESRESPONSE.fields_by_name['issues'].message_type = api_dot_api__proto_dot_issue__objects__pb2._ISSUE
+_LISTREFERENCEDISSUESREQUEST.fields_by_name['issue_refs'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_LISTREFERENCEDISSUESRESPONSE.fields_by_name['open_refs'].message_type = api_dot_api__proto_dot_issue__objects__pb2._ISSUE
+_LISTREFERENCEDISSUESRESPONSE.fields_by_name['closed_refs'].message_type = api_dot_api__proto_dot_issue__objects__pb2._ISSUE
+_LISTAPPLICABLEFIELDDEFSREQUEST.fields_by_name['issue_refs'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_LISTAPPLICABLEFIELDDEFSRESPONSE.fields_by_name['field_defs'].message_type = api_dot_api__proto_dot_project__objects__pb2._FIELDDEF
+_UPDATEISSUEREQUEST.fields_by_name['issue_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_UPDATEISSUEREQUEST.fields_by_name['delta'].message_type = api_dot_api__proto_dot_issue__objects__pb2._ISSUEDELTA
+_UPDATEISSUEREQUEST.fields_by_name['uploads'].message_type = api_dot_api__proto_dot_issue__objects__pb2._ATTACHMENTUPLOAD
+_STARISSUEREQUEST.fields_by_name['issue_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_ISISSUESTARREDREQUEST.fields_by_name['issue_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_LISTSTARREDISSUESRESPONSE.fields_by_name['starred_issue_refs'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_LISTCOMMENTSREQUEST.fields_by_name['issue_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_LISTCOMMENTSRESPONSE.fields_by_name['comments'].message_type = api_dot_api__proto_dot_issue__objects__pb2._COMMENT
+_LISTACTIVITIESREQUEST.fields_by_name['user_ref'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_LISTACTIVITIESRESPONSE.fields_by_name['comments'].message_type = api_dot_api__proto_dot_issue__objects__pb2._COMMENT
+_LISTACTIVITIESRESPONSE.fields_by_name['issue_summaries'].message_type = api_dot_api__proto_dot_issue__objects__pb2._ISSUESUMMARY
+_DELETECOMMENTREQUEST.fields_by_name['issue_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_BULKUPDATEAPPROVALSREQUEST.fields_by_name['issue_refs'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_BULKUPDATEAPPROVALSREQUEST.fields_by_name['field_ref'].message_type = api_dot_api__proto_dot_common__pb2._FIELDREF
+_BULKUPDATEAPPROVALSREQUEST.fields_by_name['approval_delta'].message_type = api_dot_api__proto_dot_issue__objects__pb2._APPROVALDELTA
+_BULKUPDATEAPPROVALSRESPONSE.fields_by_name['issue_refs'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_UPDATEAPPROVALREQUEST.fields_by_name['issue_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_UPDATEAPPROVALREQUEST.fields_by_name['field_ref'].message_type = api_dot_api__proto_dot_common__pb2._FIELDREF
+_UPDATEAPPROVALREQUEST.fields_by_name['approval_delta'].message_type = api_dot_api__proto_dot_issue__objects__pb2._APPROVALDELTA
+_UPDATEAPPROVALREQUEST.fields_by_name['uploads'].message_type = api_dot_api__proto_dot_issue__objects__pb2._ATTACHMENTUPLOAD
+_UPDATEAPPROVALRESPONSE.fields_by_name['approval'].message_type = api_dot_api__proto_dot_issue__objects__pb2._APPROVAL
+_CONVERTISSUEAPPROVALSTEMPLATEREQUEST.fields_by_name['issue_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_CONVERTISSUEAPPROVALSTEMPLATERESPONSE.fields_by_name['issue'].message_type = api_dot_api__proto_dot_issue__objects__pb2._ISSUE
+_ISSUESNAPSHOTRESPONSE.fields_by_name['snapshot_count'].message_type = _ISSUESNAPSHOTCOUNT
+_PRESUBMITISSUEREQUEST.fields_by_name['issue_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_PRESUBMITISSUEREQUEST.fields_by_name['issue_delta'].message_type = api_dot_api__proto_dot_issue__objects__pb2._ISSUEDELTA
+_PRESUBMITISSUERESPONSE.fields_by_name['derived_labels'].message_type = api_dot_api__proto_dot_common__pb2._VALUEANDWHY
+_PRESUBMITISSUERESPONSE.fields_by_name['derived_owners'].message_type = api_dot_api__proto_dot_common__pb2._VALUEANDWHY
+_PRESUBMITISSUERESPONSE.fields_by_name['derived_ccs'].message_type = api_dot_api__proto_dot_common__pb2._VALUEANDWHY
+_PRESUBMITISSUERESPONSE.fields_by_name['warnings'].message_type = api_dot_api__proto_dot_common__pb2._VALUEANDWHY
+_PRESUBMITISSUERESPONSE.fields_by_name['errors'].message_type = api_dot_api__proto_dot_common__pb2._VALUEANDWHY
+_RERANKBLOCKEDONISSUESREQUEST.fields_by_name['issue_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_RERANKBLOCKEDONISSUESREQUEST.fields_by_name['moved_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_RERANKBLOCKEDONISSUESREQUEST.fields_by_name['target_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_RERANKBLOCKEDONISSUESRESPONSE.fields_by_name['blocked_on_issue_refs'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_DELETEISSUEREQUEST.fields_by_name['issue_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_DELETEISSUECOMMENTREQUEST.fields_by_name['issue_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_DELETEATTACHMENTREQUEST.fields_by_name['issue_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_FLAGISSUESREQUEST.fields_by_name['issue_refs'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_FLAGCOMMENTREQUEST.fields_by_name['issue_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_LISTISSUEPERMISSIONSREQUEST.fields_by_name['issue_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_MOVEISSUEREQUEST.fields_by_name['issue_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_MOVEISSUERESPONSE.fields_by_name['new_issue_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_COPYISSUEREQUEST.fields_by_name['issue_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+_COPYISSUERESPONSE.fields_by_name['new_issue_ref'].message_type = api_dot_api__proto_dot_common__pb2._ISSUEREF
+DESCRIPTOR.message_types_by_name['CreateIssueRequest'] = _CREATEISSUEREQUEST
+DESCRIPTOR.message_types_by_name['GetIssueRequest'] = _GETISSUEREQUEST
+DESCRIPTOR.message_types_by_name['IssueResponse'] = _ISSUERESPONSE
+DESCRIPTOR.message_types_by_name['ListIssuesRequest'] = _LISTISSUESREQUEST
+DESCRIPTOR.message_types_by_name['ListIssuesResponse'] = _LISTISSUESRESPONSE
+DESCRIPTOR.message_types_by_name['ListReferencedIssuesRequest'] = _LISTREFERENCEDISSUESREQUEST
+DESCRIPTOR.message_types_by_name['ListReferencedIssuesResponse'] = _LISTREFERENCEDISSUESRESPONSE
+DESCRIPTOR.message_types_by_name['ListApplicableFieldDefsRequest'] = _LISTAPPLICABLEFIELDDEFSREQUEST
+DESCRIPTOR.message_types_by_name['ListApplicableFieldDefsResponse'] = _LISTAPPLICABLEFIELDDEFSRESPONSE
+DESCRIPTOR.message_types_by_name['UpdateIssueRequest'] = _UPDATEISSUEREQUEST
+DESCRIPTOR.message_types_by_name['StarIssueRequest'] = _STARISSUEREQUEST
+DESCRIPTOR.message_types_by_name['StarIssueResponse'] = _STARISSUERESPONSE
+DESCRIPTOR.message_types_by_name['IsIssueStarredRequest'] = _ISISSUESTARREDREQUEST
+DESCRIPTOR.message_types_by_name['IsIssueStarredResponse'] = _ISISSUESTARREDRESPONSE
+DESCRIPTOR.message_types_by_name['ListStarredIssuesRequest'] = _LISTSTARREDISSUESREQUEST
+DESCRIPTOR.message_types_by_name['ListStarredIssuesResponse'] = _LISTSTARREDISSUESRESPONSE
+DESCRIPTOR.message_types_by_name['ListCommentsRequest'] = _LISTCOMMENTSREQUEST
+DESCRIPTOR.message_types_by_name['ListCommentsResponse'] = _LISTCOMMENTSRESPONSE
+DESCRIPTOR.message_types_by_name['ListActivitiesRequest'] = _LISTACTIVITIESREQUEST
+DESCRIPTOR.message_types_by_name['ListActivitiesResponse'] = _LISTACTIVITIESRESPONSE
+DESCRIPTOR.message_types_by_name['DeleteCommentRequest'] = _DELETECOMMENTREQUEST
+DESCRIPTOR.message_types_by_name['BulkUpdateApprovalsRequest'] = _BULKUPDATEAPPROVALSREQUEST
+DESCRIPTOR.message_types_by_name['BulkUpdateApprovalsResponse'] = _BULKUPDATEAPPROVALSRESPONSE
+DESCRIPTOR.message_types_by_name['UpdateApprovalRequest'] = _UPDATEAPPROVALREQUEST
+DESCRIPTOR.message_types_by_name['UpdateApprovalResponse'] = _UPDATEAPPROVALRESPONSE
+DESCRIPTOR.message_types_by_name['ConvertIssueApprovalsTemplateRequest'] = _CONVERTISSUEAPPROVALSTEMPLATEREQUEST
+DESCRIPTOR.message_types_by_name['ConvertIssueApprovalsTemplateResponse'] = _CONVERTISSUEAPPROVALSTEMPLATERESPONSE
+DESCRIPTOR.message_types_by_name['IssueSnapshotRequest'] = _ISSUESNAPSHOTREQUEST
+DESCRIPTOR.message_types_by_name['IssueSnapshotCount'] = _ISSUESNAPSHOTCOUNT
+DESCRIPTOR.message_types_by_name['IssueSnapshotResponse'] = _ISSUESNAPSHOTRESPONSE
+DESCRIPTOR.message_types_by_name['PresubmitIssueRequest'] = _PRESUBMITISSUEREQUEST
+DESCRIPTOR.message_types_by_name['PresubmitIssueResponse'] = _PRESUBMITISSUERESPONSE
+DESCRIPTOR.message_types_by_name['RerankBlockedOnIssuesRequest'] = _RERANKBLOCKEDONISSUESREQUEST
+DESCRIPTOR.message_types_by_name['RerankBlockedOnIssuesResponse'] = _RERANKBLOCKEDONISSUESRESPONSE
+DESCRIPTOR.message_types_by_name['DeleteIssueRequest'] = _DELETEISSUEREQUEST
+DESCRIPTOR.message_types_by_name['DeleteIssueResponse'] = _DELETEISSUERESPONSE
+DESCRIPTOR.message_types_by_name['DeleteIssueCommentRequest'] = _DELETEISSUECOMMENTREQUEST
+DESCRIPTOR.message_types_by_name['DeleteIssueCommentResponse'] = _DELETEISSUECOMMENTRESPONSE
+DESCRIPTOR.message_types_by_name['DeleteAttachmentRequest'] = _DELETEATTACHMENTREQUEST
+DESCRIPTOR.message_types_by_name['DeleteAttachmentResponse'] = _DELETEATTACHMENTRESPONSE
+DESCRIPTOR.message_types_by_name['FlagIssuesRequest'] = _FLAGISSUESREQUEST
+DESCRIPTOR.message_types_by_name['FlagIssuesResponse'] = _FLAGISSUESRESPONSE
+DESCRIPTOR.message_types_by_name['FlagCommentRequest'] = _FLAGCOMMENTREQUEST
+DESCRIPTOR.message_types_by_name['FlagCommentResponse'] = _FLAGCOMMENTRESPONSE
+DESCRIPTOR.message_types_by_name['ListIssuePermissionsRequest'] = _LISTISSUEPERMISSIONSREQUEST
+DESCRIPTOR.message_types_by_name['ListIssuePermissionsResponse'] = _LISTISSUEPERMISSIONSRESPONSE
+DESCRIPTOR.message_types_by_name['MoveIssueRequest'] = _MOVEISSUEREQUEST
+DESCRIPTOR.message_types_by_name['MoveIssueResponse'] = _MOVEISSUERESPONSE
+DESCRIPTOR.message_types_by_name['CopyIssueRequest'] = _COPYISSUEREQUEST
+DESCRIPTOR.message_types_by_name['CopyIssueResponse'] = _COPYISSUERESPONSE
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+CreateIssueRequest = _reflection.GeneratedProtocolMessageType('CreateIssueRequest', (_message.Message,), dict(
+ DESCRIPTOR = _CREATEISSUEREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.CreateIssueRequest)
+ ))
+_sym_db.RegisterMessage(CreateIssueRequest)
+
+GetIssueRequest = _reflection.GeneratedProtocolMessageType('GetIssueRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETISSUEREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetIssueRequest)
+ ))
+_sym_db.RegisterMessage(GetIssueRequest)
+
+IssueResponse = _reflection.GeneratedProtocolMessageType('IssueResponse', (_message.Message,), dict(
+ DESCRIPTOR = _ISSUERESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.IssueResponse)
+ ))
+_sym_db.RegisterMessage(IssueResponse)
+
+ListIssuesRequest = _reflection.GeneratedProtocolMessageType('ListIssuesRequest', (_message.Message,), dict(
+ DESCRIPTOR = _LISTISSUESREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListIssuesRequest)
+ ))
+_sym_db.RegisterMessage(ListIssuesRequest)
+
+ListIssuesResponse = _reflection.GeneratedProtocolMessageType('ListIssuesResponse', (_message.Message,), dict(
+ DESCRIPTOR = _LISTISSUESRESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListIssuesResponse)
+ ))
+_sym_db.RegisterMessage(ListIssuesResponse)
+
+ListReferencedIssuesRequest = _reflection.GeneratedProtocolMessageType('ListReferencedIssuesRequest', (_message.Message,), dict(
+ DESCRIPTOR = _LISTREFERENCEDISSUESREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListReferencedIssuesRequest)
+ ))
+_sym_db.RegisterMessage(ListReferencedIssuesRequest)
+
+ListReferencedIssuesResponse = _reflection.GeneratedProtocolMessageType('ListReferencedIssuesResponse', (_message.Message,), dict(
+ DESCRIPTOR = _LISTREFERENCEDISSUESRESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListReferencedIssuesResponse)
+ ))
+_sym_db.RegisterMessage(ListReferencedIssuesResponse)
+
+ListApplicableFieldDefsRequest = _reflection.GeneratedProtocolMessageType('ListApplicableFieldDefsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _LISTAPPLICABLEFIELDDEFSREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListApplicableFieldDefsRequest)
+ ))
+_sym_db.RegisterMessage(ListApplicableFieldDefsRequest)
+
+ListApplicableFieldDefsResponse = _reflection.GeneratedProtocolMessageType('ListApplicableFieldDefsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _LISTAPPLICABLEFIELDDEFSRESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListApplicableFieldDefsResponse)
+ ))
+_sym_db.RegisterMessage(ListApplicableFieldDefsResponse)
+
+UpdateIssueRequest = _reflection.GeneratedProtocolMessageType('UpdateIssueRequest', (_message.Message,), dict(
+ DESCRIPTOR = _UPDATEISSUEREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.UpdateIssueRequest)
+ ))
+_sym_db.RegisterMessage(UpdateIssueRequest)
+
+StarIssueRequest = _reflection.GeneratedProtocolMessageType('StarIssueRequest', (_message.Message,), dict(
+ DESCRIPTOR = _STARISSUEREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.StarIssueRequest)
+ ))
+_sym_db.RegisterMessage(StarIssueRequest)
+
+StarIssueResponse = _reflection.GeneratedProtocolMessageType('StarIssueResponse', (_message.Message,), dict(
+ DESCRIPTOR = _STARISSUERESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.StarIssueResponse)
+ ))
+_sym_db.RegisterMessage(StarIssueResponse)
+
+IsIssueStarredRequest = _reflection.GeneratedProtocolMessageType('IsIssueStarredRequest', (_message.Message,), dict(
+ DESCRIPTOR = _ISISSUESTARREDREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.IsIssueStarredRequest)
+ ))
+_sym_db.RegisterMessage(IsIssueStarredRequest)
+
+IsIssueStarredResponse = _reflection.GeneratedProtocolMessageType('IsIssueStarredResponse', (_message.Message,), dict(
+ DESCRIPTOR = _ISISSUESTARREDRESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.IsIssueStarredResponse)
+ ))
+_sym_db.RegisterMessage(IsIssueStarredResponse)
+
+ListStarredIssuesRequest = _reflection.GeneratedProtocolMessageType('ListStarredIssuesRequest', (_message.Message,), dict(
+ DESCRIPTOR = _LISTSTARREDISSUESREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListStarredIssuesRequest)
+ ))
+_sym_db.RegisterMessage(ListStarredIssuesRequest)
+
+ListStarredIssuesResponse = _reflection.GeneratedProtocolMessageType('ListStarredIssuesResponse', (_message.Message,), dict(
+ DESCRIPTOR = _LISTSTARREDISSUESRESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListStarredIssuesResponse)
+ ))
+_sym_db.RegisterMessage(ListStarredIssuesResponse)
+
+ListCommentsRequest = _reflection.GeneratedProtocolMessageType('ListCommentsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _LISTCOMMENTSREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListCommentsRequest)
+ ))
+_sym_db.RegisterMessage(ListCommentsRequest)
+
+ListCommentsResponse = _reflection.GeneratedProtocolMessageType('ListCommentsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _LISTCOMMENTSRESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListCommentsResponse)
+ ))
+_sym_db.RegisterMessage(ListCommentsResponse)
+
+ListActivitiesRequest = _reflection.GeneratedProtocolMessageType('ListActivitiesRequest', (_message.Message,), dict(
+ DESCRIPTOR = _LISTACTIVITIESREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListActivitiesRequest)
+ ))
+_sym_db.RegisterMessage(ListActivitiesRequest)
+
+ListActivitiesResponse = _reflection.GeneratedProtocolMessageType('ListActivitiesResponse', (_message.Message,), dict(
+ DESCRIPTOR = _LISTACTIVITIESRESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListActivitiesResponse)
+ ))
+_sym_db.RegisterMessage(ListActivitiesResponse)
+
+DeleteCommentRequest = _reflection.GeneratedProtocolMessageType('DeleteCommentRequest', (_message.Message,), dict(
+ DESCRIPTOR = _DELETECOMMENTREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.DeleteCommentRequest)
+ ))
+_sym_db.RegisterMessage(DeleteCommentRequest)
+
+BulkUpdateApprovalsRequest = _reflection.GeneratedProtocolMessageType('BulkUpdateApprovalsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _BULKUPDATEAPPROVALSREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.BulkUpdateApprovalsRequest)
+ ))
+_sym_db.RegisterMessage(BulkUpdateApprovalsRequest)
+
+BulkUpdateApprovalsResponse = _reflection.GeneratedProtocolMessageType('BulkUpdateApprovalsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _BULKUPDATEAPPROVALSRESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.BulkUpdateApprovalsResponse)
+ ))
+_sym_db.RegisterMessage(BulkUpdateApprovalsResponse)
+
+UpdateApprovalRequest = _reflection.GeneratedProtocolMessageType('UpdateApprovalRequest', (_message.Message,), dict(
+ DESCRIPTOR = _UPDATEAPPROVALREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.UpdateApprovalRequest)
+ ))
+_sym_db.RegisterMessage(UpdateApprovalRequest)
+
+UpdateApprovalResponse = _reflection.GeneratedProtocolMessageType('UpdateApprovalResponse', (_message.Message,), dict(
+ DESCRIPTOR = _UPDATEAPPROVALRESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.UpdateApprovalResponse)
+ ))
+_sym_db.RegisterMessage(UpdateApprovalResponse)
+
+ConvertIssueApprovalsTemplateRequest = _reflection.GeneratedProtocolMessageType('ConvertIssueApprovalsTemplateRequest', (_message.Message,), dict(
+ DESCRIPTOR = _CONVERTISSUEAPPROVALSTEMPLATEREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ConvertIssueApprovalsTemplateRequest)
+ ))
+_sym_db.RegisterMessage(ConvertIssueApprovalsTemplateRequest)
+
+ConvertIssueApprovalsTemplateResponse = _reflection.GeneratedProtocolMessageType('ConvertIssueApprovalsTemplateResponse', (_message.Message,), dict(
+ DESCRIPTOR = _CONVERTISSUEAPPROVALSTEMPLATERESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ConvertIssueApprovalsTemplateResponse)
+ ))
+_sym_db.RegisterMessage(ConvertIssueApprovalsTemplateResponse)
+
+IssueSnapshotRequest = _reflection.GeneratedProtocolMessageType('IssueSnapshotRequest', (_message.Message,), dict(
+ DESCRIPTOR = _ISSUESNAPSHOTREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.IssueSnapshotRequest)
+ ))
+_sym_db.RegisterMessage(IssueSnapshotRequest)
+
+IssueSnapshotCount = _reflection.GeneratedProtocolMessageType('IssueSnapshotCount', (_message.Message,), dict(
+ DESCRIPTOR = _ISSUESNAPSHOTCOUNT,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.IssueSnapshotCount)
+ ))
+_sym_db.RegisterMessage(IssueSnapshotCount)
+
+IssueSnapshotResponse = _reflection.GeneratedProtocolMessageType('IssueSnapshotResponse', (_message.Message,), dict(
+ DESCRIPTOR = _ISSUESNAPSHOTRESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.IssueSnapshotResponse)
+ ))
+_sym_db.RegisterMessage(IssueSnapshotResponse)
+
+PresubmitIssueRequest = _reflection.GeneratedProtocolMessageType('PresubmitIssueRequest', (_message.Message,), dict(
+ DESCRIPTOR = _PRESUBMITISSUEREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.PresubmitIssueRequest)
+ ))
+_sym_db.RegisterMessage(PresubmitIssueRequest)
+
+PresubmitIssueResponse = _reflection.GeneratedProtocolMessageType('PresubmitIssueResponse', (_message.Message,), dict(
+ DESCRIPTOR = _PRESUBMITISSUERESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.PresubmitIssueResponse)
+ ))
+_sym_db.RegisterMessage(PresubmitIssueResponse)
+
+RerankBlockedOnIssuesRequest = _reflection.GeneratedProtocolMessageType('RerankBlockedOnIssuesRequest', (_message.Message,), dict(
+ DESCRIPTOR = _RERANKBLOCKEDONISSUESREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.RerankBlockedOnIssuesRequest)
+ ))
+_sym_db.RegisterMessage(RerankBlockedOnIssuesRequest)
+
+RerankBlockedOnIssuesResponse = _reflection.GeneratedProtocolMessageType('RerankBlockedOnIssuesResponse', (_message.Message,), dict(
+ DESCRIPTOR = _RERANKBLOCKEDONISSUESRESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.RerankBlockedOnIssuesResponse)
+ ))
+_sym_db.RegisterMessage(RerankBlockedOnIssuesResponse)
+
+DeleteIssueRequest = _reflection.GeneratedProtocolMessageType('DeleteIssueRequest', (_message.Message,), dict(
+ DESCRIPTOR = _DELETEISSUEREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.DeleteIssueRequest)
+ ))
+_sym_db.RegisterMessage(DeleteIssueRequest)
+
+DeleteIssueResponse = _reflection.GeneratedProtocolMessageType('DeleteIssueResponse', (_message.Message,), dict(
+ DESCRIPTOR = _DELETEISSUERESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.DeleteIssueResponse)
+ ))
+_sym_db.RegisterMessage(DeleteIssueResponse)
+
+DeleteIssueCommentRequest = _reflection.GeneratedProtocolMessageType('DeleteIssueCommentRequest', (_message.Message,), dict(
+ DESCRIPTOR = _DELETEISSUECOMMENTREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.DeleteIssueCommentRequest)
+ ))
+_sym_db.RegisterMessage(DeleteIssueCommentRequest)
+
+DeleteIssueCommentResponse = _reflection.GeneratedProtocolMessageType('DeleteIssueCommentResponse', (_message.Message,), dict(
+ DESCRIPTOR = _DELETEISSUECOMMENTRESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.DeleteIssueCommentResponse)
+ ))
+_sym_db.RegisterMessage(DeleteIssueCommentResponse)
+
+DeleteAttachmentRequest = _reflection.GeneratedProtocolMessageType('DeleteAttachmentRequest', (_message.Message,), dict(
+ DESCRIPTOR = _DELETEATTACHMENTREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.DeleteAttachmentRequest)
+ ))
+_sym_db.RegisterMessage(DeleteAttachmentRequest)
+
+DeleteAttachmentResponse = _reflection.GeneratedProtocolMessageType('DeleteAttachmentResponse', (_message.Message,), dict(
+ DESCRIPTOR = _DELETEATTACHMENTRESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.DeleteAttachmentResponse)
+ ))
+_sym_db.RegisterMessage(DeleteAttachmentResponse)
+
+FlagIssuesRequest = _reflection.GeneratedProtocolMessageType('FlagIssuesRequest', (_message.Message,), dict(
+ DESCRIPTOR = _FLAGISSUESREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.FlagIssuesRequest)
+ ))
+_sym_db.RegisterMessage(FlagIssuesRequest)
+
+FlagIssuesResponse = _reflection.GeneratedProtocolMessageType('FlagIssuesResponse', (_message.Message,), dict(
+ DESCRIPTOR = _FLAGISSUESRESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.FlagIssuesResponse)
+ ))
+_sym_db.RegisterMessage(FlagIssuesResponse)
+
+FlagCommentRequest = _reflection.GeneratedProtocolMessageType('FlagCommentRequest', (_message.Message,), dict(
+ DESCRIPTOR = _FLAGCOMMENTREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.FlagCommentRequest)
+ ))
+_sym_db.RegisterMessage(FlagCommentRequest)
+
+FlagCommentResponse = _reflection.GeneratedProtocolMessageType('FlagCommentResponse', (_message.Message,), dict(
+ DESCRIPTOR = _FLAGCOMMENTRESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.FlagCommentResponse)
+ ))
+_sym_db.RegisterMessage(FlagCommentResponse)
+
+ListIssuePermissionsRequest = _reflection.GeneratedProtocolMessageType('ListIssuePermissionsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _LISTISSUEPERMISSIONSREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListIssuePermissionsRequest)
+ ))
+_sym_db.RegisterMessage(ListIssuePermissionsRequest)
+
+ListIssuePermissionsResponse = _reflection.GeneratedProtocolMessageType('ListIssuePermissionsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _LISTISSUEPERMISSIONSRESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListIssuePermissionsResponse)
+ ))
+_sym_db.RegisterMessage(ListIssuePermissionsResponse)
+
+MoveIssueRequest = _reflection.GeneratedProtocolMessageType('MoveIssueRequest', (_message.Message,), dict(
+ DESCRIPTOR = _MOVEISSUEREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.MoveIssueRequest)
+ ))
+_sym_db.RegisterMessage(MoveIssueRequest)
+
+MoveIssueResponse = _reflection.GeneratedProtocolMessageType('MoveIssueResponse', (_message.Message,), dict(
+ DESCRIPTOR = _MOVEISSUERESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.MoveIssueResponse)
+ ))
+_sym_db.RegisterMessage(MoveIssueResponse)
+
+CopyIssueRequest = _reflection.GeneratedProtocolMessageType('CopyIssueRequest', (_message.Message,), dict(
+ DESCRIPTOR = _COPYISSUEREQUEST,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.CopyIssueRequest)
+ ))
+_sym_db.RegisterMessage(CopyIssueRequest)
+
+CopyIssueResponse = _reflection.GeneratedProtocolMessageType('CopyIssueResponse', (_message.Message,), dict(
+ DESCRIPTOR = _COPYISSUERESPONSE,
+ __module__ = 'api.api_proto.issues_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.CopyIssueResponse)
+ ))
+_sym_db.RegisterMessage(CopyIssueResponse)
+
+
+
+_ISSUES = _descriptor.ServiceDescriptor(
+ name='Issues',
+ full_name='monorail.Issues',
+ file=DESCRIPTOR,
+ index=0,
+ serialized_options=None,
+ serialized_start=4879,
+ serialized_end=7162,
+ methods=[
+ _descriptor.MethodDescriptor(
+ name='CreateIssue',
+ full_name='monorail.Issues.CreateIssue',
+ index=0,
+ containing_service=None,
+ input_type=_CREATEISSUEREQUEST,
+ output_type=_ISSUERESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='GetIssue',
+ full_name='monorail.Issues.GetIssue',
+ index=1,
+ containing_service=None,
+ input_type=_GETISSUEREQUEST,
+ output_type=_ISSUERESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='ListIssues',
+ full_name='monorail.Issues.ListIssues',
+ index=2,
+ containing_service=None,
+ input_type=_LISTISSUESREQUEST,
+ output_type=_LISTISSUESRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='ListReferencedIssues',
+ full_name='monorail.Issues.ListReferencedIssues',
+ index=3,
+ containing_service=None,
+ input_type=_LISTREFERENCEDISSUESREQUEST,
+ output_type=_LISTREFERENCEDISSUESRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='ListApplicableFieldDefs',
+ full_name='monorail.Issues.ListApplicableFieldDefs',
+ index=4,
+ containing_service=None,
+ input_type=_LISTAPPLICABLEFIELDDEFSREQUEST,
+ output_type=_LISTAPPLICABLEFIELDDEFSRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='UpdateIssue',
+ full_name='monorail.Issues.UpdateIssue',
+ index=5,
+ containing_service=None,
+ input_type=_UPDATEISSUEREQUEST,
+ output_type=_ISSUERESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='StarIssue',
+ full_name='monorail.Issues.StarIssue',
+ index=6,
+ containing_service=None,
+ input_type=_STARISSUEREQUEST,
+ output_type=_STARISSUERESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='IsIssueStarred',
+ full_name='monorail.Issues.IsIssueStarred',
+ index=7,
+ containing_service=None,
+ input_type=_ISISSUESTARREDREQUEST,
+ output_type=_ISISSUESTARREDRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='ListStarredIssues',
+ full_name='monorail.Issues.ListStarredIssues',
+ index=8,
+ containing_service=None,
+ input_type=_LISTSTARREDISSUESREQUEST,
+ output_type=_LISTSTARREDISSUESRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='ListComments',
+ full_name='monorail.Issues.ListComments',
+ index=9,
+ containing_service=None,
+ input_type=_LISTCOMMENTSREQUEST,
+ output_type=_LISTCOMMENTSRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='ListActivities',
+ full_name='monorail.Issues.ListActivities',
+ index=10,
+ containing_service=None,
+ input_type=_LISTACTIVITIESREQUEST,
+ output_type=_LISTACTIVITIESRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='DeleteComment',
+ full_name='monorail.Issues.DeleteComment',
+ index=11,
+ containing_service=None,
+ input_type=_DELETECOMMENTREQUEST,
+ output_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='BulkUpdateApprovals',
+ full_name='monorail.Issues.BulkUpdateApprovals',
+ index=12,
+ containing_service=None,
+ input_type=_BULKUPDATEAPPROVALSREQUEST,
+ output_type=_BULKUPDATEAPPROVALSRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='UpdateApproval',
+ full_name='monorail.Issues.UpdateApproval',
+ index=13,
+ containing_service=None,
+ input_type=_UPDATEAPPROVALREQUEST,
+ output_type=_UPDATEAPPROVALRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='ConvertIssueApprovalsTemplate',
+ full_name='monorail.Issues.ConvertIssueApprovalsTemplate',
+ index=14,
+ containing_service=None,
+ input_type=_CONVERTISSUEAPPROVALSTEMPLATEREQUEST,
+ output_type=_CONVERTISSUEAPPROVALSTEMPLATERESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='IssueSnapshot',
+ full_name='monorail.Issues.IssueSnapshot',
+ index=15,
+ containing_service=None,
+ input_type=_ISSUESNAPSHOTREQUEST,
+ output_type=_ISSUESNAPSHOTRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='PresubmitIssue',
+ full_name='monorail.Issues.PresubmitIssue',
+ index=16,
+ containing_service=None,
+ input_type=_PRESUBMITISSUEREQUEST,
+ output_type=_PRESUBMITISSUERESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='RerankBlockedOnIssues',
+ full_name='monorail.Issues.RerankBlockedOnIssues',
+ index=17,
+ containing_service=None,
+ input_type=_RERANKBLOCKEDONISSUESREQUEST,
+ output_type=_RERANKBLOCKEDONISSUESRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='DeleteIssue',
+ full_name='monorail.Issues.DeleteIssue',
+ index=18,
+ containing_service=None,
+ input_type=_DELETEISSUEREQUEST,
+ output_type=_DELETEISSUERESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='DeleteIssueComment',
+ full_name='monorail.Issues.DeleteIssueComment',
+ index=19,
+ containing_service=None,
+ input_type=_DELETEISSUECOMMENTREQUEST,
+ output_type=_DELETEISSUECOMMENTRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='DeleteAttachment',
+ full_name='monorail.Issues.DeleteAttachment',
+ index=20,
+ containing_service=None,
+ input_type=_DELETEATTACHMENTREQUEST,
+ output_type=_DELETEATTACHMENTRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='FlagIssues',
+ full_name='monorail.Issues.FlagIssues',
+ index=21,
+ containing_service=None,
+ input_type=_FLAGISSUESREQUEST,
+ output_type=_FLAGISSUESRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='FlagComment',
+ full_name='monorail.Issues.FlagComment',
+ index=22,
+ containing_service=None,
+ input_type=_FLAGCOMMENTREQUEST,
+ output_type=_FLAGCOMMENTRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='ListIssuePermissions',
+ full_name='monorail.Issues.ListIssuePermissions',
+ index=23,
+ containing_service=None,
+ input_type=_LISTISSUEPERMISSIONSREQUEST,
+ output_type=_LISTISSUEPERMISSIONSRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='MoveIssue',
+ full_name='monorail.Issues.MoveIssue',
+ index=24,
+ containing_service=None,
+ input_type=_MOVEISSUEREQUEST,
+ output_type=_MOVEISSUERESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='CopyIssue',
+ full_name='monorail.Issues.CopyIssue',
+ index=25,
+ containing_service=None,
+ input_type=_COPYISSUEREQUEST,
+ output_type=_COPYISSUERESPONSE,
+ serialized_options=None,
+ ),
+])
+_sym_db.RegisterServiceDescriptor(_ISSUES)
+
+DESCRIPTOR.services_by_name['Issues'] = _ISSUES
+
+# @@protoc_insertion_point(module_scope)
diff --git a/api/api_proto/issues_prpc_pb2.py b/api/api_proto/issues_prpc_pb2.py
new file mode 100644
index 0000000..942730d
--- /dev/null
+++ b/api/api_proto/issues_prpc_pb2.py
@@ -0,0 +1,403 @@
+# Generated by the pRPC protocol buffer compiler plugin. DO NOT EDIT!
+# source: api/api_proto/issues.proto
+
+import base64
+import zlib
+
+from google.protobuf import descriptor_pb2
+
+# Includes description of the api/api_proto/issues.proto and all of its transitive
+# dependencies. Includes source code info.
+FILE_DESCRIPTOR_SET = descriptor_pb2.FileDescriptorSet()
+FILE_DESCRIPTOR_SET.ParseFromString(zlib.decompress(base64.b64decode(
+ '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')))
+_INDEX = {
+ f.name: {
+ 'descriptor': f,
+ 'services': {s.name: s for s in f.service},
+ }
+ for f in FILE_DESCRIPTOR_SET.file
+}
+
+
+IssuesServiceDescription = {
+ 'file_descriptor_set': FILE_DESCRIPTOR_SET,
+ 'file_descriptor': _INDEX[u'api/api_proto/issues.proto']['descriptor'],
+ 'service_descriptor': _INDEX[u'api/api_proto/issues.proto']['services'][u'Issues'],
+}
diff --git a/api/api_proto/project_objects.proto b/api/api_proto/project_objects.proto
new file mode 100644
index 0000000..a6943ec
--- /dev/null
+++ b/api/api_proto/project_objects.proto
@@ -0,0 +1,136 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+// This file defines protobufs for issues and related business
+// objects, e.g., field values, comments, and attachments.
+
+syntax = "proto3";
+
+package monorail;
+
+import "api/api_proto/common.proto";
+import "api/api_proto/issue_objects.proto";
+
+
+// Next available tag: 4
+message Project {
+ string name = 1;
+ string summary = 2;
+ string description = 3;
+}
+
+
+// Next available tag: 6
+message StatusDef {
+ string status = 1;
+ bool means_open = 2;
+ uint32 rank = 3;
+ string docstring = 4;
+ bool deprecated = 5;
+}
+
+
+// Next available tag: 5
+message LabelDef {
+ string label = 1;
+ string docstring = 3;
+ bool deprecated = 4;
+}
+
+
+// Next available tag: 11
+message ComponentDef {
+ string path = 1;
+ string docstring = 2;
+ repeated UserRef admin_refs = 3;
+ repeated UserRef cc_refs = 4;
+ bool deprecated = 5;
+ fixed32 created = 6;
+ UserRef creator_ref = 7;
+ fixed32 modified = 8;
+ UserRef modifier_ref = 9;
+ repeated LabelRef label_refs = 10;
+}
+
+
+// Next available tag: 9
+message FieldDef {
+ FieldRef field_ref = 1;
+ string applicable_type = 2;
+ // TODO(jrobbins): applicable_predicate
+ bool is_required = 3;
+ bool is_niche = 4;
+ bool is_multivalued = 5;
+ string docstring = 6;
+ repeated UserRef admin_refs = 7;
+ // TODO(jrobbins): validation, permission granting, and notification options.
+ bool is_phase_field = 8;
+ repeated UserRef user_choices = 9;
+ repeated LabelDef enum_choices = 10;
+}
+
+
+// Next available tag: 3
+message FieldOptions {
+ FieldRef field_ref = 1;
+ repeated UserRef user_refs = 2;
+}
+
+
+// Next available tag: 4
+message ApprovalDef {
+ FieldRef field_ref = 1;
+ repeated UserRef approver_refs = 2;
+ string survey = 3;
+}
+
+
+// Next available tag: 11
+message Config {
+ string project_name = 1;
+ repeated StatusDef status_defs = 2;
+ repeated StatusRef statuses_offer_merge = 3;
+ repeated LabelDef label_defs = 4;
+ repeated string exclusive_label_prefixes = 5;
+ repeated ComponentDef component_defs = 6;
+ repeated FieldDef field_defs = 7;
+ repeated ApprovalDef approval_defs = 8;
+ bool restrict_to_known = 9;
+}
+
+
+// Next available tag: 11
+message PresentationConfig {
+ string project_thumbnail_url = 1;
+ string project_summary = 2;
+ string custom_issue_entry_url = 3;
+ string default_query = 4;
+ repeated SavedQuery saved_queries = 5;
+ string revision_url_format = 6;
+ string default_col_spec = 7;
+ string default_sort_spec = 8;
+ string default_x_attr = 9;
+ string default_y_attr = 10;
+}
+
+
+// Next available tag: 16
+message TemplateDef {
+ string template_name = 1;
+ string content = 2;
+ string summary = 3;
+ bool summary_must_be_edited = 4;
+ UserRef owner_ref = 5;
+ StatusRef status_ref = 6;
+ repeated LabelRef label_refs = 7;
+ bool members_only = 8;
+ bool owner_defaults_to_member = 9;
+ repeated UserRef admin_refs = 10;
+ repeated FieldValue field_values = 11;
+ repeated ComponentRef component_refs = 12;
+ bool component_required = 13;
+ repeated Approval approval_values = 14;
+ repeated PhaseDef phases = 15;
+}
diff --git a/api/api_proto/project_objects_pb2.py b/api/api_proto/project_objects_pb2.py
new file mode 100644
index 0000000..580810a
--- /dev/null
+++ b/api/api_proto/project_objects_pb2.py
@@ -0,0 +1,871 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: api/api_proto/project_objects.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from api.api_proto import common_pb2 as api_dot_api__proto_dot_common__pb2
+from api.api_proto import issue_objects_pb2 as api_dot_api__proto_dot_issue__objects__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='api/api_proto/project_objects.proto',
+ package='monorail',
+ syntax='proto3',
+ serialized_options=None,
+ serialized_pb=_b('\n#api/api_proto/project_objects.proto\x12\x08monorail\x1a\x1a\x61pi/api_proto/common.proto\x1a!api/api_proto/issue_objects.proto\"=\n\x07Project\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07summary\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\"d\n\tStatusDef\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x12\n\nmeans_open\x18\x02 \x01(\x08\x12\x0c\n\x04rank\x18\x03 \x01(\r\x12\x11\n\tdocstring\x18\x04 \x01(\t\x12\x12\n\ndeprecated\x18\x05 \x01(\x08\"@\n\x08LabelDef\x12\r\n\x05label\x18\x01 \x01(\t\x12\x11\n\tdocstring\x18\x03 \x01(\t\x12\x12\n\ndeprecated\x18\x04 \x01(\x08\"\xaa\x02\n\x0c\x43omponentDef\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x11\n\tdocstring\x18\x02 \x01(\t\x12%\n\nadmin_refs\x18\x03 \x03(\x0b\x32\x11.monorail.UserRef\x12\"\n\x07\x63\x63_refs\x18\x04 \x03(\x0b\x32\x11.monorail.UserRef\x12\x12\n\ndeprecated\x18\x05 \x01(\x08\x12\x0f\n\x07\x63reated\x18\x06 \x01(\x07\x12&\n\x0b\x63reator_ref\x18\x07 \x01(\x0b\x32\x11.monorail.UserRef\x12\x10\n\x08modified\x18\x08 \x01(\x07\x12\'\n\x0cmodifier_ref\x18\t \x01(\x0b\x32\x11.monorail.UserRef\x12&\n\nlabel_refs\x18\n \x03(\x0b\x32\x12.monorail.LabelRef\"\xae\x02\n\x08\x46ieldDef\x12%\n\tfield_ref\x18\x01 \x01(\x0b\x32\x12.monorail.FieldRef\x12\x17\n\x0f\x61pplicable_type\x18\x02 \x01(\t\x12\x13\n\x0bis_required\x18\x03 \x01(\x08\x12\x10\n\x08is_niche\x18\x04 \x01(\x08\x12\x16\n\x0eis_multivalued\x18\x05 \x01(\x08\x12\x11\n\tdocstring\x18\x06 \x01(\t\x12%\n\nadmin_refs\x18\x07 \x03(\x0b\x32\x11.monorail.UserRef\x12\x16\n\x0eis_phase_field\x18\x08 \x01(\x08\x12\'\n\x0cuser_choices\x18\t \x03(\x0b\x32\x11.monorail.UserRef\x12(\n\x0c\x65num_choices\x18\n \x03(\x0b\x32\x12.monorail.LabelDef\"[\n\x0c\x46ieldOptions\x12%\n\tfield_ref\x18\x01 \x01(\x0b\x32\x12.monorail.FieldRef\x12$\n\tuser_refs\x18\x02 \x03(\x0b\x32\x11.monorail.UserRef\"n\n\x0b\x41pprovalDef\x12%\n\tfield_ref\x18\x01 \x01(\x0b\x32\x12.monorail.FieldRef\x12(\n\rapprover_refs\x18\x02 \x03(\x0b\x32\x11.monorail.UserRef\x12\x0e\n\x06survey\x18\x03 \x01(\t\"\xe6\x02\n\x06\x43onfig\x12\x14\n\x0cproject_name\x18\x01 \x01(\t\x12(\n\x0bstatus_defs\x18\x02 \x03(\x0b\x32\x13.monorail.StatusDef\x12\x31\n\x14statuses_offer_merge\x18\x03 \x03(\x0b\x32\x13.monorail.StatusRef\x12&\n\nlabel_defs\x18\x04 \x03(\x0b\x32\x12.monorail.LabelDef\x12 \n\x18\x65xclusive_label_prefixes\x18\x05 \x03(\t\x12.\n\x0e\x63omponent_defs\x18\x06 \x03(\x0b\x32\x16.monorail.ComponentDef\x12&\n\nfield_defs\x18\x07 \x03(\x0b\x32\x12.monorail.FieldDef\x12,\n\rapproval_defs\x18\x08 \x03(\x0b\x32\x15.monorail.ApprovalDef\x12\x19\n\x11restrict_to_known\x18\t \x01(\x08\"\xb2\x02\n\x12PresentationConfig\x12\x1d\n\x15project_thumbnail_url\x18\x01 \x01(\t\x12\x17\n\x0fproject_summary\x18\x02 \x01(\t\x12\x1e\n\x16\x63ustom_issue_entry_url\x18\x03 \x01(\t\x12\x15\n\rdefault_query\x18\x04 \x01(\t\x12+\n\rsaved_queries\x18\x05 \x03(\x0b\x32\x14.monorail.SavedQuery\x12\x1b\n\x13revision_url_format\x18\x06 \x01(\t\x12\x18\n\x10\x64\x65\x66\x61ult_col_spec\x18\x07 \x01(\t\x12\x19\n\x11\x64\x65\x66\x61ult_sort_spec\x18\x08 \x01(\t\x12\x16\n\x0e\x64\x65\x66\x61ult_x_attr\x18\t \x01(\t\x12\x16\n\x0e\x64\x65\x66\x61ult_y_attr\x18\n \x01(\t\"\x85\x04\n\x0bTemplateDef\x12\x15\n\rtemplate_name\x18\x01 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x02 \x01(\t\x12\x0f\n\x07summary\x18\x03 \x01(\t\x12\x1e\n\x16summary_must_be_edited\x18\x04 \x01(\x08\x12$\n\towner_ref\x18\x05 \x01(\x0b\x32\x11.monorail.UserRef\x12\'\n\nstatus_ref\x18\x06 \x01(\x0b\x32\x13.monorail.StatusRef\x12&\n\nlabel_refs\x18\x07 \x03(\x0b\x32\x12.monorail.LabelRef\x12\x14\n\x0cmembers_only\x18\x08 \x01(\x08\x12 \n\x18owner_defaults_to_member\x18\t \x01(\x08\x12%\n\nadmin_refs\x18\n \x03(\x0b\x32\x11.monorail.UserRef\x12*\n\x0c\x66ield_values\x18\x0b \x03(\x0b\x32\x14.monorail.FieldValue\x12.\n\x0e\x63omponent_refs\x18\x0c \x03(\x0b\x32\x16.monorail.ComponentRef\x12\x1a\n\x12\x63omponent_required\x18\r \x01(\x08\x12+\n\x0f\x61pproval_values\x18\x0e \x03(\x0b\x32\x12.monorail.Approval\x12\"\n\x06phases\x18\x0f \x03(\x0b\x32\x12.monorail.PhaseDefb\x06proto3')
+ ,
+ dependencies=[api_dot_api__proto_dot_common__pb2.DESCRIPTOR,api_dot_api__proto_dot_issue__objects__pb2.DESCRIPTOR,])
+
+
+
+
+_PROJECT = _descriptor.Descriptor(
+ name='Project',
+ full_name='monorail.Project',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='name', full_name='monorail.Project.name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='summary', full_name='monorail.Project.summary', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='description', full_name='monorail.Project.description', index=2,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=112,
+ serialized_end=173,
+)
+
+
+_STATUSDEF = _descriptor.Descriptor(
+ name='StatusDef',
+ full_name='monorail.StatusDef',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='status', full_name='monorail.StatusDef.status', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='means_open', full_name='monorail.StatusDef.means_open', index=1,
+ number=2, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='rank', full_name='monorail.StatusDef.rank', index=2,
+ number=3, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='docstring', full_name='monorail.StatusDef.docstring', index=3,
+ number=4, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='deprecated', full_name='monorail.StatusDef.deprecated', index=4,
+ number=5, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=175,
+ serialized_end=275,
+)
+
+
+_LABELDEF = _descriptor.Descriptor(
+ name='LabelDef',
+ full_name='monorail.LabelDef',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='label', full_name='monorail.LabelDef.label', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='docstring', full_name='monorail.LabelDef.docstring', index=1,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='deprecated', full_name='monorail.LabelDef.deprecated', index=2,
+ number=4, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=277,
+ serialized_end=341,
+)
+
+
+_COMPONENTDEF = _descriptor.Descriptor(
+ name='ComponentDef',
+ full_name='monorail.ComponentDef',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='path', full_name='monorail.ComponentDef.path', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='docstring', full_name='monorail.ComponentDef.docstring', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='admin_refs', full_name='monorail.ComponentDef.admin_refs', index=2,
+ number=3, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='cc_refs', full_name='monorail.ComponentDef.cc_refs', index=3,
+ number=4, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='deprecated', full_name='monorail.ComponentDef.deprecated', index=4,
+ number=5, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='created', full_name='monorail.ComponentDef.created', index=5,
+ number=6, type=7, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='creator_ref', full_name='monorail.ComponentDef.creator_ref', index=6,
+ number=7, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='modified', full_name='monorail.ComponentDef.modified', index=7,
+ number=8, type=7, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='modifier_ref', full_name='monorail.ComponentDef.modifier_ref', index=8,
+ number=9, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='label_refs', full_name='monorail.ComponentDef.label_refs', index=9,
+ number=10, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=344,
+ serialized_end=642,
+)
+
+
+_FIELDDEF = _descriptor.Descriptor(
+ name='FieldDef',
+ full_name='monorail.FieldDef',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='field_ref', full_name='monorail.FieldDef.field_ref', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='applicable_type', full_name='monorail.FieldDef.applicable_type', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='is_required', full_name='monorail.FieldDef.is_required', index=2,
+ number=3, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='is_niche', full_name='monorail.FieldDef.is_niche', index=3,
+ number=4, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='is_multivalued', full_name='monorail.FieldDef.is_multivalued', index=4,
+ number=5, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='docstring', full_name='monorail.FieldDef.docstring', index=5,
+ number=6, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='admin_refs', full_name='monorail.FieldDef.admin_refs', index=6,
+ number=7, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='is_phase_field', full_name='monorail.FieldDef.is_phase_field', index=7,
+ number=8, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='user_choices', full_name='monorail.FieldDef.user_choices', index=8,
+ number=9, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='enum_choices', full_name='monorail.FieldDef.enum_choices', index=9,
+ number=10, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=645,
+ serialized_end=947,
+)
+
+
+_FIELDOPTIONS = _descriptor.Descriptor(
+ name='FieldOptions',
+ full_name='monorail.FieldOptions',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='field_ref', full_name='monorail.FieldOptions.field_ref', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='user_refs', full_name='monorail.FieldOptions.user_refs', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=949,
+ serialized_end=1040,
+)
+
+
+_APPROVALDEF = _descriptor.Descriptor(
+ name='ApprovalDef',
+ full_name='monorail.ApprovalDef',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='field_ref', full_name='monorail.ApprovalDef.field_ref', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='approver_refs', full_name='monorail.ApprovalDef.approver_refs', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='survey', full_name='monorail.ApprovalDef.survey', index=2,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1042,
+ serialized_end=1152,
+)
+
+
+_CONFIG = _descriptor.Descriptor(
+ name='Config',
+ full_name='monorail.Config',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.Config.project_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='status_defs', full_name='monorail.Config.status_defs', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='statuses_offer_merge', full_name='monorail.Config.statuses_offer_merge', index=2,
+ number=3, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='label_defs', full_name='monorail.Config.label_defs', index=3,
+ number=4, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='exclusive_label_prefixes', full_name='monorail.Config.exclusive_label_prefixes', index=4,
+ number=5, type=9, cpp_type=9, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='component_defs', full_name='monorail.Config.component_defs', index=5,
+ number=6, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='field_defs', full_name='monorail.Config.field_defs', index=6,
+ number=7, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='approval_defs', full_name='monorail.Config.approval_defs', index=7,
+ number=8, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='restrict_to_known', full_name='monorail.Config.restrict_to_known', index=8,
+ number=9, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1155,
+ serialized_end=1513,
+)
+
+
+_PRESENTATIONCONFIG = _descriptor.Descriptor(
+ name='PresentationConfig',
+ full_name='monorail.PresentationConfig',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='project_thumbnail_url', full_name='monorail.PresentationConfig.project_thumbnail_url', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='project_summary', full_name='monorail.PresentationConfig.project_summary', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='custom_issue_entry_url', full_name='monorail.PresentationConfig.custom_issue_entry_url', index=2,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='default_query', full_name='monorail.PresentationConfig.default_query', index=3,
+ number=4, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='saved_queries', full_name='monorail.PresentationConfig.saved_queries', index=4,
+ number=5, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='revision_url_format', full_name='monorail.PresentationConfig.revision_url_format', index=5,
+ number=6, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='default_col_spec', full_name='monorail.PresentationConfig.default_col_spec', index=6,
+ number=7, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='default_sort_spec', full_name='monorail.PresentationConfig.default_sort_spec', index=7,
+ number=8, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='default_x_attr', full_name='monorail.PresentationConfig.default_x_attr', index=8,
+ number=9, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='default_y_attr', full_name='monorail.PresentationConfig.default_y_attr', index=9,
+ number=10, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1516,
+ serialized_end=1822,
+)
+
+
+_TEMPLATEDEF = _descriptor.Descriptor(
+ name='TemplateDef',
+ full_name='monorail.TemplateDef',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='template_name', full_name='monorail.TemplateDef.template_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='content', full_name='monorail.TemplateDef.content', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='summary', full_name='monorail.TemplateDef.summary', index=2,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='summary_must_be_edited', full_name='monorail.TemplateDef.summary_must_be_edited', index=3,
+ number=4, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='owner_ref', full_name='monorail.TemplateDef.owner_ref', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='status_ref', full_name='monorail.TemplateDef.status_ref', index=5,
+ number=6, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='label_refs', full_name='monorail.TemplateDef.label_refs', index=6,
+ number=7, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='members_only', full_name='monorail.TemplateDef.members_only', index=7,
+ number=8, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='owner_defaults_to_member', full_name='monorail.TemplateDef.owner_defaults_to_member', index=8,
+ number=9, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='admin_refs', full_name='monorail.TemplateDef.admin_refs', index=9,
+ number=10, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='field_values', full_name='monorail.TemplateDef.field_values', index=10,
+ number=11, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='component_refs', full_name='monorail.TemplateDef.component_refs', index=11,
+ number=12, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='component_required', full_name='monorail.TemplateDef.component_required', index=12,
+ number=13, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='approval_values', full_name='monorail.TemplateDef.approval_values', index=13,
+ number=14, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='phases', full_name='monorail.TemplateDef.phases', index=14,
+ number=15, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1825,
+ serialized_end=2342,
+)
+
+_COMPONENTDEF.fields_by_name['admin_refs'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_COMPONENTDEF.fields_by_name['cc_refs'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_COMPONENTDEF.fields_by_name['creator_ref'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_COMPONENTDEF.fields_by_name['modifier_ref'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_COMPONENTDEF.fields_by_name['label_refs'].message_type = api_dot_api__proto_dot_common__pb2._LABELREF
+_FIELDDEF.fields_by_name['field_ref'].message_type = api_dot_api__proto_dot_common__pb2._FIELDREF
+_FIELDDEF.fields_by_name['admin_refs'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_FIELDDEF.fields_by_name['user_choices'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_FIELDDEF.fields_by_name['enum_choices'].message_type = _LABELDEF
+_FIELDOPTIONS.fields_by_name['field_ref'].message_type = api_dot_api__proto_dot_common__pb2._FIELDREF
+_FIELDOPTIONS.fields_by_name['user_refs'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_APPROVALDEF.fields_by_name['field_ref'].message_type = api_dot_api__proto_dot_common__pb2._FIELDREF
+_APPROVALDEF.fields_by_name['approver_refs'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_CONFIG.fields_by_name['status_defs'].message_type = _STATUSDEF
+_CONFIG.fields_by_name['statuses_offer_merge'].message_type = api_dot_api__proto_dot_common__pb2._STATUSREF
+_CONFIG.fields_by_name['label_defs'].message_type = _LABELDEF
+_CONFIG.fields_by_name['component_defs'].message_type = _COMPONENTDEF
+_CONFIG.fields_by_name['field_defs'].message_type = _FIELDDEF
+_CONFIG.fields_by_name['approval_defs'].message_type = _APPROVALDEF
+_PRESENTATIONCONFIG.fields_by_name['saved_queries'].message_type = api_dot_api__proto_dot_common__pb2._SAVEDQUERY
+_TEMPLATEDEF.fields_by_name['owner_ref'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_TEMPLATEDEF.fields_by_name['status_ref'].message_type = api_dot_api__proto_dot_common__pb2._STATUSREF
+_TEMPLATEDEF.fields_by_name['label_refs'].message_type = api_dot_api__proto_dot_common__pb2._LABELREF
+_TEMPLATEDEF.fields_by_name['admin_refs'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_TEMPLATEDEF.fields_by_name['field_values'].message_type = api_dot_api__proto_dot_issue__objects__pb2._FIELDVALUE
+_TEMPLATEDEF.fields_by_name['component_refs'].message_type = api_dot_api__proto_dot_common__pb2._COMPONENTREF
+_TEMPLATEDEF.fields_by_name['approval_values'].message_type = api_dot_api__proto_dot_issue__objects__pb2._APPROVAL
+_TEMPLATEDEF.fields_by_name['phases'].message_type = api_dot_api__proto_dot_issue__objects__pb2._PHASEDEF
+DESCRIPTOR.message_types_by_name['Project'] = _PROJECT
+DESCRIPTOR.message_types_by_name['StatusDef'] = _STATUSDEF
+DESCRIPTOR.message_types_by_name['LabelDef'] = _LABELDEF
+DESCRIPTOR.message_types_by_name['ComponentDef'] = _COMPONENTDEF
+DESCRIPTOR.message_types_by_name['FieldDef'] = _FIELDDEF
+DESCRIPTOR.message_types_by_name['FieldOptions'] = _FIELDOPTIONS
+DESCRIPTOR.message_types_by_name['ApprovalDef'] = _APPROVALDEF
+DESCRIPTOR.message_types_by_name['Config'] = _CONFIG
+DESCRIPTOR.message_types_by_name['PresentationConfig'] = _PRESENTATIONCONFIG
+DESCRIPTOR.message_types_by_name['TemplateDef'] = _TEMPLATEDEF
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+Project = _reflection.GeneratedProtocolMessageType('Project', (_message.Message,), dict(
+ DESCRIPTOR = _PROJECT,
+ __module__ = 'api.api_proto.project_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.Project)
+ ))
+_sym_db.RegisterMessage(Project)
+
+StatusDef = _reflection.GeneratedProtocolMessageType('StatusDef', (_message.Message,), dict(
+ DESCRIPTOR = _STATUSDEF,
+ __module__ = 'api.api_proto.project_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.StatusDef)
+ ))
+_sym_db.RegisterMessage(StatusDef)
+
+LabelDef = _reflection.GeneratedProtocolMessageType('LabelDef', (_message.Message,), dict(
+ DESCRIPTOR = _LABELDEF,
+ __module__ = 'api.api_proto.project_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.LabelDef)
+ ))
+_sym_db.RegisterMessage(LabelDef)
+
+ComponentDef = _reflection.GeneratedProtocolMessageType('ComponentDef', (_message.Message,), dict(
+ DESCRIPTOR = _COMPONENTDEF,
+ __module__ = 'api.api_proto.project_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ComponentDef)
+ ))
+_sym_db.RegisterMessage(ComponentDef)
+
+FieldDef = _reflection.GeneratedProtocolMessageType('FieldDef', (_message.Message,), dict(
+ DESCRIPTOR = _FIELDDEF,
+ __module__ = 'api.api_proto.project_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.FieldDef)
+ ))
+_sym_db.RegisterMessage(FieldDef)
+
+FieldOptions = _reflection.GeneratedProtocolMessageType('FieldOptions', (_message.Message,), dict(
+ DESCRIPTOR = _FIELDOPTIONS,
+ __module__ = 'api.api_proto.project_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.FieldOptions)
+ ))
+_sym_db.RegisterMessage(FieldOptions)
+
+ApprovalDef = _reflection.GeneratedProtocolMessageType('ApprovalDef', (_message.Message,), dict(
+ DESCRIPTOR = _APPROVALDEF,
+ __module__ = 'api.api_proto.project_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ApprovalDef)
+ ))
+_sym_db.RegisterMessage(ApprovalDef)
+
+Config = _reflection.GeneratedProtocolMessageType('Config', (_message.Message,), dict(
+ DESCRIPTOR = _CONFIG,
+ __module__ = 'api.api_proto.project_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.Config)
+ ))
+_sym_db.RegisterMessage(Config)
+
+PresentationConfig = _reflection.GeneratedProtocolMessageType('PresentationConfig', (_message.Message,), dict(
+ DESCRIPTOR = _PRESENTATIONCONFIG,
+ __module__ = 'api.api_proto.project_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.PresentationConfig)
+ ))
+_sym_db.RegisterMessage(PresentationConfig)
+
+TemplateDef = _reflection.GeneratedProtocolMessageType('TemplateDef', (_message.Message,), dict(
+ DESCRIPTOR = _TEMPLATEDEF,
+ __module__ = 'api.api_proto.project_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.TemplateDef)
+ ))
+_sym_db.RegisterMessage(TemplateDef)
+
+
+# @@protoc_insertion_point(module_scope)
diff --git a/api/api_proto/projects.proto b/api/api_proto/projects.proto
new file mode 100644
index 0000000..bcd1167
--- /dev/null
+++ b/api/api_proto/projects.proto
@@ -0,0 +1,211 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+syntax = "proto3";
+
+
+package monorail;
+
+import "api/api_proto/common.proto";
+import "api/api_proto/project_objects.proto";
+
+
+service Projects {
+ rpc ListProjects (ListProjectsRequest) returns (ListProjectsResponse) {}
+ rpc ListProjectTemplates (ListProjectTemplatesRequest) returns (ListProjectTemplatesResponse) {}
+ rpc GetConfig (GetConfigRequest) returns (Config) {}
+ rpc GetPresentationConfig (GetPresentationConfigRequest) returns (PresentationConfig) {}
+ rpc GetCustomPermissions (GetCustomPermissionsRequest) returns (GetCustomPermissionsResponse) {}
+ rpc GetVisibleMembers (GetVisibleMembersRequest) returns (GetVisibleMembersResponse) {}
+ rpc GetLabelOptions (GetLabelOptionsRequest) returns (GetLabelOptionsResponse) {}
+ rpc ListStatuses (ListStatusesRequest) returns (ListStatusesResponse) {}
+ rpc ListComponents (ListComponentsRequest) returns (ListComponentsResponse) {}
+ rpc ListFields (ListFieldsRequest) returns (ListFieldsResponse) {}
+ rpc GetProjectStarCount (GetProjectStarCountRequest) returns (GetProjectStarCountResponse) {}
+ rpc StarProject (StarProjectRequest) returns (StarProjectResponse) {}
+ rpc CheckProjectName (CheckProjectNameRequest) returns (CheckProjectNameResponse) {}
+ rpc CheckComponentName (CheckComponentNameRequest) returns (CheckComponentNameResponse) {}
+ rpc CheckFieldName (CheckFieldNameRequest) returns (CheckFieldNameResponse) {}
+}
+
+
+// Next available tag: 3
+message ListProjectsRequest {
+ int32 page_size = 1;
+ string page_token = 2;
+}
+
+
+// Next available tag: 3
+message ListProjectsResponse {
+ repeated Project projects = 1;
+ string next_page_token = 2;
+}
+
+
+// Next available tag: 3
+message ListProjectTemplatesRequest {
+ string project_name = 2;
+}
+
+
+// Next available tag: 2
+message ListProjectTemplatesResponse {
+ repeated TemplateDef templates = 1;
+}
+
+
+// Next available tag: 3
+message GetConfigRequest {
+ string project_name = 2;
+}
+
+// Next available tag: 3
+message GetPresentationConfigRequest {
+ string project_name = 2;
+}
+
+
+// Next available tag: 3
+message GetCustomPermissionsRequest {
+ string project_name = 2;
+}
+
+
+// Next available tag: 2
+message GetCustomPermissionsResponse {
+ repeated string permissions = 1;
+}
+
+
+// Next available tag: 3
+message GetVisibleMembersRequest {
+ string project_name = 2;
+}
+
+
+// Next available tag: 3
+message GetVisibleMembersResponse {
+ repeated UserRef user_refs = 1;
+ repeated UserRef group_refs = 2;
+}
+
+
+// Next available tag: 3
+message GetLabelOptionsRequest {
+ string project_name = 2;
+}
+
+
+// Next available tag: 3
+message GetLabelOptionsResponse {
+ repeated LabelDef label_options = 1;
+ repeated string exclusive_label_prefixes = 2;
+}
+
+
+// Next available tag: 3
+message ListStatusesRequest {
+ string project_name = 2;
+}
+
+
+// Next available tag: 4
+message ListStatusesResponse {
+ repeated StatusDef status_defs = 1;
+ repeated StatusRef statuses_offer_merge = 2;
+ bool restrict_to_known = 3;
+}
+
+
+// Next available tag: 4
+message ListComponentsRequest {
+ string project_name = 2;
+ bool include_admin_info = 3;
+}
+
+
+// Next available tag: 2
+message ListComponentsResponse {
+ repeated ComponentDef component_defs = 1;
+}
+
+
+// Next available tag: 5
+message ListFieldsRequest {
+ string project_name = 2;
+ bool include_admin_info = 3;
+ bool include_user_choices = 4;
+}
+
+
+// Next available tag: 2
+message ListFieldsResponse {
+ repeated FieldDef field_defs = 1;
+}
+
+
+// Next available tag: 3
+message GetProjectStarCountRequest {
+ string project_name = 2;
+}
+
+
+// Next available tag: 2
+message GetProjectStarCountResponse {
+ uint32 star_count = 1;
+}
+
+
+// Next available tag: 3
+message StarProjectRequest {
+ string project_name = 2;
+ bool starred = 3;
+}
+
+
+// Next available tag: 2
+message StarProjectResponse {
+ uint32 star_count = 1;
+}
+
+
+// Next available tag: 3
+message CheckProjectNameRequest {
+ string project_name = 2;
+}
+
+
+// Next available tag: 1
+message CheckProjectNameResponse {
+ string error = 1;
+}
+
+
+// Next available tag: 5
+message CheckComponentNameRequest {
+ string project_name = 2;
+ string parent_path = 3;
+ string component_name = 4;
+}
+
+
+// Next available tag: 2
+message CheckComponentNameResponse {
+ string error = 1;
+}
+
+
+// Next available tag: 4
+message CheckFieldNameRequest {
+ string project_name = 2;
+ string field_name = 3;
+}
+
+
+// Next available tag: 2
+message CheckFieldNameResponse {
+ string error = 1;
+}
diff --git a/api/api_proto/projects_pb2.py b/api/api_proto/projects_pb2.py
new file mode 100644
index 0000000..fa8a3fc
--- /dev/null
+++ b/api/api_proto/projects_pb2.py
@@ -0,0 +1,1375 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: api/api_proto/projects.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from api.api_proto import common_pb2 as api_dot_api__proto_dot_common__pb2
+from api.api_proto import project_objects_pb2 as api_dot_api__proto_dot_project__objects__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='api/api_proto/projects.proto',
+ package='monorail',
+ syntax='proto3',
+ serialized_options=None,
+ serialized_pb=_b('\n\x1c\x61pi/api_proto/projects.proto\x12\x08monorail\x1a\x1a\x61pi/api_proto/common.proto\x1a#api/api_proto/project_objects.proto\"<\n\x13ListProjectsRequest\x12\x11\n\tpage_size\x18\x01 \x01(\x05\x12\x12\n\npage_token\x18\x02 \x01(\t\"T\n\x14ListProjectsResponse\x12#\n\x08projects\x18\x01 \x03(\x0b\x32\x11.monorail.Project\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"3\n\x1bListProjectTemplatesRequest\x12\x14\n\x0cproject_name\x18\x02 \x01(\t\"H\n\x1cListProjectTemplatesResponse\x12(\n\ttemplates\x18\x01 \x03(\x0b\x32\x15.monorail.TemplateDef\"(\n\x10GetConfigRequest\x12\x14\n\x0cproject_name\x18\x02 \x01(\t\"4\n\x1cGetPresentationConfigRequest\x12\x14\n\x0cproject_name\x18\x02 \x01(\t\"3\n\x1bGetCustomPermissionsRequest\x12\x14\n\x0cproject_name\x18\x02 \x01(\t\"3\n\x1cGetCustomPermissionsResponse\x12\x13\n\x0bpermissions\x18\x01 \x03(\t\"0\n\x18GetVisibleMembersRequest\x12\x14\n\x0cproject_name\x18\x02 \x01(\t\"h\n\x19GetVisibleMembersResponse\x12$\n\tuser_refs\x18\x01 \x03(\x0b\x32\x11.monorail.UserRef\x12%\n\ngroup_refs\x18\x02 \x03(\x0b\x32\x11.monorail.UserRef\".\n\x16GetLabelOptionsRequest\x12\x14\n\x0cproject_name\x18\x02 \x01(\t\"f\n\x17GetLabelOptionsResponse\x12)\n\rlabel_options\x18\x01 \x03(\x0b\x32\x12.monorail.LabelDef\x12 \n\x18\x65xclusive_label_prefixes\x18\x02 \x03(\t\"+\n\x13ListStatusesRequest\x12\x14\n\x0cproject_name\x18\x02 \x01(\t\"\x8e\x01\n\x14ListStatusesResponse\x12(\n\x0bstatus_defs\x18\x01 \x03(\x0b\x32\x13.monorail.StatusDef\x12\x31\n\x14statuses_offer_merge\x18\x02 \x03(\x0b\x32\x13.monorail.StatusRef\x12\x19\n\x11restrict_to_known\x18\x03 \x01(\x08\"I\n\x15ListComponentsRequest\x12\x14\n\x0cproject_name\x18\x02 \x01(\t\x12\x1a\n\x12include_admin_info\x18\x03 \x01(\x08\"H\n\x16ListComponentsResponse\x12.\n\x0e\x63omponent_defs\x18\x01 \x03(\x0b\x32\x16.monorail.ComponentDef\"c\n\x11ListFieldsRequest\x12\x14\n\x0cproject_name\x18\x02 \x01(\t\x12\x1a\n\x12include_admin_info\x18\x03 \x01(\x08\x12\x1c\n\x14include_user_choices\x18\x04 \x01(\x08\"<\n\x12ListFieldsResponse\x12&\n\nfield_defs\x18\x01 \x03(\x0b\x32\x12.monorail.FieldDef\"2\n\x1aGetProjectStarCountRequest\x12\x14\n\x0cproject_name\x18\x02 \x01(\t\"1\n\x1bGetProjectStarCountResponse\x12\x12\n\nstar_count\x18\x01 \x01(\r\";\n\x12StarProjectRequest\x12\x14\n\x0cproject_name\x18\x02 \x01(\t\x12\x0f\n\x07starred\x18\x03 \x01(\x08\")\n\x13StarProjectResponse\x12\x12\n\nstar_count\x18\x01 \x01(\r\"/\n\x17\x43heckProjectNameRequest\x12\x14\n\x0cproject_name\x18\x02 \x01(\t\")\n\x18\x43heckProjectNameResponse\x12\r\n\x05\x65rror\x18\x01 \x01(\t\"^\n\x19\x43heckComponentNameRequest\x12\x14\n\x0cproject_name\x18\x02 \x01(\t\x12\x13\n\x0bparent_path\x18\x03 \x01(\t\x12\x16\n\x0e\x63omponent_name\x18\x04 \x01(\t\"+\n\x1a\x43heckComponentNameResponse\x12\r\n\x05\x65rror\x18\x01 \x01(\t\"A\n\x15\x43heckFieldNameRequest\x12\x14\n\x0cproject_name\x18\x02 \x01(\t\x12\x12\n\nfield_name\x18\x03 \x01(\t\"\'\n\x16\x43heckFieldNameResponse\x12\r\n\x05\x65rror\x18\x01 \x01(\t2\xc3\n\n\x08Projects\x12O\n\x0cListProjects\x12\x1d.monorail.ListProjectsRequest\x1a\x1e.monorail.ListProjectsResponse\"\x00\x12g\n\x14ListProjectTemplates\x12%.monorail.ListProjectTemplatesRequest\x1a&.monorail.ListProjectTemplatesResponse\"\x00\x12;\n\tGetConfig\x12\x1a.monorail.GetConfigRequest\x1a\x10.monorail.Config\"\x00\x12_\n\x15GetPresentationConfig\x12&.monorail.GetPresentationConfigRequest\x1a\x1c.monorail.PresentationConfig\"\x00\x12g\n\x14GetCustomPermissions\x12%.monorail.GetCustomPermissionsRequest\x1a&.monorail.GetCustomPermissionsResponse\"\x00\x12^\n\x11GetVisibleMembers\x12\".monorail.GetVisibleMembersRequest\x1a#.monorail.GetVisibleMembersResponse\"\x00\x12X\n\x0fGetLabelOptions\x12 .monorail.GetLabelOptionsRequest\x1a!.monorail.GetLabelOptionsResponse\"\x00\x12O\n\x0cListStatuses\x12\x1d.monorail.ListStatusesRequest\x1a\x1e.monorail.ListStatusesResponse\"\x00\x12U\n\x0eListComponents\x12\x1f.monorail.ListComponentsRequest\x1a .monorail.ListComponentsResponse\"\x00\x12I\n\nListFields\x12\x1b.monorail.ListFieldsRequest\x1a\x1c.monorail.ListFieldsResponse\"\x00\x12\x64\n\x13GetProjectStarCount\x12$.monorail.GetProjectStarCountRequest\x1a%.monorail.GetProjectStarCountResponse\"\x00\x12L\n\x0bStarProject\x12\x1c.monorail.StarProjectRequest\x1a\x1d.monorail.StarProjectResponse\"\x00\x12[\n\x10\x43heckProjectName\x12!.monorail.CheckProjectNameRequest\x1a\".monorail.CheckProjectNameResponse\"\x00\x12\x61\n\x12\x43heckComponentName\x12#.monorail.CheckComponentNameRequest\x1a$.monorail.CheckComponentNameResponse\"\x00\x12U\n\x0e\x43heckFieldName\x12\x1f.monorail.CheckFieldNameRequest\x1a .monorail.CheckFieldNameResponse\"\x00\x62\x06proto3')
+ ,
+ dependencies=[api_dot_api__proto_dot_common__pb2.DESCRIPTOR,api_dot_api__proto_dot_project__objects__pb2.DESCRIPTOR,])
+
+
+
+
+_LISTPROJECTSREQUEST = _descriptor.Descriptor(
+ name='ListProjectsRequest',
+ full_name='monorail.ListProjectsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='page_size', full_name='monorail.ListProjectsRequest.page_size', index=0,
+ number=1, type=5, cpp_type=1, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='page_token', full_name='monorail.ListProjectsRequest.page_token', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=107,
+ serialized_end=167,
+)
+
+
+_LISTPROJECTSRESPONSE = _descriptor.Descriptor(
+ name='ListProjectsResponse',
+ full_name='monorail.ListProjectsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='projects', full_name='monorail.ListProjectsResponse.projects', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='next_page_token', full_name='monorail.ListProjectsResponse.next_page_token', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=169,
+ serialized_end=253,
+)
+
+
+_LISTPROJECTTEMPLATESREQUEST = _descriptor.Descriptor(
+ name='ListProjectTemplatesRequest',
+ full_name='monorail.ListProjectTemplatesRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.ListProjectTemplatesRequest.project_name', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=255,
+ serialized_end=306,
+)
+
+
+_LISTPROJECTTEMPLATESRESPONSE = _descriptor.Descriptor(
+ name='ListProjectTemplatesResponse',
+ full_name='monorail.ListProjectTemplatesResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='templates', full_name='monorail.ListProjectTemplatesResponse.templates', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=308,
+ serialized_end=380,
+)
+
+
+_GETCONFIGREQUEST = _descriptor.Descriptor(
+ name='GetConfigRequest',
+ full_name='monorail.GetConfigRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.GetConfigRequest.project_name', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=382,
+ serialized_end=422,
+)
+
+
+_GETPRESENTATIONCONFIGREQUEST = _descriptor.Descriptor(
+ name='GetPresentationConfigRequest',
+ full_name='monorail.GetPresentationConfigRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.GetPresentationConfigRequest.project_name', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=424,
+ serialized_end=476,
+)
+
+
+_GETCUSTOMPERMISSIONSREQUEST = _descriptor.Descriptor(
+ name='GetCustomPermissionsRequest',
+ full_name='monorail.GetCustomPermissionsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.GetCustomPermissionsRequest.project_name', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=478,
+ serialized_end=529,
+)
+
+
+_GETCUSTOMPERMISSIONSRESPONSE = _descriptor.Descriptor(
+ name='GetCustomPermissionsResponse',
+ full_name='monorail.GetCustomPermissionsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='permissions', full_name='monorail.GetCustomPermissionsResponse.permissions', index=0,
+ number=1, type=9, cpp_type=9, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=531,
+ serialized_end=582,
+)
+
+
+_GETVISIBLEMEMBERSREQUEST = _descriptor.Descriptor(
+ name='GetVisibleMembersRequest',
+ full_name='monorail.GetVisibleMembersRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.GetVisibleMembersRequest.project_name', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=584,
+ serialized_end=632,
+)
+
+
+_GETVISIBLEMEMBERSRESPONSE = _descriptor.Descriptor(
+ name='GetVisibleMembersResponse',
+ full_name='monorail.GetVisibleMembersResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='user_refs', full_name='monorail.GetVisibleMembersResponse.user_refs', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='group_refs', full_name='monorail.GetVisibleMembersResponse.group_refs', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=634,
+ serialized_end=738,
+)
+
+
+_GETLABELOPTIONSREQUEST = _descriptor.Descriptor(
+ name='GetLabelOptionsRequest',
+ full_name='monorail.GetLabelOptionsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.GetLabelOptionsRequest.project_name', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=740,
+ serialized_end=786,
+)
+
+
+_GETLABELOPTIONSRESPONSE = _descriptor.Descriptor(
+ name='GetLabelOptionsResponse',
+ full_name='monorail.GetLabelOptionsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='label_options', full_name='monorail.GetLabelOptionsResponse.label_options', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='exclusive_label_prefixes', full_name='monorail.GetLabelOptionsResponse.exclusive_label_prefixes', index=1,
+ number=2, type=9, cpp_type=9, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=788,
+ serialized_end=890,
+)
+
+
+_LISTSTATUSESREQUEST = _descriptor.Descriptor(
+ name='ListStatusesRequest',
+ full_name='monorail.ListStatusesRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.ListStatusesRequest.project_name', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=892,
+ serialized_end=935,
+)
+
+
+_LISTSTATUSESRESPONSE = _descriptor.Descriptor(
+ name='ListStatusesResponse',
+ full_name='monorail.ListStatusesResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='status_defs', full_name='monorail.ListStatusesResponse.status_defs', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='statuses_offer_merge', full_name='monorail.ListStatusesResponse.statuses_offer_merge', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='restrict_to_known', full_name='monorail.ListStatusesResponse.restrict_to_known', index=2,
+ number=3, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=938,
+ serialized_end=1080,
+)
+
+
+_LISTCOMPONENTSREQUEST = _descriptor.Descriptor(
+ name='ListComponentsRequest',
+ full_name='monorail.ListComponentsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.ListComponentsRequest.project_name', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='include_admin_info', full_name='monorail.ListComponentsRequest.include_admin_info', index=1,
+ number=3, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1082,
+ serialized_end=1155,
+)
+
+
+_LISTCOMPONENTSRESPONSE = _descriptor.Descriptor(
+ name='ListComponentsResponse',
+ full_name='monorail.ListComponentsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='component_defs', full_name='monorail.ListComponentsResponse.component_defs', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1157,
+ serialized_end=1229,
+)
+
+
+_LISTFIELDSREQUEST = _descriptor.Descriptor(
+ name='ListFieldsRequest',
+ full_name='monorail.ListFieldsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.ListFieldsRequest.project_name', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='include_admin_info', full_name='monorail.ListFieldsRequest.include_admin_info', index=1,
+ number=3, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='include_user_choices', full_name='monorail.ListFieldsRequest.include_user_choices', index=2,
+ number=4, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1231,
+ serialized_end=1330,
+)
+
+
+_LISTFIELDSRESPONSE = _descriptor.Descriptor(
+ name='ListFieldsResponse',
+ full_name='monorail.ListFieldsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='field_defs', full_name='monorail.ListFieldsResponse.field_defs', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1332,
+ serialized_end=1392,
+)
+
+
+_GETPROJECTSTARCOUNTREQUEST = _descriptor.Descriptor(
+ name='GetProjectStarCountRequest',
+ full_name='monorail.GetProjectStarCountRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.GetProjectStarCountRequest.project_name', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1394,
+ serialized_end=1444,
+)
+
+
+_GETPROJECTSTARCOUNTRESPONSE = _descriptor.Descriptor(
+ name='GetProjectStarCountResponse',
+ full_name='monorail.GetProjectStarCountResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='star_count', full_name='monorail.GetProjectStarCountResponse.star_count', index=0,
+ number=1, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1446,
+ serialized_end=1495,
+)
+
+
+_STARPROJECTREQUEST = _descriptor.Descriptor(
+ name='StarProjectRequest',
+ full_name='monorail.StarProjectRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.StarProjectRequest.project_name', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='starred', full_name='monorail.StarProjectRequest.starred', index=1,
+ number=3, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1497,
+ serialized_end=1556,
+)
+
+
+_STARPROJECTRESPONSE = _descriptor.Descriptor(
+ name='StarProjectResponse',
+ full_name='monorail.StarProjectResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='star_count', full_name='monorail.StarProjectResponse.star_count', index=0,
+ number=1, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1558,
+ serialized_end=1599,
+)
+
+
+_CHECKPROJECTNAMEREQUEST = _descriptor.Descriptor(
+ name='CheckProjectNameRequest',
+ full_name='monorail.CheckProjectNameRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.CheckProjectNameRequest.project_name', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1601,
+ serialized_end=1648,
+)
+
+
+_CHECKPROJECTNAMERESPONSE = _descriptor.Descriptor(
+ name='CheckProjectNameResponse',
+ full_name='monorail.CheckProjectNameResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='error', full_name='monorail.CheckProjectNameResponse.error', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1650,
+ serialized_end=1691,
+)
+
+
+_CHECKCOMPONENTNAMEREQUEST = _descriptor.Descriptor(
+ name='CheckComponentNameRequest',
+ full_name='monorail.CheckComponentNameRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.CheckComponentNameRequest.project_name', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='parent_path', full_name='monorail.CheckComponentNameRequest.parent_path', index=1,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='component_name', full_name='monorail.CheckComponentNameRequest.component_name', index=2,
+ number=4, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1693,
+ serialized_end=1787,
+)
+
+
+_CHECKCOMPONENTNAMERESPONSE = _descriptor.Descriptor(
+ name='CheckComponentNameResponse',
+ full_name='monorail.CheckComponentNameResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='error', full_name='monorail.CheckComponentNameResponse.error', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1789,
+ serialized_end=1832,
+)
+
+
+_CHECKFIELDNAMEREQUEST = _descriptor.Descriptor(
+ name='CheckFieldNameRequest',
+ full_name='monorail.CheckFieldNameRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='project_name', full_name='monorail.CheckFieldNameRequest.project_name', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='field_name', full_name='monorail.CheckFieldNameRequest.field_name', index=1,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1834,
+ serialized_end=1899,
+)
+
+
+_CHECKFIELDNAMERESPONSE = _descriptor.Descriptor(
+ name='CheckFieldNameResponse',
+ full_name='monorail.CheckFieldNameResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='error', full_name='monorail.CheckFieldNameResponse.error', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1901,
+ serialized_end=1940,
+)
+
+_LISTPROJECTSRESPONSE.fields_by_name['projects'].message_type = api_dot_api__proto_dot_project__objects__pb2._PROJECT
+_LISTPROJECTTEMPLATESRESPONSE.fields_by_name['templates'].message_type = api_dot_api__proto_dot_project__objects__pb2._TEMPLATEDEF
+_GETVISIBLEMEMBERSRESPONSE.fields_by_name['user_refs'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_GETVISIBLEMEMBERSRESPONSE.fields_by_name['group_refs'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_GETLABELOPTIONSRESPONSE.fields_by_name['label_options'].message_type = api_dot_api__proto_dot_project__objects__pb2._LABELDEF
+_LISTSTATUSESRESPONSE.fields_by_name['status_defs'].message_type = api_dot_api__proto_dot_project__objects__pb2._STATUSDEF
+_LISTSTATUSESRESPONSE.fields_by_name['statuses_offer_merge'].message_type = api_dot_api__proto_dot_common__pb2._STATUSREF
+_LISTCOMPONENTSRESPONSE.fields_by_name['component_defs'].message_type = api_dot_api__proto_dot_project__objects__pb2._COMPONENTDEF
+_LISTFIELDSRESPONSE.fields_by_name['field_defs'].message_type = api_dot_api__proto_dot_project__objects__pb2._FIELDDEF
+DESCRIPTOR.message_types_by_name['ListProjectsRequest'] = _LISTPROJECTSREQUEST
+DESCRIPTOR.message_types_by_name['ListProjectsResponse'] = _LISTPROJECTSRESPONSE
+DESCRIPTOR.message_types_by_name['ListProjectTemplatesRequest'] = _LISTPROJECTTEMPLATESREQUEST
+DESCRIPTOR.message_types_by_name['ListProjectTemplatesResponse'] = _LISTPROJECTTEMPLATESRESPONSE
+DESCRIPTOR.message_types_by_name['GetConfigRequest'] = _GETCONFIGREQUEST
+DESCRIPTOR.message_types_by_name['GetPresentationConfigRequest'] = _GETPRESENTATIONCONFIGREQUEST
+DESCRIPTOR.message_types_by_name['GetCustomPermissionsRequest'] = _GETCUSTOMPERMISSIONSREQUEST
+DESCRIPTOR.message_types_by_name['GetCustomPermissionsResponse'] = _GETCUSTOMPERMISSIONSRESPONSE
+DESCRIPTOR.message_types_by_name['GetVisibleMembersRequest'] = _GETVISIBLEMEMBERSREQUEST
+DESCRIPTOR.message_types_by_name['GetVisibleMembersResponse'] = _GETVISIBLEMEMBERSRESPONSE
+DESCRIPTOR.message_types_by_name['GetLabelOptionsRequest'] = _GETLABELOPTIONSREQUEST
+DESCRIPTOR.message_types_by_name['GetLabelOptionsResponse'] = _GETLABELOPTIONSRESPONSE
+DESCRIPTOR.message_types_by_name['ListStatusesRequest'] = _LISTSTATUSESREQUEST
+DESCRIPTOR.message_types_by_name['ListStatusesResponse'] = _LISTSTATUSESRESPONSE
+DESCRIPTOR.message_types_by_name['ListComponentsRequest'] = _LISTCOMPONENTSREQUEST
+DESCRIPTOR.message_types_by_name['ListComponentsResponse'] = _LISTCOMPONENTSRESPONSE
+DESCRIPTOR.message_types_by_name['ListFieldsRequest'] = _LISTFIELDSREQUEST
+DESCRIPTOR.message_types_by_name['ListFieldsResponse'] = _LISTFIELDSRESPONSE
+DESCRIPTOR.message_types_by_name['GetProjectStarCountRequest'] = _GETPROJECTSTARCOUNTREQUEST
+DESCRIPTOR.message_types_by_name['GetProjectStarCountResponse'] = _GETPROJECTSTARCOUNTRESPONSE
+DESCRIPTOR.message_types_by_name['StarProjectRequest'] = _STARPROJECTREQUEST
+DESCRIPTOR.message_types_by_name['StarProjectResponse'] = _STARPROJECTRESPONSE
+DESCRIPTOR.message_types_by_name['CheckProjectNameRequest'] = _CHECKPROJECTNAMEREQUEST
+DESCRIPTOR.message_types_by_name['CheckProjectNameResponse'] = _CHECKPROJECTNAMERESPONSE
+DESCRIPTOR.message_types_by_name['CheckComponentNameRequest'] = _CHECKCOMPONENTNAMEREQUEST
+DESCRIPTOR.message_types_by_name['CheckComponentNameResponse'] = _CHECKCOMPONENTNAMERESPONSE
+DESCRIPTOR.message_types_by_name['CheckFieldNameRequest'] = _CHECKFIELDNAMEREQUEST
+DESCRIPTOR.message_types_by_name['CheckFieldNameResponse'] = _CHECKFIELDNAMERESPONSE
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+ListProjectsRequest = _reflection.GeneratedProtocolMessageType('ListProjectsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _LISTPROJECTSREQUEST,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListProjectsRequest)
+ ))
+_sym_db.RegisterMessage(ListProjectsRequest)
+
+ListProjectsResponse = _reflection.GeneratedProtocolMessageType('ListProjectsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _LISTPROJECTSRESPONSE,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListProjectsResponse)
+ ))
+_sym_db.RegisterMessage(ListProjectsResponse)
+
+ListProjectTemplatesRequest = _reflection.GeneratedProtocolMessageType('ListProjectTemplatesRequest', (_message.Message,), dict(
+ DESCRIPTOR = _LISTPROJECTTEMPLATESREQUEST,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListProjectTemplatesRequest)
+ ))
+_sym_db.RegisterMessage(ListProjectTemplatesRequest)
+
+ListProjectTemplatesResponse = _reflection.GeneratedProtocolMessageType('ListProjectTemplatesResponse', (_message.Message,), dict(
+ DESCRIPTOR = _LISTPROJECTTEMPLATESRESPONSE,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListProjectTemplatesResponse)
+ ))
+_sym_db.RegisterMessage(ListProjectTemplatesResponse)
+
+GetConfigRequest = _reflection.GeneratedProtocolMessageType('GetConfigRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETCONFIGREQUEST,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetConfigRequest)
+ ))
+_sym_db.RegisterMessage(GetConfigRequest)
+
+GetPresentationConfigRequest = _reflection.GeneratedProtocolMessageType('GetPresentationConfigRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETPRESENTATIONCONFIGREQUEST,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetPresentationConfigRequest)
+ ))
+_sym_db.RegisterMessage(GetPresentationConfigRequest)
+
+GetCustomPermissionsRequest = _reflection.GeneratedProtocolMessageType('GetCustomPermissionsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETCUSTOMPERMISSIONSREQUEST,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetCustomPermissionsRequest)
+ ))
+_sym_db.RegisterMessage(GetCustomPermissionsRequest)
+
+GetCustomPermissionsResponse = _reflection.GeneratedProtocolMessageType('GetCustomPermissionsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _GETCUSTOMPERMISSIONSRESPONSE,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetCustomPermissionsResponse)
+ ))
+_sym_db.RegisterMessage(GetCustomPermissionsResponse)
+
+GetVisibleMembersRequest = _reflection.GeneratedProtocolMessageType('GetVisibleMembersRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETVISIBLEMEMBERSREQUEST,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetVisibleMembersRequest)
+ ))
+_sym_db.RegisterMessage(GetVisibleMembersRequest)
+
+GetVisibleMembersResponse = _reflection.GeneratedProtocolMessageType('GetVisibleMembersResponse', (_message.Message,), dict(
+ DESCRIPTOR = _GETVISIBLEMEMBERSRESPONSE,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetVisibleMembersResponse)
+ ))
+_sym_db.RegisterMessage(GetVisibleMembersResponse)
+
+GetLabelOptionsRequest = _reflection.GeneratedProtocolMessageType('GetLabelOptionsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETLABELOPTIONSREQUEST,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetLabelOptionsRequest)
+ ))
+_sym_db.RegisterMessage(GetLabelOptionsRequest)
+
+GetLabelOptionsResponse = _reflection.GeneratedProtocolMessageType('GetLabelOptionsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _GETLABELOPTIONSRESPONSE,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetLabelOptionsResponse)
+ ))
+_sym_db.RegisterMessage(GetLabelOptionsResponse)
+
+ListStatusesRequest = _reflection.GeneratedProtocolMessageType('ListStatusesRequest', (_message.Message,), dict(
+ DESCRIPTOR = _LISTSTATUSESREQUEST,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListStatusesRequest)
+ ))
+_sym_db.RegisterMessage(ListStatusesRequest)
+
+ListStatusesResponse = _reflection.GeneratedProtocolMessageType('ListStatusesResponse', (_message.Message,), dict(
+ DESCRIPTOR = _LISTSTATUSESRESPONSE,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListStatusesResponse)
+ ))
+_sym_db.RegisterMessage(ListStatusesResponse)
+
+ListComponentsRequest = _reflection.GeneratedProtocolMessageType('ListComponentsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _LISTCOMPONENTSREQUEST,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListComponentsRequest)
+ ))
+_sym_db.RegisterMessage(ListComponentsRequest)
+
+ListComponentsResponse = _reflection.GeneratedProtocolMessageType('ListComponentsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _LISTCOMPONENTSRESPONSE,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListComponentsResponse)
+ ))
+_sym_db.RegisterMessage(ListComponentsResponse)
+
+ListFieldsRequest = _reflection.GeneratedProtocolMessageType('ListFieldsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _LISTFIELDSREQUEST,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListFieldsRequest)
+ ))
+_sym_db.RegisterMessage(ListFieldsRequest)
+
+ListFieldsResponse = _reflection.GeneratedProtocolMessageType('ListFieldsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _LISTFIELDSRESPONSE,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListFieldsResponse)
+ ))
+_sym_db.RegisterMessage(ListFieldsResponse)
+
+GetProjectStarCountRequest = _reflection.GeneratedProtocolMessageType('GetProjectStarCountRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETPROJECTSTARCOUNTREQUEST,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetProjectStarCountRequest)
+ ))
+_sym_db.RegisterMessage(GetProjectStarCountRequest)
+
+GetProjectStarCountResponse = _reflection.GeneratedProtocolMessageType('GetProjectStarCountResponse', (_message.Message,), dict(
+ DESCRIPTOR = _GETPROJECTSTARCOUNTRESPONSE,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetProjectStarCountResponse)
+ ))
+_sym_db.RegisterMessage(GetProjectStarCountResponse)
+
+StarProjectRequest = _reflection.GeneratedProtocolMessageType('StarProjectRequest', (_message.Message,), dict(
+ DESCRIPTOR = _STARPROJECTREQUEST,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.StarProjectRequest)
+ ))
+_sym_db.RegisterMessage(StarProjectRequest)
+
+StarProjectResponse = _reflection.GeneratedProtocolMessageType('StarProjectResponse', (_message.Message,), dict(
+ DESCRIPTOR = _STARPROJECTRESPONSE,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.StarProjectResponse)
+ ))
+_sym_db.RegisterMessage(StarProjectResponse)
+
+CheckProjectNameRequest = _reflection.GeneratedProtocolMessageType('CheckProjectNameRequest', (_message.Message,), dict(
+ DESCRIPTOR = _CHECKPROJECTNAMEREQUEST,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.CheckProjectNameRequest)
+ ))
+_sym_db.RegisterMessage(CheckProjectNameRequest)
+
+CheckProjectNameResponse = _reflection.GeneratedProtocolMessageType('CheckProjectNameResponse', (_message.Message,), dict(
+ DESCRIPTOR = _CHECKPROJECTNAMERESPONSE,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.CheckProjectNameResponse)
+ ))
+_sym_db.RegisterMessage(CheckProjectNameResponse)
+
+CheckComponentNameRequest = _reflection.GeneratedProtocolMessageType('CheckComponentNameRequest', (_message.Message,), dict(
+ DESCRIPTOR = _CHECKCOMPONENTNAMEREQUEST,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.CheckComponentNameRequest)
+ ))
+_sym_db.RegisterMessage(CheckComponentNameRequest)
+
+CheckComponentNameResponse = _reflection.GeneratedProtocolMessageType('CheckComponentNameResponse', (_message.Message,), dict(
+ DESCRIPTOR = _CHECKCOMPONENTNAMERESPONSE,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.CheckComponentNameResponse)
+ ))
+_sym_db.RegisterMessage(CheckComponentNameResponse)
+
+CheckFieldNameRequest = _reflection.GeneratedProtocolMessageType('CheckFieldNameRequest', (_message.Message,), dict(
+ DESCRIPTOR = _CHECKFIELDNAMEREQUEST,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.CheckFieldNameRequest)
+ ))
+_sym_db.RegisterMessage(CheckFieldNameRequest)
+
+CheckFieldNameResponse = _reflection.GeneratedProtocolMessageType('CheckFieldNameResponse', (_message.Message,), dict(
+ DESCRIPTOR = _CHECKFIELDNAMERESPONSE,
+ __module__ = 'api.api_proto.projects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.CheckFieldNameResponse)
+ ))
+_sym_db.RegisterMessage(CheckFieldNameResponse)
+
+
+
+_PROJECTS = _descriptor.ServiceDescriptor(
+ name='Projects',
+ full_name='monorail.Projects',
+ file=DESCRIPTOR,
+ index=0,
+ serialized_options=None,
+ serialized_start=1943,
+ serialized_end=3290,
+ methods=[
+ _descriptor.MethodDescriptor(
+ name='ListProjects',
+ full_name='monorail.Projects.ListProjects',
+ index=0,
+ containing_service=None,
+ input_type=_LISTPROJECTSREQUEST,
+ output_type=_LISTPROJECTSRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='ListProjectTemplates',
+ full_name='monorail.Projects.ListProjectTemplates',
+ index=1,
+ containing_service=None,
+ input_type=_LISTPROJECTTEMPLATESREQUEST,
+ output_type=_LISTPROJECTTEMPLATESRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='GetConfig',
+ full_name='monorail.Projects.GetConfig',
+ index=2,
+ containing_service=None,
+ input_type=_GETCONFIGREQUEST,
+ output_type=api_dot_api__proto_dot_project__objects__pb2._CONFIG,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='GetPresentationConfig',
+ full_name='monorail.Projects.GetPresentationConfig',
+ index=3,
+ containing_service=None,
+ input_type=_GETPRESENTATIONCONFIGREQUEST,
+ output_type=api_dot_api__proto_dot_project__objects__pb2._PRESENTATIONCONFIG,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='GetCustomPermissions',
+ full_name='monorail.Projects.GetCustomPermissions',
+ index=4,
+ containing_service=None,
+ input_type=_GETCUSTOMPERMISSIONSREQUEST,
+ output_type=_GETCUSTOMPERMISSIONSRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='GetVisibleMembers',
+ full_name='monorail.Projects.GetVisibleMembers',
+ index=5,
+ containing_service=None,
+ input_type=_GETVISIBLEMEMBERSREQUEST,
+ output_type=_GETVISIBLEMEMBERSRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='GetLabelOptions',
+ full_name='monorail.Projects.GetLabelOptions',
+ index=6,
+ containing_service=None,
+ input_type=_GETLABELOPTIONSREQUEST,
+ output_type=_GETLABELOPTIONSRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='ListStatuses',
+ full_name='monorail.Projects.ListStatuses',
+ index=7,
+ containing_service=None,
+ input_type=_LISTSTATUSESREQUEST,
+ output_type=_LISTSTATUSESRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='ListComponents',
+ full_name='monorail.Projects.ListComponents',
+ index=8,
+ containing_service=None,
+ input_type=_LISTCOMPONENTSREQUEST,
+ output_type=_LISTCOMPONENTSRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='ListFields',
+ full_name='monorail.Projects.ListFields',
+ index=9,
+ containing_service=None,
+ input_type=_LISTFIELDSREQUEST,
+ output_type=_LISTFIELDSRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='GetProjectStarCount',
+ full_name='monorail.Projects.GetProjectStarCount',
+ index=10,
+ containing_service=None,
+ input_type=_GETPROJECTSTARCOUNTREQUEST,
+ output_type=_GETPROJECTSTARCOUNTRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='StarProject',
+ full_name='monorail.Projects.StarProject',
+ index=11,
+ containing_service=None,
+ input_type=_STARPROJECTREQUEST,
+ output_type=_STARPROJECTRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='CheckProjectName',
+ full_name='monorail.Projects.CheckProjectName',
+ index=12,
+ containing_service=None,
+ input_type=_CHECKPROJECTNAMEREQUEST,
+ output_type=_CHECKPROJECTNAMERESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='CheckComponentName',
+ full_name='monorail.Projects.CheckComponentName',
+ index=13,
+ containing_service=None,
+ input_type=_CHECKCOMPONENTNAMEREQUEST,
+ output_type=_CHECKCOMPONENTNAMERESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='CheckFieldName',
+ full_name='monorail.Projects.CheckFieldName',
+ index=14,
+ containing_service=None,
+ input_type=_CHECKFIELDNAMEREQUEST,
+ output_type=_CHECKFIELDNAMERESPONSE,
+ serialized_options=None,
+ ),
+])
+_sym_db.RegisterServiceDescriptor(_PROJECTS)
+
+DESCRIPTOR.services_by_name['Projects'] = _PROJECTS
+
+# @@protoc_insertion_point(module_scope)
diff --git a/api/api_proto/projects_prpc_pb2.py b/api/api_proto/projects_prpc_pb2.py
new file mode 100644
index 0000000..fee63f3
--- /dev/null
+++ b/api/api_proto/projects_prpc_pb2.py
@@ -0,0 +1,313 @@
+# Generated by the pRPC protocol buffer compiler plugin. DO NOT EDIT!
+# source: api/api_proto/projects.proto
+
+import base64
+import zlib
+
+from google.protobuf import descriptor_pb2
+
+# Includes description of the api/api_proto/projects.proto and all of its transitive
+# dependencies. Includes source code info.
+FILE_DESCRIPTOR_SET = descriptor_pb2.FileDescriptorSet()
+FILE_DESCRIPTOR_SET.ParseFromString(zlib.decompress(base64.b64decode(
+ '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'
+ 'dZ5C+ki+emubbJz8bwoBFG4=')))
+_INDEX = {
+ f.name: {
+ 'descriptor': f,
+ 'services': {s.name: s for s in f.service},
+ }
+ for f in FILE_DESCRIPTOR_SET.file
+}
+
+
+ProjectsServiceDescription = {
+ 'file_descriptor_set': FILE_DESCRIPTOR_SET,
+ 'file_descriptor': _INDEX[u'api/api_proto/projects.proto']['descriptor'],
+ 'service_descriptor': _INDEX[u'api/api_proto/projects.proto']['services'][u'Projects'],
+}
diff --git a/api/api_proto/sitewide.proto b/api/api_proto/sitewide.proto
new file mode 100644
index 0000000..f378ad5
--- /dev/null
+++ b/api/api_proto/sitewide.proto
@@ -0,0 +1,40 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+syntax = "proto3";
+
+package monorail;
+
+service Sitewide {
+ rpc RefreshToken (RefreshTokenRequest) returns (RefreshTokenResponse) {}
+ rpc GetServerStatus (GetServerStatusRequest) returns (GetServerStatusResponse) {}
+}
+
+
+// Next available tag: 4
+message RefreshTokenRequest {
+ string token = 2;
+ string token_path = 3;
+}
+
+
+// Next available tag: 3
+message RefreshTokenResponse {
+ string token = 1;
+ uint32 token_expires_sec = 2;
+}
+
+
+// Next available tag: 1
+message GetServerStatusRequest {
+}
+
+
+// Next available tag: 4
+message GetServerStatusResponse {
+ string banner_message = 1;
+ fixed32 banner_time = 2;
+ bool read_only = 3;
+}
diff --git a/api/api_proto/sitewide_pb2.py b/api/api_proto/sitewide_pb2.py
new file mode 100644
index 0000000..acb7e88
--- /dev/null
+++ b/api/api_proto/sitewide_pb2.py
@@ -0,0 +1,240 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: api/api_proto/sitewide.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='api/api_proto/sitewide.proto',
+ package='monorail',
+ syntax='proto3',
+ serialized_options=None,
+ serialized_pb=_b('\n\x1c\x61pi/api_proto/sitewide.proto\x12\x08monorail\"8\n\x13RefreshTokenRequest\x12\r\n\x05token\x18\x02 \x01(\t\x12\x12\n\ntoken_path\x18\x03 \x01(\t\"@\n\x14RefreshTokenResponse\x12\r\n\x05token\x18\x01 \x01(\t\x12\x19\n\x11token_expires_sec\x18\x02 \x01(\r\"\x18\n\x16GetServerStatusRequest\"Y\n\x17GetServerStatusResponse\x12\x16\n\x0e\x62\x61nner_message\x18\x01 \x01(\t\x12\x13\n\x0b\x62\x61nner_time\x18\x02 \x01(\x07\x12\x11\n\tread_only\x18\x03 \x01(\x08\x32\xb5\x01\n\x08Sitewide\x12O\n\x0cRefreshToken\x12\x1d.monorail.RefreshTokenRequest\x1a\x1e.monorail.RefreshTokenResponse\"\x00\x12X\n\x0fGetServerStatus\x12 .monorail.GetServerStatusRequest\x1a!.monorail.GetServerStatusResponse\"\x00\x62\x06proto3')
+)
+
+
+
+
+_REFRESHTOKENREQUEST = _descriptor.Descriptor(
+ name='RefreshTokenRequest',
+ full_name='monorail.RefreshTokenRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='token', full_name='monorail.RefreshTokenRequest.token', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='token_path', full_name='monorail.RefreshTokenRequest.token_path', index=1,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=42,
+ serialized_end=98,
+)
+
+
+_REFRESHTOKENRESPONSE = _descriptor.Descriptor(
+ name='RefreshTokenResponse',
+ full_name='monorail.RefreshTokenResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='token', full_name='monorail.RefreshTokenResponse.token', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='token_expires_sec', full_name='monorail.RefreshTokenResponse.token_expires_sec', index=1,
+ number=2, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=100,
+ serialized_end=164,
+)
+
+
+_GETSERVERSTATUSREQUEST = _descriptor.Descriptor(
+ name='GetServerStatusRequest',
+ full_name='monorail.GetServerStatusRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=166,
+ serialized_end=190,
+)
+
+
+_GETSERVERSTATUSRESPONSE = _descriptor.Descriptor(
+ name='GetServerStatusResponse',
+ full_name='monorail.GetServerStatusResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='banner_message', full_name='monorail.GetServerStatusResponse.banner_message', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='banner_time', full_name='monorail.GetServerStatusResponse.banner_time', index=1,
+ number=2, type=7, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='read_only', full_name='monorail.GetServerStatusResponse.read_only', index=2,
+ number=3, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=192,
+ serialized_end=281,
+)
+
+DESCRIPTOR.message_types_by_name['RefreshTokenRequest'] = _REFRESHTOKENREQUEST
+DESCRIPTOR.message_types_by_name['RefreshTokenResponse'] = _REFRESHTOKENRESPONSE
+DESCRIPTOR.message_types_by_name['GetServerStatusRequest'] = _GETSERVERSTATUSREQUEST
+DESCRIPTOR.message_types_by_name['GetServerStatusResponse'] = _GETSERVERSTATUSRESPONSE
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+RefreshTokenRequest = _reflection.GeneratedProtocolMessageType('RefreshTokenRequest', (_message.Message,), dict(
+ DESCRIPTOR = _REFRESHTOKENREQUEST,
+ __module__ = 'api.api_proto.sitewide_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.RefreshTokenRequest)
+ ))
+_sym_db.RegisterMessage(RefreshTokenRequest)
+
+RefreshTokenResponse = _reflection.GeneratedProtocolMessageType('RefreshTokenResponse', (_message.Message,), dict(
+ DESCRIPTOR = _REFRESHTOKENRESPONSE,
+ __module__ = 'api.api_proto.sitewide_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.RefreshTokenResponse)
+ ))
+_sym_db.RegisterMessage(RefreshTokenResponse)
+
+GetServerStatusRequest = _reflection.GeneratedProtocolMessageType('GetServerStatusRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETSERVERSTATUSREQUEST,
+ __module__ = 'api.api_proto.sitewide_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetServerStatusRequest)
+ ))
+_sym_db.RegisterMessage(GetServerStatusRequest)
+
+GetServerStatusResponse = _reflection.GeneratedProtocolMessageType('GetServerStatusResponse', (_message.Message,), dict(
+ DESCRIPTOR = _GETSERVERSTATUSRESPONSE,
+ __module__ = 'api.api_proto.sitewide_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetServerStatusResponse)
+ ))
+_sym_db.RegisterMessage(GetServerStatusResponse)
+
+
+
+_SITEWIDE = _descriptor.ServiceDescriptor(
+ name='Sitewide',
+ full_name='monorail.Sitewide',
+ file=DESCRIPTOR,
+ index=0,
+ serialized_options=None,
+ serialized_start=284,
+ serialized_end=465,
+ methods=[
+ _descriptor.MethodDescriptor(
+ name='RefreshToken',
+ full_name='monorail.Sitewide.RefreshToken',
+ index=0,
+ containing_service=None,
+ input_type=_REFRESHTOKENREQUEST,
+ output_type=_REFRESHTOKENRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='GetServerStatus',
+ full_name='monorail.Sitewide.GetServerStatus',
+ index=1,
+ containing_service=None,
+ input_type=_GETSERVERSTATUSREQUEST,
+ output_type=_GETSERVERSTATUSRESPONSE,
+ serialized_options=None,
+ ),
+])
+_sym_db.RegisterServiceDescriptor(_SITEWIDE)
+
+DESCRIPTOR.services_by_name['Sitewide'] = _SITEWIDE
+
+# @@protoc_insertion_point(module_scope)
diff --git a/api/api_proto/sitewide_prpc_pb2.py b/api/api_proto/sitewide_prpc_pb2.py
new file mode 100644
index 0000000..6d999b4
--- /dev/null
+++ b/api/api_proto/sitewide_prpc_pb2.py
@@ -0,0 +1,42 @@
+# Generated by the pRPC protocol buffer compiler plugin. DO NOT EDIT!
+# source: api/api_proto/sitewide.proto
+
+import base64
+import zlib
+
+from google.protobuf import descriptor_pb2
+
+# Includes description of the api/api_proto/sitewide.proto and all of its transitive
+# dependencies. Includes source code info.
+FILE_DESCRIPTOR_SET = descriptor_pb2.FileDescriptorSet()
+FILE_DESCRIPTOR_SET.ParseFromString(zlib.decompress(base64.b64decode(
+ 'eJx9lV1z2kYUhrUrgaUDTmCxg8BfGwxOpjOGxulFJnep63bqaeMOuDO5YwSsQRPQUmlx45v+pt'
+ '7017T3/Rs9u1olaRvnghm95+M9zzmCAf6swn60jgf4Ga9TqeQgi5X4NZ6JvpHMX8lEplG87FxC'
+ 'YyhuUpEtruVbkQzFLxuRKbYDJaV1SDl5GgxzwQ4AzMN4HalF6JpUYCI/YaDzBnb+7ZWtZZKJD2'
+ 'bkY7MvoJ6biXfrGJvGmZiacdvDhyZxkcdHYtoJ4dF3Qo1EeivSkYrUJrOgnd+g+b+MHduDB5Mo'
+ 'SUQ6Xoksi+bCzt/Ooz/mQXYEFVum4pUwBFtDyEPXGGF7EKQimo1lsrwzS/tDXweuUJ/9QcAf2e'
+ 'OyK6h+fAB20C/u3P/EkduH96XzBToOewMP/7Md4x+aPn2S9uPPVBTOl7/7UGZeyXlC4G8CpMrc'
+ 'ksPO/iL8XK7v0ni+UPzsy2cv+PVC8PNFKlfxZsVfbdRCplmfv1ouuSnKOGLrCbM+8J8zweUNV4'
+ 's445ncpFPBp3ImOMq5RIhEzPjkjkf869E3p5m6Wwrgy3gqkAibIsWnUcIngt/ITTLjcYJBwX/4'
+ '/vzi9eiC38RLdE95pIAvlFpnLweDmbgVS7kWiDSXcr4U/alcDTCQnObzB9Y+G0yyGYAPhDJ3y6'
+ '8BAC07zAucKsFnt+wQ5gYYr4BXdqjDXKCXUIWSFpjCWxUKDWDnSaFcVGff2jYsrNCRTRGtyruF'
+ 'wrZK87RQ2FZ5cQXHQD2kqDkN0m7y1+Kd4tEtvrdogruqaP6SfwUaz9MMNX9Pz/EMXp02YBtKWn'
+ 'jMq9PagbbWsqSTfqGwrx48KBSOrdeZdcEUo6F1IejCaL1hK0lJJwsXvQoL3ufQhT1qGnjCvKbT'
+ 'vg/+eQ6v25v+vhlLNHxo4YmBD2nz0FgTAx/ascTAhxaeGPjQwhMN36JH1kXDt2jYsJUavvXeRU'
+ '9vBe1CoUvr4NDAU+YdOkf3wT/L4fWkQz9vcJl3jD+Yz78qFxuO/SPD6eptu3TfcLpm2y49fmxY'
+ 'XLNt13K6Zttu0CwUcnbbe9YFUz3ati562x7t7ttKvW2PBoXSpbBbKHTphS3rgl/BE7prXSi6nN'
+ 'Be21bSkk6WC4UuJ1u1QqHLSWNnUjb/Hc//AbuGQxI=')))
+_INDEX = {
+ f.name: {
+ 'descriptor': f,
+ 'services': {s.name: s for s in f.service},
+ }
+ for f in FILE_DESCRIPTOR_SET.file
+}
+
+
+SitewideServiceDescription = {
+ 'file_descriptor_set': FILE_DESCRIPTOR_SET,
+ 'file_descriptor': _INDEX[u'api/api_proto/sitewide.proto']['descriptor'],
+ 'service_descriptor': _INDEX[u'api/api_proto/sitewide.proto']['services'][u'Sitewide'],
+}
diff --git a/api/api_proto/user_objects.proto b/api/api_proto/user_objects.proto
new file mode 100644
index 0000000..20f0eed
--- /dev/null
+++ b/api/api_proto/user_objects.proto
@@ -0,0 +1,42 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+// This file defines protobufs for issues and related business
+// objects, e.g., field values, comments, and attachments.
+
+syntax = "proto3";
+
+import "api/api_proto/common.proto";
+
+package monorail;
+
+// TODO(jojwang): monorail:1701, fill User with all info necessary for
+// creating a user profile page.
+// Next available tag: 7
+message User {
+ string display_name = 1;
+ int64 user_id = 2;
+ bool is_site_admin = 3;
+ string availability = 4;
+ UserRef linked_parent_ref = 5;
+ repeated UserRef linked_child_refs = 6;
+}
+
+
+// Next available tag: 3
+message UserPrefValue {
+ string name = 1;
+ string value = 2;
+}
+
+
+// Next available tag: 6
+message UserProjects {
+ UserRef user_ref = 1;
+ repeated string owner_of = 2;
+ repeated string member_of = 3;
+ repeated string contributor_to = 4;
+ repeated string starred_projects = 5;
+}
diff --git a/api/api_proto/user_objects_pb2.py b/api/api_proto/user_objects_pb2.py
new file mode 100644
index 0000000..c4e09f1
--- /dev/null
+++ b/api/api_proto/user_objects_pb2.py
@@ -0,0 +1,222 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: api/api_proto/user_objects.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from api.api_proto import common_pb2 as api_dot_api__proto_dot_common__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='api/api_proto/user_objects.proto',
+ package='monorail',
+ syntax='proto3',
+ serialized_options=None,
+ serialized_pb=_b('\n api/api_proto/user_objects.proto\x12\x08monorail\x1a\x1a\x61pi/api_proto/common.proto\"\xb6\x01\n\x04User\x12\x14\n\x0c\x64isplay_name\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\x03\x12\x15\n\ris_site_admin\x18\x03 \x01(\x08\x12\x14\n\x0c\x61vailability\x18\x04 \x01(\t\x12,\n\x11linked_parent_ref\x18\x05 \x01(\x0b\x32\x11.monorail.UserRef\x12,\n\x11linked_child_refs\x18\x06 \x03(\x0b\x32\x11.monorail.UserRef\",\n\rUserPrefValue\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\x8a\x01\n\x0cUserProjects\x12#\n\x08user_ref\x18\x01 \x01(\x0b\x32\x11.monorail.UserRef\x12\x10\n\x08owner_of\x18\x02 \x03(\t\x12\x11\n\tmember_of\x18\x03 \x03(\t\x12\x16\n\x0e\x63ontributor_to\x18\x04 \x03(\t\x12\x18\n\x10starred_projects\x18\x05 \x03(\tb\x06proto3')
+ ,
+ dependencies=[api_dot_api__proto_dot_common__pb2.DESCRIPTOR,])
+
+
+
+
+_USER = _descriptor.Descriptor(
+ name='User',
+ full_name='monorail.User',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='display_name', full_name='monorail.User.display_name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='user_id', full_name='monorail.User.user_id', index=1,
+ number=2, type=3, cpp_type=2, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='is_site_admin', full_name='monorail.User.is_site_admin', index=2,
+ number=3, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='availability', full_name='monorail.User.availability', index=3,
+ number=4, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='linked_parent_ref', full_name='monorail.User.linked_parent_ref', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='linked_child_refs', full_name='monorail.User.linked_child_refs', index=5,
+ number=6, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=75,
+ serialized_end=257,
+)
+
+
+_USERPREFVALUE = _descriptor.Descriptor(
+ name='UserPrefValue',
+ full_name='monorail.UserPrefValue',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='name', full_name='monorail.UserPrefValue.name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='value', full_name='monorail.UserPrefValue.value', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=259,
+ serialized_end=303,
+)
+
+
+_USERPROJECTS = _descriptor.Descriptor(
+ name='UserProjects',
+ full_name='monorail.UserProjects',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='user_ref', full_name='monorail.UserProjects.user_ref', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='owner_of', full_name='monorail.UserProjects.owner_of', index=1,
+ number=2, type=9, cpp_type=9, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='member_of', full_name='monorail.UserProjects.member_of', index=2,
+ number=3, type=9, cpp_type=9, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='contributor_to', full_name='monorail.UserProjects.contributor_to', index=3,
+ number=4, type=9, cpp_type=9, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='starred_projects', full_name='monorail.UserProjects.starred_projects', index=4,
+ number=5, type=9, cpp_type=9, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=306,
+ serialized_end=444,
+)
+
+_USER.fields_by_name['linked_parent_ref'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_USER.fields_by_name['linked_child_refs'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_USERPROJECTS.fields_by_name['user_ref'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+DESCRIPTOR.message_types_by_name['User'] = _USER
+DESCRIPTOR.message_types_by_name['UserPrefValue'] = _USERPREFVALUE
+DESCRIPTOR.message_types_by_name['UserProjects'] = _USERPROJECTS
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+User = _reflection.GeneratedProtocolMessageType('User', (_message.Message,), dict(
+ DESCRIPTOR = _USER,
+ __module__ = 'api.api_proto.user_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.User)
+ ))
+_sym_db.RegisterMessage(User)
+
+UserPrefValue = _reflection.GeneratedProtocolMessageType('UserPrefValue', (_message.Message,), dict(
+ DESCRIPTOR = _USERPREFVALUE,
+ __module__ = 'api.api_proto.user_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.UserPrefValue)
+ ))
+_sym_db.RegisterMessage(UserPrefValue)
+
+UserProjects = _reflection.GeneratedProtocolMessageType('UserProjects', (_message.Message,), dict(
+ DESCRIPTOR = _USERPROJECTS,
+ __module__ = 'api.api_proto.user_objects_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.UserProjects)
+ ))
+_sym_db.RegisterMessage(UserProjects)
+
+
+# @@protoc_insertion_point(module_scope)
diff --git a/api/api_proto/users.proto b/api/api_proto/users.proto
new file mode 100644
index 0000000..574dccd
--- /dev/null
+++ b/api/api_proto/users.proto
@@ -0,0 +1,193 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+syntax = "proto3";
+
+package monorail;
+
+import "api/api_proto/user_objects.proto";
+import "api/api_proto/common.proto";
+
+service Users {
+ rpc GetUser (GetUserRequest) returns (User) {}
+ rpc ListReferencedUsers (ListReferencedUsersRequest) returns (ListReferencedUsersResponse) {}
+ rpc GetMemberships (GetMembershipsRequest) returns (GetMembershipsResponse) {}
+ rpc GetSavedQueries (GetSavedQueriesRequest) returns (GetSavedQueriesResponse) {}
+ rpc GetUserStarCount (GetUserStarCountRequest) returns (GetUserStarCountResponse) {}
+ rpc StarUser (StarUserRequest) returns (StarUserResponse) {}
+ rpc GetUserPrefs (GetUserPrefsRequest) returns (GetUserPrefsResponse) {}
+ rpc SetUserPrefs (SetUserPrefsRequest) returns (SetUserPrefsResponse) {}
+ // TODO(jrobbins): Merge this into SetUserPrefs.
+ rpc SetExpandPermsPreference (SetExpandPermsPreferenceRequest) returns (SetExpandPermsPreferenceResponse) {}
+ rpc InviteLinkedParent (InviteLinkedParentRequest) returns (InviteLinkedParentResponse) {}
+ rpc AcceptLinkedChild (AcceptLinkedChildRequest) returns (AcceptLinkedChildResponse) {}
+ rpc UnlinkAccounts (UnlinkAccountsRequest) returns (UnlinkAccountsResponse) {}
+ rpc GetUsersProjects (GetUsersProjectsRequest) returns (GetUsersProjectsResponse) {}
+ rpc ExpungeUser (ExpungeUserRequest) returns (ExpungeUserResponse) {}
+}
+
+
+// Next available tag: 4
+message ListReferencedUsersRequest {
+ // emails is deprecated. Use user_refs instead.
+ repeated string emails = 2;
+ repeated UserRef user_refs = 3;
+}
+
+
+message ListReferencedUsersResponse {
+ repeated User users = 1;
+}
+
+
+// Next available tag: 3
+message GetUserRequest {
+ UserRef user_ref = 2;
+}
+
+
+// Next available tag: 3
+message GetMembershipsRequest {
+ UserRef user_ref = 2;
+}
+
+
+// Next available tag: 2
+message GetMembershipsResponse {
+ repeated UserRef group_refs = 1;
+}
+
+
+// Next available tag: 3
+message GetSavedQueriesRequest {
+ UserRef user_ref = 2;
+}
+
+
+// Next available tag: 2
+message GetSavedQueriesResponse {
+ repeated SavedQuery saved_queries = 1;
+}
+
+// Next available tag: 3
+message GetUserStarCountRequest {
+ UserRef user_ref = 2;
+}
+
+
+// Next available tag: 2
+message GetUserStarCountResponse {
+ uint32 star_count = 1;
+}
+
+
+// Next available tag: 4
+message StarUserRequest {
+ UserRef user_ref = 2;
+ bool starred = 3;
+}
+
+
+// Next available tag: 2
+message StarUserResponse {
+ uint32 star_count = 1;
+}
+
+
+// Next available tag: 3
+message SetExpandPermsPreferenceRequest {
+ bool expand_perms = 2;
+}
+
+
+// Next available tag: 1
+message SetExpandPermsPreferenceResponse {
+}
+
+
+// Next available tag: 3
+message GetUserPrefsRequest {
+ // Site admins may get prefs for specific users. Otherwise, it gets
+ // prefs for the signed-in user.
+ UserRef user_ref = 2;
+}
+
+
+// Next available tag: 2
+message GetUserPrefsResponse {
+ repeated UserPrefValue prefs = 1;
+}
+
+
+// Next available tag: 5
+message SetUserPrefsRequest {
+ // Site admins may set prefs for specific users. Otherwise, it sets
+ // prefs for the signed-in user.
+ UserRef user_ref = 2;
+ // The given prefs add to or overwrite current user prefs.
+ repeated UserPrefValue prefs = 3;
+}
+
+
+// Next available tag: 1
+message SetUserPrefsResponse {
+}
+
+
+// Next available tag: 3
+message InviteLinkedParentRequest {
+ string email = 2;
+}
+
+
+// Next available tag: 1
+message InviteLinkedParentResponse {
+}
+
+
+// Next available tag: 3
+message AcceptLinkedChildRequest {
+ string email = 2;
+}
+
+
+// Next available tag: 1
+message AcceptLinkedChildResponse {
+}
+
+
+// Next available tag: 4
+message UnlinkAccountsRequest {
+ UserRef parent = 2;
+ UserRef child = 3;
+}
+
+
+// Next available tag: 1
+message UnlinkAccountsResponse {
+}
+
+
+// Next available tag: 2
+message GetUsersProjectsRequest {
+ repeated UserRef user_refs = 1;
+}
+
+
+// Next available tag: 5
+message GetUsersProjectsResponse {
+ repeated UserProjects users_projects = 1;
+}
+
+
+// Next available tag: 2
+message ExpungeUserRequest {
+ string email = 1;
+}
+
+
+// Next available tag: 1
+message ExpungeUserResponse {
+}
\ No newline at end of file
diff --git a/api/api_proto/users_pb2.py b/api/api_proto/users_pb2.py
new file mode 100644
index 0000000..8d84700
--- /dev/null
+++ b/api/api_proto/users_pb2.py
@@ -0,0 +1,1230 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: api/api_proto/users.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from api.api_proto import user_objects_pb2 as api_dot_api__proto_dot_user__objects__pb2
+from api.api_proto import common_pb2 as api_dot_api__proto_dot_common__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='api/api_proto/users.proto',
+ package='monorail',
+ syntax='proto3',
+ serialized_options=None,
+ serialized_pb=_b('\n\x19\x61pi/api_proto/users.proto\x12\x08monorail\x1a api/api_proto/user_objects.proto\x1a\x1a\x61pi/api_proto/common.proto\"R\n\x1aListReferencedUsersRequest\x12\x0e\n\x06\x65mails\x18\x02 \x03(\t\x12$\n\tuser_refs\x18\x03 \x03(\x0b\x32\x11.monorail.UserRef\"<\n\x1bListReferencedUsersResponse\x12\x1d\n\x05users\x18\x01 \x03(\x0b\x32\x0e.monorail.User\"5\n\x0eGetUserRequest\x12#\n\x08user_ref\x18\x02 \x01(\x0b\x32\x11.monorail.UserRef\"<\n\x15GetMembershipsRequest\x12#\n\x08user_ref\x18\x02 \x01(\x0b\x32\x11.monorail.UserRef\"?\n\x16GetMembershipsResponse\x12%\n\ngroup_refs\x18\x01 \x03(\x0b\x32\x11.monorail.UserRef\"=\n\x16GetSavedQueriesRequest\x12#\n\x08user_ref\x18\x02 \x01(\x0b\x32\x11.monorail.UserRef\"F\n\x17GetSavedQueriesResponse\x12+\n\rsaved_queries\x18\x01 \x03(\x0b\x32\x14.monorail.SavedQuery\">\n\x17GetUserStarCountRequest\x12#\n\x08user_ref\x18\x02 \x01(\x0b\x32\x11.monorail.UserRef\".\n\x18GetUserStarCountResponse\x12\x12\n\nstar_count\x18\x01 \x01(\r\"G\n\x0fStarUserRequest\x12#\n\x08user_ref\x18\x02 \x01(\x0b\x32\x11.monorail.UserRef\x12\x0f\n\x07starred\x18\x03 \x01(\x08\"&\n\x10StarUserResponse\x12\x12\n\nstar_count\x18\x01 \x01(\r\"7\n\x1fSetExpandPermsPreferenceRequest\x12\x14\n\x0c\x65xpand_perms\x18\x02 \x01(\x08\"\"\n SetExpandPermsPreferenceResponse\":\n\x13GetUserPrefsRequest\x12#\n\x08user_ref\x18\x02 \x01(\x0b\x32\x11.monorail.UserRef\">\n\x14GetUserPrefsResponse\x12&\n\x05prefs\x18\x01 \x03(\x0b\x32\x17.monorail.UserPrefValue\"b\n\x13SetUserPrefsRequest\x12#\n\x08user_ref\x18\x02 \x01(\x0b\x32\x11.monorail.UserRef\x12&\n\x05prefs\x18\x03 \x03(\x0b\x32\x17.monorail.UserPrefValue\"\x16\n\x14SetUserPrefsResponse\"*\n\x19InviteLinkedParentRequest\x12\r\n\x05\x65mail\x18\x02 \x01(\t\"\x1c\n\x1aInviteLinkedParentResponse\")\n\x18\x41\x63\x63\x65ptLinkedChildRequest\x12\r\n\x05\x65mail\x18\x02 \x01(\t\"\x1b\n\x19\x41\x63\x63\x65ptLinkedChildResponse\"\\\n\x15UnlinkAccountsRequest\x12!\n\x06parent\x18\x02 \x01(\x0b\x32\x11.monorail.UserRef\x12 \n\x05\x63hild\x18\x03 \x01(\x0b\x32\x11.monorail.UserRef\"\x18\n\x16UnlinkAccountsResponse\"?\n\x17GetUsersProjectsRequest\x12$\n\tuser_refs\x18\x01 \x03(\x0b\x32\x11.monorail.UserRef\"J\n\x18GetUsersProjectsResponse\x12.\n\x0eusers_projects\x18\x01 \x03(\x0b\x32\x16.monorail.UserProjects\"#\n\x12\x45xpungeUserRequest\x12\r\n\x05\x65mail\x18\x01 \x01(\t\"\x15\n\x13\x45xpungeUserResponse2\xd3\t\n\x05Users\x12\x35\n\x07GetUser\x12\x18.monorail.GetUserRequest\x1a\x0e.monorail.User\"\x00\x12\x64\n\x13ListReferencedUsers\x12$.monorail.ListReferencedUsersRequest\x1a%.monorail.ListReferencedUsersResponse\"\x00\x12U\n\x0eGetMemberships\x12\x1f.monorail.GetMembershipsRequest\x1a .monorail.GetMembershipsResponse\"\x00\x12X\n\x0fGetSavedQueries\x12 .monorail.GetSavedQueriesRequest\x1a!.monorail.GetSavedQueriesResponse\"\x00\x12[\n\x10GetUserStarCount\x12!.monorail.GetUserStarCountRequest\x1a\".monorail.GetUserStarCountResponse\"\x00\x12\x43\n\x08StarUser\x12\x19.monorail.StarUserRequest\x1a\x1a.monorail.StarUserResponse\"\x00\x12O\n\x0cGetUserPrefs\x12\x1d.monorail.GetUserPrefsRequest\x1a\x1e.monorail.GetUserPrefsResponse\"\x00\x12O\n\x0cSetUserPrefs\x12\x1d.monorail.SetUserPrefsRequest\x1a\x1e.monorail.SetUserPrefsResponse\"\x00\x12s\n\x18SetExpandPermsPreference\x12).monorail.SetExpandPermsPreferenceRequest\x1a*.monorail.SetExpandPermsPreferenceResponse\"\x00\x12\x61\n\x12InviteLinkedParent\x12#.monorail.InviteLinkedParentRequest\x1a$.monorail.InviteLinkedParentResponse\"\x00\x12^\n\x11\x41\x63\x63\x65ptLinkedChild\x12\".monorail.AcceptLinkedChildRequest\x1a#.monorail.AcceptLinkedChildResponse\"\x00\x12U\n\x0eUnlinkAccounts\x12\x1f.monorail.UnlinkAccountsRequest\x1a .monorail.UnlinkAccountsResponse\"\x00\x12[\n\x10GetUsersProjects\x12!.monorail.GetUsersProjectsRequest\x1a\".monorail.GetUsersProjectsResponse\"\x00\x12L\n\x0b\x45xpungeUser\x12\x1c.monorail.ExpungeUserRequest\x1a\x1d.monorail.ExpungeUserResponse\"\x00\x62\x06proto3')
+ ,
+ dependencies=[api_dot_api__proto_dot_user__objects__pb2.DESCRIPTOR,api_dot_api__proto_dot_common__pb2.DESCRIPTOR,])
+
+
+
+
+_LISTREFERENCEDUSERSREQUEST = _descriptor.Descriptor(
+ name='ListReferencedUsersRequest',
+ full_name='monorail.ListReferencedUsersRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='emails', full_name='monorail.ListReferencedUsersRequest.emails', index=0,
+ number=2, type=9, cpp_type=9, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='user_refs', full_name='monorail.ListReferencedUsersRequest.user_refs', index=1,
+ number=3, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=101,
+ serialized_end=183,
+)
+
+
+_LISTREFERENCEDUSERSRESPONSE = _descriptor.Descriptor(
+ name='ListReferencedUsersResponse',
+ full_name='monorail.ListReferencedUsersResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='users', full_name='monorail.ListReferencedUsersResponse.users', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=185,
+ serialized_end=245,
+)
+
+
+_GETUSERREQUEST = _descriptor.Descriptor(
+ name='GetUserRequest',
+ full_name='monorail.GetUserRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='user_ref', full_name='monorail.GetUserRequest.user_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=247,
+ serialized_end=300,
+)
+
+
+_GETMEMBERSHIPSREQUEST = _descriptor.Descriptor(
+ name='GetMembershipsRequest',
+ full_name='monorail.GetMembershipsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='user_ref', full_name='monorail.GetMembershipsRequest.user_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=302,
+ serialized_end=362,
+)
+
+
+_GETMEMBERSHIPSRESPONSE = _descriptor.Descriptor(
+ name='GetMembershipsResponse',
+ full_name='monorail.GetMembershipsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='group_refs', full_name='monorail.GetMembershipsResponse.group_refs', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=364,
+ serialized_end=427,
+)
+
+
+_GETSAVEDQUERIESREQUEST = _descriptor.Descriptor(
+ name='GetSavedQueriesRequest',
+ full_name='monorail.GetSavedQueriesRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='user_ref', full_name='monorail.GetSavedQueriesRequest.user_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=429,
+ serialized_end=490,
+)
+
+
+_GETSAVEDQUERIESRESPONSE = _descriptor.Descriptor(
+ name='GetSavedQueriesResponse',
+ full_name='monorail.GetSavedQueriesResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='saved_queries', full_name='monorail.GetSavedQueriesResponse.saved_queries', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=492,
+ serialized_end=562,
+)
+
+
+_GETUSERSTARCOUNTREQUEST = _descriptor.Descriptor(
+ name='GetUserStarCountRequest',
+ full_name='monorail.GetUserStarCountRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='user_ref', full_name='monorail.GetUserStarCountRequest.user_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=564,
+ serialized_end=626,
+)
+
+
+_GETUSERSTARCOUNTRESPONSE = _descriptor.Descriptor(
+ name='GetUserStarCountResponse',
+ full_name='monorail.GetUserStarCountResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='star_count', full_name='monorail.GetUserStarCountResponse.star_count', index=0,
+ number=1, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=628,
+ serialized_end=674,
+)
+
+
+_STARUSERREQUEST = _descriptor.Descriptor(
+ name='StarUserRequest',
+ full_name='monorail.StarUserRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='user_ref', full_name='monorail.StarUserRequest.user_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='starred', full_name='monorail.StarUserRequest.starred', index=1,
+ number=3, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=676,
+ serialized_end=747,
+)
+
+
+_STARUSERRESPONSE = _descriptor.Descriptor(
+ name='StarUserResponse',
+ full_name='monorail.StarUserResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='star_count', full_name='monorail.StarUserResponse.star_count', index=0,
+ number=1, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=749,
+ serialized_end=787,
+)
+
+
+_SETEXPANDPERMSPREFERENCEREQUEST = _descriptor.Descriptor(
+ name='SetExpandPermsPreferenceRequest',
+ full_name='monorail.SetExpandPermsPreferenceRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='expand_perms', full_name='monorail.SetExpandPermsPreferenceRequest.expand_perms', index=0,
+ number=2, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=789,
+ serialized_end=844,
+)
+
+
+_SETEXPANDPERMSPREFERENCERESPONSE = _descriptor.Descriptor(
+ name='SetExpandPermsPreferenceResponse',
+ full_name='monorail.SetExpandPermsPreferenceResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=846,
+ serialized_end=880,
+)
+
+
+_GETUSERPREFSREQUEST = _descriptor.Descriptor(
+ name='GetUserPrefsRequest',
+ full_name='monorail.GetUserPrefsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='user_ref', full_name='monorail.GetUserPrefsRequest.user_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=882,
+ serialized_end=940,
+)
+
+
+_GETUSERPREFSRESPONSE = _descriptor.Descriptor(
+ name='GetUserPrefsResponse',
+ full_name='monorail.GetUserPrefsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='prefs', full_name='monorail.GetUserPrefsResponse.prefs', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=942,
+ serialized_end=1004,
+)
+
+
+_SETUSERPREFSREQUEST = _descriptor.Descriptor(
+ name='SetUserPrefsRequest',
+ full_name='monorail.SetUserPrefsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='user_ref', full_name='monorail.SetUserPrefsRequest.user_ref', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='prefs', full_name='monorail.SetUserPrefsRequest.prefs', index=1,
+ number=3, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1006,
+ serialized_end=1104,
+)
+
+
+_SETUSERPREFSRESPONSE = _descriptor.Descriptor(
+ name='SetUserPrefsResponse',
+ full_name='monorail.SetUserPrefsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1106,
+ serialized_end=1128,
+)
+
+
+_INVITELINKEDPARENTREQUEST = _descriptor.Descriptor(
+ name='InviteLinkedParentRequest',
+ full_name='monorail.InviteLinkedParentRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='email', full_name='monorail.InviteLinkedParentRequest.email', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1130,
+ serialized_end=1172,
+)
+
+
+_INVITELINKEDPARENTRESPONSE = _descriptor.Descriptor(
+ name='InviteLinkedParentResponse',
+ full_name='monorail.InviteLinkedParentResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1174,
+ serialized_end=1202,
+)
+
+
+_ACCEPTLINKEDCHILDREQUEST = _descriptor.Descriptor(
+ name='AcceptLinkedChildRequest',
+ full_name='monorail.AcceptLinkedChildRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='email', full_name='monorail.AcceptLinkedChildRequest.email', index=0,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1204,
+ serialized_end=1245,
+)
+
+
+_ACCEPTLINKEDCHILDRESPONSE = _descriptor.Descriptor(
+ name='AcceptLinkedChildResponse',
+ full_name='monorail.AcceptLinkedChildResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1247,
+ serialized_end=1274,
+)
+
+
+_UNLINKACCOUNTSREQUEST = _descriptor.Descriptor(
+ name='UnlinkAccountsRequest',
+ full_name='monorail.UnlinkAccountsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='parent', full_name='monorail.UnlinkAccountsRequest.parent', index=0,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='child', full_name='monorail.UnlinkAccountsRequest.child', index=1,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1276,
+ serialized_end=1368,
+)
+
+
+_UNLINKACCOUNTSRESPONSE = _descriptor.Descriptor(
+ name='UnlinkAccountsResponse',
+ full_name='monorail.UnlinkAccountsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1370,
+ serialized_end=1394,
+)
+
+
+_GETUSERSPROJECTSREQUEST = _descriptor.Descriptor(
+ name='GetUsersProjectsRequest',
+ full_name='monorail.GetUsersProjectsRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='user_refs', full_name='monorail.GetUsersProjectsRequest.user_refs', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1396,
+ serialized_end=1459,
+)
+
+
+_GETUSERSPROJECTSRESPONSE = _descriptor.Descriptor(
+ name='GetUsersProjectsResponse',
+ full_name='monorail.GetUsersProjectsResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='users_projects', full_name='monorail.GetUsersProjectsResponse.users_projects', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1461,
+ serialized_end=1535,
+)
+
+
+_EXPUNGEUSERREQUEST = _descriptor.Descriptor(
+ name='ExpungeUserRequest',
+ full_name='monorail.ExpungeUserRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='email', full_name='monorail.ExpungeUserRequest.email', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ serialized_options=None, file=DESCRIPTOR),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1537,
+ serialized_end=1572,
+)
+
+
+_EXPUNGEUSERRESPONSE = _descriptor.Descriptor(
+ name='ExpungeUserResponse',
+ full_name='monorail.ExpungeUserResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ serialized_options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1574,
+ serialized_end=1595,
+)
+
+_LISTREFERENCEDUSERSREQUEST.fields_by_name['user_refs'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_LISTREFERENCEDUSERSRESPONSE.fields_by_name['users'].message_type = api_dot_api__proto_dot_user__objects__pb2._USER
+_GETUSERREQUEST.fields_by_name['user_ref'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_GETMEMBERSHIPSREQUEST.fields_by_name['user_ref'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_GETMEMBERSHIPSRESPONSE.fields_by_name['group_refs'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_GETSAVEDQUERIESREQUEST.fields_by_name['user_ref'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_GETSAVEDQUERIESRESPONSE.fields_by_name['saved_queries'].message_type = api_dot_api__proto_dot_common__pb2._SAVEDQUERY
+_GETUSERSTARCOUNTREQUEST.fields_by_name['user_ref'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_STARUSERREQUEST.fields_by_name['user_ref'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_GETUSERPREFSREQUEST.fields_by_name['user_ref'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_GETUSERPREFSRESPONSE.fields_by_name['prefs'].message_type = api_dot_api__proto_dot_user__objects__pb2._USERPREFVALUE
+_SETUSERPREFSREQUEST.fields_by_name['user_ref'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_SETUSERPREFSREQUEST.fields_by_name['prefs'].message_type = api_dot_api__proto_dot_user__objects__pb2._USERPREFVALUE
+_UNLINKACCOUNTSREQUEST.fields_by_name['parent'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_UNLINKACCOUNTSREQUEST.fields_by_name['child'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_GETUSERSPROJECTSREQUEST.fields_by_name['user_refs'].message_type = api_dot_api__proto_dot_common__pb2._USERREF
+_GETUSERSPROJECTSRESPONSE.fields_by_name['users_projects'].message_type = api_dot_api__proto_dot_user__objects__pb2._USERPROJECTS
+DESCRIPTOR.message_types_by_name['ListReferencedUsersRequest'] = _LISTREFERENCEDUSERSREQUEST
+DESCRIPTOR.message_types_by_name['ListReferencedUsersResponse'] = _LISTREFERENCEDUSERSRESPONSE
+DESCRIPTOR.message_types_by_name['GetUserRequest'] = _GETUSERREQUEST
+DESCRIPTOR.message_types_by_name['GetMembershipsRequest'] = _GETMEMBERSHIPSREQUEST
+DESCRIPTOR.message_types_by_name['GetMembershipsResponse'] = _GETMEMBERSHIPSRESPONSE
+DESCRIPTOR.message_types_by_name['GetSavedQueriesRequest'] = _GETSAVEDQUERIESREQUEST
+DESCRIPTOR.message_types_by_name['GetSavedQueriesResponse'] = _GETSAVEDQUERIESRESPONSE
+DESCRIPTOR.message_types_by_name['GetUserStarCountRequest'] = _GETUSERSTARCOUNTREQUEST
+DESCRIPTOR.message_types_by_name['GetUserStarCountResponse'] = _GETUSERSTARCOUNTRESPONSE
+DESCRIPTOR.message_types_by_name['StarUserRequest'] = _STARUSERREQUEST
+DESCRIPTOR.message_types_by_name['StarUserResponse'] = _STARUSERRESPONSE
+DESCRIPTOR.message_types_by_name['SetExpandPermsPreferenceRequest'] = _SETEXPANDPERMSPREFERENCEREQUEST
+DESCRIPTOR.message_types_by_name['SetExpandPermsPreferenceResponse'] = _SETEXPANDPERMSPREFERENCERESPONSE
+DESCRIPTOR.message_types_by_name['GetUserPrefsRequest'] = _GETUSERPREFSREQUEST
+DESCRIPTOR.message_types_by_name['GetUserPrefsResponse'] = _GETUSERPREFSRESPONSE
+DESCRIPTOR.message_types_by_name['SetUserPrefsRequest'] = _SETUSERPREFSREQUEST
+DESCRIPTOR.message_types_by_name['SetUserPrefsResponse'] = _SETUSERPREFSRESPONSE
+DESCRIPTOR.message_types_by_name['InviteLinkedParentRequest'] = _INVITELINKEDPARENTREQUEST
+DESCRIPTOR.message_types_by_name['InviteLinkedParentResponse'] = _INVITELINKEDPARENTRESPONSE
+DESCRIPTOR.message_types_by_name['AcceptLinkedChildRequest'] = _ACCEPTLINKEDCHILDREQUEST
+DESCRIPTOR.message_types_by_name['AcceptLinkedChildResponse'] = _ACCEPTLINKEDCHILDRESPONSE
+DESCRIPTOR.message_types_by_name['UnlinkAccountsRequest'] = _UNLINKACCOUNTSREQUEST
+DESCRIPTOR.message_types_by_name['UnlinkAccountsResponse'] = _UNLINKACCOUNTSRESPONSE
+DESCRIPTOR.message_types_by_name['GetUsersProjectsRequest'] = _GETUSERSPROJECTSREQUEST
+DESCRIPTOR.message_types_by_name['GetUsersProjectsResponse'] = _GETUSERSPROJECTSRESPONSE
+DESCRIPTOR.message_types_by_name['ExpungeUserRequest'] = _EXPUNGEUSERREQUEST
+DESCRIPTOR.message_types_by_name['ExpungeUserResponse'] = _EXPUNGEUSERRESPONSE
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+ListReferencedUsersRequest = _reflection.GeneratedProtocolMessageType('ListReferencedUsersRequest', (_message.Message,), dict(
+ DESCRIPTOR = _LISTREFERENCEDUSERSREQUEST,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListReferencedUsersRequest)
+ ))
+_sym_db.RegisterMessage(ListReferencedUsersRequest)
+
+ListReferencedUsersResponse = _reflection.GeneratedProtocolMessageType('ListReferencedUsersResponse', (_message.Message,), dict(
+ DESCRIPTOR = _LISTREFERENCEDUSERSRESPONSE,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ListReferencedUsersResponse)
+ ))
+_sym_db.RegisterMessage(ListReferencedUsersResponse)
+
+GetUserRequest = _reflection.GeneratedProtocolMessageType('GetUserRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETUSERREQUEST,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetUserRequest)
+ ))
+_sym_db.RegisterMessage(GetUserRequest)
+
+GetMembershipsRequest = _reflection.GeneratedProtocolMessageType('GetMembershipsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETMEMBERSHIPSREQUEST,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetMembershipsRequest)
+ ))
+_sym_db.RegisterMessage(GetMembershipsRequest)
+
+GetMembershipsResponse = _reflection.GeneratedProtocolMessageType('GetMembershipsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _GETMEMBERSHIPSRESPONSE,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetMembershipsResponse)
+ ))
+_sym_db.RegisterMessage(GetMembershipsResponse)
+
+GetSavedQueriesRequest = _reflection.GeneratedProtocolMessageType('GetSavedQueriesRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETSAVEDQUERIESREQUEST,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetSavedQueriesRequest)
+ ))
+_sym_db.RegisterMessage(GetSavedQueriesRequest)
+
+GetSavedQueriesResponse = _reflection.GeneratedProtocolMessageType('GetSavedQueriesResponse', (_message.Message,), dict(
+ DESCRIPTOR = _GETSAVEDQUERIESRESPONSE,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetSavedQueriesResponse)
+ ))
+_sym_db.RegisterMessage(GetSavedQueriesResponse)
+
+GetUserStarCountRequest = _reflection.GeneratedProtocolMessageType('GetUserStarCountRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETUSERSTARCOUNTREQUEST,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetUserStarCountRequest)
+ ))
+_sym_db.RegisterMessage(GetUserStarCountRequest)
+
+GetUserStarCountResponse = _reflection.GeneratedProtocolMessageType('GetUserStarCountResponse', (_message.Message,), dict(
+ DESCRIPTOR = _GETUSERSTARCOUNTRESPONSE,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetUserStarCountResponse)
+ ))
+_sym_db.RegisterMessage(GetUserStarCountResponse)
+
+StarUserRequest = _reflection.GeneratedProtocolMessageType('StarUserRequest', (_message.Message,), dict(
+ DESCRIPTOR = _STARUSERREQUEST,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.StarUserRequest)
+ ))
+_sym_db.RegisterMessage(StarUserRequest)
+
+StarUserResponse = _reflection.GeneratedProtocolMessageType('StarUserResponse', (_message.Message,), dict(
+ DESCRIPTOR = _STARUSERRESPONSE,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.StarUserResponse)
+ ))
+_sym_db.RegisterMessage(StarUserResponse)
+
+SetExpandPermsPreferenceRequest = _reflection.GeneratedProtocolMessageType('SetExpandPermsPreferenceRequest', (_message.Message,), dict(
+ DESCRIPTOR = _SETEXPANDPERMSPREFERENCEREQUEST,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.SetExpandPermsPreferenceRequest)
+ ))
+_sym_db.RegisterMessage(SetExpandPermsPreferenceRequest)
+
+SetExpandPermsPreferenceResponse = _reflection.GeneratedProtocolMessageType('SetExpandPermsPreferenceResponse', (_message.Message,), dict(
+ DESCRIPTOR = _SETEXPANDPERMSPREFERENCERESPONSE,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.SetExpandPermsPreferenceResponse)
+ ))
+_sym_db.RegisterMessage(SetExpandPermsPreferenceResponse)
+
+GetUserPrefsRequest = _reflection.GeneratedProtocolMessageType('GetUserPrefsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETUSERPREFSREQUEST,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetUserPrefsRequest)
+ ))
+_sym_db.RegisterMessage(GetUserPrefsRequest)
+
+GetUserPrefsResponse = _reflection.GeneratedProtocolMessageType('GetUserPrefsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _GETUSERPREFSRESPONSE,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetUserPrefsResponse)
+ ))
+_sym_db.RegisterMessage(GetUserPrefsResponse)
+
+SetUserPrefsRequest = _reflection.GeneratedProtocolMessageType('SetUserPrefsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _SETUSERPREFSREQUEST,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.SetUserPrefsRequest)
+ ))
+_sym_db.RegisterMessage(SetUserPrefsRequest)
+
+SetUserPrefsResponse = _reflection.GeneratedProtocolMessageType('SetUserPrefsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _SETUSERPREFSRESPONSE,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.SetUserPrefsResponse)
+ ))
+_sym_db.RegisterMessage(SetUserPrefsResponse)
+
+InviteLinkedParentRequest = _reflection.GeneratedProtocolMessageType('InviteLinkedParentRequest', (_message.Message,), dict(
+ DESCRIPTOR = _INVITELINKEDPARENTREQUEST,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.InviteLinkedParentRequest)
+ ))
+_sym_db.RegisterMessage(InviteLinkedParentRequest)
+
+InviteLinkedParentResponse = _reflection.GeneratedProtocolMessageType('InviteLinkedParentResponse', (_message.Message,), dict(
+ DESCRIPTOR = _INVITELINKEDPARENTRESPONSE,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.InviteLinkedParentResponse)
+ ))
+_sym_db.RegisterMessage(InviteLinkedParentResponse)
+
+AcceptLinkedChildRequest = _reflection.GeneratedProtocolMessageType('AcceptLinkedChildRequest', (_message.Message,), dict(
+ DESCRIPTOR = _ACCEPTLINKEDCHILDREQUEST,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.AcceptLinkedChildRequest)
+ ))
+_sym_db.RegisterMessage(AcceptLinkedChildRequest)
+
+AcceptLinkedChildResponse = _reflection.GeneratedProtocolMessageType('AcceptLinkedChildResponse', (_message.Message,), dict(
+ DESCRIPTOR = _ACCEPTLINKEDCHILDRESPONSE,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.AcceptLinkedChildResponse)
+ ))
+_sym_db.RegisterMessage(AcceptLinkedChildResponse)
+
+UnlinkAccountsRequest = _reflection.GeneratedProtocolMessageType('UnlinkAccountsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _UNLINKACCOUNTSREQUEST,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.UnlinkAccountsRequest)
+ ))
+_sym_db.RegisterMessage(UnlinkAccountsRequest)
+
+UnlinkAccountsResponse = _reflection.GeneratedProtocolMessageType('UnlinkAccountsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _UNLINKACCOUNTSRESPONSE,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.UnlinkAccountsResponse)
+ ))
+_sym_db.RegisterMessage(UnlinkAccountsResponse)
+
+GetUsersProjectsRequest = _reflection.GeneratedProtocolMessageType('GetUsersProjectsRequest', (_message.Message,), dict(
+ DESCRIPTOR = _GETUSERSPROJECTSREQUEST,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetUsersProjectsRequest)
+ ))
+_sym_db.RegisterMessage(GetUsersProjectsRequest)
+
+GetUsersProjectsResponse = _reflection.GeneratedProtocolMessageType('GetUsersProjectsResponse', (_message.Message,), dict(
+ DESCRIPTOR = _GETUSERSPROJECTSRESPONSE,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.GetUsersProjectsResponse)
+ ))
+_sym_db.RegisterMessage(GetUsersProjectsResponse)
+
+ExpungeUserRequest = _reflection.GeneratedProtocolMessageType('ExpungeUserRequest', (_message.Message,), dict(
+ DESCRIPTOR = _EXPUNGEUSERREQUEST,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ExpungeUserRequest)
+ ))
+_sym_db.RegisterMessage(ExpungeUserRequest)
+
+ExpungeUserResponse = _reflection.GeneratedProtocolMessageType('ExpungeUserResponse', (_message.Message,), dict(
+ DESCRIPTOR = _EXPUNGEUSERRESPONSE,
+ __module__ = 'api.api_proto.users_pb2'
+ # @@protoc_insertion_point(class_scope:monorail.ExpungeUserResponse)
+ ))
+_sym_db.RegisterMessage(ExpungeUserResponse)
+
+
+
+_USERS = _descriptor.ServiceDescriptor(
+ name='Users',
+ full_name='monorail.Users',
+ file=DESCRIPTOR,
+ index=0,
+ serialized_options=None,
+ serialized_start=1598,
+ serialized_end=2833,
+ methods=[
+ _descriptor.MethodDescriptor(
+ name='GetUser',
+ full_name='monorail.Users.GetUser',
+ index=0,
+ containing_service=None,
+ input_type=_GETUSERREQUEST,
+ output_type=api_dot_api__proto_dot_user__objects__pb2._USER,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='ListReferencedUsers',
+ full_name='monorail.Users.ListReferencedUsers',
+ index=1,
+ containing_service=None,
+ input_type=_LISTREFERENCEDUSERSREQUEST,
+ output_type=_LISTREFERENCEDUSERSRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='GetMemberships',
+ full_name='monorail.Users.GetMemberships',
+ index=2,
+ containing_service=None,
+ input_type=_GETMEMBERSHIPSREQUEST,
+ output_type=_GETMEMBERSHIPSRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='GetSavedQueries',
+ full_name='monorail.Users.GetSavedQueries',
+ index=3,
+ containing_service=None,
+ input_type=_GETSAVEDQUERIESREQUEST,
+ output_type=_GETSAVEDQUERIESRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='GetUserStarCount',
+ full_name='monorail.Users.GetUserStarCount',
+ index=4,
+ containing_service=None,
+ input_type=_GETUSERSTARCOUNTREQUEST,
+ output_type=_GETUSERSTARCOUNTRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='StarUser',
+ full_name='monorail.Users.StarUser',
+ index=5,
+ containing_service=None,
+ input_type=_STARUSERREQUEST,
+ output_type=_STARUSERRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='GetUserPrefs',
+ full_name='monorail.Users.GetUserPrefs',
+ index=6,
+ containing_service=None,
+ input_type=_GETUSERPREFSREQUEST,
+ output_type=_GETUSERPREFSRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='SetUserPrefs',
+ full_name='monorail.Users.SetUserPrefs',
+ index=7,
+ containing_service=None,
+ input_type=_SETUSERPREFSREQUEST,
+ output_type=_SETUSERPREFSRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='SetExpandPermsPreference',
+ full_name='monorail.Users.SetExpandPermsPreference',
+ index=8,
+ containing_service=None,
+ input_type=_SETEXPANDPERMSPREFERENCEREQUEST,
+ output_type=_SETEXPANDPERMSPREFERENCERESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='InviteLinkedParent',
+ full_name='monorail.Users.InviteLinkedParent',
+ index=9,
+ containing_service=None,
+ input_type=_INVITELINKEDPARENTREQUEST,
+ output_type=_INVITELINKEDPARENTRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='AcceptLinkedChild',
+ full_name='monorail.Users.AcceptLinkedChild',
+ index=10,
+ containing_service=None,
+ input_type=_ACCEPTLINKEDCHILDREQUEST,
+ output_type=_ACCEPTLINKEDCHILDRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='UnlinkAccounts',
+ full_name='monorail.Users.UnlinkAccounts',
+ index=11,
+ containing_service=None,
+ input_type=_UNLINKACCOUNTSREQUEST,
+ output_type=_UNLINKACCOUNTSRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='GetUsersProjects',
+ full_name='monorail.Users.GetUsersProjects',
+ index=12,
+ containing_service=None,
+ input_type=_GETUSERSPROJECTSREQUEST,
+ output_type=_GETUSERSPROJECTSRESPONSE,
+ serialized_options=None,
+ ),
+ _descriptor.MethodDescriptor(
+ name='ExpungeUser',
+ full_name='monorail.Users.ExpungeUser',
+ index=13,
+ containing_service=None,
+ input_type=_EXPUNGEUSERREQUEST,
+ output_type=_EXPUNGEUSERRESPONSE,
+ serialized_options=None,
+ ),
+])
+_sym_db.RegisterServiceDescriptor(_USERS)
+
+DESCRIPTOR.services_by_name['Users'] = _USERS
+
+# @@protoc_insertion_point(module_scope)
diff --git a/api/api_proto/users_prpc_pb2.py b/api/api_proto/users_prpc_pb2.py
new file mode 100644
index 0000000..9c99700
--- /dev/null
+++ b/api/api_proto/users_prpc_pb2.py
@@ -0,0 +1,129 @@
+# Generated by the pRPC protocol buffer compiler plugin. DO NOT EDIT!
+# source: api/api_proto/users.proto
+
+import base64
+import zlib
+
+from google.protobuf import descriptor_pb2
+
+# Includes description of the api/api_proto/users.proto and all of its transitive
+# dependencies. Includes source code info.
+FILE_DESCRIPTOR_SET = descriptor_pb2.FileDescriptorSet()
+FILE_DESCRIPTOR_SET.ParseFromString(zlib.decompress(base64.b64decode(
+ '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')))
+_INDEX = {
+ f.name: {
+ 'descriptor': f,
+ 'services': {s.name: s for s in f.service},
+ }
+ for f in FILE_DESCRIPTOR_SET.file
+}
+
+
+UsersServiceDescription = {
+ 'file_descriptor_set': FILE_DESCRIPTOR_SET,
+ 'file_descriptor': _INDEX[u'api/api_proto/users.proto']['descriptor'],
+ 'service_descriptor': _INDEX[u'api/api_proto/users.proto']['services'][u'Users'],
+}