# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: client/profile.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 chromite.api.gen.client import profile_id_pb2 as client_dot_profile__id__pb2
from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2


DESCRIPTOR = _descriptor.FileDescriptor(
  name='client/profile.proto',
  package='client',
  syntax='proto3',
  serialized_options=_b('Z0go.chromium.org/chromiumos/infra/proto/go/client'),
  serialized_pb=_b('\n\x14\x63lient/profile.proto\x12\x06\x63lient\x1a\x17\x63lient/profile_id.proto\x1a\x1egoogle/protobuf/duration.proto\"r\n\x07Profile\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1d\n\x02id\x18\x02 \x01(\x0b\x32\x11.client.ProfileId\x12:\n\x15test_platform_profile\x18\x03 \x01(\x0b\x32\x1b.client.TestPlatformProfile\"\xbf\x01\n\x13TestPlatformProfile\x12+\n\tscheduler\x18\x01 \x01(\x0b\x32\x18.client.SchedulerProfile\x12#\n\x05retry\x18\x02 \x01(\x0b\x32\x14.client.RetryProfile\x12\'\n\x07timeout\x18\x03 \x01(\x0b\x32\x16.client.TimeoutProfile\x12-\n\nmonitoring\x18\x04 \x01(\x0b\x32\x19.client.MonitoringProfile\"\x97\x03\n\x10SchedulerProfile\x12<\n\x0cmanaged_pool\x18\x01 \x01(\x0e\x32$.client.SchedulerProfile.ManagedPoolH\x00\x12\x18\n\x0eunmanaged_pool\x18\x02 \x01(\tH\x00\x12\x10\n\x08priority\x18\x03 \x01(\r\x12\x15\n\rquota_account\x18\x04 \x01(\t\"\xf9\x01\n\x0bManagedPool\x12\x1c\n\x18MANAGED_POOL_UNSPECIFIED\x10\x00\x12\x13\n\x0fMANAGED_POOL_CQ\x10\x01\x12\x14\n\x10MANAGED_POOL_BVT\x10\x02\x12\x17\n\x13MANAGED_POOL_SUITES\x10\x03\x12\x14\n\x10MANAGED_POOL_CTS\x10\x04\x12\x1d\n\x19MANAGED_POOL_CTS_PERBUILD\x10\x05\x12\x1b\n\x17MANAGED_POOL_CONTINUOUS\x10\x06\x12\x1e\n\x1aMANAGED_POOL_ARC_PRESUBMIT\x10\x07\x12\x16\n\x12MANAGED_POOL_QUOTA\x10\x08\x42\x06\n\x04pool\"*\n\x0cRetryProfile\x12\r\n\x05\x61llow\x18\x01 \x01(\x08\x12\x0b\n\x03max\x18\x02 \x01(\r\"E\n\x0eTimeoutProfile\x12\x33\n\x10maximum_duration\x18\x01 \x01(\x0b\x32\x19.google.protobuf.Duration\"f\n\x11MonitoringProfile\x12Q\n!test_platform_alerting_thresholds\x18\x01 \x01(\x0b\x32&.client.TestPlatformAlertingThresholds\" \n\x1eTestPlatformAlertingThresholdsB2Z0go.chromium.org/chromiumos/infra/proto/go/clientb\x06proto3')
  ,
  dependencies=[client_dot_profile__id__pb2.DESCRIPTOR,google_dot_protobuf_dot_duration__pb2.DESCRIPTOR,])



_SCHEDULERPROFILE_MANAGEDPOOL = _descriptor.EnumDescriptor(
  name='ManagedPool',
  full_name='client.SchedulerProfile.ManagedPool',
  filename=None,
  file=DESCRIPTOR,
  values=[
    _descriptor.EnumValueDescriptor(
      name='MANAGED_POOL_UNSPECIFIED', index=0, number=0,
      serialized_options=None,
      type=None),
    _descriptor.EnumValueDescriptor(
      name='MANAGED_POOL_CQ', index=1, number=1,
      serialized_options=None,
      type=None),
    _descriptor.EnumValueDescriptor(
      name='MANAGED_POOL_BVT', index=2, number=2,
      serialized_options=None,
      type=None),
    _descriptor.EnumValueDescriptor(
      name='MANAGED_POOL_SUITES', index=3, number=3,
      serialized_options=None,
      type=None),
    _descriptor.EnumValueDescriptor(
      name='MANAGED_POOL_CTS', index=4, number=4,
      serialized_options=None,
      type=None),
    _descriptor.EnumValueDescriptor(
      name='MANAGED_POOL_CTS_PERBUILD', index=5, number=5,
      serialized_options=None,
      type=None),
    _descriptor.EnumValueDescriptor(
      name='MANAGED_POOL_CONTINUOUS', index=6, number=6,
      serialized_options=None,
      type=None),
    _descriptor.EnumValueDescriptor(
      name='MANAGED_POOL_ARC_PRESUBMIT', index=7, number=7,
      serialized_options=None,
      type=None),
    _descriptor.EnumValueDescriptor(
      name='MANAGED_POOL_QUOTA', index=8, number=8,
      serialized_options=None,
      type=None),
  ],
  containing_type=None,
  serialized_options=None,
  serialized_start=550,
  serialized_end=799,
)
_sym_db.RegisterEnumDescriptor(_SCHEDULERPROFILE_MANAGEDPOOL)


