Pylint integration updates (#643)

* updated files with docstrings to pass pylint

Signed-off-by: Mark Cohen <[email protected]>

* updated samples to prepare for enabling missing-docstring linter; will continue to work on this before committing setup.cfg

Signed-off-by: Mark Cohen <[email protected]>

* removed missing-function-docstring from setup.cfg so the linter doesn't fail while work on docstrings continues

Signed-off-by: Mark Cohen <[email protected]>

* corrected unnecessary return docstring values

Signed-off-by: Mark Cohen <[email protected]>

* fixing failure in 'black' on reformatting

Signed-off-by: Mark Cohen <[email protected]>

* updated utils to pass missing-function-docstring tests

Signed-off-by: Mark Cohen <[email protected]>

* 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 <[email protected]>

* * 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 <[email protected]>

* 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 <[email protected]>

* removed pylint ignore missing-function-docstring

Signed-off-by: Mark Cohen <[email protected]>

* added pylint.extensions.docparams plugin

updated some docstrings to correct parameters

removed pylint from setup.cfg

Signed-off-by: Mark Cohen <[email protected]>

* added four lints for opensearchpy/

Signed-off-by: Mark Cohen <[email protected]>

* adding await back to client.info() call

Signed-off-by: Mark Cohen <[email protected]>

* 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 <[email protected]>

---------

Signed-off-by: Mark Cohen <[email protected]>
This commit is contained in:
Mark Cohen
2024-01-19 13:36:05 -05:00
committed by GitHub
parent 2ab3a40307
commit 0ddbf8cafa
47 changed files with 563 additions and 218 deletions
@@ -53,12 +53,23 @@ def client() -> Any:
@fixture(scope="session") # type: ignore
def opensearch_version(client: Any) -> Any:
info = client.info()
"""
yields a major version from the client
:param client: client to connect to opensearch
"""
info: Any = client.info()
print(info)
yield tuple(
int(x)
for x in re.match(r"^([0-9.]+)", info["version"]["number"]).group(1).split(".") # type: ignore
)
yield (int(x) for x in match_version(info))
def match_version(info: Any) -> Any:
"""
matches the major version from the given client info
:param info: part of the response from OpenSearch
"""
match = re.match(r"^([0-9.]+)", info["version"]["number"])
assert match is not None
yield match.group(1).split(".")
@fixture # type: ignore
@@ -107,6 +118,7 @@ def pull_request(write_client: Any) -> Any:
@fixture # type: ignore
def setup_ubq_tests(client: Any) -> str:
# todo what's a ubq test?
index = "test-git"
create_git_index(client, index)
bulk(client, TEST_GIT_DATA, raise_on_error=True, refresh=True)
@@ -509,7 +509,9 @@ class TestScan(OpenSearchTestCase):
}
client_mock.clear_scroll.return_value = {}
data = list(helpers.scan(self.client, index="test_index", **{key: val})) # type: ignore
data = list(
helpers.scan(self.client, index="test_index", **{key: val}) # type: ignore
)
self.assertEqual(data, [{"search_data": 1}])
@@ -89,6 +89,7 @@ SKIP_TESTS = {
"OpenSearch-main/rest-api-spec/src/main/resources/rest-api-spec/test/search/aggregation/20_terms[4]",
"OpenSearch-main/rest-api-spec/src/main/resources/rest-api-spec/test/tasks/list/10_basic[0]",
"OpenSearch-main/rest-api-spec/src/main/resources/rest-api-spec/test/index/90_unsigned_long[1]",
"OpenSearch-main/rest-api-spec/src/main/resources/rest-api-spec/test/indices/stats/50_noop_update[0]",
"search/aggregation/250_moving_fn[1]",
# body: null
"indices/simulate_index_template/10_basic[2]",
@@ -157,7 +158,7 @@ class YamlRunner:
self._teardown_code = test_spec.pop("teardown", None)
def setup(self) -> Any:
# Pull skips from individual tests to not do unnecessary setup.
"""Pull skips from individual tests to not do unnecessary setup."""
skip_code: Any = []
for action in self._run_code:
assert len(action) == 1
@@ -472,7 +473,7 @@ client = get_client()
def load_rest_api_tests() -> None:
# Try loading the REST API test specs from OpenSearch core.
"""Try loading the REST API test specs from OpenSearch core."""
try:
# Construct the HTTP and OpenSearch client
http = urllib3.PoolManager(retries=10)