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
@@ -5,16 +5,13 @@ from __future__ import annotations
5
5
  import json
6
6
  import logging
7
7
  from enum import Enum
8
- from typing import TYPE_CHECKING, Any, List, Optional, Type, overload
8
+ from typing import TYPE_CHECKING, Any, Optional, Type, overload
9
9
 
10
10
  from ciscoconfparse import CiscoConfParse # type: ignore
11
- from typing_extensions import deprecated
12
11
 
13
12
  from catalystwan.api.task_status_api import Task
14
13
  from catalystwan.api.templates.cli_template import CLITemplate
15
14
  from catalystwan.api.templates.device_template.device_template import (
16
- CreateDeviceInputPayload,
17
- DeviceInputValues,
18
15
  DeviceSpecificValue,
19
16
  DeviceTemplate,
20
17
  GeneralTemplate,
@@ -22,7 +19,6 @@ from catalystwan.api.templates.device_template.device_template import (
22
19
  from catalystwan.api.templates.feature_template import FeatureTemplate
23
20
  from catalystwan.api.templates.feature_template_field import FeatureTemplateField
24
21
  from catalystwan.api.templates.feature_template_payload import FeatureTemplatePayload
25
- from catalystwan.api.templates.models.aaa_model import AAAModel
26
22
  from catalystwan.api.templates.models.cisco_aaa_model import CiscoAAAModel
27
23
  from catalystwan.api.templates.models.cisco_banner_model import CiscoBannerModel
28
24
  from catalystwan.api.templates.models.cisco_bfd_model import CiscoBFDModel
@@ -41,15 +37,12 @@ from catalystwan.api.templates.models.cli_template import CliTemplateModel
41
37
  from catalystwan.api.templates.models.omp_vsmart_model import OMPvSmart
42
38
  from catalystwan.api.templates.models.security_vsmart_model import SecurityvSmart
43
39
  from catalystwan.api.templates.models.system_vsmart_model import SystemVsmart
44
- from catalystwan.api.templates.models.vpn_vsmart_interface_model import VpnVsmartInterfaceModel
45
- from catalystwan.api.templates.models.vpn_vsmart_model import VpnVsmartModel
46
- from catalystwan.dataclasses import Device, FeatureTemplatesTypes
40
+ from catalystwan.dataclasses import Device, DeviceTemplateInfo, FeatureTemplateInfo, FeatureTemplatesTypes, TemplateInfo
47
41
  from catalystwan.endpoints.configuration_device_template import FeatureToCLIPayload
48
- from catalystwan.exceptions import AttachedError, CatalystwanDeprecationWarning, TemplateNotFoundError
49
- from catalystwan.models.common import DeviceModel
50
- from catalystwan.models.templates import DeviceTemplateInformation, FeatureTemplateInformation, TemplateInformation
42
+ from catalystwan.exceptions import AttachedError, TemplateNotFoundError
51
43
  from catalystwan.response import ManagerResponse
52
44
  from catalystwan.typed_list import DataSequence
45
+ from catalystwan.utils.device_model import DeviceModel
53
46
  from catalystwan.utils.dict import merge
54
47
  from catalystwan.utils.pydantic_field import get_extra_field
55
48
  from catalystwan.utils.template_type import TemplateType
@@ -81,15 +74,15 @@ class TemplatesAPI:
81
74
  self.session = session
82
75
 
83
76
  @overload
84
- def get(self, template: Type[DeviceTemplate]) -> DataSequence[DeviceTemplateInformation]:
77
+ def get(self, template: Type[DeviceTemplate]) -> DataSequence[DeviceTemplateInfo]: # type: ignore
85
78
  ...
86
79
 
87
80
  @overload
88
- def get(self, template: Type[FeatureTemplate]) -> DataSequence[FeatureTemplateInformation]:
81
+ def get(self, template: Type[FeatureTemplate]) -> DataSequence[FeatureTemplateInfo]: # type: ignore
89
82
  ...
90
83
 
91
84
  @overload
92
- def get(self, template: Type[CLITemplate]) -> DataSequence[TemplateInformation]:
85
+ def get(self, template: Type[CLITemplate]) -> DataSequence[TemplateInfo]: # type: ignore
93
86
  ...
94
87
 
95
88
  def get(self, template):
@@ -107,29 +100,33 @@ class TemplatesAPI:
107
100
  def _get_feature_templates(
108
101
  self,
109
102
  summary: bool = True,
110
- ) -> DataSequence[FeatureTemplateInformation]:
103
+ offset: Optional[int] = None,
104
+ limit: Optional[int] = None,
105
+ ) -> DataSequence[FeatureTemplateInfo]:
111
106
  """In a multitenant vManage system, this API is only available in the Provider view."""
112
- return self.session.endpoints.configuration_general_template.get_feature_template_list(
113
- params={"summary": summary}
114
- )
107
+ endpoint = "/dataservice/template/feature"
108
+ params = {"summary": summary}
109
+
110
+ fr_templates = self.session.get(url=endpoint, params=params)
111
+
112
+ return fr_templates.dataseq(FeatureTemplateInfo)
115
113
 
116
114
  def _get_device_templates(
117
115
  self, feature: DeviceTemplateFeature = DeviceTemplateFeature.ALL
118
- ) -> DataSequence[DeviceTemplateInformation]:
116
+ ) -> DataSequence[DeviceTemplateInfo]:
119
117
  """In a multitenant vManage system, this API is only available in the Provider view."""
