Mercurial > repos > shellac > sam_consensus_v3
comparison env/lib/python3.9/site-packages/boto/cloudsearch/domain.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
| author | shellac |
|---|---|
| date | Mon, 22 Mar 2021 18:12:50 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:4f3585e2f14b |
|---|---|
| 1 # Copyright (c) 2012 Mitch Garnaat http://garnaat.org/ | |
| 2 # Copyright (c) 2012 Amazon.com, Inc. or its affiliates. | |
| 3 # All Rights Reserved | |
| 4 # | |
| 5 # Permission is hereby granted, free of charge, to any person obtaining a | |
| 6 # copy of this software and associated documentation files (the | |
| 7 # "Software"), to deal in the Software without restriction, including | |
| 8 # without limitation the rights to use, copy, modify, merge, publish, dis- | |
| 9 # tribute, sublicense, and/or sell copies of the Software, and to permit | |
| 10 # persons to whom the Software is furnished to do so, subject to the fol- | |
| 11 # lowing conditions: | |
| 12 # | |
| 13 # The above copyright notice and this permission notice shall be included | |
| 14 # in all copies or substantial portions of the Software. | |
| 15 # | |
| 16 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | |
| 17 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- | |
| 18 # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT | |
| 19 # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | |
| 20 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
| 21 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | |
| 22 # IN THE SOFTWARE. | |
| 23 # | |
| 24 | |
| 25 import boto | |
| 26 from boto.compat import json | |
| 27 from boto.cloudsearch.optionstatus import OptionStatus | |
| 28 from boto.cloudsearch.optionstatus import IndexFieldStatus | |
| 29 from boto.cloudsearch.optionstatus import ServicePoliciesStatus | |
| 30 from boto.cloudsearch.optionstatus import RankExpressionStatus | |
| 31 from boto.cloudsearch.document import DocumentServiceConnection | |
| 32 from boto.cloudsearch.search import SearchConnection | |
| 33 | |
| 34 def handle_bool(value): | |
| 35 if value in [True, 'true', 'True', 'TRUE', 1]: | |
| 36 return True | |
| 37 return False | |
| 38 | |
| 39 | |
| 40 class Domain(object): | |
| 41 """ | |
| 42 A Cloudsearch domain. | |
| 43 | |
| 44 :ivar name: The name of the domain. | |
| 45 | |
| 46 :ivar id: The internally generated unique identifier for the domain. | |
| 47 | |
| 48 :ivar created: A boolean which is True if the domain is | |
| 49 created. It can take several minutes to initialize a domain | |
| 50 when CreateDomain is called. Newly created search domains are | |
| 51 returned with a False value for Created until domain creation | |
| 52 is complete | |
| 53 | |
| 54 :ivar deleted: A boolean which is True if the search domain has | |
| 55 been deleted. The system must clean up resources dedicated to | |
| 56 the search domain when delete is called. Newly deleted | |
| 57 search domains are returned from list_domains with a True | |
| 58 value for deleted for several minutes until resource cleanup | |
| 59 is complete. | |
| 60 | |
| 61 :ivar processing: True if processing is being done to activate the | |
| 62 current domain configuration. | |
| 63 | |
| 64 :ivar num_searchable_docs: The number of documents that have been | |
| 65 submittted to the domain and indexed. | |
| 66 | |
| 67 :ivar requires_index_document: True if index_documents needs to be | |
| 68 called to activate the current domain configuration. | |
| 69 | |
| 70 :ivar search_instance_count: The number of search instances that are | |
| 71 available to process search requests. | |
| 72 | |
| 73 :ivar search_instance_type: The instance type that is being used to | |
| 74 process search requests. | |
| 75 | |
| 76 :ivar search_partition_count: The number of partitions across which | |
| 77 the search index is spread. | |
| 78 """ | |
| 79 | |
| 80 def __init__(self, layer1, data): | |
| 81 self.layer1 = layer1 | |
| 82 self.update_from_data(data) | |
| 83 | |
| 84 def update_from_data(self, data): | |
| 85 self.created = data['created'] | |
| 86 self.deleted = data['deleted'] | |
| 87 self.processing = data['processing'] | |
| 88 self.requires_index_documents = data['requires_index_documents'] | |
| 89 self.domain_id = data['domain_id'] | |
| 90 self.domain_name = data['domain_name'] | |
| 91 self.num_searchable_docs = data['num_searchable_docs'] | |
| 92 self.search_instance_count = data['search_instance_count'] | |
| 93 self.search_instance_type = data.get('search_instance_type', None) | |
| 94 self.search_partition_count = data['search_partition_count'] | |
| 95 self._doc_service = data['doc_service'] | |
| 96 self._search_service = data['search_service'] | |
| 97 | |
| 98 @property | |
| 99 def doc_service_arn(self): | |
| 100 return self._doc_service['arn'] | |
| 101 | |
| 102 @property | |
| 103 def doc_service_endpoint(self): | |
| 104 return self._doc_service['endpoint'] | |
| 105 | |
| 106 @property | |
| 107 def search_service_arn(self): | |
| 108 return self._search_service['arn'] | |
| 109 | |
| 110 @property | |
| 111 def search_service_endpoint(self): | |
| 112 return self._search_service['endpoint'] | |
| 113 | |
| 114 @property | |
| 115 def created(self): | |
| 116 return self._created | |
| 117 | |
| 118 @created.setter | |
| 119 def created(self, value): | |
| 120 self._created = handle_bool(value) | |
| 121 | |
| 122 @property | |
| 123 def deleted(self): | |
| 124 return self._deleted | |
| 125 | |
| 126 @deleted.setter | |
| 127 def deleted(self, value): | |
| 128 self._deleted = handle_bool(value) | |
| 129 | |
| 130 @property | |
| 131 def processing(self): | |
| 132 return self._processing | |
| 133 | |
| 134 @processing.setter | |
| 135 def processing(self, value): | |
| 136 self._processing = handle_bool(value) | |
| 137 | |
| 138 @property | |
| 139 def requires_index_documents(self): | |
| 140 return self._requires_index_documents | |
| 141 | |
| 142 @requires_index_documents.setter | |
| 143 def requires_index_documents(self, value): | |
| 144 self._requires_index_documents = handle_bool(value) | |
| 145 | |
| 146 @property | |
| 147 def search_partition_count(self): | |
| 148 return self._search_partition_count | |
| 149 | |
| 150 @search_partition_count.setter | |
| 151 def search_partition_count(self, value): | |
| 152 self._search_partition_count = int(value) | |
| 153 | |
| 154 @property | |
| 155 def search_instance_count(self): | |
| 156 return self._search_instance_count | |
| 157 | |
| 158 @search_instance_count.setter | |
| 159 def search_instance_count(self, value): | |
| 160 self._search_instance_count = int(value) | |
| 161 | |
| 162 @property | |
| 163 def num_searchable_docs(self): | |
| 164 return self._num_searchable_docs | |
| 165 | |
| 166 @num_searchable_docs.setter | |
| 167 def num_searchable_docs(self, value): | |
| 168 self._num_searchable_docs = int(value) | |
| 169 | |
| 170 @property | |
| 171 def name(self): | |
| 172 return self.domain_name | |
| 173 | |
| 174 @property | |
| 175 def id(self): | |
| 176 return self.domain_id | |
| 177 | |
| 178 def delete(self): | |
| 179 """ | |
| 180 Delete this domain and all index data associated with it. | |
| 181 """ | |
| 182 return self.layer1.delete_domain(self.name) | |
| 183 | |
| 184 def get_stemming(self): | |
| 185 """ | |
| 186 Return a :class:`boto.cloudsearch.option.OptionStatus` object | |
| 187 representing the currently defined stemming options for | |
| 188 the domain. | |
| 189 """ | |
| 190 return OptionStatus(self, None, | |
| 191 self.layer1.describe_stemming_options, | |
| 192 self.layer1.update_stemming_options) | |
| 193 | |
| 194 def get_stopwords(self): | |
| 195 """ | |
| 196 Return a :class:`boto.cloudsearch.option.OptionStatus` object | |
| 197 representing the currently defined stopword options for | |
| 198 the domain. | |
| 199 """ | |
| 200 return OptionStatus(self, None, | |
| 201 self.layer1.describe_stopword_options, | |
| 202 self.layer1.update_stopword_options) | |
| 203 | |
| 204 def get_synonyms(self): | |
| 205 """ | |
| 206 Return a :class:`boto.cloudsearch.option.OptionStatus` object | |
| 207 representing the currently defined synonym options for | |
| 208 the domain. | |
| 209 """ | |
| 210 return OptionStatus(self, None, | |
| 211 self.layer1.describe_synonym_options, | |
| 212 self.layer1.update_synonym_options) | |
| 213 | |
| 214 def get_access_policies(self): | |
| 215 """ | |
| 216 Return a :class:`boto.cloudsearch.option.OptionStatus` object | |
| 217 representing the currently defined access policies for | |
| 218 the domain. | |
| 219 """ | |
| 220 return ServicePoliciesStatus(self, None, | |
| 221 self.layer1.describe_service_access_policies, | |
| 222 self.layer1.update_service_access_policies) | |
| 223 | |
| 224 def index_documents(self): | |
| 225 """ | |
| 226 Tells the search domain to start indexing its documents using | |
| 227 the latest text processing options and IndexFields. This | |
| 228 operation must be invoked to make options whose OptionStatus | |
| 229 has OptioState of RequiresIndexDocuments visible in search | |
| 230 results. | |
| 231 """ | |
| 232 self.layer1.index_documents(self.name) | |
| 233 | |
| 234 def get_index_fields(self, field_names=None): | |
| 235 """ | |
| 236 Return a list of index fields defined for this domain. | |
| 237 """ | |
| 238 data = self.layer1.describe_index_fields(self.name, field_names) | |
| 239 return [IndexFieldStatus(self, d) for d in data] | |
| 240 | |
| 241 def create_index_field(self, field_name, field_type, | |
| 242 default='', facet=False, result=False, searchable=False, | |
| 243 source_attributes=[]): | |
| 244 """ | |
| 245 Defines an ``IndexField``, either replacing an existing | |
| 246 definition or creating a new one. | |
| 247 | |
| 248 :type field_name: string | |
| 249 :param field_name: The name of a field in the search index. | |
| 250 | |
| 251 :type field_type: string | |
| 252 :param field_type: The type of field. Valid values are | |
| 253 uint | literal | text | |
| 254 | |
| 255 :type default: string or int | |
| 256 :param default: The default value for the field. If the | |
| 257 field is of type ``uint`` this should be an integer value. | |
| 258 Otherwise, it's a string. | |
| 259 | |
| 260 :type facet: bool | |
| 261 :param facet: A boolean to indicate whether facets | |
| 262 are enabled for this field or not. Does not apply to | |
| 263 fields of type ``uint``. | |
| 264 | |
| 265 :type results: bool | |
| 266 :param results: A boolean to indicate whether values | |
| 267 of this field can be returned in search results or | |
| 268 used in ranking. Does not apply to fields of type ``uint``. | |
| 269 | |
| 270 :type searchable: bool | |
| 271 :param searchable: A boolean to indicate whether search | |
| 272 is enabled for this field or not. Applies only to fields | |
| 273 of type ``literal``. | |
| 274 | |
| 275 :type source_attributes: list of dicts | |
| 276 :param source_attributes: An optional list of dicts that | |
| 277 provide information about attributes for this index field. | |
| 278 A maximum of 20 source attributes can be configured for | |
| 279 each index field. | |
| 280 | |
| 281 Each item in the list is a dict with the following keys: | |
| 282 | |
| 283 * data_copy - The value is a dict with the following keys: | |
| 284 * default - Optional default value if the source attribute | |
| 285 is not specified in a document. | |
| 286 * name - The name of the document source field to add | |
| 287 to this ``IndexField``. | |
| 288 * data_function - Identifies the transformation to apply | |
| 289 when copying data from a source attribute. | |
| 290 * data_map - The value is a dict with the following keys: | |
| 291 * cases - A dict that translates source field values | |
| 292 to custom values. | |
| 293 * default - An optional default value to use if the | |
| 294 source attribute is not specified in a document. | |
| 295 * name - the name of the document source field to add | |
| 296 to this ``IndexField`` | |
| 297 * data_trim_title - Trims common title words from a source | |
| 298 document attribute when populating an ``IndexField``. | |
| 299 This can be used to create an ``IndexField`` you can | |
| 300 use for sorting. The value is a dict with the following | |
| 301 fields: | |
| 302 * default - An optional default value. | |
| 303 * language - an IETF RFC 4646 language code. | |
| 304 * separator - The separator that follows the text to trim. | |
| 305 * name - The name of the document source field to add. | |
| 306 | |
| 307 :raises: BaseException, InternalException, LimitExceededException, | |
| 308 InvalidTypeException, ResourceNotFoundException | |
| 309 """ | |
| 310 data = self.layer1.define_index_field(self.name, field_name, | |
| 311 field_type, default=default, | |
| 312 facet=facet, result=result, | |
| 313 searchable=searchable, | |
| 314 source_attributes=source_attributes) | |
| 315 return IndexFieldStatus(self, data, | |
| 316 self.layer1.describe_index_fields) | |
| 317 | |
| 318 def get_rank_expressions(self, rank_names=None): | |
| 319 """ | |
| 320 Return a list of rank expressions defined for this domain. | |
| 321 """ | |
| 322 fn = self.layer1.describe_rank_expressions | |
| 323 data = fn(self.name, rank_names) | |
| 324 return [RankExpressionStatus(self, d, fn) for d in data] | |
| 325 | |
| 326 def create_rank_expression(self, name, expression): | |
| 327 """ | |
| 328 Create a new rank expression. | |
| 329 | |
| 330 :type rank_name: string | |
| 331 :param rank_name: The name of an expression computed for ranking | |
| 332 while processing a search request. | |
| 333 | |
| 334 :type rank_expression: string | |
| 335 :param rank_expression: The expression to evaluate for ranking | |
| 336 or thresholding while processing a search request. The | |
| 337 RankExpression syntax is based on JavaScript expressions | |
| 338 and supports: | |
| 339 | |
| 340 * Integer, floating point, hex and octal literals | |
| 341 * Shortcut evaluation of logical operators such that an | |
| 342 expression a || b evaluates to the value a if a is | |
| 343 true without evaluting b at all | |
| 344 * JavaScript order of precedence for operators | |
| 345 * Arithmetic operators: + - * / % | |
| 346 * Boolean operators (including the ternary operator) | |
| 347 * Bitwise operators | |
| 348 * Comparison operators | |
| 349 * Common mathematic functions: abs ceil erf exp floor | |
| 350 lgamma ln log2 log10 max min sqrt pow | |
| 351 * Trigonometric library functions: acosh acos asinh asin | |
| 352 atanh atan cosh cos sinh sin tanh tan | |
| 353 * Random generation of a number between 0 and 1: rand | |
| 354 * Current time in epoch: time | |
| 355 * The min max functions that operate on a variable argument list | |
| 356 | |
| 357 Intermediate results are calculated as double precision | |
| 358 floating point values. The final return value of a | |
| 359 RankExpression is automatically converted from floating | |
| 360 point to a 32-bit unsigned integer by rounding to the | |
| 361 nearest integer, with a natural floor of 0 and a ceiling | |
| 362 of max(uint32_t), 4294967295. Mathematical errors such as | |
| 363 dividing by 0 will fail during evaluation and return a | |
| 364 value of 0. | |
| 365 | |
| 366 The source data for a RankExpression can be the name of an | |
| 367 IndexField of type uint, another RankExpression or the | |
| 368 reserved name text_relevance. The text_relevance source is | |
| 369 defined to return an integer from 0 to 1000 (inclusive) to | |
| 370 indicate how relevant a document is to the search request, | |
| 371 taking into account repetition of search terms in the | |
| 372 document and proximity of search terms to each other in | |
| 373 each matching IndexField in the document. | |
| 374 | |
| 375 For more information about using rank expressions to | |
| 376 customize ranking, see the Amazon CloudSearch Developer | |
| 377 Guide. | |
| 378 | |
| 379 :raises: BaseException, InternalException, LimitExceededException, | |
| 380 InvalidTypeException, ResourceNotFoundException | |
| 381 """ | |
| 382 data = self.layer1.define_rank_expression(self.name, name, expression) | |
| 383 return RankExpressionStatus(self, data, | |
| 384 self.layer1.describe_rank_expressions) | |
| 385 | |
| 386 def get_document_service(self): | |
| 387 return DocumentServiceConnection(domain=self) | |
| 388 | |
| 389 def get_search_service(self): | |
| 390 return SearchConnection(domain=self) | |
| 391 | |
| 392 def __repr__(self): | |
| 393 return '<Domain: %s>' % self.domain_name | |
| 394 |
