import logging
from awscli.customizations.flatten import FlattenArguments, SEP
from botocore.compat import OrderedDict
LOG = logging.getLogger(__name__)
DEFAULT_VALUE_TYPE_MAP = {
'Int': int,
'Double': float,
'IntArray': int,
'DoubleArray': float
}
def index_hydrate(params, container, cli_type, key, value):
"""
Hydrate an index-field option value to construct something like::
{
'index_field': {
'DoubleOptions': {
'DefaultValue': 0.0
}
}
}
"""
if 'IndexField' not in params:
params['IndexField'] = {}
if 'IndexFieldType' not in params['IndexField']:
raise RuntimeError('You must pass the --type option.')
_type = params['IndexField']['IndexFieldType']
_type = ''.join([i.capitalize() for i in _type.split('-')])
if _type == 'Latlon':
_type = 'LatLon'
if key.split(SEP)[-1] == 'DefaultValue':
value = DEFAULT_VALUE_TYPE_MAP.get(_type, lambda x: x)(value)
if _type + 'Options' not in params['IndexField']:
params['IndexField'][_type + 'Options'] = {}
params['IndexField'][_type + 'Options'][key.split(SEP)[-1]] = value
FLATTEN_CONFIG = {
"define-expression": {
"expression": {
"keep": False,
"flatten": OrderedDict([
("ExpressionName", {"name": "name"}),
("ExpressionValue", {"name": "expression"}),]),
}
},
"define-index-field": {
"index-field": {
"keep": False,
"flatten": OrderedDict([
("IndexFieldName", {"name": "name"}),
("IndexFieldType", {"name": "type"}),
("IntOptions.DefaultValue", {"name": "default-value",
"type": "string",
"hydrate": index_hydrate}),
("IntOptions.FacetEnabled", {"name": "facet-enabled",
"hydrate": index_hydrate }),
("IntOptions.SearchEnabled", {"name": "search-enabled",
"hydrate": index_hydrate}),
("IntOptions.ReturnEnabled", {"name": "return-enabled",
"hydrate": index_hydrate}),
("IntOptions.SortEnabled", {"name": "sort-enabled",
"hydrate": index_hydrate}),
("IntOptions.SourceField", {"name": "source-field",
"type": "string",
"hydrate": index_hydrate }),
("TextOptions.HighlightEnabled", {"name": "highlight-enabled",
"hydrate": index_hydrate}),
("TextOptions.AnalysisScheme", {"name": "analysis-scheme",
"hydrate": index_hydrate})
])
}
}
}
def initialize(cli):
"""
The entry point for CloudSearch customizations.
"""
flattened = FlattenArguments('cloudsearch', FLATTEN_CONFIG)
flattened.register(cli)