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:
@@ -34,13 +34,19 @@ from ...utils import wipe_cluster
|
||||
|
||||
|
||||
class AsyncOpenSearchTestCase(IsolatedAsyncioTestCase): # type: ignore
|
||||
async def asyncSetUp(self) -> None: # pylint: disable=invalid-name
|
||||
async def asyncSetUp(
|
||||
self,
|
||||
) -> None:
|
||||
# pylint: disable=invalid-name,missing-function-docstring
|
||||
self.client = await get_test_client(
|
||||
verify_certs=False, http_auth=("admin", "admin")
|
||||
)
|
||||
await add_connection("default", self.client)
|
||||
|
||||
async def asyncTearDown(self) -> None: # pylint: disable=invalid-name
|
||||
async def asyncTearDown(
|
||||
self,
|
||||
) -> None:
|
||||
# pylint: disable=invalid-name,missing-function-docstring
|
||||
wipe_cluster(self.client)
|
||||
if self.client:
|
||||
await self.client.close()
|
||||
|
||||
@@ -60,7 +60,9 @@ class TestYarlMissing:
|
||||
async def test_aiohttp_connection_works_without_yarl(
|
||||
self, async_client: Any, monkeypatch: Any
|
||||
) -> None:
|
||||
# This is a defensive test case for if aiohttp suddenly stops using yarl.
|
||||
"""
|
||||
This is a defensive test case for if aiohttp suddenly stops using yarl.
|
||||
"""
|
||||
from opensearchpy._async import http_aiohttp
|
||||
|
||||
monkeypatch.setattr(http_aiohttp, "yarl", False)
|
||||
|
||||
@@ -43,12 +43,24 @@ async def client() -> Any:
|
||||
|
||||
@fixture(scope="function") # type: ignore
|
||||
async def opensearch_version(client: Any) -> Any:
|
||||
"""
|
||||
yields the version of the OpenSearch cluster
|
||||
:param client: client connection to OpenSearch
|
||||
:return: yields major version number
|
||||
"""
|
||||
info = await 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) async for x in match_version(info))
|
||||
|
||||
|
||||
async def match_version(info: Any) -> Any:
|
||||
"""
|
||||
matches the full semver server version with the given info
|
||||
:param info: response from the OpenSearch cluster
|
||||
"""
|
||||
match = re.match(r"^([0-9.]+)", info["version"]["number"])
|
||||
assert match is not None
|
||||
yield match.group(1).split(".")
|
||||
|
||||
|
||||
@fixture # type: ignore
|
||||
@@ -60,7 +72,9 @@ async def write_client(client: Any) -> Any:
|
||||
|
||||
@fixture # type: ignore
|
||||
async def data_client(client: Any) -> Any:
|
||||
# create mappings
|
||||
"""
|
||||
create mappings
|
||||
"""
|
||||
await create_git_index(client, "git")
|
||||
await create_flat_git_index(client, "flat-git")
|
||||
# load data
|
||||
@@ -73,6 +87,11 @@ async def data_client(client: Any) -> Any:
|
||||
|
||||
@fixture # type: ignore
|
||||
async def pull_request(write_client: Any) -> Any:
|
||||
"""
|
||||
create dummy pull request instance
|
||||
:param write_client: #todo not used
|
||||
:return: instance of PullRequest
|
||||
"""
|
||||
await PullRequest.init()
|
||||
pr = PullRequest(
|
||||
_id=42,
|
||||
@@ -96,7 +115,12 @@ async def pull_request(write_client: Any) -> Any:
|
||||
|
||||
|
||||
@fixture # type: ignore
|
||||
async def setup_ubq_tests(client: Any) -> str:
|
||||
async def setup_update_by_query_tests(client: Any) -> str:
|
||||
"""
|
||||
sets up update by query tests
|
||||
:param client:
|
||||
:return: an index name
|
||||
"""
|
||||
index = "test-git"
|
||||
await create_git_index(client, index)
|
||||
await async_bulk(client, TEST_GIT_DATA, raise_on_error=True, refresh=True)
|
||||
|
||||
@@ -60,6 +60,9 @@ class FailingBulkClient(object):
|
||||
self._fail_with = fail_with
|
||||
|
||||
async def bulk(self, *args: Any, **kwargs: Any) -> Any:
|
||||
"""
|
||||
increments number of times called and, when it equals fail_at, raises self.fail_with
|
||||
"""
|
||||
self._called += 1
|
||||
if self._called in self._fail_at:
|
||||
raise self._fail_with
|
||||
|
||||
@@ -56,6 +56,10 @@ class MetricSearch(AsyncFacetedSearch):
|
||||
|
||||
@pytest.fixture(scope="function") # type: ignore
|
||||
def commit_search_cls(opensearch_version: Any) -> Any:
|
||||
"""
|
||||
:param opensearch_version the semver version of OpenSearch
|
||||
:return: an AsyncFacetedSearch for git commits
|
||||
"""
|
||||
interval_kwargs = {"fixed_interval": "1d"}
|
||||
|
||||
class CommitSearch(AsyncFacetedSearch):
|
||||
@@ -102,6 +106,10 @@ def repo_search_cls(opensearch_version: Any) -> Any:
|
||||
|
||||
@pytest.fixture(scope="function") # type: ignore
|
||||
def pr_search_cls(opensearch_version: Any) -> Any:
|
||||
"""
|
||||
:param opensearch_version: not used here... #TODO remove this parameter?
|
||||
:return: an AsyncFacetedSearch for pull requests
|
||||
"""
|
||||
interval_type = "calendar_interval"
|
||||
|
||||
class PRSearch(AsyncFacetedSearch):
|
||||
|
||||
@@ -19,9 +19,9 @@ pytestmark: MarkDecorator = pytest.mark.asyncio
|
||||
|
||||
|
||||
async def test_update_by_query_no_script(
|
||||
write_client: Any, setup_ubq_tests: Any
|
||||
write_client: Any, setup_update_by_query_tests: Any
|
||||
) -> None:
|
||||
index = setup_ubq_tests
|
||||
index = setup_update_by_query_tests
|
||||
|
||||
ubq = (
|
||||
AsyncUpdateByQuery(using=write_client)
|
||||
@@ -40,9 +40,9 @@ async def test_update_by_query_no_script(
|
||||
|
||||
|
||||
async def test_update_by_query_with_script(
|
||||
write_client: Any, setup_ubq_tests: Any
|
||||
write_client: Any, setup_update_by_query_tests: Any
|
||||
) -> None:
|
||||
index = setup_ubq_tests
|
||||
index = setup_update_by_query_tests
|
||||
|
||||
ubq = (
|
||||
AsyncUpdateByQuery(using=write_client)
|
||||
@@ -59,9 +59,9 @@ async def test_update_by_query_with_script(
|
||||
|
||||
|
||||
async def test_delete_by_query_with_script(
|
||||
write_client: Any, setup_ubq_tests: Any
|
||||
write_client: Any, setup_update_by_query_tests: Any
|
||||
) -> None:
|
||||
index = setup_ubq_tests
|
||||
index = setup_update_by_query_tests
|
||||
|
||||
ubq = (
|
||||
AsyncUpdateByQuery(using=write_client)
|
||||
|
||||
@@ -54,6 +54,10 @@ OPENSEARCH_VERSION = None
|
||||
|
||||
|
||||
async def await_if_coro(x: Any) -> Any:
|
||||
"""
|
||||
awaits if x is a coroutine
|
||||
:return: x
|
||||
"""
|
||||
if inspect.iscoroutine(x):
|
||||
return await x
|
||||
return x
|
||||
|
||||
Reference in New Issue
Block a user