Skip to content

Commit 0308734

Browse files
authored
dev: fix root model response parsing with no validate (#121)
* fix: root model response parsing with no validate * add missing items in policy model stub * regenerate endpoints doc
1 parent e2daeb0 commit 0308734

File tree

5 files changed

+23
-12
lines changed

5 files changed

+23
-12
lines changed

ENDPOINTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
**THIS FILE WAS AUTO-GENERATED DO NOT EDIT**
22

3-
Generated for: catalystwan-0.41.1.dev3
3+
Generated for: catalystwan-0.41.1.dev4
44

55
All URIs are relative to */dataservice*
66
HTTP request | Supported Versions | Method | Payload Type | Return Type | Tenancy Mode

catalystwan/endpoints/__init__.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,7 @@
7676

7777
@runtime_checkable
7878
class CustomPayloadType(Protocol):
79-
def prepared(self) -> PreparedPayload:
80-
...
79+
def prepared(self) -> PreparedPayload: ...
8180

8281

8382
JSON = Union[str, int, float, bool, None, Dict[str, "JSON"], List["JSON"]]
@@ -263,9 +262,9 @@ class versions(APIEndpointsDecorator):
263262
Logs warning or raises exception when incompatibility found during runtime.
264263
"""
265264

266-
versions_lookup: ClassVar[
267-
Dict[str, SpecifierSet]
268-
] = {} # maps decorated method instance to it's supported verisions
265+
versions_lookup: ClassVar[Dict[str, SpecifierSet]] = (
266+
{}
267+
) # maps decorated method instance to it's supported verisions
269268

270269
def __init__(self, supported_versions: str, raises: bool = False):
271270
self.supported_versions = SpecifierSet(supported_versions)
@@ -355,9 +354,9 @@ class request(APIEndpointsDecorator):
355354
"""
356355

357356
forbidden_url_field_names = {"self", "payload", "params"}
358-
request_lookup: ClassVar[
359-
Dict[str, APIEndpointRequestMeta]
360-
] = {} # maps decorated method instance to it's meta information
357+
request_lookup: ClassVar[Dict[str, APIEndpointRequestMeta]] = (
358+
{}
359+
) # maps decorated method instance to it's meta information
361360

362361
def __init__(self, http_method: str, url: str, resp_json_key: Optional[str] = None, **kwargs):
363362
self.http_method = http_method

catalystwan/models/policy/__init__.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,15 +103,19 @@
103103
MultiRegionRole,
104104
OriginProtocol,
105105
PLPEntryType,
106+
PolicyDefinitionInfo,
106107
ServiceType,
107108
TLOCActionType,
108109
)
110+
from .policy_list import PolicyListInfo
109111
from .security import (
110112
AnySecurityPolicy,
111113
AnySecurityPolicyInfo,
112114
AnySecurityPolicyInfoList,
113115
SecurityPolicy,
116+
SecurityPolicyInfo,
114117
UnifiedSecurityPolicy,
118+
UnifiedSecurityPolicyInfo,
115119
)
116120

117121
AnyPolicyDefinition = Annotated[
@@ -351,6 +355,8 @@ def find_policy_definition_model(model_type: str) -> Type[AnyPolicyDefinitionInf
351355
"OriginProtocol",
352356
"PLPEntryType",
353357
"PolicerList",
358+
"PolicyDefinitionInfo",
359+
"PolicyListInfo",
354360
"PortList",
355361
"PreferredColorGroupList",
356362
"PrefixList",
@@ -364,6 +370,7 @@ def find_policy_definition_model(model_type: str) -> Type[AnyPolicyDefinitionInf
364370
"ScalableGroupTagList",
365371
"SecurityGroup",
366372
"SecurityPolicy",
373+
"SecurityPolicyInfo",
367374
"ServiceType",
368375
"SiteList",
369376
"SLAClassList",
@@ -377,6 +384,7 @@ def find_policy_definition_model(model_type: str) -> Type[AnyPolicyDefinitionInf
377384
"TrunkGroupList",
378385
"UmbrellaDataList",
379386
"UnifiedSecurityPolicy",
387+
"UnifiedSecurityPolicyInfo",
380388
"URLAllowList",
381389
"URLBlockList",
382390
"UrlFilteringPolicy",

catalystwan/response.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from typing import Any, Callable, Dict, Optional, Sequence, Type, TypeVar, Union, cast
1010
from urllib.parse import urlparse
1111

12-
from pydantic import BaseModel
12+
from pydantic import BaseModel, RootModel
1313
from requests import PreparedRequest, Request, Response
1414
from requests.cookies import RequestsCookieJar
1515
from requests.exceptions import JSONDecodeError
@@ -236,7 +236,11 @@ def dataobj(self, cls: Type[T], sourcekey: Optional[str] = "data", validate: boo
236236
if issubclass(cls, BaseModel):
237237
if validate:
238238
return cls.model_validate(data) # type: ignore[return-value]
239-
return cls.model_construct(**data) # type: ignore[return-value]
239+
else:
240+
if issubclass(cls, RootModel):
241+
return cls.model_construct(data) # type: ignore[return-value]
242+
else:
243+
return cls.model_construct(**data) # type: ignore[return-value]
240244
return create_dataclass(cls, data)
241245

242246
def get_error_info(self) -> ManagerErrorInfo:

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "catalystwan"
3-
version = "0.41.1.dev3"
3+
version = "0.41.1.dev4"
44
description = "Cisco Catalyst WAN SDK for Python"
55
authors = ["kagorski <kagorski@cisco.com>"]
66
readme = "README.md"

0 commit comments

Comments
 (0)