120
- return self.session.endpoints.configuration_template_master.get_device_template_list(
121
- params={"feature": feature.value}
122
- )
118
+ endpoint = "/dataservice/template/device"
119
+ params = {"feature": feature.value}
123
120
 
124
- def attach(self, name: str, device: Device, timeout_seconds: int = 300, **kwargs):
125
- template_info = self.get(DeviceTemplate).filter(name=name).single_or_default()
126
- if not template_info:
127
- raise TemplateNotFoundError(f"Template with name [{name}] does not exists.")
121
+ templates = self.session.get(url=endpoint, params=params)
122
+ return templates.dataseq(DeviceTemplateInfo)
128
123
 
129
- if template_info.config_type == TemplateType.CLI.value:
124
+ def attach(self, name: str, device: Device, timeout_seconds: int = 300, **kwargs):
125
+ template_type = self.get(DeviceTemplate).filter(name=name).single_or_default().config_type
126
+ if template_type == TemplateType.CLI:
130
127
  return self._attach_cli(name, device, timeout_seconds=timeout_seconds, **kwargs)
131
128
 
132
- if template_info.config_type == TemplateType.FEATURE.value:
129
+ if template_type == TemplateType.FEATURE:
133
130
  return self._attach_feature(name, device, timeout_seconds=timeout_seconds, **kwargs)
134
131
 
135
132
  raise NotImplementedError()
@@ -178,19 +175,17 @@ class TemplatesAPI:
178
175
  }
179
176
 
180
177
  invalid = False
181
- msg = {}
182
178
  for var in vars:
183
179
  if var.property not in payload["deviceTemplateList"][0]["device"][0]:
184
180
  pointer = payload["deviceTemplateList"][0]["device"][0]
185
181
  if var.property not in kwargs["device_specific_vars"]:
186
182
  invalid = True
187
- msg[var.property] = "should be provided in attach method as device_specific_vars kwarg."
188
183
  logger.error(f"{var.property} should be provided in attach method as device_specific_vars kwarg.")
189
184
  else:
190
185
  pointer[var.property] = kwargs["device_specific_vars"][var.property] # type: ignore
191
186
 
192
187
  if invalid:
193
- raise TypeError(f"{msg}")
188
+ raise TypeError()
194
189
 
195
190
  endpoint = "/dataservice/template/device/config/attachfeature"
196
191
  logger.info(f"Attaching a template: {name} to the device: {device.hostname}.")
@@ -283,7 +278,7 @@ class TemplatesAPI:
283
278
  def delete(self, template: Type[CLITemplate], name: str) -> bool: # type: ignore
284
279
  ...
285
280
 
286
- def delete(self, template, name) -> bool:
281
+ def delete(self, template, name):
287
282
  status = False
288
283
 
289
284
  if template is FeatureTemplate:
@@ -380,15 +375,12 @@ class TemplatesAPI:
380
375
  if isinstance(template, DeviceTemplate):
381
376
  return self._edit_device_template(template)
382
377
 
383
- if isinstance(template, CLITemplate):
384
- return self._edit_cli_template(template, template_info)
385
-
386
378
  raise NotImplementedError()
