# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: test_platform/multibot/common.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.test_platform import request_pb2 as test__platform_dot_request__pb2
from chromite.api.gen.test_platform.skylab_local_state import host_info_pb2 as test__platform_dot_skylab__local__state_dot_host__info__pb2
from chromite.api.gen.test_platform.skylab_test_runner import request_pb2 as test__platform_dot_skylab__test__runner_dot_request__pb2


DESCRIPTOR = _descriptor.FileDescriptor(
  name='test_platform/multibot/common.proto',
  package='test_platform.multibot',
  syntax='proto3',
  serialized_options=_b('Z@go.chromium.org/chromiumos/infra/proto/go/test_platform/multibot'),
  serialized_pb=_b('\n#test_platform/multibot/common.proto\x12\x16test_platform.multibot\x1a\x1btest_platform/request.proto\x1a\x30test_platform/skylab_local_state/host_info.proto\x1a.test_platform/skylab_test_runner/request.proto\"\x1f\n\x0eMultiBotConfig\x12\r\n\x05topic\x18\x01 \x01(\t\"\xbf\x01\n\rHostInfoStore\x12H\n\nhost_infos\x18\x01 \x03(\x0b\x32\x34.test_platform.multibot.HostInfoStore.HostInfosEntry\x1a\x64\n\x0eHostInfosEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x41\n\x05value\x18\x02 \x01(\x0b\x32\x32.test_platform.skylab_local_state.AutotestHostInfo:\x02\x38\x01\"\xe4\x02\n\x0c\x46ollowerSpec\x12P\n\x11static_attributes\x18\x01 \x01(\x0b\x32\x35.test_platform.multibot.FollowerSpec.StaticAttributes\x12@\n\x06prejob\x18\x02 \x01(\x0b\x32\x30.test_platform.skylab_test_runner.Request.Prejob\x12\r\n\x05\x63ount\x18\x03 \x01(\x05\x1a\xb0\x01\n\x10StaticAttributes\x12M\n\x13hardware_attributes\x18\x01 \x01(\x0b\x32\x30.test_platform.Request.Params.HardwareAttributes\x12M\n\x13software_attributes\x18\x02 \x01(\x0b\x32\x30.test_platform.Request.Params.SoftwareAttributesBBZ@go.chromium.org/chromiumos/infra/proto/go/test_platform/multibotb\x06proto3')
  ,
  dependencies=[test__platform_dot_request__pb2.DESCRIPTOR,test__platform_dot_skylab__local__state_dot_host__info__pb2.DESCRIPTOR,test__platform_dot_skylab__test__runner_dot_request__pb2.DESCRIPTOR,])




_MULTIBOTCONFIG = _descriptor.Descriptor(
  name='MultiBotConfig',
  full_name='test_platform.multibot.MultiBotConfig',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='topic', full_name='test_platform.multibot.MultiBotConfig.topic', 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=190,
  serialized_end=221,
)


_HOSTINFOSTORE_HOSTINFOSENTRY = _descriptor.Descriptor(
  name='HostInfosEntry',
  full_name='test_platform.multibot.HostInfoStore.HostInfosEntry',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='key', full_name='test_platform.multibot.HostInfoStore.HostInfosEntry.key', 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='test_platform.multibot.HostInfoStore.HostInfosEntry.value', 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=_b('8\001'),
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=315,
  serialized_end=415,
)

