catalystwan 0.41.2.dev9__py3-none-any.whl → 0.41.3__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.
Files changed (509) hide show
  1. catalystwan/ENDPOINTS.md +611 -0
  2. catalystwan/__init__.py +2 -3
  3. catalystwan/api/administration.py +2 -13
  4. catalystwan/api/api_container.py +1 -4
  5. catalystwan/api/config_group_api.py +16 -41
  6. catalystwan/api/configuration_groups/parcel.py +30 -100
  7. catalystwan/api/configuration_groups/parcels/cellular_controller.py +33 -0
  8. catalystwan/api/feature_profile_api.py +237 -2016
  9. catalystwan/api/policy_api.py +116 -470
  10. catalystwan/api/template_api.py +44 -113
  11. catalystwan/api/templates/README.md +47 -61
  12. catalystwan/api/templates/cli_template.py +7 -17
  13. catalystwan/api/templates/device_template/device_template.py +32 -127
  14. catalystwan/api/templates/device_template/device_template_payload.json.j2 +19 -0
  15. catalystwan/api/templates/feature_template.py +3 -3
  16. catalystwan/api/templates/models/cisco_aaa_model.py +42 -289
  17. catalystwan/api/templates/models/cisco_banner_model.py +2 -11
  18. catalystwan/api/templates/models/cisco_bfd_model.py +36 -31
  19. catalystwan/api/templates/models/cisco_bgp_model.py +131 -382
  20. catalystwan/api/templates/models/cisco_logging_model.py +43 -80
  21. catalystwan/api/templates/models/cisco_ntp_model.py +15 -34
  22. catalystwan/api/templates/models/cisco_omp_model.py +60 -70
  23. catalystwan/api/templates/models/cisco_ospf.py +74 -143
  24. catalystwan/api/templates/models/cisco_ospfv3.py +95 -217
  25. catalystwan/api/templates/models/cisco_secure_internet_gateway.py +142 -304
  26. catalystwan/api/templates/models/cisco_snmp_model.py +52 -66
  27. catalystwan/api/templates/models/cisco_system.py +129 -238
  28. catalystwan/api/templates/models/cisco_vpn_interface_model.py +275 -632
  29. catalystwan/api/templates/models/cisco_vpn_model.py +270 -433
  30. catalystwan/api/templates/models/cli_template.py +2 -3
  31. catalystwan/api/templates/models/omp_vsmart_model.py +10 -46
  32. catalystwan/api/templates/models/security_vsmart_model.py +8 -11
  33. catalystwan/api/templates/models/supported.py +4 -10
  34. catalystwan/api/templates/models/system_vsmart_model.py +27 -164
  35. catalystwan/apigw_auth.py +2 -6
  36. catalystwan/dataclasses.py +53 -2
  37. catalystwan/endpoints/__init__.py +41 -41
  38. catalystwan/endpoints/certificate_management_device.py +0 -4
  39. catalystwan/endpoints/cluster_management.py +9 -30
  40. catalystwan/endpoints/configuration/feature_profile/sdwan/policy_object.py +12 -35
  41. catalystwan/endpoints/configuration/feature_profile/sdwan/system.py +11 -164
  42. catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py +26 -144
  43. catalystwan/endpoints/configuration/policy/definition/access_control_list.py +11 -6
  44. catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py +11 -6
  45. catalystwan/endpoints/configuration/policy/definition/control.py +11 -6
  46. catalystwan/endpoints/configuration/policy/definition/device_access.py +11 -6
  47. catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py +11 -6
  48. catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py +11 -6
  49. catalystwan/endpoints/configuration/policy/definition/mesh.py +11 -2
  50. catalystwan/endpoints/configuration/policy/definition/qos_map.py +11 -2
  51. catalystwan/endpoints/configuration/policy/definition/rewrite.py +11 -6
  52. catalystwan/endpoints/configuration/policy/definition/rule_set.py +11 -2
  53. catalystwan/endpoints/configuration/policy/definition/security_group.py +11 -6
  54. catalystwan/endpoints/configuration/policy/definition/traffic_data.py +11 -6
  55. catalystwan/endpoints/configuration/policy/definition/vpn_membership.py +11 -6
  56. catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py +11 -6
  57. catalystwan/endpoints/configuration/policy/list/app.py +16 -3
  58. catalystwan/endpoints/configuration/policy/list/app_probe.py +15 -6
  59. catalystwan/endpoints/configuration/policy/list/as_path.py +16 -3
  60. catalystwan/endpoints/configuration/policy/list/class_map.py +16 -3
  61. catalystwan/endpoints/configuration/policy/list/color.py +16 -3
  62. catalystwan/endpoints/configuration/policy/list/community.py +16 -3
  63. catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py +15 -6
  64. catalystwan/endpoints/configuration/policy/list/data_prefix.py +16 -3
  65. catalystwan/endpoints/configuration/policy/list/expanded_community.py +15 -6
  66. catalystwan/endpoints/configuration/policy/list/fqdn.py +16 -3
  67. catalystwan/endpoints/configuration/policy/list/geo_location.py +16 -3
  68. catalystwan/endpoints/configuration/policy/list/ips_signature.py +15 -6
  69. catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py +16 -3
  70. catalystwan/endpoints/configuration/policy/list/local_app.py +16 -3
  71. catalystwan/endpoints/configuration/policy/list/local_domain.py +16 -3
  72. catalystwan/endpoints/configuration/policy/list/mirror.py +16 -3
  73. catalystwan/endpoints/configuration/policy/list/policer.py +16 -3
  74. catalystwan/endpoints/configuration/policy/list/port.py +16 -3
  75. catalystwan/endpoints/configuration/policy/list/preferred_color_group.py +15 -6
  76. catalystwan/endpoints/configuration/policy/list/prefix.py +16 -4
  77. catalystwan/endpoints/configuration/policy/list/protocol_name.py +15 -6
  78. catalystwan/endpoints/configuration/policy/list/region.py +10 -2
  79. catalystwan/endpoints/configuration/policy/list/site.py +16 -3
  80. catalystwan/endpoints/configuration/policy/list/sla.py +16 -3
  81. catalystwan/endpoints/configuration/policy/list/tloc.py +16 -3
  82. catalystwan/endpoints/configuration/policy/list/url_allow_list.py +16 -3
  83. catalystwan/endpoints/configuration/policy/list/url_block_list.py +16 -3
  84. catalystwan/endpoints/configuration/policy/list/vpn.py +16 -3
  85. catalystwan/endpoints/configuration/policy/list/zone.py +16 -3
  86. catalystwan/endpoints/configuration/policy/security_template.py +3 -2
  87. catalystwan/endpoints/configuration/software_actions.py +4 -2
  88. catalystwan/endpoints/configuration_dashboard_status.py +2 -2
  89. catalystwan/endpoints/configuration_device_template.py +1 -15
  90. catalystwan/endpoints/configuration_feature_profile.py +11 -8
  91. catalystwan/endpoints/configuration_group.py +5 -28
  92. catalystwan/endpoints/configuration_settings.py +1 -90
  93. catalystwan/endpoints/endpoints_container.py +18 -82
  94. catalystwan/endpoints/real_time_monitoring/reboot_history.py +3 -1
  95. catalystwan/endpoints/tenant_migration.py +0 -2
  96. catalystwan/exceptions.py +0 -24
  97. catalystwan/integration_tests/test_find_template_values.py +18 -7
  98. catalystwan/models/common.py +2 -1898
  99. catalystwan/models/configuration/common.py +0 -1
  100. catalystwan/models/configuration/config_migration.py +36 -0
  101. catalystwan/models/configuration/feature_profile/common.py +149 -634
  102. catalystwan/models/configuration/feature_profile/sdwan/management/vpn.py +26 -0
  103. catalystwan/models/configuration/feature_profile/sdwan/policy_object/__init__.py +60 -69
  104. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/app_probe.py +20 -34
  105. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/application_list.py +6 -8
  106. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/color_list.py +5 -7
  107. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/data_prefix.py +4 -13
  108. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/expanded_community_list.py +7 -9
  109. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/fowarding_class.py +5 -7
  110. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_data_prefix.py +9 -11
  111. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_prefix_list.py +10 -25
  112. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/{policer.py → policier.py} +10 -12
  113. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefered_group_color.py +10 -29
  114. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefix_list.py +8 -23
  115. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/sla_class.py +31 -12
  116. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/standard_community.py +10 -16
  117. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/tloc_list.py +7 -8
  118. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/application_list.py +6 -8
  119. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/data_prefix.py +5 -7
  120. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/fqdn.py +5 -7
  121. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/geolocation_list.py +5 -7
  122. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ips_signature.py +5 -7
  123. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/local_domain.py +5 -7
  124. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/protocol_list.py +5 -7
  125. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/security_port.py +11 -21
  126. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url.py +15 -36
  127. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/zone.py +18 -14
  128. catalystwan/models/configuration/feature_profile/sdwan/service/acl.py +409 -0
  129. catalystwan/models/configuration/feature_profile/sdwan/service/appqoe.py +42 -77
  130. catalystwan/models/configuration/feature_profile/sdwan/service/bgp.py +288 -0
  131. catalystwan/models/configuration/feature_profile/sdwan/service/dhcp_server.py +64 -107
  132. catalystwan/models/configuration/feature_profile/sdwan/service/eigrp.py +42 -39
  133. catalystwan/models/configuration/feature_profile/sdwan/service/lan/common.py +88 -7
  134. catalystwan/models/configuration/feature_profile/sdwan/service/lan/ethernet.py +156 -232
  135. catalystwan/models/configuration/feature_profile/sdwan/service/lan/gre.py +108 -38
  136. catalystwan/models/configuration/feature_profile/sdwan/service/lan/ipsec.py +84 -77
  137. catalystwan/models/configuration/feature_profile/sdwan/service/lan/svi.py +56 -62
  138. catalystwan/models/configuration/feature_profile/sdwan/service/lan/vpn.py +121 -112
  139. catalystwan/models/configuration/feature_profile/sdwan/service/multicast.py +57 -56
  140. catalystwan/models/configuration/feature_profile/sdwan/service/object_tracker.py +21 -15
  141. catalystwan/models/configuration/feature_profile/sdwan/{routing → service}/ospf.py +47 -55
  142. catalystwan/models/configuration/feature_profile/sdwan/{routing → service}/ospfv3.py +72 -74
  143. catalystwan/models/configuration/feature_profile/sdwan/service/route_policy.py +110 -358
  144. catalystwan/models/configuration/feature_profile/sdwan/service/service_insertion_attachment.py +25 -17
  145. catalystwan/models/configuration/feature_profile/sdwan/service/switchport.py +58 -50
  146. catalystwan/models/configuration/feature_profile/sdwan/service/tracker.py +21 -12
  147. catalystwan/models/configuration/feature_profile/sdwan/service/wireless_lan.py +31 -27
  148. catalystwan/models/configuration/feature_profile/sdwan/system/aaa.py +10 -58
  149. catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_controller.py +23 -26
  150. catalystwan/models/configuration/profile_type.py +6 -1
  151. catalystwan/models/policy/__init__.py +69 -282
  152. catalystwan/models/policy/centralized.py +29 -26
  153. catalystwan/models/policy/{definition → definitions}/access_control_list.py +17 -47
  154. catalystwan/models/policy/{definition → definitions}/access_control_list_ipv6.py +18 -42
  155. catalystwan/models/policy/{definition → definitions}/control.py +25 -48
  156. catalystwan/models/policy/{definition → definitions}/device_access.py +11 -22
  157. catalystwan/models/policy/{definition → definitions}/device_access_ipv6.py +11 -20
  158. catalystwan/models/policy/{definition → definitions}/hub_and_spoke.py +4 -18
  159. catalystwan/models/policy/{definition → definitions}/mesh.py +1 -13
  160. catalystwan/models/policy/{definition → definitions}/qos_map.py +32 -39
  161. catalystwan/models/policy/{definition → definitions}/rewrite.py +2 -12
  162. catalystwan/models/policy/{definition → definitions}/rule_set.py +48 -66
  163. catalystwan/models/policy/{definition → definitions}/security_group.py +14 -38
  164. catalystwan/models/policy/{definition → definitions}/traffic_data.py +61 -184
  165. catalystwan/models/policy/{definition → definitions}/vpn_membership.py +1 -13
  166. catalystwan/models/policy/{definition → definitions}/zone_based_firewall.py +32 -93
  167. catalystwan/models/policy/lists.py +330 -0
  168. catalystwan/models/policy/lists_entries.py +444 -0
  169. catalystwan/models/policy/localized.py +16 -34
  170. catalystwan/models/policy/policy.py +10 -14
  171. catalystwan/models/policy/policy_definition.py +173 -673
  172. catalystwan/models/policy/policy_list.py +27 -38
  173. catalystwan/models/policy/security.py +46 -145
  174. catalystwan/response.py +2 -6
  175. catalystwan/session.py +1 -1
  176. catalystwan/tests/templates/definitions/{cisco_vpn_basic.json → Basic_Cisco_VPN_Model.json} +2 -2
  177. catalystwan/tests/templates/definitions/complex_aaa.json +277 -0
  178. catalystwan/tests/templates/definitions/{cisco_vpn_complex.json → complex_cisco_vpn.json} +12 -27
  179. catalystwan/tests/templates/definitions/{cisco_aaa.json → iuo.json} +15 -44
  180. catalystwan/tests/templates/definitions/omp_1.json +11 -0
  181. catalystwan/tests/templates/definitions/{omp_vsmart_2.json → omp_2.json} +2 -16
  182. catalystwan/tests/templates/definitions/{omp_vsmart_3.json → omp_3.json} +2 -16
  183. catalystwan/tests/templates/models/__init__.py +13 -46
  184. catalystwan/tests/templates/models/cisco_aaa.py +48 -81
  185. catalystwan/tests/templates/models/cisco_banner.py +2 -2
  186. catalystwan/tests/templates/models/cisco_bfd.py +6 -4
  187. catalystwan/tests/templates/models/cisco_system.py +3 -108
  188. catalystwan/tests/templates/models/cisco_vpn.py +72 -42
  189. catalystwan/tests/templates/models/omp_vsmart.py +8 -28
  190. catalystwan/tests/templates/schemas/cedge_aaa.json +1 -1
  191. catalystwan/tests/templates/schemas/cisco_system.json +0 -242
  192. catalystwan/tests/templates/schemas/cisco_vpn.json +1 -53
  193. catalystwan/tests/templates/schemas/omp-vsmart.json +0 -20
  194. catalystwan/tests/templates/test_chose_model.py +10 -6
  195. catalystwan/tests/templates/test_deserialize_model.py +4 -4
  196. catalystwan/tests/templates/test_find_template_values.py +0 -229
  197. catalystwan/tests/templates/test_serialize_model.py +2 -1
  198. catalystwan/tests/test_cli_template.py +9 -8
  199. catalystwan/tests/test_endpoints.py +11 -42
  200. catalystwan/tests/test_templates.py +19 -16
  201. catalystwan/utils/feature_template/find_template_values.py +9 -22
  202. catalystwan/utils/timezone.py +422 -0
  203. catalystwan/workflows/tenant_migration.py +1 -1
  204. {catalystwan-0.41.2.dev9.dist-info → catalystwan-0.41.3.dist-info}/METADATA +1 -20
  205. catalystwan-0.41.3.dist-info/RECORD +353 -0
  206. catalystwan/api/builders/__init__.py +0 -14
  207. catalystwan/api/builders/feature_profiles/__init__.py +0 -0
  208. catalystwan/api/builders/feature_profiles/application_priority.py +0 -58
  209. catalystwan/api/builders/feature_profiles/builder_factory.py +0 -59
  210. catalystwan/api/builders/feature_profiles/cli.py +0 -76
  211. catalystwan/api/builders/feature_profiles/mixins.py +0 -44
  212. catalystwan/api/builders/feature_profiles/other.py +0 -79
  213. catalystwan/api/builders/feature_profiles/report.py +0 -155
  214. catalystwan/api/builders/feature_profiles/service.py +0 -248
  215. catalystwan/api/builders/feature_profiles/system.py +0 -80
  216. catalystwan/api/builders/feature_profiles/transport.py +0 -256
  217. catalystwan/api/builders/feature_profiles/uc_voice.py +0 -287
  218. catalystwan/api/templates/models/aaa_model.py +0 -387
  219. catalystwan/api/templates/models/vpn_vsmart_interface_model.py +0 -198
  220. catalystwan/api/templates/models/vpn_vsmart_model.py +0 -124
  221. catalystwan/endpoints/configuration/feature_profile/sdwan/application_priority.py +0 -107
  222. catalystwan/endpoints/configuration/feature_profile/sdwan/cli.py +0 -60
  223. catalystwan/endpoints/configuration/feature_profile/sdwan/dns_security.py +0 -83
  224. catalystwan/endpoints/configuration/feature_profile/sdwan/embedded_security.py +0 -88
  225. catalystwan/endpoints/configuration/feature_profile/sdwan/other.py +0 -62
  226. catalystwan/endpoints/configuration/feature_profile/sdwan/service.py +0 -154
  227. catalystwan/endpoints/configuration/feature_profile/sdwan/sig_security.py +0 -88
  228. catalystwan/endpoints/configuration/feature_profile/sdwan/topology.py +0 -93
  229. catalystwan/endpoints/configuration/feature_profile/sdwan/uc_voice.py +0 -77
  230. catalystwan/endpoints/configuration/network_hierarchy.py +0 -47
  231. catalystwan/endpoints/configuration/packages.py +0 -36
  232. catalystwan/endpoints/configuration/policy/abstractions.py +0 -49
  233. catalystwan/endpoints/configuration/policy/definition/aip.py +0 -52
  234. catalystwan/endpoints/configuration/policy/definition/amp.py +0 -52
  235. catalystwan/endpoints/configuration/policy/definition/app_route.py +0 -50
  236. catalystwan/endpoints/configuration/policy/definition/cflowd.py +0 -46
  237. catalystwan/endpoints/configuration/policy/definition/dial_peer.py +0 -57
  238. catalystwan/endpoints/configuration/policy/definition/dns_security.py +0 -50
  239. catalystwan/endpoints/configuration/policy/definition/fxo_port.py +0 -57
  240. catalystwan/endpoints/configuration/policy/definition/fxs_did_port.py +0 -57
  241. catalystwan/endpoints/configuration/policy/definition/fxs_port.py +0 -57
  242. catalystwan/endpoints/configuration/policy/definition/intrusion_prevention.py +0 -52
  243. catalystwan/endpoints/configuration/policy/definition/pri_isdn_port.py +0 -57
  244. catalystwan/endpoints/configuration/policy/definition/route_policy.py +0 -50
  245. catalystwan/endpoints/configuration/policy/definition/srst_phone_profile.py +0 -59
  246. catalystwan/endpoints/configuration/policy/definition/ssl_decryption.py +0 -50
  247. catalystwan/endpoints/configuration/policy/definition/ssl_decryption_utd_profile.py +0 -52
  248. catalystwan/endpoints/configuration/policy/definition/url_filtering.py +0 -50
  249. catalystwan/endpoints/configuration/policy/definition/vpn_qos_map.py +0 -50
  250. catalystwan/endpoints/configuration/policy/list/extended_community.py +0 -52
  251. catalystwan/endpoints/configuration/policy/list/fax_protocol.py +0 -48
  252. catalystwan/endpoints/configuration/policy/list/identity.py +0 -48
  253. catalystwan/endpoints/configuration/policy/list/media_profile.py +0 -52
  254. catalystwan/endpoints/configuration/policy/list/modem_pass_through.py +0 -52
  255. catalystwan/endpoints/configuration/policy/list/scalable_group_tag.py +0 -52
  256. catalystwan/endpoints/configuration/policy/list/supervisory_disconnect.py +0 -52
  257. catalystwan/endpoints/configuration/policy/list/threat_grid_api_key.py +0 -52
  258. catalystwan/endpoints/configuration/policy/list/translation_profile.py +0 -52
  259. catalystwan/endpoints/configuration/policy/list/translation_rules.py +0 -52
  260. catalystwan/endpoints/configuration/policy/list/trunkgroup.py +0 -48
  261. catalystwan/endpoints/configuration/policy/list/umbrella_data.py +0 -52
  262. catalystwan/endpoints/configuration/policy/voice_template.py +0 -39
  263. catalystwan/endpoints/configuration/policy_group.py +0 -30
  264. catalystwan/endpoints/configuration/topology_group.py +0 -51
  265. catalystwan/endpoints/configuration_general_template.py +0 -31
  266. catalystwan/endpoints/configuration_template_master.py +0 -48
  267. catalystwan/integration_tests/base.py +0 -81
  268. catalystwan/integration_tests/feature_profile/sdwan/__init__.py +0 -0
  269. catalystwan/integration_tests/feature_profile/sdwan/policy/__init__.py +0 -0
  270. catalystwan/integration_tests/feature_profile/sdwan/policy/base.py +0 -33
  271. catalystwan/integration_tests/feature_profile/sdwan/policy/test_extended_community.py +0 -33
  272. catalystwan/integration_tests/feature_profile/sdwan/policy/test_security_app_list.py +0 -32
  273. catalystwan/integration_tests/feature_profile/sdwan/test_application_priority.py +0 -433
  274. catalystwan/integration_tests/feature_profile/sdwan/test_cli.py +0 -54
  275. catalystwan/integration_tests/feature_profile/sdwan/test_dns_security.py +0 -106
  276. catalystwan/integration_tests/feature_profile/sdwan/test_other.py +0 -49
  277. catalystwan/integration_tests/feature_profile/sdwan/test_service.py +0 -1078
  278. catalystwan/integration_tests/feature_profile/sdwan/test_sig_security.py +0 -322
  279. catalystwan/integration_tests/feature_profile/sdwan/test_ssl_decryption.py +0 -85
  280. catalystwan/integration_tests/feature_profile/sdwan/test_system.py +0 -368
  281. catalystwan/integration_tests/feature_profile/sdwan/test_tracker.py +0 -127
  282. catalystwan/integration_tests/feature_profile/sdwan/test_transport.py +0 -1698
  283. catalystwan/integration_tests/feature_profile/sdwan/topology/test_topology.py +0 -93
  284. catalystwan/integration_tests/feature_profile/test_parcel.py +0 -54
  285. catalystwan/integration_tests/profile_builder/__init__.py +0 -0
  286. catalystwan/integration_tests/profile_builder/test_pb_service.py +0 -197
  287. catalystwan/integration_tests/profile_builder/test_pb_transport.py +0 -226
  288. catalystwan/integration_tests/profile_builder/test_pb_uc_voice.py +0 -277
  289. catalystwan/integration_tests/test_data/__init__.py +0 -117
  290. catalystwan/integration_tests/test_network_hierarchy.py +0 -82
  291. catalystwan/integration_tests/test_settings.py +0 -30
  292. catalystwan/models/configuration/feature_profile/parcel.py +0 -245
  293. catalystwan/models/configuration/feature_profile/sdwan/acl/__init__.py +0 -13
  294. catalystwan/models/configuration/feature_profile/sdwan/acl/ipv4acl.py +0 -298
  295. catalystwan/models/configuration/feature_profile/sdwan/acl/ipv6acl.py +0 -344
  296. catalystwan/models/configuration/feature_profile/sdwan/application_priority/__init__.py +0 -218
  297. catalystwan/models/configuration/feature_profile/sdwan/application_priority/cloud_probe.py +0 -61
  298. catalystwan/models/configuration/feature_profile/sdwan/application_priority/policy_settings.py +0 -31
  299. catalystwan/models/configuration/feature_profile/sdwan/application_priority/qos_policy.py +0 -102
  300. catalystwan/models/configuration/feature_profile/sdwan/application_priority/traffic_policy.py +0 -1057
  301. catalystwan/models/configuration/feature_profile/sdwan/cli/__init__.py +0 -23
  302. catalystwan/models/configuration/feature_profile/sdwan/cli/config.py +0 -18
  303. catalystwan/models/configuration/feature_profile/sdwan/cli/full_config.py +0 -15
  304. catalystwan/models/configuration/feature_profile/sdwan/dns_security/__init__.py +0 -13
  305. catalystwan/models/configuration/feature_profile/sdwan/dns_security/dns.py +0 -110
  306. catalystwan/models/configuration/feature_profile/sdwan/embedded_security/__init__.py +0 -23
  307. catalystwan/models/configuration/feature_profile/sdwan/embedded_security/ngfirewall.py +0 -493
  308. catalystwan/models/configuration/feature_profile/sdwan/embedded_security/policy.py +0 -171
  309. catalystwan/models/configuration/feature_profile/sdwan/other/__init__.py +0 -25
  310. catalystwan/models/configuration/feature_profile/sdwan/other/cybervision.py +0 -44
  311. catalystwan/models/configuration/feature_profile/sdwan/other/thousandeyes.py +0 -147
  312. catalystwan/models/configuration/feature_profile/sdwan/other/ucse.py +0 -110
  313. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/as_path.py +0 -22
  314. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/extended_community.py +0 -34
  315. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv4_network_object.py +0 -15
  316. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv4_service_object.py +0 -254
  317. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/mirror.py +0 -27
  318. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/network_object_group.py +0 -15
  319. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/object_group.py +0 -15
  320. catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/service_object_group.py +0 -21
  321. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/aip.py +0 -64
  322. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/amp.py +0 -79
  323. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/identity.py +0 -30
  324. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/intrusion_prevention.py +0 -58
  325. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/object_group.py +0 -72
  326. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/rule_set.py +0 -137
  327. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/scalable_group_tag.py +0 -26
  328. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption.py +0 -126
  329. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ssl_decryption_profile.py +0 -165
  330. catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url_filtering.py +0 -148
  331. catalystwan/models/configuration/feature_profile/sdwan/routing/__init__.py +0 -26
  332. catalystwan/models/configuration/feature_profile/sdwan/routing/bgp.py +0 -609
  333. catalystwan/models/configuration/feature_profile/sdwan/service/__init__.py +0 -91
  334. catalystwan/models/configuration/feature_profile/sdwan/service/dual_router_ha.py +0 -26
  335. catalystwan/models/configuration/feature_profile/sdwan/service/lan/multilink.py +0 -101
  336. catalystwan/models/configuration/feature_profile/sdwan/service/service_chain.py +0 -38
  337. catalystwan/models/configuration/feature_profile/sdwan/sig_security/__init__.py +0 -19
  338. catalystwan/models/configuration/feature_profile/sdwan/sig_security/sig_security.py +0 -379
  339. catalystwan/models/configuration/feature_profile/sdwan/system/__init__.py +0 -59
  340. catalystwan/models/configuration/feature_profile/sdwan/system/banner.py +0 -30
  341. catalystwan/models/configuration/feature_profile/sdwan/system/basic.py +0 -290
  342. catalystwan/models/configuration/feature_profile/sdwan/system/bfd.py +0 -69
  343. catalystwan/models/configuration/feature_profile/sdwan/system/device_access.py +0 -157
  344. catalystwan/models/configuration/feature_profile/sdwan/system/device_access_ipv6.py +0 -157
  345. catalystwan/models/configuration/feature_profile/sdwan/system/global_parcel.py +0 -163
  346. catalystwan/models/configuration/feature_profile/sdwan/system/logging_parcel.py +0 -162
  347. catalystwan/models/configuration/feature_profile/sdwan/system/mrf.py +0 -75
  348. catalystwan/models/configuration/feature_profile/sdwan/system/ntp.py +0 -103
  349. catalystwan/models/configuration/feature_profile/sdwan/system/omp.py +0 -120
  350. catalystwan/models/configuration/feature_profile/sdwan/system/security.py +0 -179
  351. catalystwan/models/configuration/feature_profile/sdwan/system/snmp.py +0 -173
  352. catalystwan/models/configuration/feature_profile/sdwan/topology/__init__.py +0 -29
  353. catalystwan/models/configuration/feature_profile/sdwan/topology/custom_control.py +0 -425
  354. catalystwan/models/configuration/feature_profile/sdwan/topology/hubspoke.py +0 -60
  355. catalystwan/models/configuration/feature_profile/sdwan/topology/mesh.py +0 -23
  356. catalystwan/models/configuration/feature_profile/sdwan/trackers/__init__.py +0 -36
  357. catalystwan/models/configuration/feature_profile/sdwan/trackers/tracker.py +0 -96
  358. catalystwan/models/configuration/feature_profile/sdwan/trackers/tracker_group.py +0 -63
  359. catalystwan/models/configuration/feature_profile/sdwan/transport/__init__.py +0 -93
  360. catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_profile.py +0 -71
  361. catalystwan/models/configuration/feature_profile/sdwan/transport/gps.py +0 -37
  362. catalystwan/models/configuration/feature_profile/sdwan/transport/management/ethernet.py +0 -121
  363. catalystwan/models/configuration/feature_profile/sdwan/transport/t1e1controller.py +0 -124
  364. catalystwan/models/configuration/feature_profile/sdwan/transport/vpn.py +0 -285
  365. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/cellular.py +0 -173
  366. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ethernet.py +0 -389
  367. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/gre.py +0 -46
  368. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/ipsec.py +0 -137
  369. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/multilink.py +0 -219
  370. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/protocol_over.py +0 -405
  371. catalystwan/models/configuration/feature_profile/sdwan/transport/wan/interface/t1e1serial.py +0 -195
  372. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/__init__.py +0 -62
  373. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/analog_interface.py +0 -436
  374. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/call_routing.py +0 -179
  375. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/digital_interface.py +0 -380
  376. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/dsp_farm.py +0 -193
  377. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/media_profile.py +0 -17
  378. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/server_group.py +0 -51
  379. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/srst.py +0 -86
  380. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/supervisory_disconnect.py +0 -69
  381. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_profile.py +0 -42
  382. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/translation_rule.py +0 -31
  383. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/trunk_group.py +0 -26
  384. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_global.py +0 -57
  385. catalystwan/models/configuration/feature_profile/sdwan/uc_voice/voice_tenant.py +0 -40
  386. catalystwan/models/configuration/network_hierarchy/__init__.py +0 -24
  387. catalystwan/models/configuration/network_hierarchy/cflowd.py +0 -128
  388. catalystwan/models/configuration/network_hierarchy/node.py +0 -88
  389. catalystwan/models/configuration/network_hierarchy/security_logging.py +0 -91
  390. catalystwan/models/configuration/packages.py +0 -57
  391. catalystwan/models/configuration/policy_group.py +0 -74
  392. catalystwan/models/configuration/topology_group.py +0 -52
  393. catalystwan/models/policy/definition/aip.py +0 -60
  394. catalystwan/models/policy/definition/amp.py +0 -65
  395. catalystwan/models/policy/definition/app_route.py +0 -246
  396. catalystwan/models/policy/definition/cflowd.py +0 -95
  397. catalystwan/models/policy/definition/dial_peer.py +0 -60
  398. catalystwan/models/policy/definition/dns_security.py +0 -130
  399. catalystwan/models/policy/definition/fxo_port.py +0 -63
  400. catalystwan/models/policy/definition/fxs_did_port.py +0 -58
  401. catalystwan/models/policy/definition/fxs_port.py +0 -56
  402. catalystwan/models/policy/definition/intrusion_prevention.py +0 -55
  403. catalystwan/models/policy/definition/pri_isdn_port.py +0 -48
  404. catalystwan/models/policy/definition/route_policy.py +0 -187
  405. catalystwan/models/policy/definition/srst_phone_profile.py +0 -37
  406. catalystwan/models/policy/definition/ssl_decryption.py +0 -209
  407. catalystwan/models/policy/definition/ssl_decryption_utd_profile.py +0 -88
  408. catalystwan/models/policy/definition/url_filtering.py +0 -70
  409. catalystwan/models/policy/definition/vpn_qos_map.py +0 -46
  410. catalystwan/models/policy/list/app.py +0 -44
  411. catalystwan/models/policy/list/app_probe.py +0 -42
  412. catalystwan/models/policy/list/as_path.py +0 -30
  413. catalystwan/models/policy/list/class_map.py +0 -30
  414. catalystwan/models/policy/list/color.py +0 -28
  415. catalystwan/models/policy/list/communities.py +0 -83
  416. catalystwan/models/policy/list/data_ipv6_prefix.py +0 -30
  417. catalystwan/models/policy/list/data_prefix.py +0 -30
  418. catalystwan/models/policy/list/fax_protocol.py +0 -45
  419. catalystwan/models/policy/list/fqdn.py +0 -24
  420. catalystwan/models/policy/list/geo_location.py +0 -33
  421. catalystwan/models/policy/list/identity.py +0 -29
  422. catalystwan/models/policy/list/ips_signature.py +0 -27
  423. catalystwan/models/policy/list/ipv6_prefix.py +0 -33
  424. catalystwan/models/policy/list/local_app.py +0 -45
  425. catalystwan/models/policy/list/local_domain.py +0 -36
  426. catalystwan/models/policy/list/media_profile.py +0 -44
  427. catalystwan/models/policy/list/mirror.py +0 -27
  428. catalystwan/models/policy/list/modem_pass_through.py +0 -27
  429. catalystwan/models/policy/list/policer.py +0 -39
  430. catalystwan/models/policy/list/port.py +0 -33
  431. catalystwan/models/policy/list/preferred_color_group.py +0 -82
  432. catalystwan/models/policy/list/prefix.py +0 -33
  433. catalystwan/models/policy/list/protocol_name.py +0 -26
  434. catalystwan/models/policy/list/region.py +0 -45
  435. catalystwan/models/policy/list/scalable_group_tag.py +0 -30
  436. catalystwan/models/policy/list/site.py +0 -34
  437. catalystwan/models/policy/list/sla.py +0 -77
  438. catalystwan/models/policy/list/supervisory_disconnect.py +0 -62
  439. catalystwan/models/policy/list/threat_grid_api_key.py +0 -32
  440. catalystwan/models/policy/list/tloc.py +0 -32
  441. catalystwan/models/policy/list/translation_profile.py +0 -32
  442. catalystwan/models/policy/list/translation_rules.py +0 -29
  443. catalystwan/models/policy/list/trunkgroup.py +0 -56
  444. catalystwan/models/policy/list/umbrella_data.py +0 -30
  445. catalystwan/models/policy/list/url.py +0 -39
  446. catalystwan/models/policy/list/vpn.py +0 -40
  447. catalystwan/models/policy/list/zone.py +0 -46
  448. catalystwan/models/policy/voice.py +0 -77
  449. catalystwan/models/settings.py +0 -41
  450. catalystwan/models/templates.py +0 -79
  451. catalystwan/tests/builders/test_report.py +0 -60
  452. catalystwan/tests/builders/uc_voice.py +0 -85
  453. catalystwan/tests/models/__init__.py +0 -0
  454. catalystwan/tests/models/configuration/feature_profile/sdwan/policy_object/security/test_url.py +0 -73
  455. catalystwan/tests/models/test_digital_interface.py +0 -56
  456. catalystwan/tests/templates/definitions/aaa_basic.json +0 -96
  457. catalystwan/tests/templates/definitions/aaa_complex.json +0 -464
  458. catalystwan/tests/templates/definitions/cisco_aaa_complex.json +0 -361
  459. catalystwan/tests/templates/definitions/cisco_logging_complex.json +0 -268
  460. catalystwan/tests/templates/definitions/cisco_ntp_complex.json +0 -143
  461. catalystwan/tests/templates/definitions/cisco_omp_complex.json +0 -175
  462. catalystwan/tests/templates/definitions/cisco_ospf_complex.json +0 -302
  463. catalystwan/tests/templates/definitions/cisco_sig.json +0 -405
  464. catalystwan/tests/templates/definitions/cisco_snmp_complex.json +0 -258
  465. catalystwan/tests/templates/definitions/cisco_system_complex.json +0 -502
  466. catalystwan/tests/templates/definitions/cisco_vpn_interface_complex.json +0 -821
  467. catalystwan/tests/templates/definitions/omp_vsmart_1.json +0 -26
  468. catalystwan/tests/templates/definitions/omp_vsmart_complex.json +0 -73
  469. catalystwan/tests/templates/definitions/security_vsmart_complex.json +0 -24
  470. catalystwan/tests/templates/definitions/system_vsmart_complex.json +0 -193
  471. catalystwan/tests/templates/definitions/vpn_vsmart_basic.json +0 -17
  472. catalystwan/tests/templates/definitions/vpn_vsmart_complex.json +0 -179
  473. catalystwan/tests/templates/definitions/vpn_vsmart_interface_basic.json +0 -42
  474. catalystwan/tests/templates/definitions/vpn_vsmart_interface_complex.json +0 -208
  475. catalystwan/tests/templates/models/aaa.py +0 -106
  476. catalystwan/tests/templates/models/cisco_logging.py +0 -65
  477. catalystwan/tests/templates/models/cisco_ntp.py +0 -17
  478. catalystwan/tests/templates/models/cisco_omp.py +0 -37
  479. catalystwan/tests/templates/models/cisco_ospf.py +0 -60
  480. catalystwan/tests/templates/models/cisco_secure_internet_gateway.py +0 -95
  481. catalystwan/tests/templates/models/cisco_snmp.py +0 -40
  482. catalystwan/tests/templates/models/cisco_vpn_interface.py +0 -200
  483. catalystwan/tests/templates/models/security_vsmart.py +0 -11
  484. catalystwan/tests/templates/models/system_vsmart.py +0 -37
  485. catalystwan/tests/templates/models/vpn_vsmart.py +0 -32
  486. catalystwan/tests/templates/models/vpn_vsmart_interface.py +0 -54
  487. catalystwan/tests/templates/schemas/aaa.json +0 -1096
  488. catalystwan/tests/templates/schemas/cisco_logging.json +0 -577
  489. catalystwan/tests/templates/schemas/cisco_ntp.json +0 -265
  490. catalystwan/tests/templates/schemas/cisco_omp.json +0 -479
  491. catalystwan/tests/templates/schemas/cisco_ospf.json +0 -908
  492. catalystwan/tests/templates/schemas/cisco_secure_internet_gateway.json +0 -1520
  493. catalystwan/tests/templates/schemas/cisco_snmp.json +0 -561
  494. catalystwan/tests/templates/schemas/cisco_vpn_interface.json +0 -3348
  495. catalystwan/tests/templates/schemas/security-vsmart.json +0 -58
  496. catalystwan/tests/templates/schemas/system-vsmart.json +0 -2585
  497. catalystwan/tests/templates/schemas/vpn-vsmart-interface.json +0 -859
  498. catalystwan/tests/templates/schemas/vpn-vsmart.json +0 -445
  499. catalystwan/tests/templates/test_find_template_values_2.py +0 -193
  500. catalystwan/tests/test_feature_profile_api.py +0 -282
  501. catalystwan/tests/test_models_common.py +0 -53
  502. catalystwan/utils/model.py +0 -48
  503. catalystwan/utils/persona.py +0 -5
  504. catalystwan/utils/type_check.py +0 -22
  505. catalystwan/workflows/backup_restore_device_templates.py +0 -467
  506. catalystwan-0.41.2.dev9.dist-info/RECORD +0 -641
  507. /catalystwan/tests/templates/definitions/{cisco_banner.json → banner_1.json} +0 -0
  508. {catalystwan-0.41.2.dev9.dist-info → catalystwan-0.41.3.dist-info}/LICENSE +0 -0
  509. {catalystwan-0.41.2.dev9.dist-info → catalystwan-0.41.3.dist-info}/WHEEL +0 -0