387
379
 
388
380
  def _edit_device_template(self, template: DeviceTemplate):
389
381
  self._create_device_template(template, True)
390
382
 
391
- def _edit_feature_template(self, template: FeatureTemplate, data: FeatureTemplateInformation) -> ManagerResponse:
383
+ def _edit_feature_template(self, template: FeatureTemplate, data: FeatureTemplateInfo) -> ManagerResponse:
392
384
  if self.is_created_by_generator(template):
393
385
  debug = False
394
386
  schema = self.get_feature_template_schema(template, debug)
@@ -401,11 +393,6 @@ class TemplatesAPI:
401
393
  response = self.session.put(f"/dataservice/template/feature/{data.id}", json=payload)
402
394
  return response
403
395
 
404
- def _edit_cli_template(self, template: CLITemplate, data: TemplateInformation) -> ManagerResponse:
405
- response = self.session.put(f"/dataservice/template/device/{data.id}", json=template.generate_payload())
406
-
407
- return response
408
-
409
396
  @overload
410
397
  def create(self, template: FeatureTemplate, debug=False) -> str:
411
398
  ...
@@ -450,9 +437,6 @@ class TemplatesAPI:
450
437
  logger.info(f"Template {template.template_name} ({template_type}) was created successfully ({template_id}).")
451
438
  return template_id
452
439
 
453
- @deprecated(
454
- "Obsolete way to use Feature Templates - only create_by_generator", category=CatalystwanDeprecationWarning
455
- )
456
440
  def _create_feature_template(self, template: FeatureTemplate) -> str:
457
441
  payload = template.generate_payload(self.session)
458
442
  response = self.session.post("/dataservice/template/feature", json=json.loads(payload))
@@ -469,8 +453,8 @@ class TemplatesAPI:
469
453
 
470
454
  def _create_device_template(self, device_template: DeviceTemplate, edit: bool = False) -> str:
471
455
  def get_general_template_info(
472
- name: str, fr_templates: DataSequence[FeatureTemplateInformation]
473
- ) -> FeatureTemplateInformation:
456
+ name: str, fr_templates: DataSequence[FeatureTemplateInfo]
457
+ ) -> FeatureTemplateInfo:
474
458
  _template = fr_templates.filter(name=name).single_or_default()
475
459
 
476
460
  if not _template:
@@ -480,19 +464,19 @@ class TemplatesAPI:
480
464
 
481
465
  def parse_general_template(
482
466
  general_template: GeneralTemplate,
483
- fr_templates: DataSequence[FeatureTemplateInformation],
467
+ fr_templates: DataSequence[FeatureTemplateInfo],
484
468
  ) -> GeneralTemplate:
485
- if general_template.sub_templates:
486
- general_template.sub_templates = [
487
- parse_general_template(_t, fr_templates) for _t in general_template.sub_templates
469
+ if general_template.subTemplates:
470
+ general_template.subTemplates = [
471
+ parse_general_template(_t, fr_templates) for _t in general_template.subTemplates
488
472
  ]
489
473
  if general_template.name:
490
474
  info = get_general_template_info(general_template.name, fr_templates)
491
475
  return GeneralTemplate(
492
476
  name=general_template.name,
493
- sub_templates=general_template.sub_templates,
494
- template_id=info.id,
495
- template_type=info.template_type,
477
+ subTemplates=general_template.subTemplates,
478
+ templateId=info.id,
479
+ templateType=info.template_type,
496
480
  )
497
481
  else:
498
482
  return general_template
@@ -510,18 +494,13 @@ class TemplatesAPI:
510
494
  .id
511
495
  )
512
496
  payload = json.loads(device_template.generate_payload())
513
- response = self.session.endpoints.configuration_template_master.edit_template(
514
- template_id=template_id, payload=payload
515
- )
516
- return response
497
+ response = self.session.put(f"/dataservice/template/device/{template_id}", json=payload)
517
498
  else:
499
+ endpoint = "/dataservice/template/device/feature/"
518
500
  payload = json.loads(device_template.generate_payload())
519
- response = (
520
- self.session.endpoints.configuration_template_master.create_device_template_from_feature_templates(
521
- payload=payload
522
- )
523
- )
524
- return response.template_id
501
+ response = self.session.post(endpoint, json=payload)
502
+
503
+ return response.text
525
504
 