_HOSTINFOSTORE = _descriptor.Descriptor(
  name='HostInfoStore',
  full_name='test_platform.multibot.HostInfoStore',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='host_infos', full_name='test_platform.multibot.HostInfoStore.host_infos', 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=[_HOSTINFOSTORE_HOSTINFOSENTRY, ],
  enum_types=[
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=224,
  serialized_end=415,
)


_FOLLOWERSPEC_STATICATTRIBUTES = _descriptor.Descriptor(
  name='StaticAttributes',
  full_name='test_platform.multibot.FollowerSpec.StaticAttributes',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='hardware_attributes', full_name='test_platform.multibot.FollowerSpec.StaticAttributes.hardware_attributes', 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='software_attributes', full_name='test_platform.multibot.FollowerSpec.StaticAttributes.software_attributes', 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=598,
  serialized_end=774,
)

_FOLLOWERSPEC = _descriptor.Descriptor(
  name='FollowerSpec',
  full_name='test_platform.multibot.FollowerSpec',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='static_attributes', full_name='test_platform.multibot.FollowerSpec.static_attributes', 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='prejob', full_name='test_platform.multibot.FollowerSpec.prejob', 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='count', full_name='test_platform.multibot.FollowerSpec.count', index=2,
      number=3, 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=[_FOLLOWERSPEC_STATICATTRIBUTES, ],
  enum_types=[
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=418,
  serialized_end=774,
)

_HOSTINFOSTORE_HOSTINFOSENTRY.fields_by_name['value'].message_type = test__platform_dot_skylab__local__state_dot_host__info__pb2._AUTOTESTHOSTINFO
_HOSTINFOSTORE_HOSTINFOSENTRY.containing_type = _HOSTINFOSTORE
_HOSTINFOSTORE.fields_by_name['host_infos'].message_type = _HOSTINFOSTORE_HOSTINFOSENTRY
_FOLLOWERSPEC_STATICATTRIBUTES.fields_by_name['hardware_attributes'].message_type = test__platform_dot_request__pb2._REQUEST_PARAMS_HARDWAREATTRIBUTES
_FOLLOWERSPEC_STATICATTRIBUTES.fields_by_name['software_attributes'].message_type = test__platform_dot_request__pb2._REQUEST_PARAMS_SOFTWAREATTRIBUTES
_FOLLOWERSPEC_STATICATTRIBUTES.containing_type = _FOLLOWERSPEC
_FOLLOWERSPEC.fields_by_name['static_attributes'].message_type = _FOLLOWERSPEC_STATICATTRIBUTES
_FOLLOWERSPEC.fields_by_name['prejob'].message_type = test__platform_dot_skylab__test__runner_dot_request__pb2._REQUEST_PREJOB
DESCRIPTOR.message_types_by_name['MultiBotConfig'] = _MULTIBOTCONFIG
DESCRIPTOR.message_types_by_name['HostInfoStore'] = _HOSTINFOSTORE
DESCRIPTOR.message_types_by_name['FollowerSpec'] = _FOLLOWERSPEC
_sym_db.RegisterFileDescriptor(DESCRIPTOR)

MultiBotConfig = _reflection.GeneratedProtocolMessageType('MultiBotConfig', (_message.Message,), dict(
  DESCRIPTOR = _MULTIBOTCONFIG,
  __module__ = 'test_platform.multibot.common_pb2'
  # @@protoc_insertion_point(class_scope:test_platform.multibot.MultiBotConfig)
  ))
_sym_db.RegisterMessage(MultiBotConfig)

HostInfoStore = _reflection.GeneratedProtocolMessageType('HostInfoStore', (_message.Message,), dict(

  HostInfosEntry = _reflection.GeneratedProtocolMessageType('HostInfosEntry', (_message.Message,), dict(
    DESCRIPTOR = _HOSTINFOSTORE_HOSTINFOSENTRY,
    __module__ = 'test_platform.multibot.common_pb2'
    # @@protoc_insertion_point(class_scope:test_platform.multibot.HostInfoStore.HostInfosEntry)
    ))
  ,
  DESCRIPTOR = _HOSTINFOSTORE,
  __module__ = 'test_platform.multibot.common_pb2'
  # @@protoc_insertion_point(class_scope:test_platform.multibot.HostInfoStore)
  ))
_sym_db.RegisterMessage(HostInfoStore)
_sym_db.RegisterMessage(HostInfoStore.HostInfosEntry)

FollowerSpec = _reflection.GeneratedProtocolMessageType('FollowerSpec', (_message.Message,), dict(

  StaticAttributes = _reflection.GeneratedProtocolMessageType('StaticAttributes', (_message.Message,), dict(
    DESCRIPTOR = _FOLLOWERSPEC_STATICATTRIBUTES,
    __module__ = 'test_platform.multibot.common_pb2'
    # @@protoc_insertion_point(class_scope:test_platform.multibot.FollowerSpec.StaticAttributes)
    ))
  ,
  DESCRIPTOR = _FOLLOWERSPEC,
  __module__ = 'test_platform.multibot.common_pb2'
  # @@protoc_insertion_point(class_scope:test_platform.multibot.FollowerSpec)
  ))
_sym_db.RegisterMessage(FollowerSpec)
_sym_db.RegisterMessage(FollowerSpec.StaticAttributes)


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