catalystwan 0.41.2.dev6__py3-none-any.whl → 0.41.2.dev8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,7 +14,7 @@ TenancyModes = Literal["SingleTenant", "MultiTenant"]
14
14
 
15
15
  class TenancyMode(BaseModel):
16
16
  mode: TenancyModes
17
- deploymentmode: str
17
+ deploymentmode: Optional[str] = None
18
18
  domain: Optional[str] = None
19
19
  clusterid: Optional[str] = None
20
20
 
@@ -125,6 +125,7 @@ class ClusterManagement(APIEndpoints):
125
125
  # POST /clusterManagement/remove
126
126
  ...
127
127
 
128
- def set_tenancy_mode(self):
128
+ @post("/clusterManagement/tenancy/mode")
129
+ def set_tenancy_mode(self, payload: TenancyMode) -> None:
129
130
  # POST /clusterManagement/tenancy/mode
130
131
  ...
catalystwan/exceptions.py CHANGED
@@ -218,8 +218,8 @@ class CatalystwanDeprecationWarning(DeprecationWarning):
218
218
  return message
219
219
 
220
220
 
221
- class ParcelModelNotFound(CatalystwanException):
222
- """Raised when there is no model matching parcelType field"""
221
+ class ModelNotFound(CatalystwanException):
222
+ """Raised when there is no model matching type specifier given as string"""
223
223
 
224
- def __init__(self, type_):
225
- self.message = f"Cannot determine model class for parcel type: {type_}"
224
+ def __init__(self, type_, scope):
225
+ self.message = f"Cannot find model class for {type_} when searching: {scope}"
@@ -6,7 +6,7 @@ from pydantic import Field
6
6
  from typing_extensions import Annotated
7
7
 
8
8
  from catalystwan.api.configuration_groups.parcel import _ParcelBase
9
- from catalystwan.exceptions import ParcelModelNotFound
9
+ from catalystwan.exceptions import ModelNotFound
10
10
  from catalystwan.models.configuration.feature_profile.parcel import find_type, list_types
11
11
  from catalystwan.models.configuration.feature_profile.sdwan.topology import (
12
12
  AnyTopologyParcel,
@@ -27,12 +27,12 @@ def test_find_type():
27
27
 
28
28
 
29
29
  def test_find_type_raises_when_no_match():
30
- with pytest.raises(ParcelModelNotFound):
30
+ with pytest.raises(ModelNotFound):
31
31
  find_type("unknown", AnyTopologyParcel)
32
32
 
33
33
 
34
34
  def test_find_type_raises_for_bogus_param():
35
- with pytest.raises(ParcelModelNotFound):
35
+ with pytest.raises(ModelNotFound):
36
36
  find_type("unknown", None)
37
37
 
38
38
 
@@ -7,7 +7,7 @@ from pydantic import AliasChoices, BaseModel, ConfigDict, Field, model_validator
7
7
  from typing_extensions import Annotated
8
8
 
9
9
  from catalystwan.api.configuration_groups.parcel import _ParcelBase
10
- from catalystwan.exceptions import ParcelModelNotFound
10
+ from catalystwan.exceptions import ModelNotFound
11
11
  from catalystwan.models.configuration.feature_profile.sdwan.application_priority import AnyApplicationPriorityParcel
12
12
  from catalystwan.models.configuration.feature_profile.sdwan.cli import AnyCliParcel
13
13
  from catalystwan.models.configuration.feature_profile.sdwan.dns_security import AnyDnsSecurityParcel
@@ -240,5 +240,5 @@ def find_type(name: str, any_union: Type[UT]) -> UT:
240
240
  try:
241
241
  parcel_type = next(t for t in parcel_types if t._get_parcel_type() == name)
242
242
  except StopIteration:
243
- raise ParcelModelNotFound(name)
243
+ raise ModelNotFound(name, any_union)
244
244
  return cast(UT, parcel_type)
@@ -6,7 +6,7 @@ from typing import List, Literal, Optional, Union
6
6
 
7
7
  from pydantic import AliasPath, BaseModel, ConfigDict, Field
8
8
 
9
- from catalystwan.api.configuration_groups.parcel import Default, Global, Variable, _ParcelBase, as_default, as_variable
9
+ from catalystwan.api.configuration_groups.parcel import Default, Global, Variable, _ParcelBase
10
10
 
11
11
  FailOverType = Literal["ge2", "te2"]
12
12
  LomType = Literal["ge1", "ge2", "ge3", "te2", "te3", "console", "failover"]
@@ -27,8 +27,8 @@ class AccessPort(BaseModel):
27
27
  model_config = ConfigDict(
28
28
  populate_by_name=True,
29
29
  )
30
- dedicated: Union[Global[bool], Default[bool]] = Field(default=as_default(True), description="Dedicated")
31
- shared_lom: SharedLom = Field(..., serialization_alias="sharedLom", validation_alias="sharedLom")
30
+ dedicated: Union[Global[bool], Default[bool]] = Field(default=Default[bool](value=True), description="Dedicated")
31
+ shared_lom: Optional[SharedLom] = Field(default=None, serialization_alias="sharedLom", validation_alias="sharedLom")
32
32
 
33
33
 
34
34
  class Ip(BaseModel):
@@ -37,7 +37,7 @@ class Ip(BaseModel):
37
37
  populate_by_name=True,
38
38
  )