526
505
  def is_created_by_generator(self, template: FeatureTemplate) -> bool:
527
506
  """Checks if template is created by generator
@@ -529,7 +508,6 @@ class TemplatesAPI:
529
508
  Method will be deleted if every template's payload will be generated dynamically.
530
509
  """
531
510
  ported_templates = (
532
- AAAModel,
533
511
  CiscoAAAModel,
534
512
  CiscoBFDModel,
535
513
  CiscoBannerModel,
@@ -548,8 +526,6 @@ class TemplatesAPI:
548
526
  CliTemplateModel,
549
527
  CiscoSecureInternetGatewayModel,
550
528
  CiscoOspfv3Model,
551
- VpnVsmartModel,
552
- VpnVsmartInterfaceModel,
553
529
  )
554
530
 
555
531
  return isinstance(template, ported_templates)
@@ -580,7 +556,7 @@ class TemplatesAPI:
580
556
  name=template.template_name,
581
557
  description=template.template_description,
582
558
  template_type=template.type,
583
- device_types=[device_model for device_model in template.device_models],
559
+ device_types=[device_model.value for device_model in template.device_models],
584
560
  definition={},
585
561
  ) # type: ignore
586
562
 
@@ -590,7 +566,6 @@ class TemplatesAPI:
590
566
  for field in fr_template_fields:
591
567
  value = None
592
568
  priority_order = None
593
- json_dumped_value = None
594
569
  # TODO How to discover Device specific variable
595
570
  if field.key in template.device_specific_variables:
596
571
  value = template.device_specific_variables[field.key]
@@ -628,7 +603,7 @@ class TemplatesAPI:
628
603
  available_devices_for_template = [device["name"] for device in template_type.device_models]
629
604
 
630
605
  provided_device_models = [
631
- dev_mod if type(dev_mod) is DeviceModel else dev_mod for dev_mod in template.device_models
606
+ dev_mod.value if type(dev_mod) is DeviceModel else dev_mod for dev_mod in template.device_models
632
607
  ]
633
608
 
634
609
  if not all(dev in available_devices_for_template for dev in provided_device_models):
@@ -723,47 +698,3 @@ class TemplatesAPI:
723
698
  config = CiscoConfParse(response["config"].splitlines())
724
699
  logger.debug(f"Template loaded from {device.hostname}.")
725
700
  return config
726
-
727
- def get_feature_templates(self) -> DataSequence[FeatureTemplateInformation]:
728
- endpoint = "/dataservice/template/feature"
729
- fr_templates = self.session.get(endpoint)
730
- return fr_templates.dataseq(FeatureTemplateInformation)
731
-
732
- def get_device_templates(self) -> DataSequence[DeviceTemplateInformation]:
733
- endpoint = "/dataservice/template/device"
734
- params = {"feature": "all"}
735
- templates = self.session.get(url=endpoint, params=params)
736
- return templates.dataseq(DeviceTemplateInformation)
737
-
738
- def get_device_template(self, template_id: str) -> DeviceTemplate:
739
- endpoint = f"/dataservice/template/device/object/{template_id}"
740
- response = self.session.get(endpoint)
741
- return DeviceTemplate(**response.json())
742
-
743
- def get_device_template_attached_devices_variables(self, template_id: str) -> List[DeviceInputValues]:
744
- """
745
- Fetches and processes attached device variables for a given device template.
746
-
747
- Args:
748
- template_id (str): The ID of the device template.
749
-
750
- Returns:
751
- List[DeviceInputValues]: A list of DeviceInputValues objects containing device variables.
752
- """
753
- api = self.session.endpoints.configuration_device_template
754
-
755
- # Fetch attached devices for the template
756
- attached_devices = api.get_device_config_attached(template_id)
757
-
758
- # Prepare payload for fetching device variables
759
- payload = CreateDeviceInputPayload(
760
- template_id=template_id,
761
- device_ids=[d.uuid for d in attached_devices if d.uuid],
762
- is_edited=False,
763
- is_master_edited=False,
764
- )
765
-
766
- # Fetch device variables
767
- result = api.create_device_input(payload).data
768
-
769
- return result
@@ -3,12 +3,10 @@
3
3
  ## Feature Template Creation