@@ -1,32 +0,0 @@
1
- # Copyright 2024 Cisco Systems, Inc. and its affiliates
2
-
3
- from typing import List, Literal
4
-
5
- from pydantic import BaseModel, ConfigDict, Field
6
-
7
- from catalystwan.models.common import IntStr
8
- from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
9
-
10
- CallType = Literal["called", "calling"]
11
-
12
-
13
- class TranslationProfileEntry(BaseModel):
14
- model_config = ConfigDict(populate_by_name=True)
15
- translation_rule: IntStr = Field(
16
- ge=1, le=1073741823, validation_alias="translationRule", serialization_alias="translationRule"
17
- )
18
- call_type: CallType = Field(validation_alias="callType", serialization_alias="callType")
19
-
20
-
21
- class TranslationProfileList(PolicyListBase):
22
- model_config = ConfigDict(populate_by_name=True)
23
- type: Literal["translationProfile", "translationprofile"] = "translationProfile"
24
- entries: List[TranslationProfileEntry] = Field(default_factory=list)
25
-
26
-
27
- class TranslationProfileListEditPayload(TranslationProfileList, PolicyListId):
28
- pass
29
-
30
-
31
- class TranslationProfileListInfo(TranslationProfileList, PolicyListInfo):
32
- pass
@@ -1,29 +0,0 @@
1
- # Copyright 2024 Cisco Systems, Inc. and its affiliates
2
-
3
- from typing import List, Literal
4
-
5
- from pydantic import BaseModel, ConfigDict, Field
6
-
7
- from catalystwan.models.common import IntStr
8
- from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
9
-
10
-
11
- class TranslationRulesEntry(BaseModel):
12
- model_config = ConfigDict(populate_by_name=True)
13
- rule_num: IntStr = Field(ge=1, validation_alias="ruleNum", serialization_alias="ruleNum")
14
- match: str = Field(pattern=r"^/.*/$")
15
- replace: str = Field(pattern=r"^/.*/$|^reject$")
16
-
17
-
18
- class TranslationRulesList(PolicyListBase):
19
- model_config = ConfigDict(populate_by_name=True)
20
- type: Literal["translationRules", "translationrules"] = "translationRules"
21
- entries: List[TranslationRulesEntry] = Field(default_factory=list)
22
-
23
-
24
- class TranslationRulesListEditPayload(TranslationRulesList, PolicyListId):
25
- pass
26
-
27
-
28
- class TranslationRulesListInfo(TranslationRulesList, PolicyListInfo):
29
- pass
@@ -1,56 +0,0 @@
1
- # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
-
3
- from typing import List, Literal, Optional
4
-
5
- from pydantic import BaseModel, ConfigDict, Field
6
-
7
- from catalystwan.models.common import HuntSchemeChannel as HuntSchemeMethodPrecedence
8
- from catalystwan.models.common import HuntSchemeMethod
9
- from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
10
-
11
-
12
- class TrunkGroupListEntry(BaseModel):
13
- model_config = ConfigDict(populate_by_name=True)
14
- hunt_scheme_method: HuntSchemeMethod = Field(
15
- validation_alias="huntSchemeMethod", serialization_alias="huntSchemeMethod"
16
- )
17
- hunt_scheme_precedence: Optional[HuntSchemeMethodPrecedence] = Field(
18
- default=None, validation_alias="huntSchemePrecedence", serialization_alias="huntSchemePrecedence"
19
- )
20
- max_calls_in: Optional[int] = Field(
21
- default=None, validation_alias="maxCallsIn", serialization_alias="maxCallsIn", ge=0, le=1000
22
- )
23
- max_calls_out: Optional[int] = Field(
24
- default=None, validation_alias="maxCallsOut", serialization_alias="maxCallsOut", ge=0, le=1000
25
- )
26
- max_retries: int = Field(validation_alias="maxRetries", serialization_alias="maxRetries", ge=1, le=5)
27
-
28
-
29
- class TrunkGroupList(PolicyListBase):
30
- type: Literal["trunkGroup"] = "trunkGroup"
31
- entries: List[TrunkGroupListEntry] = []
32
-
33
- def add_entry(
34
- self,
35
- hunt_scheme_method: HuntSchemeMethod,
36
- hunt_scheme_precedence: Optional[HuntSchemeMethodPrecedence],
37
- max_retries: int,
38
- max_calls_in: Optional[int] = None,
39
- max_calls_out: Optional[int] = None,
40
- ) -> None:
41
- entry = TrunkGroupListEntry(
42
- hunt_scheme_method=hunt_scheme_method,
43
- hunt_scheme_precedence=hunt_scheme_precedence,
44
- max_retries=max_retries,
45
- max_calls_in=max_calls_in,
46
- max_calls_out=max_calls_out,
47
- )
48
- self.entries.append(entry)
49
-
50
-
51
- class TrunkGroupListEditPayload(TrunkGroupList, PolicyListId):
52
- pass
53
-
54
-
55
- class TrunkGroupListInfo(TrunkGroupList, PolicyListInfo):
56
- pass
@@ -1,30 +0,0 @@
1
- # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
-
3
- from typing import List, Literal, Optional
4
-
5
- from pydantic import BaseModel, ConfigDict, Field
6
-
7
- from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
8
-
9
-
10
- class UmbrellaDataListEntry(BaseModel):
11
- model_config = ConfigDict(populate_by_name=True)
12
- api_key: Optional[str] = Field(default=None, validation_alias="apiKey", serialization_alias="apiKey")
13
- secret: Optional[str] = Field(default=None)
14
- api_key_v2: Optional[str] = Field(default=None, validation_alias="apiKeyV2", serialization_alias="apiKeyV2")
15
- secret_v2: Optional[str] = Field(default=None, validation_alias="secretV2", serialization_alias="secretV2")
16
- token: str
17
- umb_org_id: str = Field(validation_alias="umbOrgId", serialization_alias="umbOrgId")
18
-
19
-
20
- class UmbrellaDataList(PolicyListBase):
21
- type: Literal["umbrellaData"] = "umbrellaData"
22
- entries: List[UmbrellaDataListEntry] = Field(default_factory=list)
23
-
24
-
25
- class UmbrellaDataListEditPayload(UmbrellaDataList, PolicyListId):
26
- pass
27
-
28
-
29
- class UmbrellaDataListInfo(UmbrellaDataList, PolicyListInfo):
30
- pass
@@ -1,39 +0,0 @@
1
- # Copyright 2024 Cisco Systems, Inc. and its affiliates
2
-
3
- from typing import List, Literal
4
-
5
- from pydantic import BaseModel, ConfigDict
6
-
7
- from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
8
-
9
-
10
- class URLListEntry(BaseModel):
11
- model_config = ConfigDict(populate_by_name=True)
12
-
13
- pattern: str
14
-
15
-
16
- class URLAllowList(PolicyListBase):
17
- type: Literal["urlWhiteList", "urlwhitelist"] = "urlWhiteList"
18
- entries: List[URLListEntry] = []
19
-
20
-
21
- class URLAllowListEditPayload(URLAllowList, PolicyListId):
22
- pass
23
-
24
-
25
- class URLAllowListInfo(URLAllowList, PolicyListInfo):
26
- pass
27
-
28
-
29
- class URLBlockList(PolicyListBase):
30
- type: Literal["urlBlackList", "urlblacklist"] = "urlBlackList"
31
- entries: List[URLListEntry] = []
32
-
33
-
34
- class URLBlockListEditPayload(URLBlockList, PolicyListId):
35
- pass
36
-
37
-
38
- class URLBlockListInfo(URLBlockList, PolicyListInfo):
39
- pass
@@ -1,40 +0,0 @@
1
- # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
-
3
- from typing import List, Literal, Set, Tuple
4
-
5
- from pydantic import BaseModel, Field, field_validator
6
-
7
- from catalystwan.models.common import IntRangeStr
8
- from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
9
-
10
-
11
- class VPNListEntry(BaseModel):
12
- vpn: IntRangeStr = Field(description="0-65530 range or single number")
13
-
14
- @field_validator("vpn")
15
- @classmethod
16
- def check_vpn_range(cls, vpn: IntRangeStr):
17
- for i in vpn:
18
- if i is not None:
19
- assert 0 <= i <= 65_530
20
- return vpn
21
-
22
-
23
- class VPNList(PolicyListBase):
24
- type: Literal["vpn"] = "vpn"
25
- entries: List[VPNListEntry] = []
26
-
27
- def add_vpns(self, vpns: Set[int]):
28
- for vpn in vpns:
29
- self._add_entry(VPNListEntry(vpn=(vpn, None)))
30
-
31
- def add_vpn_range(self, vpn_range: Tuple[int, int]):
32
- self._add_entry(VPNListEntry(vpn=vpn_range))
33
-
34
-
35
- class VPNListEditPayload(VPNList, PolicyListId):
36
- pass
37
-
38
-
39
- class VPNListInfo(VPNList, PolicyListInfo):
40
- pass
@@ -1,46 +0,0 @@
1
- # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
-
3
- from typing import List, Literal, Optional, Set
4
-
5
- from pydantic import BaseModel, Field, field_validator, model_validator
6
-
7
- from catalystwan.models.common import IntRangeStr, check_fields_exclusive
8
- from catalystwan.models.policy.policy_list import PolicyListBase, PolicyListId, PolicyListInfo
9
-
10
-
11
- class ZoneListEntry(BaseModel):
12
- vpn: Optional[IntRangeStr] = Field(default=None, description="0-65530 hypenated range or single number")
13
- interface: Optional[str] = None
14
-
15
- @field_validator("vpn")
16
- @classmethod
17
- def check_vpn_range(cls, vpn: Optional[IntRangeStr]):
18
- if vpn is not None:
19
- for i in vpn:
20
- if i is not None:
21
- assert 0 <= i <= 65_530
22
- return vpn
23
-
24
- @model_validator(mode="after")
25
- def check_vpn_xor_interface(self):
26
- check_fields_exclusive(self.__dict__, {"vpn", "interface"}, True)
27
- return self
28
-
29
-
30
- class ZoneList(PolicyListBase):
31
- type: Literal["zone"] = "zone"
32
- entries: List[ZoneListEntry] = []
33
-
34
- def assign_vpns(self, vpns: Set[int]) -> None:
35
- self.entries = [ZoneListEntry(vpn=(vpn, None)) for vpn in vpns]
36
-
37
- def assign_interfaces(self, ifs: Set[str]) -> None:
38
- self.entries = [ZoneListEntry(interface=interface) for interface in ifs]
39
-
40
-
41
- class ZoneListEditPayload(ZoneList, PolicyListId):
42
- pass
43
-
44
-
45
- class ZoneListInfo(ZoneList, PolicyListInfo):
46
- pass
@@ -1,77 +0,0 @@
1
- # Copyright 2023 Cisco Systems, Inc. and its affiliates
2
-
3
- from typing import List, Literal, Optional
4
- from uuid import UUID
5
-
6
- from pydantic import BaseModel, ConfigDict, Field, model_validator
7
-
8
- from catalystwan.models.policy.policy import AssemblyItemBase, PolicyCreationPayload, PolicyDefinition, PolicyInfo
9
- from catalystwan.models.policy.policy_definition import VoicePortType
10
-
11
- VoiceAssemblyItemType = Literal[
12
- "dialPeer",
13
- "dialpeer",
14
- "fxoPort",
15
- "fxoport",
16
- "fxsDidPort",
17
- "fxsdidport",
18
- "fxsPort",
19
- "fxsport",
20
- "priIsdnPort",
21
- "priisdnport",
22
- "srstPhoneProfile",
23
- "srstphoneprofile",
24
- ]
25
-
26
-
27
- class VoiceAssemblyItem(AssemblyItemBase):
28
- model_config = ConfigDict(populate_by_name=True)
29
- type: VoiceAssemblyItemType
30
- port_type: VoicePortType = Field(serialization_alias="portType", validation_alias="portType")
31
-
32
-
33
- class VoicePolicyDefinition(PolicyDefinition):
34
- model_config = ConfigDict(populate_by_name=True)
35
- assembly: List[VoiceAssemblyItem] = Field(default_factory=list)
36
-
37
- def find_assembly_item_by_definition_id(self, definition_id: UUID) -> Optional[VoiceAssemblyItem]:
38
- for item in self.assembly:
39
- if item.definition_id == definition_id:
40
- return item
41
- return None
42
-
43
-
44
- class VoicePolicy(PolicyCreationPayload):
45
- model_config = ConfigDict(populate_by_name=True)
46
- policy_type: Literal["feature"] = Field(
47
- default="feature", serialization_alias="policyType", validation_alias="policyType"
48
- )
49
- policy_definition: VoicePolicyDefinition = Field(
50
- serialization_alias="policyDefinition",
51
- validation_alias="policyDefinition",
52
- )
53
-
54
- @model_validator(mode="before")
55
- @classmethod
56
- def try_parse_policy_definition_string(cls, values):
57
- # this is needed because GET /template/policy/vsmart contains string in policyDefinition field
58
- # while POST /template/policy/vsmart requires a regular object
59
- # it makes sense to reuse that model for both requests and present parsed data to the user
60
- if not isinstance(values, dict):
61
- return values
62
- json_policy_type = values.get("policyType")
63
- json_policy_definition = values.get("policyDefinition")
64
- if json_policy_type == "feature" and isinstance(json_policy_definition, str):
65
- values["policyDefinition"] = VoicePolicyDefinition.model_validate_json(json_policy_definition)
66
- return values
67
-
68
-
69
- class VoicePolicyEditResponse(BaseModel):
70
- model_config = ConfigDict(populate_by_name=True)
71
- master_templates_affected: List[str] = Field(
72
- default_factory=list, serialization_alias="masterTemplatesAffected", validation_alias="masterTemplatesAffected"
73
- )
74
-
75
-
76
- class VoicePolicyInfo(PolicyInfo, VoicePolicy):
77
- pass
@@ -1,41 +0,0 @@
1
- # Copyright 2024 Cisco Systems, Inc. and its affiliates
2
- from typing import List, Literal, Optional
3
-
4
- from pydantic import BaseModel, ConfigDict, Field
5
-
6
- Region = Literal["nam", "eur"]
7
-
8
-
9
- class ThreatGridApiEntires(BaseModel):
10
- model_config = ConfigDict(extra="forbid")
11
- region: Region
12
- apikey: Optional[str] = Field(default="")
13
-
14
-
15
- class ThreatGridApiData(BaseModel):
16
- model_config = ConfigDict(extra="forbid")
17
- entries: List[ThreatGridApiEntires] = Field(
18
- default_factory=lambda: [
19
- ThreatGridApiEntires(region="nam"),
20
- ThreatGridApiEntires(region="eur"),
21
- ],
22
- )
23
-
24
-
25
- class ThreatGridApi(BaseModel):
26
- model_config = ConfigDict(extra="forbid")
27
- data: List[ThreatGridApiData] = Field(default_factory=lambda: [ThreatGridApiData()])
28
-
29
- def set_region_api_key(self, region: Region, apikey: str) -> None:
30
- for entry in self.data[0].entries:
31
- if entry.region == region:
32
- entry.apikey = apikey
33
- return
34
- raise ValueError(f"Region {region} not found in ThreatGridApi")
35
-
36
- def get_region_api_key(self, region: Region) -> str:
37
- for entry in self.data[0].entries:
38
- if entry.region == region:
39
- apikey = entry.apikey
40
- return "" if apikey is None else apikey
41
- raise ValueError(f"Region {region} not found in ThreatGridApi")
@@ -1,79 +0,0 @@
1
- # Copyright 2022 Cisco Systems, Inc. and its affiliates
2
-
3
- import datetime as dt
4
- from typing import List, Literal, Optional
5
-
6
- from pydantic import BaseModel, ConfigDict, Field
7
-
8
- FeatureType = Literal["all", "vmanage-default", "network-design", "cloud-dock", "lawful-interception"]
9
- TemplateType = Literal["file", "template"] # file == cli, template == feature
10
-
11
-
12
- class TemplateInformation(BaseModel):
13
- model_config = ConfigDict(populate_by_name=True)
14
-
15
- last_updated_by: str = Field(serialization_alias="lastUpdatedBy", validation_alias="lastUpdatedBy")
16
- id: str = Field(serialization_alias="templateId", validation_alias="templateId")
17
- factory_default: bool = Field(serialization_alias="factoryDefault", validation_alias="factoryDefault")
18
- name: str = Field(serialization_alias="templateName", validation_alias="templateName")
19
- devices_attached: int = Field(serialization_alias="devicesAttached", validation_alias="devicesAttached")
20
- description: str = Field(serialization_alias="templateDescription", validation_alias="templateDescription")
21
-
22
-
23
- class FeatureTemplateInformation(TemplateInformation):
24
- model_config = ConfigDict(populate_by_name=True)
25
-
26
- template_type: str = Field(serialization_alias="templateType", validation_alias="templateType")
27
- device_type: List[str] = Field(serialization_alias="deviceType", validation_alias="deviceType")
28
- version: str = Field(serialization_alias="templateMinVersion", validation_alias="templateMinVersion")
29
- template_definition: Optional[str] = Field(
30
- default=None, serialization_alias="templateDefinition", validation_alias="templateDefinition"
31
- )
32
- created_by: Optional[str] = Field(default=None, serialization_alias="createdBy", validation_alias="createdBy")
33
- created_on: Optional[int] = Field(default=None, serialization_alias="createdOn", validation_alias="createdOn")
34
- last_updated_on: dt.datetime = Field(serialization_alias="lastUpdatedOn", validation_alias="lastUpdatedOn")
35
- config_type: Optional[str] = Field(default=None, serialization_alias="configType", validation_alias="configType")
36
- attached_masters_count: Optional[int] = Field(
37
- default=None, serialization_alias="attachedMastersCount", validation_alias="attachedMastersCount"
38
- )
39
- devices_attached: int = Field(serialization_alias="devicesAttached", validation_alias="devicesAttached")
40
- resource_group: Optional[str] = Field(
41
- default=None, serialization_alias="resourceGroup", validation_alias="resourceGroup"
42
- )
43
-
44
-
45
- class DeviceTemplateInformation(TemplateInformation):
46
- model_config = ConfigDict(populate_by_name=True)
47
-
48
- device_type: str = Field(serialization_alias="deviceType", validation_alias="deviceType")
49
- template_class: str = Field(serialization_alias="templateClass", validation_alias="templateClass")
50
- config_type: str = Field(serialization_alias="configType", validation_alias="configType")
51
- template_attached: int = Field(serialization_alias="templateAttached", validation_alias="templateAttached")
52
- draft_mode: Optional[str] = Field(default=None, serialization_alias="draftMode", validation_alias="draftMode")
53
- device_role: Optional[str] = Field(default=None, serialization_alias="deviceRole", validation_alias="deviceRole")
54
- resource_group: Optional[str] = Field(
55
- default=None, serialization_alias="resourceGroup", validation_alias="resourceGroup"
56
- )
57
- last_updated_on: dt.datetime = Field(serialization_alias="lastUpdatedOn", validation_alias="lastUpdatedOn")
58
- last_updated_by: str = Field(serialization_alias="lastUpdatedBy", validation_alias="lastUpdatedBy")
59
-
60
-
61
- class FeatureTemplateDefinition(TemplateInformation):
62
- model_config = ConfigDict(populate_by_name=True)
63
-
64
- template_type: str = Field(serialization_alias="templateType", validation_alias="templateType")
65
- version: str = Field(serialization_alias="templateMinVersion", validation_alias="templateMinVersion")
66
- device_type: List[str] = Field(serialization_alias="deviceType", validation_alias="deviceType")
67
- edited_template_definition: Optional[dict] = Field(
68
- serialization_alias="editedTemplateDefinition", validation_alias="editedTemplateDefinition"
69
- )
70
- template_definition: Optional[dict] = Field(
71
- serialization_alias="templateDefinition", validation_alias="templateDefinition"
72
- )
73
- config_type: str = Field(serialization_alias="configType", validation_alias="configType")
74
- attached_masters_count: Optional[int] = Field(
75
- default=None, serialization_alias="attachedMastersCount", validation_alias="attachedMastersCount"
76
- )
77
- feature: FeatureType
78
- created_on: Optional[int] = Field(default=None, serialization_alias="createdOn", validation_alias="createdOn")
79
- created_by: Optional[str] = Field(default=None, serialization_alias="createdBy", validation_alias="createdBy")
@@ -1,60 +0,0 @@
1
- # Copyright 2025 Cisco Systems, Inc. and its affiliates
2
- from unittest.mock import MagicMock
3
- from uuid import UUID
4
-
5
- import pytest
6
-
7
- from catalystwan.api.builders.feature_profiles.report import FeatureProfileBuildReport, handle_association_request
8
- from catalystwan.exceptions import ManagerErrorInfo, ManagerHTTPError
9
-
10
-
11
- def test_handle_association_request_when_http_error_expect_report_failed_parcel_info():
12
- report = FeatureProfileBuildReport(
13
- profile_name="test_profile",
14
- profile_uuid=UUID(int=0),
15
- )
16
- parcel = MagicMock(parcel_name="parcel_name", _get_parcel_type=MagicMock(return_value="parcel_type"))
17
-
18
- with handle_association_request(report, parcel):
19
- raise ManagerHTTPError(
20
- error_info=ManagerErrorInfo(
21
- message="Something went wrong",
22
- details="Something went wrong",
23
- code="500",
24
- )
25
- )
26
-
27
- assert report.failed_parcels[0].parcel_name == "parcel_name"
28
- assert report.failed_parcels[0].parcel_type == "parcel_type"
29
- assert report.failed_parcels[0].error_info.message == "Something went wrong"
30
- assert report.failed_parcels[0].error_info.details == "Something went wrong"
31
- assert report.failed_parcels[0].error_info.code == "500"
32
-
33
-
34
- def test_handle_association_request_when_success_expect_no_failed_parcel_info():
35
- report = FeatureProfileBuildReport(
36
- profile_name="test_profile",
37
- profile_uuid=UUID(int=0),
38
- )
39
- parcel = MagicMock(parcel_name="parcel_name", _get_parcel_type=MagicMock(return_value="parcel_type"))
40
-
41
- with handle_association_request(report, parcel):
42
- pass
43
-
44
- assert report.failed_parcels == []
45
-
46
-
47
- def test_handle_association_request_when_exception_expect_no_raise():
48
- report = FeatureProfileBuildReport(
49
- profile_name="test_profile",
50
- profile_uuid=UUID(int=0),
51
- )
52
- parcel = MagicMock(parcel_name="parcel_name", _get_parcel_type=MagicMock(return_value="parcel_type"))
53
-
54
- try:
55
- with handle_association_request(report, parcel):
56
- raise Exception("Something went wrong")
57
- except Exception:
58
- pytest.fail("Exception was propagated, but should have been suppressed")
59
-
60
- assert report.failed_parcels == []
@@ -1,85 +0,0 @@
1
- # Copyright 2024 Cisco Systems, Inc. and its affiliates
2
- import unittest
3
- from typing import List
4
- from unittest.mock import MagicMock
5
- from uuid import uuid4
6
-
7
- from catalystwan.api.builders.feature_profiles.uc_voice import UcVoiceFeatureProfileBuilder
8
- from catalystwan.api.configuration_groups.parcel import as_default, as_global
9
- from catalystwan.models.configuration.feature_profile.common import RefIdItem
10
-
11
-
12
- class BaseModel:
13
- def __init__(self, **kwargs):
14
- self.model_fields_set = set(kwargs.keys())
15
- for key, value in kwargs.items():
16
- setattr(self, key, value)
17
-
18
-
19
- class TestUcVoiceFeatureProfileBuilder(unittest.TestCase):
20
- def setUp(self):
21
- self.builder = UcVoiceFeatureProfileBuilder(session=MagicMock())
22
- self.builder._pushed_associable_parcels = {
23
- "p1_name": uuid4(),
24
- "p2_name": uuid4(),
25
- }
26
-
27
- def test_populate_association_with_matching_fields(self):
28
- association = [
29
- BaseModel(
30
- media_profile=RefIdItem(ref_id=as_global("p2_name")),
31
- server_group=RefIdItem(ref_id=as_global("p1_name")),
32
- ),
33
- ]
34
-
35
- self.builder._populate_association(association)
36
-
37
- # Assert that matching fields are updated
38
- self.assertEqual(
39
- association[0].media_profile.ref_id.value, str(self.builder._pushed_associable_parcels["p2_name"])
40
- )
41
- self.assertEqual(
42
- association[0].server_group.ref_id.value, str(self.builder._pushed_associable_parcels["p1_name"])
43
- )
44
-
45
- def test_populate_association_with_no_matching_fields(self):
46
- association = [BaseModel(translation_profile=RefIdItem(ref_id=as_global("non_matching_field")))]
47
-
48
- self.builder._populate_association(association)
49
-
50
- # Assert that no changes are made for non-matching fields
51
- self.assertEqual(association[0].translation_profile.ref_id, as_default(None))
52
-
53
- def test_populate_association_partial_matching_fields(self):
54
- association = [
55
- BaseModel(
56
- media_profile=RefIdItem(ref_id=as_global("p2_name")),
57
- supervisory_disconnect=RefIdItem(ref_id=as_global("non_existent_field")),
58
- )
59
- ]
60
-
61
- self.builder._populate_association(association)
62
-
63
- # Assert that only matching fields are updated
64
- self.assertEqual(
65
- association[0].media_profile.ref_id.value, str(self.builder._pushed_associable_parcels["p2_name"])
66
- )
67
- self.assertEqual(association[0].supervisory_disconnect.ref_id, as_default(None))
68
-
69
- def test_populate_association_with_empty_association(self):
70
- association: List[BaseModel] = []
71
-
72
- self.builder._populate_association(association)
73
-
74
- # Assert no errors occur and nothing is changed
75
- self.assertEqual(len(association), 0)
76
-
77
- def test_populate_association_with_no_pushed_parcels(self):
78
- self.builder._pushed_associable_parcels = {}
79
-
80
- association = [BaseModel(media_profile=RefIdItem(ref_id=as_global("p3_name")))]
81
-
82
- self.builder._populate_association(association)
83
-
84
- # Assert that fields are changed to default none when the name is missing
85
- self.assertEqual(association[0].media_profile.ref_id, as_default(None))
File without changes