# 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=None,
  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.SoftwareAttributesb\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)


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