4
4
 
5
5
  ```python
6
- from catalystwan.api.templates.models.omp_vsmart_model import OMPvSmart
7
-
8
6
  omp_vsmart = OMPvSmart(
9
7
  name="my_first_template",
10
8
  description="NA",
11
- device_models=["vsmart"]
9
+ device_models=[DeviceModel.VSMART]
12
10
 
13
11
  )
14
12
 
@@ -16,86 +14,74 @@ session.api.templates.create(omp_vsmart)
16
14
  ```
17
15
 
18
16
  ## Add new Feature Template in Cisco Catalyst WAN SDK
17
+ These steps will help you to automate feature template creation. We'll explain what to do and why, so everyone will have deep understanding how our templates work. In the example we will try to create `OMP` Feature Template for vSmart.
19
18
 
20
- These steps will help you to automate feature template creation. We'll explain what to do and why, so everyone will have deep understanding how our templates work. In the example we will try to create `OMP` Feature Template for vSmart.
21
-
22
- 1. Get your template type name and version.
19
+ 1. Get your template type name and version.
23
20
  >Note: display name is not template type name!
24
-
25
21
  - For example, you could extract it from response body. Go to your Manager and create any template which you would like to automate in catalystwan. Send template creation request and check for `templateType` and `templateMinVersion` variable names. `OMP` (display name) for vSmart has `omp-vsmart` template type name.
26
22
 
27
23
  2. With corresponding `templateType` we are able to create new class which implements `FeatureTemplate` interface. Create new file in `catalystwan\api\templates\models\` and copy-paste the code and change name of the class with its type attribute.
28
24
 
29
- ```python
30
- from pathlib import Path
31
- from typing import ClassVar
32
- from pydantic import ConfigDict
33
- from catalystwan.api.templates.feature_template import FeatureTemplate
34
-
35
-
36
- class OMPvSmart(FeatureTemplate):
37
- model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True)
25
+ ```python
26
+ from pathlib import Path
27
+ from typing import ClassVar
28
+ from pydantic import ConfigDict
29
+ from catalystwan.api.templates.feature_template import FeatureTemplate
38
30
 
39
- payload_path: ClassVar[Path] = Path(__file__).parent / "DEPRECATED"
40
- type: ClassVar[str] = "omp-vsmart"
41
- ```
42
31
 
32
+ class OMPvSmart(FeatureTemplate):
33
+ model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True)
34
+
35
+ payload_path: ClassVar[Path] = Path(__file__).parent / "DEPRECATED"
36
+ type: ClassVar[str] = "omp-vsmart"
37
+ ```
43
38
  3. (This step is temporary) Find `is_created_by_generator` method in `template_api` and add your new template class.
44
39
 
45
- ```python
46
- ported_templates = (..., OMPvSmart)
47
- ```
48
-
49
- NOTE: This step will be removed once all template payloads will be generated automatically.
50
-
40
+ ```python
41
+ ported_templates = (..., OMPvSmart)
42
+ ```
43
+ NOTE: This step will be removed once all template payloads will be generated automatically.
51
44
  4. (This step is temporary) Find `available_models` definition in 'supported' and add your new template class.
52
-
53
- ```python
54
- available_models = {
55
- (...)
56
- 'omp_vsmart': OMPvSmart
57
- }
58
- ```
59
-
60
- NOTE: This step will be removed once all template payloads will be generated dynamically.
61
-
45
+ ```python
46
+ available_models = {
47
+ (...)
48
+ 'omp_vsmart': OMPvSmart
49
+ }
50
+ ```
51
+ NOTE: This step will be removed once all template payloads will be generated dynamically.
62
52
  5. We can try to create our first template with default values.
53
+ ```python
54
+ omp_vsmart = OMPvSmart(
55
+ name="my_first_template",
56
+ description="NA",
57
+ device_models=[DeviceModel.VSMART]
58
+ )
63
59
 
64
- ```python
65
- omp_vsmart = OMPvSmart(
66
- name="my_first_template",
67
- description="NA",
68
- device_models=["vsmart"]
69
- )
60
+ session.api.templates.create(omp_vsmart)
61
+ ```
62
+ If everything went successfuly, we will get similar message
70
63
 