39
39
  address: Union[Global[str], Global[IPv4Interface], Variable] = Field(
40
- default=as_variable("{{ipv4Addr}}"), description="Assign IPv4 address"
40
+ default=Variable(value="{{ipv4Addr}}"), description="Assign IPv4 address"
41
41
  )
42
42
  default_gateway: Union[Global[IPv4Address], Variable, Default[None]] = Field(
43
43
  default=Default[None](value=None),
@@ -82,7 +82,7 @@ class InterfaceItem(BaseModel):
82
82
  validation_alias="ifName",
83
83
  description="Set Inteface name",
84
84
  )
85
- l3: Default[bool] = Field(default=as_default(True), description="L3")
85
+ l3: Default[bool] = Field(default=Default[bool](value=True), description="L3")
86
86
  ucse_interface_vpn: Optional[Union[Global[int], Variable, Default[None]]] = Field(
87
87
  default=Default[None](value=None),
88
88
  serialization_alias="ucseInterfaceVpn",
@@ -29,7 +29,7 @@ class Collectors(BaseModel):
29
29
  default=Global[bool](value=False), validation_alias="bfdMetricsExport", serialization_alias="bfdMetricsExport"
30
30
  )
31
31
  export_interval: Optional[Global[int]] = Field(
32
- default=Global[int](value=600), validation_alias="exportInterval", serialization_alias="exportInterval"
32
+ default=None, validation_alias="exportInterval", serialization_alias="exportInterval"
33
33
  )
34
34
  export_spread: Optional[Global[bool]] = Field(
35
35
  default=Global[bool](value=False), validation_alias="exportSpread", serialization_alias="exportSpread"
@@ -81,13 +81,20 @@ class CflowdParcel(_ParcelBase):
81
81
  self,
82
82
  address: Optional[str] = None,
83
83
  bfd_metrics_export: Optional[bool] = False,
84
- export_interval: Optional[int] = 600,
84
+ export_interval: Optional[int] = None,
85
85
  export_spread: Optional[bool] = False,
86
86
  udp_port: Optional[int] = 4739,
87
87
  vpn_id: Optional[int] = None,
88
88
  ):
89
89
  if self.collectors is None:
90
90
  self.collectors = []
