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
@@ -7,18 +7,17 @@ from uuid import UUID
7
7
  from pydantic import ConfigDict, Field
8
8
  from typing_extensions import Annotated
9
9
 
10
- from catalystwan.models.common import AcceptDropActionType, DeviceAccessProtocolPort
11
10
  from catalystwan.models.policy.policy_definition import (
12
11
  CountAction,
12
+ DefaultAction,
13
13
  DefinitionWithSequencesCommonBase,
14
14
  DestinationDataIPv6PrefixListEntry,
15
15
  DestinationIPv6Entry,
16
16
  DestinationPortEntry,
17
+ DeviceAccessProtocol,
17
18
  Match,
18
- PolicyAcceptDropAction,
19
+ PolicyActionType,
19
20
  PolicyDefinitionBase,
20
- PolicyDefinitionGetResponse,
21
- PolicyDefinitionId,
22
21
  PolicyDefinitionSequenceBase,
23
22
  SourceDataIPv6PrefixListEntry,
24
23
  SourceIPv6Entry,
@@ -52,18 +51,18 @@ class DeviceAccessIPv6PolicySequence(PolicyDefinitionSequenceBase):
52
51
  sequence_type: Literal["deviceaccesspolicyv6"] = Field(
53
52
  default="deviceaccesspolicyv6", serialization_alias="sequenceType", validation_alias="sequenceType"
54
53
  )
55
- base_action: AcceptDropActionType = Field(
54
+ base_action: PolicyActionType = Field(
56
55
  default="accept", serialization_alias="baseAction", validation_alias="baseAction"
57
56
  )
58
57
  match: DeviceAccessIPv6PolicySequenceMatch = DeviceAccessIPv6PolicySequenceMatch()
59
58
  actions: List[DeviceAccessIPv6PolicySequenceActions] = []
60
59
  model_config = ConfigDict(populate_by_name=True)
61
60
 
62
- def match_device_access_protocol(self, port: DeviceAccessProtocolPort) -> None:
61
+ def match_device_access_protocol(self, port: DeviceAccessProtocol) -> None:
63
62
  self._insert_match(DestinationPortEntry.from_port_set_and_ranges(ports={port}))
64
63
 
65
64
  def match_source_data_prefix_list(self, data_prefix_list_id: UUID) -> None:
66
- self._insert_match(SourceDataIPv6PrefixListEntry(ref=[data_prefix_list_id]))
65
+ self._insert_match(SourceDataIPv6PrefixListEntry(ref=data_prefix_list_id))
67
66
 
68
67
  def match_source_ip(self, networks: List[IPv6Network]) -> None:
69
68
  self._insert_match(SourceIPv6Entry.from_ipv6_networks(networks))
@@ -72,7 +71,7 @@ class DeviceAccessIPv6PolicySequence(PolicyDefinitionSequenceBase):
72
71
  self._insert_match(SourcePortEntry.from_port_set_and_ranges(ports, port_ranges))
73
72
 
74
73
  def match_destination_data_prefix_list(self, data_prefix_list_id: UUID) -> None:
75
- self._insert_match(DestinationDataIPv6PrefixListEntry(ref=[data_prefix_list_id]))
74
+ self._insert_match(DestinationDataIPv6PrefixListEntry(ref=data_prefix_list_id))
76
75
 
77
76
  def match_destination_ip(self, networks: List[IPv6Network]) -> None:
78
77
  self._insert_match(DestinationIPv6Entry.from_ipv6_networks(networks))
@@ -83,8 +82,8 @@ class DeviceAccessIPv6PolicySequence(PolicyDefinitionSequenceBase):
83
82
 
84
83
  class DeviceAccessIPv6Policy(DeviceAccessIPv6PolicyHeader, DefinitionWithSequencesCommonBase):
85
84
  sequences: List[DeviceAccessIPv6PolicySequence] = []
86
- default_action: PolicyAcceptDropAction = Field(
87
- default=PolicyAcceptDropAction(type="drop"),
85
+ default_action: DefaultAction = Field(
86
+ default=DefaultAction(type="drop"),
88
87
  serialization_alias="defaultAction",
89
88
  validation_alias="defaultAction",
90
89
  )
@@ -93,8 +92,8 @@ class DeviceAccessIPv6Policy(DeviceAccessIPv6PolicyHeader, DefinitionWithSequenc
93
92
  def add_acl_sequence(
94
93
  self,
95
94
  name: str = "Device Access Control List",
96
- base_action: AcceptDropActionType = "accept",
97
- device_access_protocol: Optional[DeviceAccessProtocolPort] = None,
95
+ base_action: PolicyActionType = "accept",
96
+ device_access_protocol: Optional[DeviceAccessProtocol] = None,
98
97
  ) -> DeviceAccessIPv6PolicySequence:
99
98
  seq = DeviceAccessIPv6PolicySequence(
100
99
  sequence_name=name,
@@ -105,11 +104,3 @@ class DeviceAccessIPv6Policy(DeviceAccessIPv6PolicyHeader, DefinitionWithSequenc
105
104
  seq.match_device_access_protocol(port=device_access_protocol)
106
105
  self.add(seq)
107
106
  return seq
108
-
109
-
110
- class DeviceAccessIPv6PolicyEditPayload(DeviceAccessIPv6Policy, PolicyDefinitionId):
111
- pass
112
-
113
-
114
- class DeviceAccessIPv6PolicyGetResponse(DeviceAccessIPv6Policy, PolicyDefinitionGetResponse):
115
- pass
@@ -5,22 +5,16 @@ from uuid import UUID
5
5
 
6
6
  from pydantic import BaseModel, ConfigDict, Field
7
7
 
8
- from catalystwan.models.policy.policy_definition import (
9
- PolicyDefinitionBase,
10
- PolicyDefinitionGetResponse,
11
- PolicyDefinitionId,
12
- )
8
+ from catalystwan.models.policy.policy_definition import PolicyDefinitionBase
13
9
 
14
10
 
15
11
  class Hub(BaseModel):
16
12
  model_config = ConfigDict(populate_by_name=True)
17
13
  site_list: UUID = Field(validation_alias="siteList", serialization_alias="siteList")
18
14
  preference: Optional[str] = None
19
- prefix_lists: List[UUID] = Field(
20
- default_factory=list, validation_alias="prefixLists", serialization_alias="prefixLists"
21
- )
15
+ prefix_lists: List[UUID] = Field(default=[], validation_alias="prefixLists", serialization_alias="prefixLists")
22
16
  ipv6_prefix_lists: List[UUID] = Field(
23
- default_factory=list, validation_alias="ipv6PrefixLists", serialization_alias="ipv6PrefixLists"
17
+ default=[], validation_alias="ipv6PrefixLists", serialization_alias="ipv6PrefixLists"
24
18
  )
25
19
 
26
20
 
@@ -45,7 +39,7 @@ class HubAndSpokePolicyDefinition(BaseModel):
45
39
  model_config = ConfigDict(populate_by_name=True)
46
40
  vpn_list: UUID = Field(validation_alias="vpnList", serialization_alias="vpnList")
47
41
  sub_definitions: List[HubAndSpokePolicySubDefinition] = Field(
48
- default_factory=list, validation_alias="subDefinitions", serialization_alias="subDefinitions"
42
+ default=[], validation_alias="subDefinitions", serialization_alias="subDefinitions"
49
43
  )
50
44
 
51
45
 
@@ -77,11 +71,3 @@ class HubAndSpokePolicy(PolicyDefinitionBase):
77
71
  )
78
72
  self.definition.sub_definitions.append(sub_definition)
79
73
  return sub_definition
80
-
81
-
82
- class HubAndSpokePolicyEditPayload(HubAndSpokePolicy, PolicyDefinitionId):
83
- pass
84
-
85
-
86
- class HubAndSpokePolicyGetResponse(HubAndSpokePolicy, PolicyDefinitionGetResponse):
87
- pass
@@ -5,11 +5,7 @@ from uuid import UUID
5
5
 
6
6
  from pydantic import BaseModel, ConfigDict, Field
7
7
 
8
- from catalystwan.models.policy.policy_definition import (
9
- PolicyDefinitionBase,
10
- PolicyDefinitionGetResponse,
11
- PolicyDefinitionId,
12
- )
8
+ from catalystwan.models.policy.policy_definition import PolicyDefinitionBase
13
9
 
14
10
 
15
11
  class Region(BaseModel):
@@ -37,11 +33,3 @@ class MeshPolicy(PolicyDefinitionBase):
37
33
  region = Region(name=name, site_lists=site_lists)
38
34
  self.definition.regions.append(region)
39
35
  return region
40
-
41
-
42
- class MeshPolicyEditPayload(MeshPolicy, PolicyDefinitionId):
43
- pass
44
-
45
-
46
- class MeshPolicyGetResponse(MeshPolicy, PolicyDefinitionGetResponse):
47
- pass
@@ -5,12 +5,7 @@ from uuid import UUID
5
5
 
6
6
  from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
7
7
 
8
- from catalystwan.models.common import IntStr
9
- from catalystwan.models.policy.policy_definition import (
10
- PolicyDefinitionBase,
11
- PolicyDefinitionGetResponse,
12
- PolicyDefinitionId,
13
- )
8
+ from catalystwan.models.policy.policy_definition import PolicyDefinitionBase
14
9
 
15
10
  QoSScheduling = Literal[
16
11
  "llq",
@@ -24,17 +19,11 @@ QoSDropType = Literal[
24
19
 
25
20
 
26
21
  class QoSScheduler(BaseModel):
27
- queue: IntStr = Field(ge=0, le=7)
28
- class_map_ref: Optional[UUID] = Field(
29
- default=None, serialization_alias="classMapRef", validation_alias="classMapRef"
30
- )
31
- bandwidth_percent: IntStr = Field(
32
- default=1, ge=1, le=100, serialization_alias="bandwidthPercent", validation_alias="bandwidthPercent"
33
- )
34
- buffer_percent: IntStr = Field(
35
- default=1, ge=1, le=100, serialization_alias="bufferPercent", validation_alias="bufferPercent"
36
- )
37
- burst: Optional[IntStr] = Field(default=None, ge=5000, le=10_000_000)
22
+ queue: str
23
+ class_map_ref: Union[UUID, Literal[""]] = Field(serialization_alias="classMapRef", validation_alias="classMapRef")
24
+ bandwidth_percent: str = Field("1", serialization_alias="bandwidthPercent", validation_alias="bandwidthPercent")
25
+ buffer_percent: str = Field("1", serialization_alias="bufferPercent", validation_alias="bufferPercent")
26
+ burst: Optional[str] = None
38
27
  scheduling: QoSScheduling = "wrr"
39
28
  drops: QoSDropType = "tail-drop"
40
29
  temp_key_values: Optional[str] = Field(
@@ -44,23 +33,35 @@ class QoSScheduler(BaseModel):
44
33
  @staticmethod
45
34
  def get_default_control_scheduler() -> "QoSScheduler":
46
35
  return QoSScheduler(
47
- queue=0,
48
- bandwidth_percent=100,
49
- buffer_percent=100,
50
- burst=15000,
36
+ queue="0",
37
+ class_map_ref="",
38
+ bandwidth_percent="100",
39
+ buffer_percent="100",
40
+ burst="15000",
51
41
  scheduling="llq",
52
42
  drops="tail-drop",
53
43
  )
54
44
 
55
45
  model_config = ConfigDict(populate_by_name=True)
56
46
 
57
- @field_validator("class_map_ref", mode="before")
47
+ @field_validator("queue")
58
48
  @classmethod
59
- def check_optional_class_map_ref(cls, class_map_ref: Union[str, None]):
60
- # None and "" indicates missing value, both can be found in server responses
61
- if not class_map_ref:
62
- return None
63
- return class_map_ref
49
+ def check_queue(cls, queue_str: str):
50
+ assert 0 <= int(queue_str) <= 7
51
+ return queue_str
52
+
53
+ @field_validator("bandwidth_percent", "buffer_percent")
54
+ @classmethod
55
+ def check_bandwidth_and_buffer_percent(cls, percent_str: str):
56
+ assert 1 <= int(percent_str) <= 100
57
+ return percent_str
58
+
59
+ @field_validator("burst")
60
+ @classmethod
61
+ def check_burst(cls, burst_val: Union[str, None]):
62
+ if burst_val is not None:
63
+ assert 5000 <= int(burst_val) <= 10_000_000
64
+ return burst_val
64
65
 
65
66
 
66
67
  class QoSMapDefinition(BaseModel):
@@ -85,11 +86,11 @@ class QoSMapPolicy(PolicyDefinitionBase):
85
86
  ) -> None:
86
87
  self.definition.qos_schedulers.append(
87
88
  QoSScheduler(
88
- queue=queue,
89
+ queue=str(queue),
89
90
  class_map_ref=class_map_ref,
90
- bandwidth_percent=bandwidth,
91
- buffer_percent=buffer,
92
- burst=burst,
91
+ bandwidth_percent=str(bandwidth),
92
+ buffer_percent=str(buffer),
93
+ burst=str(burst) if burst is not None else None,
93
94
  scheduling=scheduling,
94
95
  drops=drops,
95
96
  )
@@ -101,11 +102,3 @@ class QoSMapPolicy(PolicyDefinitionBase):
101
102
  # Only when creating (not when value obtained from remote is present)
102
103
  self.definition = QoSMapDefinition(qos_schedulers=[QoSScheduler.get_default_control_scheduler()])
103
104
  return self
104
-
105
-
106
- class QoSMapPolicyEditPayload(QoSMapPolicy, PolicyDefinitionId):
107
- pass
108
-
109
-
110
- class QoSMapPolicyGetResponse(QoSMapPolicy, PolicyDefinitionGetResponse):
111
- pass
@@ -9,8 +9,6 @@ from catalystwan.models.policy.policy_definition import (
9
9
  DefinitionWithSequencesCommonBase,
10
10
  PLPEntryType,
11
11
  PolicyDefinitionBase,
12
- PolicyDefinitionGetResponse,
13
- PolicyDefinitionId,
14
12
  )
15
13
 
16
14
 
@@ -22,7 +20,7 @@ class RewritePolicyRule(BaseModel):
22
20
  class_: UUID = Field(serialization_alias="class", validation_alias="class")
23
21
  plp: str
24
22
  dscp: str
25
- l2cos: int = Field(serialization_alias="layer2Cos", validation_alias="layer2Cos")
23
+ l2cos: str = Field(serialization_alias="layer2Cos", validation_alias="layer2Cos")
26
24
  model_config = ConfigDict(populate_by_name=True)
27
25
 
28
26
 
@@ -34,14 +32,6 @@ class RewritePolicy(RewritePolicyHeader, DefinitionWithSequencesCommonBase):
34
32
  definition: RewritePolicyDefinition = RewritePolicyDefinition()
35
33
 
36
34
  def add_rule(self, class_map_ref: UUID, dscp: int, l2cos: int, plp: PLPEntryType) -> None:
37
- self.definition.rules.append(RewritePolicyRule(class_=class_map_ref, plp=plp, dscp=str(dscp), l2cos=l2cos))
35
+ self.definition.rules.append(RewritePolicyRule(class_=class_map_ref, plp=plp, dscp=str(dscp), l2cos=str(l2cos)))
38
36
 
39
37
  model_config = ConfigDict(populate_by_name=True)
40
-
41
-
42
- class RewritePolicyEditPayload(RewritePolicy, PolicyDefinitionId):
43
- pass
44
-
45
-
46
- class RewritePolicyGetResponse(RewritePolicy, PolicyDefinitionGetResponse):
47
- pass
@@ -5,21 +5,15 @@ from typing import List, Literal, Optional, Union
5
5
  from uuid import UUID
6
6
 
7
7
  from pydantic import BaseModel, ConfigDict, Field, model_validator
8
+ from typing_extensions import Annotated
8
9
 
9
- from catalystwan.models.common import IntStr, SpaceSeparatedIPv4Networks, check_fields_exclusive
10
- from catalystwan.models.policy.policy_definition import (
11
- PolicyDefinitionBase,
12
- PolicyDefinitionGetResponse,
13
- PolicyDefinitionId,
14
- Reference,
15
- ReferenceList,
16
- VariableName,
17
- )
10
+ from catalystwan.models.common import check_fields_exclusive
11
+ from catalystwan.models.policy.policy_definition import PolicyDefinitionBase, Reference, VariableName
18
12
 
19
13
 
20
14
  class RuleBase(BaseModel):
21
15
  rule: str = ""
22
- order: IntStr = 0
16
+ order: str = ""
23
17
  action: str = "permit"
24
18
  source_security_group: Optional[Reference] = Field(
25
19
  default=None, serialization_alias="sourceSecurityGroup", validation_alias="sourceSecurityGroup"
@@ -31,7 +25,7 @@ class RuleBase(BaseModel):
31
25
  protocol_name: Optional[str] = Field(
32
26
  default=None, serialization_alias="protocolName", validation_alias="protocolName"
33
27
  )
34
- protocol_name_list: Optional[ReferenceList] = Field(
28
+ protocol_name_list: Optional[Reference] = Field(
35
29
  default=None, serialization_alias="protocolNameList", validation_alias="protocolNameList"
36
30
  )
37
31
  model_config = ConfigDict(populate_by_name=True)
@@ -43,53 +37,51 @@ class RuleBase(BaseModel):
43
37
 
44
38
 
45
39
  class IPv4Rule(RuleBase):
46
- sequence_ip_type: Literal[None, "ipv4"] = Field(
40
+ sequence_ip_type: Literal["ipv4"] = Field(
47
41
  default="ipv4", serialization_alias="sequenceIpType", validation_alias="sequenceIpType"
48
42
  )
49
- source_ip: Union[VariableName, SpaceSeparatedIPv4Networks, None] = Field(
50
- default=None,
51
- serialization_alias="sourceIP",
52
- validation_alias="sourceIP",
43
+ source_ip: Union[IPv4Network, VariableName, None] = Field(
44
+ default=None, serialization_alias="sourceIP", validation_alias="sourceIP"
53
45
  )
54
- source_data_prefix_list: Optional[ReferenceList] = Field(
46
+ source_data_prefix_list: Optional[Reference] = Field(
55
47
  default=None, serialization_alias="sourceDataPrefixList", validation_alias="sourceDataPrefixList"
56
48
  )
57
49
  source_fqdn: Optional[str] = Field(default=None, serialization_alias="sourceFqdn", validation_alias="sourceFqdn")
58
- source_fqdn_list: Optional[ReferenceList] = Field(
50
+ source_fqdn_list: Optional[Reference] = Field(
59
51
  default=None, serialization_alias="sourceFqdnList", validation_alias="sourceFqdnList"
60
52
  )
61
53
  source_geo_location: Optional[str] = Field(
62
54
  default=None, serialization_alias="sourceGeoLocation", validation_alias="sourceGeoLocation"
63
55
  )
64
- source_geo_location_list: Optional[ReferenceList] = Field(
56
+ source_geo_location_list: Optional[Reference] = Field(
65
57
  default=None, serialization_alias="sourceGeoLocationList", validation_alias="sourceGeoLocationList"
66
58
  )
67
59
  source_port: Optional[str] = Field(default=None, serialization_alias="sourcePort", validation_alias="sourcePort")
68
- source_port_list: Optional[ReferenceList] = Field(
60
+ source_port_list: Optional[Reference] = Field(
69
61
  default=None, serialization_alias="sourcePortList", validation_alias="sourcePortList"
70
62
  )
71
- destination_ip: Union[VariableName, SpaceSeparatedIPv4Networks, None] = Field(
63
+ destination_ip: Union[IPv4Network, VariableName, None] = Field(
72
64
  default=None, serialization_alias="destinationIP", validation_alias="destinationIP"
73
65
  )
74
- destination_data_prefix_list: Optional[ReferenceList] = Field(
66
+ destination_data_prefix_list: Optional[Reference] = Field(
75
67
  default=None, serialization_alias="destinationDataPrefixList", validation_alias="destinationDataPrefixList"
76
68
  )
77
69
  destination_fqdn: Optional[str] = Field(
78
70
  default=None, serialization_alias="destinationFqdn", validation_alias="destinationFqdn"
79
71
  )
80
- destination_fqdn_list: Optional[ReferenceList] = Field(
72
+ destination_fqdn_list: Optional[Reference] = Field(
81
73
  default=None, serialization_alias="destinationFqdnList", validation_alias="destinationFqdnList"
82
74
  )
83
75
  destination_geo_location: Optional[str] = Field(
84
76
  default=None, serialization_alias="destinationGeoLocation", validation_alias="destinationGeoLocation"
85
77
  )
86
- destination_geo_location_list: Optional[ReferenceList] = Field(
78
+ destination_geo_location_list: Optional[Reference] = Field(
87
79
  default=None, serialization_alias="destinationGeoLocationList", validation_alias="destinationGeoLocationList"
88
80
  )
89
81
  destination_port: Optional[str] = Field(
90
82
  default=None, serialization_alias="destinationPort", validation_alias="destinationPort"
91
83
  )
92
- destination_port_list: Optional[ReferenceList] = Field(
84
+ destination_port_list: Optional[Reference] = Field(
93
85
  default=None, serialization_alias="destinationPortList", validation_alias="destinationPortList"
94
86
  )
95
87
  model_config = ConfigDict(extra="forbid", populate_by_name=True)
@@ -152,7 +144,7 @@ class IPv6Rule(RuleBase):
152
144
  return self
153
145
 
154
146
 
155
- Rule = Union[IPv4Rule, IPv6Rule]
147
+ Rule = Annotated[Union[IPv4Rule, IPv6Rule], Field(discriminator="sequence_ip_type")]
156
148
 
157
149
 
158
150
  class RuleSetDefinition(BaseModel):
@@ -174,7 +166,7 @@ class RuleSet(PolicyDefinitionBase):
174
166
  if from_index < 0:
175
167
  start_index = rule_count - start_index
176
168
  for i in range(start_index, rule_count):
177
- order = i + 1
169
+ order = str(i + 1)
178
170
  self.definition.rules[i].order = order
179
171
  self.definition.rules[i].rule = f"R{order}"
180
172
 
@@ -201,28 +193,28 @@ class RuleSet(PolicyDefinitionBase):
201
193
  self,
202
194
  action: str = "permit",
203
195
  source_security_group_id: Optional[UUID] = None,
204
- source_ip: Optional[List[IPv4Network]] = None,
196
+ source_ip: Optional[IPv4Network] = None,
205
197
  source_ip_variable: Optional[str] = None,
206
- source_data_prefix_list_ids: Optional[List[UUID]] = None,
198
+ source_data_prefix_list_id: Optional[UUID] = None,
207
199
  source_fqdn: Optional[str] = None,
208
- source_fqdn_list_ids: Optional[List[UUID]] = None,
200
+ source_fqdn_list_id: Optional[UUID] = None,
209
201
  source_geo_location: Optional[str] = None,
210
- source_geo_location_list_ids: Optional[List[UUID]] = None,
202
+ source_geo_location_list_id: Optional[UUID] = None,
211
203
  source_port: Optional[str] = None,
212
- source_port_list_ids: Optional[List[UUID]] = None,
204
+ source_port_list_id: Optional[UUID] = None,
213
205
  destination_security_group_id: Optional[UUID] = None,
214
- destination_ip: Optional[List[IPv4Network]] = None,
206
+ destination_ip: Optional[IPv4Network] = None,
215
207
  destination_ip_variable: Optional[str] = None,
216
- destination_data_prefix_list_ids: Optional[List[UUID]] = None,
208
+ destination_data_prefix_list_id: Optional[UUID] = None,
217
209
  destination_fqdn: Optional[str] = None,
218
- destination_fqdn_list_ids: Optional[List[UUID]] = None,
210
+ destination_fqdn_list_id: Optional[UUID] = None,
219
211
  destination_geo_location: Optional[str] = None,
220
- destination_geo_location_list_ids: Optional[List[UUID]] = None,
212
+ destination_geo_location_list_id: Optional[UUID] = None,
221
213
  destination_port: Optional[str] = None,
222
- destination_port_list_ids: Optional[List[UUID]] = None,
214
+ destination_port_list_id: Optional[UUID] = None,
223
215
  protocols: Optional[List[int]] = None,
224
216
  protocol_names: Optional[str] = None,
225
- protocol_name_list_ids: Optional[List[UUID]] = None,
217
+ protocol_name_list_id: Optional[UUID] = None,
226
218
  ) -> None:
227
219
  if source_ip is not None and source_ip_variable is not None:
228
220
  raise ValueError("Source IP and variable name cannot be set at the same time")
@@ -232,43 +224,33 @@ class RuleSet(PolicyDefinitionBase):
232
224
  action=action,
233
225
  source_security_group=Reference(ref=source_security_group_id) if source_security_group_id else None,
234
226
  source_ip=source_ip or (VariableName(vip_variable_name=source_ip_variable) if source_ip_variable else None),
235
- source_data_prefix_list=(
236
- ReferenceList(ref=source_data_prefix_list_ids) if source_data_prefix_list_ids else None
237
- ),
227
+ source_data_prefix_list=Reference(ref=source_data_prefix_list_id) if source_data_prefix_list_id else None,
238
228
  source_fqdn=source_fqdn,
239
- source_fqdn_list=ReferenceList(ref=source_fqdn_list_ids) if source_fqdn_list_ids else None,
229
+ source_fqdn_list=Reference(ref=source_fqdn_list_id) if source_fqdn_list_id else None,
240
230
  source_geo_location=source_geo_location,
241
- source_geo_location_list=(
242
- ReferenceList(ref=source_geo_location_list_ids) if source_geo_location_list_ids else None
243
- ),
231
+ source_geo_location_list=Reference(ref=source_geo_location_list_id)
232
+ if source_geo_location_list_id
233
+ else None,
244
234
  source_port=source_port,
245
- source_port_list=ReferenceList(ref=source_port_list_ids) if source_port_list_ids else None,
246
- destination_security_group=(
247
- Reference(ref=destination_security_group_id) if destination_security_group_id else None
248
- ),
235
+ source_port_list=Reference(ref=source_port_list_id) if source_port_list_id else None,
236
+ destination_security_group=Reference(ref=destination_security_group_id)
237
+ if destination_security_group_id
238
+ else None,
249
239
  destination_ip=destination_ip
250
240
  or (VariableName(vip_variable_name=destination_ip_variable) if destination_ip_variable else None),
251
- destination_data_prefix_list=(
252
- ReferenceList(ref=destination_data_prefix_list_ids) if destination_data_prefix_list_ids else None
253
- ),
241
+ destination_data_prefix_list=Reference(ref=destination_data_prefix_list_id)
242
+ if destination_data_prefix_list_id
243
+ else None,
254
244
  destination_fqdn=destination_fqdn,
255
- destination_fqdn_list=ReferenceList(ref=destination_fqdn_list_ids) if destination_fqdn_list_ids else None,
245
+ destination_fqdn_list=Reference(ref=destination_fqdn_list_id) if destination_fqdn_list_id else None,
256
246
  destination_geo_location=destination_geo_location,
257
- destination_geo_location_list=(
258
- ReferenceList(ref=destination_geo_location_list_ids) if destination_geo_location_list_ids else None
259
- ),
247
+ destination_geo_location_list=Reference(ref=destination_geo_location_list_id)
248
+ if destination_geo_location_list_id
249
+ else None,
260
250
  destination_port=destination_port,
261
- destination_port_list=ReferenceList(ref=destination_port_list_ids) if destination_port_list_ids else None,
251
+ destination_port_list=Reference(ref=destination_port_list_id) if destination_port_list_id else None,
262
252
  protocol=" ".join(str(p) for p in protocols) if protocols else None,
263
253
  protocol_name=" ".join(p for p in protocol_names) if protocol_names else None,
264
- protocol_name_list=ReferenceList(ref=protocol_name_list_ids) if protocol_name_list_ids else None,
254
+ protocol_name_list=Reference(ref=protocol_name_list_id) if protocol_name_list_id else None,
265
255
  )
266
256
  self.add(ipv4_rule)
267
-
268
-
269
- class RuleSetEditPayload(RuleSet, PolicyDefinitionId):
270
- pass
271
-
272
-
273
- class RuleSetGetResponse(RuleSet, PolicyDefinitionGetResponse):
274
- pass
@@ -6,13 +6,7 @@ from typing import Literal, Optional, Union
6
6
  from pydantic import BaseModel, ConfigDict, Field, model_validator
7
7
 
8
8
  from catalystwan.models.common import check_any_of_exclusive_field_sets, check_fields_exclusive
9
- from catalystwan.models.policy.policy_definition import (
10
- PolicyDefinitionBase,
11
- PolicyDefinitionGetResponse,
12
- PolicyDefinitionId,
13
- ReferenceList,
14
- VariableName,
15
- )
9
+ from catalystwan.models.policy.policy_definition import PolicyDefinitionBase, Reference, VariableName
16
10
 
17
11
  SequenceIPType = Literal[
18
12
  "ipv4",
@@ -21,20 +15,14 @@ SequenceIPType = Literal[
21
15
 
22
16
 
23
17
  class SecurityGroupIPv4Definition(BaseModel):
24
- data_prefix: Union[IPv4Network, VariableName, None] = Field(
25
- None, serialization_alias="dataPrefix", validation_alias="dataPrefix"
26
- )
27
- data_prefix_list: Optional[ReferenceList] = Field(
28
- None, serialization_alias="dataPrefixList", validation_alias="dataPrefixList"
29
- )
18
+ data_prefix: Union[IPv4Network, VariableName, None] = Field(None, alias="dataPrefix")
19
+ data_prefix_list: Optional[Reference] = Field(None, alias="dataPrefixList")
30
20
  fqdn: Optional[str] = None
31
- fqdn_list: Optional[ReferenceList] = Field(None, serialization_alias="fqdnList", validation_alias="fqdnList")
32
- geo_location: Optional[str] = Field(None, serialization_alias="geoLocation", validation_alias="geoLocation")
33
- geo_location_list: Optional[ReferenceList] = Field(
34
- None, serialization_alias="geoLocationList", validation_alias="geoLocationList"
35
- )
21
+ fqdn_list: Optional[Reference] = Field(None, alias="fqdnList")
22
+ geo_location: Optional[str] = Field(None, alias="geoLocation")
23
+ geo_location_list: Optional[Reference] = Field(None, alias="geoLocationList")
36
24
  port: Optional[str] = None
37
- port_list: Optional[ReferenceList] = Field(None, serialization_alias="portList", validation_alias="portList")
25
+ port_list: Optional[Reference] = Field(None, alias="portList")
38
26
  model_config = ConfigDict(extra="forbid", populate_by_name=True)
39
27
 
40
28
  @model_validator(mode="after")
@@ -52,12 +40,8 @@ class SecurityGroupIPv4Definition(BaseModel):
52
40
 
53
41
 
54
42
  class SecurityGroupIPv6Definition(BaseModel):
55
- data_ipv6_prefix: Union[IPv6Network, VariableName, None] = Field(
56
- None, serialization_alias="dataIPV6Prefix", validation_alias="dataIPV6Prefix"
57
- )
58
- data_ipv6_prefix_list: Optional[ReferenceList] = Field(
59
- None, serialization_alias="dataIPV6PrefixList", validation_alias="dataIPV6PrefixList"
60
- )
43
+ data_ipv6_prefix: Union[IPv6Network, VariableName, None] = Field(None, alias="dataIPV6Prefix")
44
+ data_ipv6_prefix_list: Optional[Reference] = Field(None, alias="dataIPV6PrefixList")
61
45
  model_config = ConfigDict(extra="forbid", populate_by_name=True)
62
46
 
63
47
  @model_validator(mode="after")
@@ -71,23 +55,15 @@ class SecurityGroup(PolicyDefinitionBase):
71
55
  # EndpointAPI would need to support annotated union as payload parameter
72
56
  type: Literal["securityGroup"] = "securityGroup"
73
57
  mode: Literal["unified"] = "unified"
74
- sequence_ip_type: SequenceIPType = Field(
75
- default="ipv4", serialization_alias="sequenceIpType", validation_alias="sequenceIpType"
76
- )
58
+ sequence_ip_type: SequenceIPType = Field(alias="sequenceIpType")
77
59
  definition: Union[SecurityGroupIPv4Definition, SecurityGroupIPv6Definition]
78
60
 
79
61
  @model_validator(mode="after")
80
62
  def validate_by_sequence_ip_type(self):
81
- if (self.sequence_ip_type == "ipv6" and not isinstance(self.definition, SecurityGroupIPv6Definition)) or (
82
- self.sequence_ip_type == "ipv4" and not isinstance(self.definition, SecurityGroupIPv4Definition)
63
+ if (
64
+ self.sequence_ip_type == SequenceIPType.IPV4 and isinstance(self.definition, SecurityGroupIPv6Definition)
65
+ ) or (
66
+ self.sequence_ip_type == SequenceIPType.IPV6 and isinstance(self.definition, SecurityGroupIPv4Definition)
83
67
  ):
84
68
  raise ValueError(f"Incompatible definition for {self.sequence_ip_type} sequence")
85
69
  return self
86
-
87
-
88
- class SecurityGroupEditPayload(SecurityGroup, PolicyDefinitionId):
89
- pass
90
-
91
-
92
- class SecurityGroupGetResponse(SecurityGroup, PolicyDefinitionGetResponse):
93
- pass