Skip to content
This repository has been archived by the owner on Nov 21, 2024. It is now read-only.

Commit

Permalink
enhance as_global, as_default (#625)
Browse files Browse the repository at this point in the history
* enchance as_default, as_global, fix models

* bump to 0.33.4dev3
  • Loading branch information
sbasan authored Apr 30, 2024
1 parent 6180aa6 commit bdd22a3
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 12 deletions.
16 changes: 12 additions & 4 deletions catalystwan/api/configuration_groups/parcel.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Copyright 2023 Cisco Systems, Inc. and its affiliates

from enum import Enum
from typing import Any, Dict, Generic, Literal, Optional, Tuple, TypeVar, get_origin
from typing import Any, Dict, Generic, List, Literal, Optional, Tuple, TypeVar, get_origin

from pydantic import (
AliasPath,
Expand Down Expand Up @@ -129,7 +129,7 @@ class Default(ParcelAttribute, Generic[T]):
option_type: OptionType = Field(
default=OptionType.DEFAULT, serialization_alias="optionType", validation_alias="optionType"
)
value: Optional[Any] = None
value: Optional[T] = None


def as_global(value: Any, generic_alias: Any = None):
Expand All @@ -143,10 +143,14 @@ def as_global(value: Any, generic_alias: Any = None):
Global[Any]: global option type object
"""
if generic_alias is None:
if isinstance(value, list):
if len(value) == 0:
return Global[List](value=list()) # type: ignore
return Global[List[type(value[0])]](value=value) # type: ignore
return Global[type(value)](value=value) # type: ignore
elif get_origin(generic_alias) is Literal:
return Global[generic_alias](value=value) # type: ignore
TypeError("Inappropriate type for argument generic_alias")
raise TypeError("Inappropriate type for argument generic_alias")


def as_variable(value: str):
Expand All @@ -172,7 +176,11 @@ def as_default(value: Any, generic_alias: Any = None):
Default[Any]: default option type object
"""
if generic_alias is None:
if isinstance(value, list):
if len(value) == 0:
return Default[List](value=list()) # type: ignore
return Default[List[type(value[0])]](value=value) # type: ignore
return Default[type(value)](value=value) # type: ignore
elif get_origin(generic_alias) is Literal:
return Default[generic_alias](value=value) # type: ignore
TypeError("Inappropriate type for argument generic_alias")
raise TypeError("Inappropriate type for argument generic_alias")
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
# Copyright 2024 Cisco Systems, Inc. and its affiliates

from typing import Literal
from typing import List, Literal

from pydantic import AliasPath, ConfigDict, Field, field_validator

from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase, as_global
from catalystwan.api.configuration_groups.parcel import Global, _ParcelBase


class ExpandedCommunityParcel(_ParcelBase):
type_: Literal["expanded-community"] = Field(default="expanded-community", exclude=True)
model_config = ConfigDict(populate_by_name=True)
expanded_community_list: Global[list] = Field(
default=as_global([]),
expanded_community_list: Global[List[str]] = Field(
default=Global[List[str]](value=list()),
serialization_alias="expandedCommunityList",
validation_alias=AliasPath("data", "expandedCommunityList"),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ class ServiceNodeInformationExternal(BaseModel):

address: Default[ServiceNodeExternalAddress] = Default[ServiceNodeExternalAddress](value="192.168.2.2")
vpg_ip: Default[ServiceNodeExternalVpgIp] = Field(
default=Default[ServiceNodeExternalVpgIp](value="192.168.2.1"),
default=Default[ServiceNodeExternalVpgIp](value="192.168.2.1/24"),
serialization_alias="vpgIp",
validation_alias="vpgIp",
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ class RoutePolicySequence(BaseModel):
..., serialization_alias="sequenceName", validation_alias="sequenceName", description="Sequence Name"
)
base_action: Union[Global[BaseAction], Default[BaseAction]] = Field(
default=as_default("Reject", BaseAction),
default=as_default("reject", BaseAction),
serialization_alias="baseAction",
validation_alias="baseAction",
description="Base Action",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class UserItem(BaseModel):
)
)
privilege: Union[Global[str], Variable, Default[str], None] = Field(
None, description="Set Privilege Level for this user"
default=None, description="Set Privilege Level for this user"
)
pubkey_chain: Optional[List[PubkeyChainItem]] = Field(
default=None,
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "catalystwan"
version = "0.33.4dev2"
version = "0.33.4dev3"
description = "Cisco Catalyst WAN SDK for Python"
authors = ["kagorski <[email protected]>"]
readme = "README.md"
Expand Down

0 comments on commit bdd22a3

Please sign in to comment.