_PROFILE = _descriptor.Descriptor(
  name='Profile',
  full_name='client.Profile',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='name', full_name='client.Profile.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='id', full_name='client.Profile.id', 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='test_platform_profile', full_name='client.Profile.test_platform_profile', 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=89,
  serialized_end=203,
)


_TESTPLATFORMPROFILE = _descriptor.Descriptor(
  name='TestPlatformProfile',
  full_name='client.TestPlatformProfile',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='scheduler', full_name='client.TestPlatformProfile.scheduler', 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='retry', full_name='client.TestPlatformProfile.retry', 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='timeout', full_name='client.TestPlatformProfile.timeout', 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='monitoring', full_name='client.TestPlatformProfile.monitoring', 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=206,
  serialized_end=397,
)


_SCHEDULERPROFILE = _descriptor.Descriptor(
  name='SchedulerProfile',
  full_name='client.SchedulerProfile',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='managed_pool', full_name='client.SchedulerProfile.managed_pool', 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='unmanaged_pool', full_name='client.SchedulerProfile.unmanaged_pool', 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='priority', full_name='client.SchedulerProfile.priority', 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='quota_account', full_name='client.SchedulerProfile.quota_account', 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=[
    _SCHEDULERPROFILE_MANAGEDPOOL,
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
    _descriptor.OneofDescriptor(
      name='pool', full_name='client.SchedulerProfile.pool',
      index=0, containing_type=None, fields=[]),
  ],
  serialized_start=400,
  serialized_end=807,
)


_RETRYPROFILE = _descriptor.Descriptor(
  name='RetryProfile',
  full_name='client.RetryProfile',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='allow', full_name='client.RetryProfile.allow', 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),
    _descriptor.FieldDescriptor(
      name='max', full_name='client.RetryProfile.max', 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=809,
  serialized_end=851,
)


_TIMEOUTPROFILE = _descriptor.Descriptor(
  name='TimeoutProfile',
  full_name='client.TimeoutProfile',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='maximum_duration', full_name='client.TimeoutProfile.maximum_duration', 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=853,
  serialized_end=922,
)


_MONITORINGPROFILE = _descriptor.Descriptor(
  name='MonitoringProfile',
  full_name='client.MonitoringProfile',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='test_platform_alerting_thresholds', full_name='client.MonitoringProfile.test_platform_alerting_thresholds', 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=924,
  serialized_end=1026,
)


_TESTPLATFORMALERTINGTHRESHOLDS = _descriptor.Descriptor(
  name='TestPlatformAlertingThresholds',
  full_name='client.TestPlatformAlertingThresholds',
  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=1028,
  serialized_end=1060,
)

_PROFILE.fields_by_name['id'].message_type = client_dot_profile__id__pb2._PROFILEID
_PROFILE.fields_by_name['test_platform_profile'].message_type = _TESTPLATFORMPROFILE
_TESTPLATFORMPROFILE.fields_by_name['scheduler'].message_type = _SCHEDULERPROFILE
_TESTPLATFORMPROFILE.fields_by_name['retry'].message_type = _RETRYPROFILE
_TESTPLATFORMPROFILE.fields_by_name['timeout'].message_type = _TIMEOUTPROFILE
_TESTPLATFORMPROFILE.fields_by_name['monitoring'].message_type = _MONITORINGPROFILE
_SCHEDULERPROFILE.fields_by_name['managed_pool'].enum_type = _SCHEDULERPROFILE_MANAGEDPOOL
_SCHEDULERPROFILE_MANAGEDPOOL.containing_type = _SCHEDULERPROFILE
_SCHEDULERPROFILE.oneofs_by_name['pool'].fields.append(
  _SCHEDULERPROFILE.fields_by_name['managed_pool'])