91
+ if export_interval is not None:
92
+ # bfd_metrics_export must be True if export_interval is set
93
+ bfd_metrics_export = True
94
+ if bfd_metrics_export and export_interval is None:
95
+ # export_interval should be default 600 only if bfd_metrics_export is True
96
+ export_interval = 600
97
+
91
98
  self.collectors.append(
92
99
  Collectors(
93
100
  address=as_optional_global(address),
@@ -7,6 +7,7 @@ from typing import List, Sequence, Type, Union, cast
7
7
  from pydantic import Field
8
8
  from typing_extensions import Annotated
9
9
 
10
+ from catalystwan.exceptions import ModelNotFound
10
11
  from catalystwan.models.policy.definition.app_route import AppRoutePolicy, AppRoutePolicyGetResponse
11
12
  from catalystwan.models.policy.definition.dial_peer import DialPeerPolicy, DialPeerPolicyGetResponse
12
13
  from catalystwan.models.policy.definition.fxo_port import FxoPortPolicy, FxoPortPolicyGetResponse
@@ -66,7 +67,7 @@ from catalystwan.models.policy.list.umbrella_data import UmbrellaDataList, Umbre
66
67
  from catalystwan.models.policy.list.url import URLAllowList, URLAllowListInfo, URLBlockList, URLBlockListInfo
67
68
  from catalystwan.models.policy.list.vpn import VPNList, VPNListInfo
68
69
  from catalystwan.models.policy.list.zone import ZoneList, ZoneListInfo
69
- from catalystwan.utils.model import get_model_type_field, resolve_nested_base_model_unions
70
+ from catalystwan.utils.model import get_model_type_literals, resolve_nested_base_model_unions
70
71
 
71
72
  from .centralized import CentralizedPolicy, CentralizedPolicyInfo, TrafficDataDirection
72
73
  from .definition.access_control_list import AclPolicy, AclPolicyGetResponse
@@ -293,7 +294,10 @@ def find_policy_list_model(model_type: str) -> Type[AnyPolicyListInfo]:
293
294
  Sequence[Type[AnyPolicyListInfo]],
294
295
  resolve_nested_base_model_unions(AnyPolicyListInfo),
295
296
  )
296
- model = next(t for t in types if get_model_type_field(t) == model_type)
297
+ try:
298
+ model = next(t for t in types if model_type in get_model_type_literals(t))
299
+ except StopIteration:
300
+ raise ModelNotFound(model_type, AnyPolicyListInfo)
297
301
  return model
298
302
 
299
303
 
@@ -303,7 +307,10 @@ def find_policy_definition_model(model_type: str) -> Type[AnyPolicyDefinitionInf
303
307
  Sequence[Type[AnyPolicyDefinitionInfo]],
304
308
  resolve_nested_base_model_unions(AnyPolicyDefinitionInfo),
305
309
  )
306
- model = next(t for t in types if get_model_type_field(t) == model_type)
310
+ try:
311
+ model = next(t for t in types if model_type in get_model_type_literals(t))
312
+ except StopIteration:
313
+ raise ModelNotFound(model_type, AnyPolicyDefinitionInfo)
307
314
  return model
308
315
 
309
316
 
@@ -2,11 +2,12 @@
2
2
 
3
3
  from itertools import chain
4
4
  from typing import List, Literal, Optional
5
+ from uuid import UUID
5
6
 
6
7
  from pydantic import BaseModel, ConfigDict, Field
7
8
 
8
9
  from catalystwan.models.common import PolicyModeType, WebCategory, WebReputation
9
- from catalystwan.models.policy import URLAllowListInfo, URLBlockListInfo
10
+ from catalystwan.models.policy import URLAllowList, URLBlockList
10
11
  from catalystwan.models.policy.policy_definition import (
11
12
  PolicyDefinitionBase,
12
13
  PolicyDefinitionGetResponse,
@@ -35,10 +36,10 @@ class SslDecryptionUtdProfileDefinition(BaseModel):
35
36
  default=None, validation_alias="decryptThreshold", serialization_alias="decryptThreshold"
36
37
  )
37
38
 
38
- filtered_url_white_list: List[URLAllowListInfo] = Field(
39
+ filtered_url_white_list: List[URLAllowList] = Field(
39
40
  default_factory=list, validation_alias="filteredUrlWhiteList", serialization_alias="filteredUrlWhiteList"
40
41
  )
41
- filtered_url_black_list: List[URLBlockListInfo] = Field(
42
+ filtered_url_black_list: List[URLBlockList] = Field(
42
43
  default_factory=list, validation_alias="filteredUrlBlackList", serialization_alias="filteredUrlBlackList"
43
44
  )
44
45
 
@@ -62,11 +63,11 @@ class SslDecryptionUtdProfileDefinition(BaseModel):
62
63
  self._check_category_already_added(category)
63
64
  self.decrypt_categories.append(category)
64
65
 
65
- def add_decrypt_domain_list(self, black_list: URLBlockListInfo):
66
- self.url_black_list = Reference(ref=black_list.list_id)
66
+ def add_decrypt_domain_list(self, black_list_id: UUID):
67
+ self.url_black_list = Reference(ref=black_list_id)
67
68
 
68
- def add_no_decrypt_domain_list(self, white_list: URLAllowListInfo):
69
- self.url_white_list = Reference(ref=white_list.list_id)
69
+ def add_no_decrypt_domain_list(self, white_list_id: UUID):
70
+ self.url_white_list = Reference(ref=white_list_id)
70
71
 
71
72
  def _check_category_already_added(self, category: WebCategory):
72
73
  if category in chain(self.decrypt_categories, self.never_decrypt_categories, self.skip_decrypt_categories):
@@ -14,7 +14,7 @@ class URLListEntry(BaseModel):
14
14
 
15
15
 
16
16
  class URLAllowList(PolicyListBase):
17
- type: Literal["urlWhiteList"] = "urlWhiteList"
17
+ type: Literal["urlWhiteList", "urlwhitelist"] = "urlWhiteList"
18
18
  entries: List[URLListEntry] = []
19
19
 
20
20
 
@@ -27,7 +27,7 @@ class URLAllowListInfo(URLAllowList, PolicyListInfo):
27
27
 
28
28
 
29
29
  class URLBlockList(PolicyListBase):
30
- type: Literal["urlBlackList"] = "urlBlackList"
30
+ type: Literal["urlBlackList", "urlblacklist"] = "urlBlackList"
31
31
  entries: List[URLListEntry] = []
32
32
 
33
33
 
@@ -39,7 +39,7 @@ class NGFirewallAssemblyItem(AssemblyItemBase):
39
39
 
40
40
 
41
41
  class DNSSecurityAssemblyItem(AssemblyItemBase):
42
- type: Literal["DNSSecurity"] = "DNSSecurity"
42
+ type: Literal["DNSSecurity", "dnsSecurity"] = "DNSSecurity"
43
43
 
44
44
 
45
45
  class IntrusionPreventionAssemblyItem(AssemblyItemBase):
@@ -1,7 +1,7 @@
1
1
  # Copyright 2024 Cisco Systems, Inc. and its affiliates
2
2
  from functools import lru_cache
3
3
  from inspect import isclass
4
- from typing import Any, List, Optional, Type, Union
4
+ from typing import Any, Iterable, List, Literal, Type, Union
5
5
 
6
6
  from pydantic import BaseModel
7
7
  from typing_extensions import Annotated, get_args, get_origin
@@ -38,8 +38,11 @@ def resolve_nested_base_model_unions(
38
38
 
39
39
 
40
40
  @lru_cache
41
- def get_model_type_field(model: Type[BaseModel]) -> Optional[str]:
42
- if type_field := model.model_fields.get("type"):
43
- if default_value := type_field.default:
44
- return str(default_value)
45
- return None
41
+ def get_model_type_literals(model: Type[BaseModel], field: str = "type") -> Iterable[str]:
42
+ if type_field := model.model_fields.get(field):
43
+ origin = get_origin(type_field.annotation)
44
+ if origin is Literal:
45
+ literal_args = get_args(type_field.annotation)
46
+ if all(isinstance(arg, str) for arg in literal_args):
47
+ return literal_args
48
+ return ()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: catalystwan
3
- Version: 0.41.2.dev6
3
+ Version: 0.41.2.dev8
4
4
  Summary: Cisco Catalyst WAN SDK for Python
5
5
  Author: kagorski
6
6
  Author-email: kagorski@cisco.com
@@ -94,7 +94,7 @@ catalystwan/endpoints/api_gateway.py,sha256=O5vZlGEqkSJksKqiz9VLHha-arl4Hu2qgopE
94
94
  catalystwan/endpoints/certificate_management_device.py,sha256=idWO5xjz9SrxJrVN8PePWtoWDDoy294yZZb3RtXpir4,7073
95
95
  catalystwan/endpoints/certificate_management_vmanage.py,sha256=Xcrnh8v7FduXxc4n8814AGLBWJsNvvGgeaEE1SATgzM,1476
96
96
  catalystwan/endpoints/client.py,sha256=4YY08AT0jhybuJ9BN_VNBAVTp-rHlIRc8Xvdyj9uk38,4035
97
- catalystwan/endpoints/cluster_management.py,sha256=5KRRAkMTZC9xmvDaUD09kFzvjrwt2AZp7Typ0aCyvsY,3719
97
+ catalystwan/endpoints/cluster_management.py,sha256=IqEoxrYD7n8wKCBn--t8Q3mhK-pome0MlrXyz3dM4g8,3811
98
98
  catalystwan/endpoints/configuration/device/software_update.py,sha256=wr58GMuRxAbTJ5ISTrN3Zlo7-bYl7s_cKfST1dKCWsY,983
99
99
  catalystwan/endpoints/configuration/disaster_recovery.py,sha256=RsHqUz61RIO4msN23FackQW8BzfC2u_8GpozXfdsKuw,9447
100
100
  catalystwan/endpoints/configuration/feature_profile/sdwan/application_priority.py,sha256=eL1r6A94BpsUCSdd0ae8fpSY23b_etV8Dfz2kCZYxnY,4543
@@ -212,7 +212,7 @@ catalystwan/endpoints/tenant_management.py,sha256=c-kIRoS60aVklVPPrmbnW5kaiNgU23
212
212
  catalystwan/endpoints/tenant_migration.py,sha256=e6eIzRvlrnzUWqamKbWsYjX8drtB-GQKvhrJtX2VDKY,3649
213
213
  catalystwan/endpoints/troubleshooting_tools/device_connectivity.py,sha256=JkTZfebTwcambJsgjcJ8qxxBDE5XbUFyYpNqr9681DQ,3661
214
214
  catalystwan/endpoints/url_monitoring.py,sha256=ZySOjuCpIAZ4SIsah56yJ-uybYw0W9s6OjQp2FujN0g,802
215
- catalystwan/exceptions.py,sha256=MAtoZ9xrXmUgG-zMbdtChF7B2sHAgVlzv-euHOY1kKo,6620
215
+ catalystwan/exceptions.py,sha256=fx4TCO1qCYvIilCIjS1PDk-vDW8_s-dS4PtjH1EQCOw,6641
216
216
  catalystwan/integration_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
217
217
  catalystwan/integration_tests/base.py,sha256=0BcKgDZcGjdPH2316C-1Se4FUeAtdrNXdkUVp_aXEZc,2367
218
218
  catalystwan/integration_tests/feature_profile/sdwan/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -231,7 +231,7 @@ catalystwan/integration_tests/feature_profile/sdwan/test_system.py,sha256=ab6fG7
231
231
  catalystwan/integration_tests/feature_profile/sdwan/test_tracker.py,sha256=GnIEHmUoIZObtBK-YvjYYtDsFnGSDpAVwi4rk9-r7XE,5117
232
232
  catalystwan/integration_tests/feature_profile/sdwan/test_transport.py,sha256=xRS880JCUD06xL_EaHKNylvaXB9wRHqUYsORhU2MYus,78923
233
233
  catalystwan/integration_tests/feature_profile/sdwan/topology/test_topology.py,sha256=2vsAd0pk3wcfo8wFTRttnw4gjSPJi1KFfFCu5lGAiJQ,4340
234
- catalystwan/integration_tests/feature_profile/test_parcel.py,sha256=4dqt5IP39lJ6vTsx3X7OdAHpYdbsIlDdpASFAM6d87Y,1517
234
+ catalystwan/integration_tests/feature_profile/test_parcel.py,sha256=yIO0Ku2CfsCXxInSJJwRNTvfDw8MI3r1qdvna0yefxk,1499
235
235
  catalystwan/integration_tests/profile_builder/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
236
236
  catalystwan/integration_tests/profile_builder/test_pb_service.py,sha256=WO6VVA7kNXesyGtk67e0lMDZBd4Z8wB7espBh0TzUTA,9420
237
237
  catalystwan/integration_tests/profile_builder/test_pb_transport.py,sha256=QQ5f1q6OV9dIyRQy1lb3Wp9beIKaWDaDLnNoGm4XY6A,10376
@@ -246,7 +246,7 @@ catalystwan/models/configuration/common.py,sha256=2X9gj5awWPKtLPFgWfxhkRrMoX22t1
246
246
  catalystwan/models/configuration/feature_profile/README.md,sha256=IQMhbnEAbLtotT80aL2emekH-ou8CqR0WSYXhZXilJw,10050
247
247
  catalystwan/models/configuration/feature_profile/builder.py,sha256=GDqK7ZxnWHTKWHRw13xvD1aDl60xe6gFsP_B9z5T8a8,663
248
248
  catalystwan/models/configuration/feature_profile/common.py,sha256=a5xohaoXzAewtqYYdk2GJy7B-rxxlxYatlP2WZ1eZqY,30423
249
- catalystwan/models/configuration/feature_profile/parcel.py,sha256=k3IyNVzjtDrTjUEBYvzQeQWeqNhRNk2tXDYqbQXWX2o,7583
249
+ catalystwan/models/configuration/feature_profile/parcel.py,sha256=OD7rG4j55M_uAnA_rLGnX_Y0xddcxuEflAOL9-DPXPQ,7582
250
250
  catalystwan/models/configuration/feature_profile/sdwan/acl/__init__.py,sha256=-AXvVMLyaAYWUnwzTT_mvar37ZpO2vNRy_ZsUIA5dGo,324
251
251
  catalystwan/models/configuration/feature_profile/sdwan/acl/ipv4acl.py,sha256=HpiY0DCZWE9EHCbMbyIJ-iRharSRO3IGcSV3kWbMXjY,12167
252
252
  catalystwan/models/configuration/feature_profile/sdwan/acl/ipv6acl.py,sha256=MRtDNb2v1TNNf3yijLFlzL3H1KxHOquPmww1V9ZCacI,12969
@@ -266,7 +266,7 @@ catalystwan/models/configuration/feature_profile/sdwan/embedded_security/policy.
266
266
  catalystwan/models/configuration/feature_profile/sdwan/other/__init__.py,sha256=BhTiGcP5hnp2m4zdnDFgsktAVeiwxaxSYLKtPolu450,560
267
267
  catalystwan/models/configuration/feature_profile/sdwan/other/cybervision.py,sha256=lrnbpHvceKTYZM73FbYtY_1_G_dXjfat7x5g_BAnfSM,2070
268
268
  catalystwan/models/configuration/feature_profile/sdwan/other/thousandeyes.py,sha256=aA5PmFl5v_uvGIIAt16tlVf0OxQKuc-FkEEyg2OmD_I,4806
269
- catalystwan/models/configuration/feature_profile/sdwan/other/ucse.py,sha256=VZKXkct2QQRp_W7lbvrTcyli1lU8n7QoePYhe8z0DNI,4006
269
+ catalystwan/models/configuration/feature_profile/sdwan/other/ucse.py,sha256=fdaqQQSutvGXClaXsn89IfR2fQS2AJNKZqhCg3pWqPg,4021
270
270
  catalystwan/models/configuration/feature_profile/sdwan/policy_object/__init__.py,sha256=RbQgaZxz7dEikwAYVdh4oSA6rZUA0muZIS-bhOUWzBM,6047
271
271
  catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/app_probe.py,sha256=sLmhwa63b5OnxXqHrCMLMSQspUDx3LBcmEyCssup9CY,1989
272
272
  catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/application_list.py,sha256=-ctN0OraZt3rG-Wddn8oQ4R4z4rxYcz2YXhiQptQtec,1275
@@ -386,7 +386,7 @@ catalystwan/models/configuration/feature_profile/sdwan/uc_voice/trunk_group.py,s
386
386
  catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_global.py,sha256=9v3-IBHo0Qzxlguq6k8UbCE1SKJdoeoOO0q65HsoWIQ,2290
387
387
  catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_tenant.py,sha256=7av6UzCBbztqFNbfhRIbJGDJg87n3QrTzZL9KT7Pems,1365
388
388
  catalystwan/models/configuration/network_hierarchy/__init__.py,sha256=jGlyKaRRsfrK0gGKoPXqRPmO-myVgfbZVm3FzVkWSts,425
389
- catalystwan/models/configuration/network_hierarchy/cflowd.py,sha256=AEWc29t-fF3eKJDfTzlBFfBEP5z4RyaGWMAXPgshgOg,5216
389
+ catalystwan/models/configuration/network_hierarchy/cflowd.py,sha256=3C6UHFpc1isuBvpui9HLoIn63esS2-ucpnLBQS8I-Ak,5530
390
390
  catalystwan/models/configuration/network_hierarchy/node.py,sha256=Ex1OMLl00uU3y4fSSD-xl-t1AJYotYhFRr0KQ826pK8,2792
391
391
  catalystwan/models/configuration/policy_group.py,sha256=8A_TsNmjSRVx1BAlYUgQQWkpp_SizDL_ZTS8zUTtHgs,2235
392
392
  catalystwan/models/configuration/profile_type.py,sha256=qIlobJmEYQ5qEGZeYJZsVMaXtFbR7RgFr6eH8YyoNAo,157
@@ -396,7 +396,7 @@ catalystwan/models/feature_profile_parcel.py,sha256=ddjq8QzqsRv3yBKNDHUf-qgtyeOC
396
396
  catalystwan/models/misc/application_protocols.py,sha256=DZlBhLEu-HJ4w5cHCtfGWp34I95H4GRsToK1xcJCxK4,785
397
397
  catalystwan/models/monitoring/security_policy.py,sha256=WKGu_iHSHOM019dkBKWtyZWSIr9AQ56orQMMthexyB4,346
398
398
  catalystwan/models/monitoring/server_info.py,sha256=yToBDkBvuksaiZEaSefZTdh9P6sCVAmglpRYwJDkUWE,405
399
- catalystwan/models/policy/__init__.py,sha256=G3i0hYxWIJqifY_QNTGOjuNczHJ5FXiuh_MdS_r48Lw,14568
399
+ catalystwan/models/policy/__init__.py,sha256=wtxlHq6TYkII682Him_1796xc6pnyCkn9olE76ls1Ss,14828
400
400
  catalystwan/models/policy/centralized.py,sha256=aKwUPxDFr8qzG0w0nVPqyhfDlpKb5dEdsvoeERybT7Y,9151
401
401
  catalystwan/models/policy/definition/access_control_list.py,sha256=blcrf2ixd7EJhGq9dPZidBpH3lD5w6BRsOY9AiUQNKA,6397
402
402
  catalystwan/models/policy/definition/access_control_list_ipv6.py,sha256=Hxd6CFXiCo3It5hTo9pqAdo191N10uaqbFJKRq_z1FI,6422
@@ -423,7 +423,7 @@ catalystwan/models/policy/definition/rule_set.py,sha256=LePxWLSKyJ8AlwoclkunACh2
423
423
  catalystwan/models/policy/definition/security_group.py,sha256=VAzeOU7l9g79YG78oFvnbkDDgHLvbKe5Ct0p_6V380Q,3698
424
424
  catalystwan/models/policy/definition/srst_phone_profile.py,sha256=xd8k_fz8Z1qnU3v5A1EmIScKXEoUGgcr132pwD_0kyU,1201
425
425
  catalystwan/models/policy/definition/ssl_decryption.py,sha256=UC4dSbARM5p3dqfRl6OKjCCVWeO-RT4Y-nzfjJ4pEFo,8062
426
- catalystwan/models/policy/definition/ssl_decryption_utd_profile.py,sha256=fSTdZShL_LNWa3-HsWnXQBgyABuY7vXQfQm2o0DRxmE,3589
426
+ catalystwan/models/policy/definition/ssl_decryption_utd_profile.py,sha256=m8-G9Q0AkxwtzhZrCcCmImfqWKAzvz6SKu1aSqfx8DU,3567
427
427
  catalystwan/models/policy/definition/traffic_data.py,sha256=dME5uXiBR3c4E6p_P25991R6wHqzqt8Ef9Gku3Xojq4,16606
428
428
  catalystwan/models/policy/definition/url_filtering.py,sha256=BXRfsvA4IS1UABk4nBivHsp3gn4N86MaeGzFwQZVObc,2741
429
429
  catalystwan/models/policy/definition/vpn_membership.py,sha256=gXTkYSIt8eVxt0DPDjlyQkZDYvHD9pTnXkX-ZAltSTQ,1329
@@ -464,11 +464,11 @@ catalystwan/models/policy/list/translation_profile.py,sha256=GF10P3m7vVuB5jc5rrJ
464
464
  catalystwan/models/policy/list/translation_rules.py,sha256=xdAXlJfKzGC4QEHhHK3lnYu3inpcC4wIUgbi6toeaGo,982
465
465
  catalystwan/models/policy/list/trunkgroup.py,sha256=sv5FcOE-C0L9oM5WUOQOTH6PMoZqziWlIoy4-9Thz0U,2075
466
466
  catalystwan/models/policy/list/umbrella_data.py,sha256=ZpoqTx3J5ZWUtMiZaYwsKqJABTUZDNMPGpFe_2a4hrk,1140
467
- catalystwan/models/policy/list/url.py,sha256=zcZK8MdWTdoVezjPTFBn0r7-h8k1v5AuDaxdQfvOOb8,856
467
+ catalystwan/models/policy/list/url.py,sha256=vl09xXKNsPV6bcZ4z7wFJvQyDOXbBtZDdOfRtiAA4OA,888
468
468
  catalystwan/models/policy/list/vpn.py,sha256=X6yK8skSRn3tPooCeKVouS54tud7QAT302nRls0tU6w,1071
469
469
  catalystwan/models/policy/list/zone.py,sha256=0NWmXUcEwgmXSM2nb-OspTPsULBDaqXvF9cpBwx8He8,1439
470
470
  catalystwan/models/policy/localized.py,sha256=ijgqi9fEODD_qAnszGrphaSiXA75ZId2Vfci7EiBoCA,6382
471
- catalystwan/models/policy/policy.py,sha256=q8jJ54X-BNti9UB1xFAgYYzj8ZhLc4Lfz8PBlhmC60s,3713
471
+ catalystwan/models/policy/policy.py,sha256=k3wv-1LEFFbsEfD3bxp_Pq8Rh5rlIsz84EE1T-mvcUo,3728
472
472
  catalystwan/models/policy/policy_definition.py,sha256=JeZIj53iaNoBXfE3sOQaOo142JYi9IEDWLvhgF61Jeo,49437
473
473
  catalystwan/models/policy/policy_list.py,sha256=SaGjY7wNWwCHu9VoVIzqWGAbHJ-VWIxZg7QgQ7FJ-Ak,1881
474
474
  catalystwan/models/policy/security.py,sha256=v1RkFg9--BrOOdgcBcUvk6G4byZ27h8-fG3xBJYrsAE,11125
@@ -616,7 +616,7 @@ catalystwan/utils/device_model.py,sha256=IPEQD7yYyhCH91Uw9P-dF34TcIEimYEnImYVaaQ
616
616
  catalystwan/utils/dict.py,sha256=1IC4pcPFQ7yS39-ZWSFwyCvQKYzfZoxsz3YtJ-S6l7w,2110
617
617
  catalystwan/utils/feature_template/choose_model.py,sha256=JoQ7l_TF2PTH8bciOSVAFavevo35n2F4DbusIIvapM8,953
618
618
  catalystwan/utils/feature_template/find_template_values.py,sha256=nEi-hFmOaX5cHeS4VBSJmhxIl3jOn42o6mNSkS9Htak,5405
619
- catalystwan/utils/model.py,sha256=UCqpk2kpgT8YYRp4prv9kmR4ciBNvQDCl3ZB8Ln941k,1506
619
+ catalystwan/utils/model.py,sha256=AbuERvgU_3w16rFaKOA1QM3F-xL7xW13YTB-hFWRIEo,1692
620
620
  catalystwan/utils/operation_status.py,sha256=SeT34c_x8F98mwl9x0-klvGTMKbrKSTY_w0zaKyuds8,584
621
621
  catalystwan/utils/persona.py,sha256=fZEMM2wgvvSuNaGwsLk-qWJUuZzkhYm1C3YUnRGOqRw,147
622
622
  catalystwan/utils/personality.py,sha256=vQ8dKNS6BPAVhRB6IyKRxX2y6a_ukAKBcYnTUuUFgoM,196
@@ -631,7 +631,7 @@ catalystwan/version.py,sha256=X5yIMPIrWPbdoF9eJfwxfjcvWr7JMfWQF98hQhlGB5I,3032
631
631
  catalystwan/vmanage_auth.py,sha256=UZ57lTihsLsXw4AdU7Vn8XuY1jo3732Vc9WuFoHSiiQ,10780
632
632
  catalystwan/workflows/backup_restore_device_templates.py,sha256=BoR2KlRbpCI6RxIWG7j7tucaLpw5w3ESN20dLhsrZFY,19796
633
633
  catalystwan/workflows/tenant_migration.py,sha256=4KLbqUwH4gEegE92PCGfRd226eZd_crCUpaYUWoGXDI,9790
634
- catalystwan-0.41.2.dev6.dist-info/LICENSE,sha256=97ROi91Vxrj_Jio2v8FI9E8-y6x2uYdQRaFlrEbVjkc,11375
635
- catalystwan-0.41.2.dev6.dist-info/METADATA,sha256=_U2izirHEsCyVz8rO2eGD5-YkcT7hmWw8DCCif5qRqQ,21275
636
- catalystwan-0.41.2.dev6.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
637
- catalystwan-0.41.2.dev6.dist-info/RECORD,,
634
+ catalystwan-0.41.2.dev8.dist-info/LICENSE,sha256=97ROi91Vxrj_Jio2v8FI9E8-y6x2uYdQRaFlrEbVjkc,11375
635
+ catalystwan-0.41.2.dev8.dist-info/METADATA,sha256=E80Sr2BaABziMkStuVLgJ3yWOf5DNI0qgYgGIKzr9N4,21275
636
+ catalystwan-0.41.2.dev8.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
637
+ catalystwan-0.41.2.dev8.dist-info/RECORD,,