perfkitbenchmarker/resources/pinecone/pinecone_resource_spec.py (71 lines of code) (raw):

# Copyright 2017 PerfKitBenchmarker Authors. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Classes relating to decoding a pinecone resource.""" from perfkitbenchmarker import provider_info from perfkitbenchmarker.configs import option_decoders from perfkitbenchmarker.configs import spec from perfkitbenchmarker.resources.pinecone import flags as pinecone_flags class PineconeResourcesSpec(spec.BaseSpec): """Properties representing pinecone. Attributes: server_type: The type of server to create. """ CLOUD = ['AWS', 'GCP', 'Azure'] def __init__(self, *args, **kwargs): self.server_type: str | None = None super().__init__(*args, **kwargs) @classmethod def _GetOptionDecoderConstructions(cls): """Gets decoder classes and constructor args for each configurable option. Returns: dict. Maps option name string to a (ConfigOptionDecoder class, dict) pair. The pair specifies a decoder class and its __init__() keyword arguments to construct in order to decode the named option. """ result = super()._GetOptionDecoderConstructions() result.update({ 'cloud': ( option_decoders.EnumDecoder, {'valid_values': provider_info.VALID_CLOUDS}, ), 'server_type': ( option_decoders.EnumDecoder, { 'default': pinecone_flags.POD, 'valid_values': [ pinecone_flags.POD, pinecone_flags.SERVERLESS, ], }, ), 'server_environment': ( option_decoders.StringDecoder, {'default': None}, ), 'server_pod_type': ( option_decoders.StringDecoder, {'default': None}, ), 'server_api_key': ( option_decoders.StringDecoder, {'default': None}, ), 'server_replicas': (option_decoders.IntDecoder, {'default': 1}), 'server_shards': (option_decoders.IntDecoder, {'default': 1}), }) return result @classmethod def _ApplyFlags(cls, config_values, flag_values): """Modifies config options based on runtime flag values. Can be overridden by derived classes to add support for specific flags. Args: config_values: dict mapping config option names to provided values. May be modified by this function. flag_values: flags.FlagValues. Runtime flags that may override the provided config values. """ super()._ApplyFlags(config_values, flag_values) if flag_values['cloud'].present: config_values['cloud'] = flag_values.cloud if flag_values['pinecone_server_type'].present: config_values['server_type'] = flag_values.pinecone_server_type if flag_values['pinecone_server_environment'].present: config_values['server_environment'] = ( flag_values.pinecone_server_environment ) config_values['server_pod_type'] = flag_values.pinecone_server_pod_type if flag_values['pinecone_api_key'].present: config_values['server_api_key'] = flag_values.pinecone_api_key if flag_values['pinecone_server_replicas'].present: config_values['server_replicas'] = flag_values.pinecone_server_replicas if flag_values['pinecone_server_shards'].present: config_values['server_shards'] = flag_values.pinecone_server_shards class PineconeResourcesDecoder(option_decoders.TypeVerifier): """Decodes a pinecone resources spec.""" def __init__(self, **kwargs): super().__init__((dict), **kwargs) def Decode(self, value, component_full_name, flag_values): """Decodes the pinecone resources spec. Args: value: a dict containing 'cpus' and 'memory' keys. component_full_name: string. Fully qualified name of the configurable component containing the config option. flag_values: flags.FlagValues. Runtime flag values to be propagated to BaseSpec constructors. Returns: The decoded PineconeResourcesSpec. """ super().Decode(value, component_full_name, flag_values) return PineconeResourcesSpec( self._GetOptionFullName(component_full_name), flag_values=flag_values, **value )