_SCHEDULERPROFILE.fields_by_name['managed_pool'].containing_oneof = _SCHEDULERPROFILE.oneofs_by_name['pool']
_SCHEDULERPROFILE.oneofs_by_name['pool'].fields.append(
  _SCHEDULERPROFILE.fields_by_name['unmanaged_pool'])
_SCHEDULERPROFILE.fields_by_name['unmanaged_pool'].containing_oneof = _SCHEDULERPROFILE.oneofs_by_name['pool']
_TIMEOUTPROFILE.fields_by_name['maximum_duration'].message_type = google_dot_protobuf_dot_duration__pb2._DURATION
_MONITORINGPROFILE.fields_by_name['test_platform_alerting_thresholds'].message_type = _TESTPLATFORMALERTINGTHRESHOLDS
DESCRIPTOR.message_types_by_name['Profile'] = _PROFILE
DESCRIPTOR.message_types_by_name['TestPlatformProfile'] = _TESTPLATFORMPROFILE
DESCRIPTOR.message_types_by_name['SchedulerProfile'] = _SCHEDULERPROFILE
DESCRIPTOR.message_types_by_name['RetryProfile'] = _RETRYPROFILE
DESCRIPTOR.message_types_by_name['TimeoutProfile'] = _TIMEOUTPROFILE
DESCRIPTOR.message_types_by_name['MonitoringProfile'] = _MONITORINGPROFILE
DESCRIPTOR.message_types_by_name['TestPlatformAlertingThresholds'] = _TESTPLATFORMALERTINGTHRESHOLDS
_sym_db.RegisterFileDescriptor(DESCRIPTOR)

Profile = _reflection.GeneratedProtocolMessageType('Profile', (_message.Message,), dict(
  DESCRIPTOR = _PROFILE,
  __module__ = 'client.profile_pb2'
  # @@protoc_insertion_point(class_scope:client.Profile)
  ))
_sym_db.RegisterMessage(Profile)

TestPlatformProfile = _reflection.GeneratedProtocolMessageType('TestPlatformProfile', (_message.Message,), dict(
  DESCRIPTOR = _TESTPLATFORMPROFILE,
  __module__ = 'client.profile_pb2'
  # @@protoc_insertion_point(class_scope:client.TestPlatformProfile)
  ))
_sym_db.RegisterMessage(TestPlatformProfile)

SchedulerProfile = _reflection.GeneratedProtocolMessageType('SchedulerProfile', (_message.Message,), dict(
  DESCRIPTOR = _SCHEDULERPROFILE,
  __module__ = 'client.profile_pb2'
  # @@protoc_insertion_point(class_scope:client.SchedulerProfile)
  ))
_sym_db.RegisterMessage(SchedulerProfile)

RetryProfile = _reflection.GeneratedProtocolMessageType('RetryProfile', (_message.Message,), dict(
  DESCRIPTOR = _RETRYPROFILE,
  __module__ = 'client.profile_pb2'
  # @@protoc_insertion_point(class_scope:client.RetryProfile)
  ))
_sym_db.RegisterMessage(RetryProfile)

TimeoutProfile = _reflection.GeneratedProtocolMessageType('TimeoutProfile', (_message.Message,), dict(
  DESCRIPTOR = _TIMEOUTPROFILE,
  __module__ = 'client.profile_pb2'
  # @@protoc_insertion_point(class_scope:client.TimeoutProfile)
  ))
_sym_db.RegisterMessage(TimeoutProfile)

MonitoringProfile = _reflection.GeneratedProtocolMessageType('MonitoringProfile', (_message.Message,), dict(
  DESCRIPTOR = _MONITORINGPROFILE,
  __module__ = 'client.profile_pb2'
  # @@protoc_insertion_point(class_scope:client.MonitoringProfile)
  ))
_sym_db.RegisterMessage(MonitoringProfile)

TestPlatformAlertingThresholds = _reflection.GeneratedProtocolMessageType('TestPlatformAlertingThresholds', (_message.Message,), dict(
  DESCRIPTOR = _TESTPLATFORMALERTINGTHRESHOLDS,
  __module__ = 'client.profile_pb2'
  # @@protoc_insertion_point(class_scope:client.TestPlatformAlertingThresholds)
  ))
_sym_db.RegisterMessage(TestPlatformAlertingThresholds)


DESCRIPTOR._options = None
# @@protoc_insertion_point(module_scope)
