Skip to content

Commit

Permalink
Update pydantic to v1 (#449)
Browse files Browse the repository at this point in the history
* Update Pydantic to ^1

* Fix sphinx-build of configuration doc with Pydantic 1.1

* Replace deprecated usage of Schema and fields from Pydantic

* Fix inventory typing

* Fix nb cell output to match new generated title from pydantic schema
  • Loading branch information
AchilleAsh authored and dbarrosop committed Nov 12, 2019
1 parent 9d35231 commit f5a5126
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 29 deletions.
8 changes: 5 additions & 3 deletions docs/_data_templates/configuration-parameters.j2
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
{% macro document_section(section, schema) %}
{% macro document_section(section, schema, definitions) %}
{{ section }}
{{ "-" * section|length }}

{% for k, v in schema["properties"].items() -%}
{% with ref = (schema["allOf"]|map(attribute="$ref")|first).split('/')|last -%}
{% for k, v in definitions[ref]["properties"].items() -%}

``{{ k }}``
{{ "_" * (k|length + 4) }}
Expand All @@ -22,8 +23,9 @@
- ``{{ "NORNIR_{}_{}".format(section, k).upper() }}``

{% endfor %}
{% endwith %}
{%- endmacro %}

{% for k, v in schema["properties"].items() if k not in ["user_defined"] %}
{{ document_section(k, v) }}
{{ document_section(k, v, schema["definitions"]) }}
{% endfor %}
2 changes: 1 addition & 1 deletion docs/tutorials/intro/inventory.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@
" \"type\": \"object\"\n",
" },\n",
" \"connection_options\": {\n",
" \"title\": \"Connection_Options\",\n",
" \"title\": \"Connection Options\",\n",
" \"default\": {},\n",
" \"type\": \"object\",\n",
" \"additionalProperties\": {\n",
Expand Down
32 changes: 16 additions & 16 deletions nornir/core/deserializer/configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from nornir.core import configuration
from nornir.core.deserializer.inventory import Inventory

from pydantic import BaseSettings, Schema
from pydantic import BaseSettings, Field

import ruamel.yaml

Expand All @@ -21,7 +21,7 @@ def _build_values(self, init_kwargs: Dict[str, Any]) -> Dict[str, Any]:


class SSHConfig(BaseNornirSettings):
config_file: str = Schema(
config_file: str = Field(
default="~/.ssh/config", description="Path to ssh configuration file"
)

Expand All @@ -37,21 +37,21 @@ def deserialize(cls, **kwargs: Any) -> configuration.SSHConfig:


class InventoryConfig(BaseNornirSettings):
plugin: str = Schema(
plugin: str = Field(
default="nornir.plugins.inventory.simple.SimpleInventory",
description="Import path to inventory plugin",
)
options: Dict[str, Any] = Schema(
options: Dict[str, Any] = Field(
default={}, description="kwargs to pass to the inventory plugin"
)
transform_function: str = Schema(
transform_function: str = Field(
default="",
description=(
"Path to transform function. The transform_function "
"you provide will run against each host in the inventory"
),
)
transform_function_options: Dict[str, Any] = Schema(
transform_function_options: Dict[str, Any] = Field(
default={}, description="kwargs to pass to the transform_function"
)

Expand All @@ -71,19 +71,19 @@ def deserialize(cls, **kwargs: Any) -> configuration.InventoryConfig:


class LoggingConfig(BaseNornirSettings):
enabled: Optional[bool] = Schema(
enabled: Optional[bool] = Field(
default=None, description="Whether to configure logging or not"
)
level: str = Schema(default="INFO", description="Logging level")
file: str = Schema(default="nornir.log", description="Logging file")
format: str = Schema(
level: str = Field(default="INFO", description="Logging level")
file: str = Field(default="nornir.log", description="Logging file")
format: str = Field(
default="%(asctime)s - %(name)12s - %(levelname)8s - %(funcName)10s() - %(message)s",
description="Logging format",
)
to_console: bool = Schema(
to_console: bool = Field(
default=False, description="Whether to log to console or not"
)
loggers: List[str] = Schema(default=["nornir"], description="Loggers to configure")
loggers: List[str] = Field(default=["nornir"], description="Loggers to configure")

class Config:
env_prefix = "NORNIR_LOGGING_"
Expand All @@ -103,7 +103,7 @@ def deserialize(cls, **kwargs) -> configuration.LoggingConfig:


class Jinja2Config(BaseNornirSettings):
filters: str = Schema(
filters: str = Field(
default="", description="Path to callable returning jinja filters to be used"
)

Expand All @@ -120,11 +120,11 @@ def deserialize(cls, **kwargs: Any) -> configuration.Jinja2Config:


class CoreConfig(BaseNornirSettings):
num_workers: int = Schema(
num_workers: int = Field(
default=20,
description="Number of Nornir worker threads that are run at the same time by default",
)
raise_on_error: bool = Schema(
raise_on_error: bool = Field(
default=False,
description=(
"If set to ``True``, (:obj:`nornir.core.Nornir.run`) method of "
Expand All @@ -149,7 +149,7 @@ class Config(BaseNornirSettings):
ssh: SSHConfig = SSHConfig()
logging: LoggingConfig = LoggingConfig()
jinja2: Jinja2Config = Jinja2Config()
user_defined: Dict[str, Any] = Schema(
user_defined: Dict[str, Any] = Field(
default={}, description="User-defined <k, v> pairs"
)

Expand Down
4 changes: 2 additions & 2 deletions nornir/core/deserializer/inventory.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ def deserialize(
platform: Optional[str] = None,
groups: Optional[List[str]] = None,
data: Optional[Dict[str, Any]] = None,
connection_options: Optional[Dict[str, ConnectionOptions]] = None,
connection_options: Optional[Dict[str, Dict[str, Any]]] = None,
defaults: inventory.Defaults = None,
) -> Dict[str, Any]:
parent_groups = inventory.ParentGroups(groups)
Expand Down Expand Up @@ -100,7 +100,7 @@ class Defaults(BaseAttributes):
connection_options: Dict[str, ConnectionOptions] = {}

@classmethod
def serialize(cls, defaults: inventory.Defaults) -> "InventoryElement":
def serialize(cls, defaults: inventory.Defaults) -> "Defaults":
d = {}
for f in cls.__fields__:
d[f] = getattr(defaults, f)
Expand Down
2 changes: 1 addition & 1 deletion nornir/plugins/inventory/nsot.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ def __init__(

remove_keys = []
for k, v in d.items():
if k not in InventoryElement().fields:
if k not in InventoryElement().__fields__:
remove_keys.append(k)
d["data"][k] = v
for r in remove_keys:
Expand Down

0 comments on commit f5a5126

Please sign in to comment.