71
- session.api.templates.create(omp_vsmart)
72
- ```
73
-
74
- If everything went successfuly, we will get similar message:
75
-
76
- `Template my_first_template (FeatureTemplate) was created successfully (7e56acdd-640e-45dc-9335-87abc697995f).`
64
+ `Template my_first_template (FeatureTemplate) was created successfully (7e56acdd-640e-45dc-9335-87abc697995f).`
77
65
 
78
66
  6. We can check whether our template is created sucessfully in Manager manually. If there is an error, please create an issue with error and try go to the 7th step.
79
-
80
- ### Customize Feature Template fields
81
-
67
+
68
+ ### Customize Feature Template fields.
82
69
  7. Run below code with already created session and changed corresponding variables.
83
70
 
84
- ```python
85
- # TODO: Use 2nd layer.
86
- import json
71
+ ```python
72
+ # TODO: Use 2nd layer.
73
+ import json
87
74
 
88
75
 
89
- template_type = "omp-vsmart" # Change this value
90
- template_version = "15.0.0" # Change this value
91
- endpoint = f"/dataservice/template/feature/types/definition/{template_type}/{template_version}"
76
+ template_type = "omp-vsmart" # Change this value
77
+ template_version = "15.0.0" # Change this value
78
+ endpoint = f"/dataservice/template/feature/types/definition/{template_type}/{template_version}"
92
79
 
93
- schema = session.get(url=endpoint).json()
80
+ schema = session.get(url=endpoint).json()
94
81
 
95
- with open(f"response_{template_type}.json", "w") as f:
96
- f.write(json.dumps(schema, indent=4))
97
- ```
82
+ with open(f"response_{template_type}.json", "w") as f:
83
+ f.write(json.dumps(schema, indent=4))
84
+ ```
98
85
 
99
86
  8. Open `response_{template_type}.json` file.
100
-
101
87
  9. Find `fields` key. The value should be list of dictionaries. Get every possible key in the dictionary and fill our class with every possible key. You can find the code in `catalystwan\api\templates\models\omp_vsmart_model.py` file.
@@ -13,7 +13,7 @@ from requests.exceptions import HTTPError
13
13
 
14
14
  from catalystwan.dataclasses import Device
15
15
  from catalystwan.exceptions import TemplateTypeError
16
- from catalystwan.models.common import DeviceModel
16
+ from catalystwan.utils.device_model import DeviceModel
17
17
  from catalystwan.utils.template_type import TemplateType
18
18
 
19
19
  logger = logging.getLogger(__name__)
@@ -62,31 +62,21 @@ class CLITemplate:
62
62
  logger.debug(f"Template loaded from {device.hostname}.")
63
63
  return self.config
64
64
 
65
- def load_from_file(self, file: str) -> CiscoConfParse:
66
- """Load CLI config from file.
67
- Args:
68
- file: The path of the file to be loaded.
69
- Returns:
70
- CiscoConfParse: Loaded template.
71
- """
72
- self.config = CiscoConfParse(file)
73
- return self.config
74
-
75
65
  def generate_payload(self) -> dict:
76
66
  config_str = "\n".join(self.config.ioscfg)
77
67
  payload = {
78
68
  "templateName": self.template_name,
79
69
  "templateDescription": self.template_description,
80
- "deviceType": self.device_model,
70
+ "deviceType": self.device_model.value,
81
71
  "templateConfiguration": config_str,
82
72
  "factoryDefault": False,
83
73
  "configType": "file",
84
74
  }
85
75
  if self.device_model not in [
86
- "vedge",
87
- "vsmart",
88
- "vmanage",
89
- "vedge-cloud",
76
+ DeviceModel.VEDGE,
77
+ DeviceModel.VSMART,
78
+ DeviceModel.VMANAGE,
79
+ DeviceModel.VBOND,
90
80
  ]:
91
81
  payload["cliType"] = "device"
92
82
  payload["draftMode"] = False
@@ -110,7 +100,7 @@ class CLITemplate:
110
100
  "templateId": id,
111
101
  "templateName": self.template_name,
112
102
  "templateDescription": self.template_description,
113
- "deviceType": self.device_model,
103
+ "deviceType": self.device_model.value,
114
104
  "templateConfiguration": config_str,
115
105
  "factoryDefault": False,
116
106
  "configType": "file",