0ddbf8cafa
* updated files with docstrings to pass pylint Signed-off-by: Mark Cohen <markcoh@amazon.com> * updated samples to prepare for enabling missing-docstring linter; will continue to work on this before committing setup.cfg Signed-off-by: Mark Cohen <markcoh@amazon.com> * removed missing-function-docstring from setup.cfg so the linter doesn't fail while work on docstrings continues Signed-off-by: Mark Cohen <markcoh@amazon.com> * corrected unnecessary return docstring values Signed-off-by: Mark Cohen <markcoh@amazon.com> * fixing failure in 'black' on reformatting Signed-off-by: Mark Cohen <markcoh@amazon.com> * updated utils to pass missing-function-docstring tests Signed-off-by: Mark Cohen <markcoh@amazon.com> * updated functions with missing docstrings or pylint ignore instructions; added a utility to automatically add these ignore instructions to most functions that should be self-describing; rolled back some automatically generated code mistakenly changed Signed-off-by: Mark Cohen <markcoh@amazon.com> * * ignoring opensearchpy for pylint and then added it back to noxfile.py * fixed some lints; created a feature flag for newer dynamic pylint so now lints can be fixed first in legacy code and then enabled by multiple people * extracted a method for per-folder linting * updated noxfile.lint_per_folder with type hints * enabled unspecified-encoding in pylint * added disable missing-function-docstring pragma to test_clients.py in test_async and test_server * added more encodings to pass unspecified-encoding pylint tests * updated changelog Signed-off-by: Mark Cohen <markcoh@amazon.com> * updated CHANGELOG.md entry removed the feature flag for pylint lint_per_folder fixed failures from mypy and pylint removed pylint MESSAGE CONTROL config from setup.cfg after relocating to lint_per_folder method Signed-off-by: Mark Cohen <markcoh@amazon.com> * removed pylint ignore missing-function-docstring Signed-off-by: Mark Cohen <markcoh@amazon.com> * added pylint.extensions.docparams plugin updated some docstrings to correct parameters removed pylint from setup.cfg Signed-off-by: Mark Cohen <markcoh@amazon.com> * added four lints for opensearchpy/ Signed-off-by: Mark Cohen <markcoh@amazon.com> * adding await back to client.info() call Signed-off-by: Mark Cohen <markcoh@amazon.com> * updated TODOs as requested renamed test_opensearchpy.test_async.test_server.test_helpers.conftest.setup_ubq_tests to setup_update_by_query_tests added OpenSearch-main/rest-api-spec/src/main/resources/rest-api-spec/test/indices/stats/50_noop_update[0] to skip tests list run_tests.py catches a CalledProcessError when the git repo already exists and the command to add the origin fails in fetch_opensearch_repo() Signed-off-by: Mark Cohen <markcoh@amazon.com> --------- Signed-off-by: Mark Cohen <markcoh@amazon.com>
147 lines
5.0 KiB
Python
147 lines
5.0 KiB
Python
#!/usr/bin/env python
|
|
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
# The OpenSearch Contributors require contributions made to
|
|
# this file be licensed under the Apache-2.0 license or a
|
|
# compatible open source license.
|
|
#
|
|
# Modifications Copyright OpenSearch Contributors. See
|
|
# GitHub history for details.
|
|
from opensearchpy import OpenSearch
|
|
|
|
|
|
def main() -> None:
|
|
"""
|
|
# pylint: disable=line-too-long
|
|
1. connects to an OpenSearch instance running on localhost
|
|
2. Create an index template named `books` with default settings and mappings for indices of
|
|
the `books-*` pattern. You can create an index template to define default settings and mappings for indices
|
|
of certain patterns.
|
|
3. When creating an index that matches the `books-*` pattern, OpenSearch will automatically apply the template's
|
|
settings and mappings to the index. Create an index named books-nonfiction and verify that its settings and mappings
|
|
match those of the template
|
|
4. If multiple index templates match the index's name, OpenSearch will apply the template with the highest
|
|
`priority`. In the example, two templates are created with different priorities.
|
|
5. Composable index templates are a new type of index template that allow you to define multiple component templates
|
|
and compose them into a final template. The last part of the example before cleaning up creates a component
|
|
template named `books_mappings` with default mappings for indices of the `books-*` and `books-fiction-*` patterns.
|
|
"""
|
|
# Create a client instance
|
|
client = OpenSearch(
|
|
hosts=["https://localhost:9200"],
|
|
use_ssl=True,
|
|
verify_certs=False,
|
|
http_auth=("admin", "admin"),
|
|
)
|
|
|
|
# create an index template
|
|
client.indices.put_index_template(
|
|
name="books",
|
|
body={
|
|
"index_patterns": ["books-*"],
|
|
"priority": 1,
|
|
"template": {
|
|
"settings": {"index": {"number_of_shards": 3, "number_of_replicas": 0}},
|
|
"mappings": {
|
|
"properties": {
|
|
"title": {"type": "text"},
|
|
"author": {"type": "text"},
|
|
"published_on": {"type": "date"},
|
|
"pages": {"type": "integer"},
|
|
}
|
|
},
|
|
},
|
|
},
|
|
)
|
|
|
|
# create the index which applies the index template settings matched by pattern
|
|
client.indices.create(index="books-nonfiction")
|
|
print(client.indices.get(index="books-nonfiction"))
|
|
|
|
client.indices.put_index_template(
|
|
name="books",
|
|
body={
|
|
"index_patterns": ["books-*"],
|
|
"priority": 1,
|
|
"template": {
|
|
"settings": {"index": {"number_of_shards": 3, "number_of_replicas": 0}}
|
|
},
|
|
},
|
|
)
|
|
|
|
client.indices.put_index_template(
|
|
name="books-fiction",
|
|
body={
|
|
"index_patterns": ["books-fiction-*"],
|
|
"priority": 2,
|
|
"template": {
|
|
"settings": {"index": {"number_of_shards": 1, "number_of_replicas": 1}}
|
|
},
|
|
},
|
|
)
|
|
|
|
# # Test multiple index templates
|
|
client.indices.create(index="books-fiction-romance")
|
|
print(client.indices.get(index="books-fiction-romance"))
|
|
|
|
client.cluster.put_component_template(
|
|
name="books_mappings",
|
|
body={
|
|
"template": {
|
|
"mappings": {
|
|
"properties": {
|
|
"title": {"type": "text"},
|
|
"author": {"type": "text"},
|
|
"published_on": {"type": "date"},
|
|
"pages": {"type": "integer"},
|
|
}
|
|
}
|
|
}
|
|
},
|
|
)
|
|
|
|
# composable index templates
|
|
client.indices.put_index_template(
|
|
name="books",
|
|
body={
|
|
"index_patterns": ["books-*"],
|
|
"composed_of": ["books_mappings"],
|
|
"priority": 4,
|
|
"template": {
|
|
"settings": {"index": {"number_of_shards": 3, "number_of_replicas": 0}}
|
|
},
|
|
},
|
|
)
|
|
|
|
client.indices.put_index_template(
|
|
name="books-fiction",
|
|
body={
|
|
"index_patterns": ["books-fiction-*"],
|
|
"composed_of": ["books_mappings"],
|
|
"priority": 5,
|
|
"template": {
|
|
"settings": {"index": {"number_of_shards": 1, "number_of_replicas": 1}}
|
|
},
|
|
},
|
|
)
|
|
|
|
# Test composable index templates
|
|
client.indices.create(index="books-fiction-horror")
|
|
print(client.indices.get(index="books-fiction-horror"))
|
|
|
|
# Get an index template
|
|
print(client.indices.get_index_template(name="books"))
|
|
|
|
# Delete an index template
|
|
client.indices.delete_index_template(name="books")
|
|
|
|
# Cleanup
|
|
client.indices.delete(index="books-*")
|
|
client.indices.delete_index_template(name="books-fiction")
|
|
client.cluster.delete_component_template(name="books_mappings")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|