Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add annotations for returned data #972

Merged
merged 1 commit into from
Sep 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -236,8 +236,6 @@ max-returns = 11
"ANN002", # Missing type annotation for `*args`
"ANN003", # Missing type annotation for `**kwargs`
"ANN201", # Missing return type annotation for public function
"ANN202", # Missing return type annotation for private function
"ANN206", # Missing return type annotation for classmethod
"ARG001", # Unused function argument
"B007", # Loop control variable `host` not used within loop body
"C414", # Unnecessary `list` call within `sorted()`
Expand Down
12 changes: 8 additions & 4 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import os
from typing import List
from typing import Any, Dict, List, Type, TypeVar, Union

import pytest
import ruamel.yaml
Expand All @@ -18,14 +18,16 @@
from nornir.core.state import GlobalState
from nornir.core.task import AggregatedResult, Task

ElementType = TypeVar("ElementType", bound=Union[Group, Host])

global_data = GlobalState(dry_run=True)


def inventory_from_yaml():
dir_path = os.path.dirname(os.path.realpath(__file__))
yml = ruamel.yaml.YAML(typ="safe")

def get_connection_options(data):
def get_connection_options(data) -> Dict[str, ConnectionOptions]:
cp = {}
for cn, c in data.items():
cp[cn] = ConnectionOptions(
Expand All @@ -38,7 +40,7 @@ def get_connection_options(data):
)
return cp

def get_defaults():
def get_defaults() -> Defaults:
defaults_file = f"{dir_path}/inventory_data/defaults.yaml"
with open(defaults_file, "r") as f:
defaults_dict = yml.load(f)
Expand All @@ -55,7 +57,9 @@ def get_defaults():
),
)

def get_inventory_element(typ, data, name, defaults):
def get_inventory_element(
typ: Type[ElementType], data: Dict[str, Any], name: str, defaults: Union[Defaults, None]
) -> ElementType:
return typ(
name=name,
hostname=data.get("hostname"),
Expand Down
4 changes: 2 additions & 2 deletions tests/core/test_InitNornir.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ def test_InitNornir_different_transform_function_by_string_with_bad_options(self

class TestLogging:
@classmethod
def cleanup(cls):
def cleanup(cls) -> None:
# this does not work as setup_method, because pytest injects
# _pytest.logging.LogCaptureHandler handler to the root logger
# and StreamHandler to _pytest.capture.EncodedFile to other loggers
Expand All @@ -183,7 +183,7 @@ def cleanup(cls):
logger_.setLevel(logging.NOTSET)

@classmethod
def teardown_class(cls):
def teardown_class(cls) -> None:
cls.cleanup()

def test_InitNornir_logging_defaults(self):
Expand Down
2 changes: 1 addition & 1 deletion tests/core/test_connections.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ def validate_params(task, conn, params, nornir_config):

class Test:
@classmethod
def setup_class(cls):
def setup_class(cls) -> None:
ConnectionPluginRegister.deregister_all()
ConnectionPluginRegister.register("dummy", DummyConnectionPlugin)
ConnectionPluginRegister.register("dummy2", DummyConnectionPlugin)
Expand Down
2 changes: 1 addition & 1 deletion tests/core/test_inventory.py
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,7 @@ def test_filtering_func(self, inv):
)
assert long_names == ["dev1.group_1", "dev4.group_2", "dev6.group_3"]

def longer_than(dev, length):
def longer_than(dev, length) -> bool:
return len(dev["my_var"]) > length

long_names = sorted(list(inv.filter(filter_func=longer_than, length=20).hosts.keys()))
Expand Down
2 changes: 1 addition & 1 deletion tests/wrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ def wrap_cli_test(output, save_output=False):
"""

@decorator
def run_test(func, *args, **kwargs):
def run_test(func, *args, **kwargs) -> None:
stdout = StringIO()
backup_stdout = sys.stdout
sys.stdout = stdout
Expand Down