catalystwan 0.31.0.dev0__tar.gz → 0.31.0.dev2__tar.gz

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 (335) hide show
  1. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/PKG-INFO +1 -1
  2. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/configuration_groups/parcel.py +3 -3
  3. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/partition_manager_api.py +47 -32
  4. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/policy_api.py +1 -13
  5. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/software_action_api.py +56 -38
  6. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/versions_utils.py +45 -75
  7. catalystwan-0.31.0.dev2/catalystwan/endpoints/configuration_device_actions.py +313 -0
  8. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration_device_inventory.py +2 -0
  9. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/exceptions.py +4 -0
  10. catalystwan-0.31.0.dev2/catalystwan/models/configuration/config_migration.py +34 -0
  11. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/data_prefix.py +6 -8
  12. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/centralized.py +2 -2
  13. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/lists.py +0 -13
  14. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/lists_entries.py +1 -3
  15. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_partition_manager_api.py +23 -9
  16. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_software_action_api.py +16 -7
  17. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_version_utils.py +33 -19
  18. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/pyproject.toml +1 -1
  19. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/setup.py +1 -1
  20. catalystwan-0.31.0.dev0/catalystwan/endpoints/configuration_device_actions.py +0 -176
  21. catalystwan-0.31.0.dev0/catalystwan/models/configuration/config_migration.py +0 -61
  22. catalystwan-0.31.0.dev0/catalystwan/workflows/config_migration.py +0 -64
  23. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/LICENSE +0 -0
  24. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/README.md +0 -0
  25. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/__init__.py +0 -0
  26. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/abstractions.py +0 -0
  27. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/__init__.py +0 -0
  28. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/admin_tech_api.py +0 -0
  29. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/administration.py +0 -0
  30. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/alarms_api.py +0 -0
  31. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/api_container.py +0 -0
  32. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/basic_api.py +0 -0
  33. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/config_device_inventory_api.py +0 -0
  34. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/config_group_api.py +0 -0
  35. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/configuration_groups/parcels/cellular_controller.py +0 -0
  36. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/dashboard_api.py +0 -0
  37. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/device_action_api.py +0 -0
  38. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/feature_profile_api.py +0 -0
  39. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/logs_api.py +0 -0
  40. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/monitoring_status_api.py +0 -0
  41. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/mtt_aaa_api.py +0 -0
  42. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/omp_api.py +0 -0
  43. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/packet_capture_api.py +0 -0
  44. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/parcel_api.py +0 -0
  45. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/resource_pool_api.py +0 -0
  46. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/speedtest_api.py +0 -0
  47. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/task_status_api.py +0 -0
  48. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/template_api.py +0 -0
  49. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/README.md +0 -0
  50. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/cli_template.py +0 -0
  51. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/device_template/device_template.py +0 -0
  52. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/device_template/device_template_payload.json.j2 +0 -0
  53. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/device_variable.py +0 -0
  54. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/feature_template.py +0 -0
  55. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/feature_template_field.py +0 -0
  56. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/feature_template_payload.py +0 -0
  57. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/models/cisco_aaa_model.py +0 -0
  58. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/models/cisco_banner_model.py +0 -0
  59. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/models/cisco_bfd_model.py +0 -0
  60. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/models/cisco_bgp_model.py +0 -0
  61. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/models/cisco_logging_model.py +0 -0
  62. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/models/cisco_ntp_model.py +0 -0
  63. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/models/cisco_omp_model.py +0 -0
  64. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/models/cisco_ospf.py +0 -0
  65. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/models/cisco_ospfv3.py +0 -0
  66. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/models/cisco_secure_internet_gateway.py +0 -0
  67. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/models/cisco_snmp_model.py +0 -0
  68. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/models/cisco_system.py +0 -0
  69. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/models/cisco_vpn_interface_model.py +0 -0
  70. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/models/cisco_vpn_model.py +0 -0
  71. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/models/cli_template.py +0 -0
  72. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/models/omp_vsmart_model.py +0 -0
  73. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/models/security_vsmart_model.py +0 -0
  74. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/models/supported.py +0 -0
  75. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/models/system_vsmart_model.py +0 -0
  76. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/payloads/aaa/aaa_model.py +0 -0
  77. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/payloads/aaa/feature/aaa.json.j2 +0 -0
  78. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/payloads/aaa/feature/accounting.json.j2 +0 -0
  79. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/payloads/aaa/feature/radius.json.j2 +0 -0
  80. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/payloads/aaa/feature/tacacs.json.j2 +0 -0
  81. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/payloads/aaa/feature/user.json.j2 +0 -0
  82. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/payloads/cisco_vpn/cisco_vpn_model.py +0 -0
  83. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/payloads/cisco_vpn/feature/cisco_vpn.json.j2 +0 -0
  84. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/payloads/cisco_vpn/feature/dns.json.j2 +0 -0
  85. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/payloads/cisco_vpn/feature/ipv4route.json.j2 +0 -0
  86. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/payloads/cisco_vpn/feature/ipv6route.json.j2 +0 -0
  87. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/payloads/cisco_vpn/feature/mapping.json.j2 +0 -0
  88. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/payloads/tenant/tenant.json.j2 +0 -0
  89. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/templates/payloads/tenant/tenant_model.py +0 -0
  90. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/tenant_backup_restore_api.py +0 -0
  91. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/tenant_management_api.py +0 -0
  92. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/api/tenant_migration_api.py +0 -0
  93. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/dataclasses.py +0 -0
  94. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/__init__.py +0 -0
  95. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/administration_user_and_group.py +0 -0
  96. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/certificate_management_device.py +0 -0
  97. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/certificate_management_vmanage.py +0 -0
  98. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/client.py +0 -0
  99. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/cluster_management.py +0 -0
  100. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/device/software_update.py +0 -0
  101. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/disaster_recovery.py +0 -0
  102. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/feature_profile/sdwan/policy_object.py +0 -0
  103. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/feature_profile/sdwan/system.py +0 -0
  104. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/feature_profile/sdwan/transport.py +0 -0
  105. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/definition/access_control_list.py +0 -0
  106. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/definition/access_control_list_ipv6.py +0 -0
  107. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/definition/control.py +0 -0
  108. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/definition/device_access.py +0 -0
  109. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/definition/device_access_ipv6.py +0 -0
  110. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/definition/hub_and_spoke.py +0 -0
  111. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/definition/mesh.py +0 -0
  112. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/definition/qos_map.py +0 -0
  113. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/definition/rewrite.py +0 -0
  114. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/definition/rule_set.py +0 -0
  115. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/definition/security_group.py +0 -0
  116. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/definition/traffic_data.py +0 -0
  117. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/definition/vpn_membership.py +0 -0
  118. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/definition/zone_based_firewall.py +0 -0
  119. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/app.py +0 -0
  120. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/app_probe.py +0 -0
  121. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/as_path.py +0 -0
  122. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/class_map.py +0 -0
  123. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/color.py +0 -0
  124. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/community.py +0 -0
  125. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/data_ipv6_prefix.py +0 -0
  126. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/data_prefix.py +0 -0
  127. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/expanded_community.py +0 -0
  128. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/fqdn.py +0 -0
  129. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/geo_location.py +0 -0
  130. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/ips_signature.py +0 -0
  131. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/ipv6_prefix.py +0 -0
  132. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/local_app.py +0 -0
  133. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/local_domain.py +0 -0
  134. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/mirror.py +0 -0
  135. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/policer.py +0 -0
  136. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/port.py +0 -0
  137. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/preferred_color_group.py +0 -0
  138. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/prefix.py +0 -0
  139. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/protocol_name.py +0 -0
  140. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/region.py +0 -0
  141. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/site.py +0 -0
  142. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/sla.py +0 -0
  143. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/tloc.py +0 -0
  144. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/url_black_list.py +0 -0
  145. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/url_white_list.py +0 -0
  146. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/vpn.py +0 -0
  147. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/list/zone.py +0 -0
  148. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/security_template.py +0 -0
  149. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/vedge_template.py +0 -0
  150. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/policy/vsmart_template.py +0 -0
  151. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration/software_actions.py +0 -0
  152. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration_dashboard_status.py +0 -0
  153. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration_device_template.py +0 -0
  154. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration_feature_profile.py +0 -0
  155. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration_group.py +0 -0
  156. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/configuration_settings.py +0 -0
  157. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/endpoints_container.py +0 -0
  158. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/misc.py +0 -0
  159. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/monitoring_device_details.py +0 -0
  160. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/monitoring_status.py +0 -0
  161. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/real_time_monitoring/reboot_history.py +0 -0
  162. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/sdavc_cloud_connector.py +0 -0
  163. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/tenant_backup_restore.py +0 -0
  164. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/tenant_management.py +0 -0
  165. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/tenant_migration.py +0 -0
  166. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/endpoints/troubleshooting_tools/device_connectivity.py +0 -0
  167. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/logging.conf +0 -0
  168. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/common.py +0 -0
  169. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/common.py +0 -0
  170. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/README.md +0 -0
  171. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/builder.py +0 -0
  172. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/common.py +0 -0
  173. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/management/vpn.py +0 -0
  174. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/__init__.py +0 -0
  175. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/app_probe.py +0 -0
  176. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/application_list.py +0 -0
  177. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/color_list.py +0 -0
  178. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/expanded_community_list.py +0 -0
  179. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/fowarding_class.py +0 -0
  180. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_data_prefix.py +0 -0
  181. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/ipv6_prefix_list.py +0 -0
  182. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/policier.py +0 -0
  183. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefered_group_color.py +0 -0
  184. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/prefix_list.py +0 -0
  185. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/sla_class.py +0 -0
  186. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/standard_community.py +0 -0
  187. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/policy/tloc_list.py +0 -0
  188. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/application_list.py +0 -0
  189. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/data_prefix.py +0 -0
  190. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/fqdn.py +0 -0
  191. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/geolocation_list.py +0 -0
  192. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/ips_signature.py +0 -0
  193. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/local_domain.py +0 -0
  194. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/protocol_list.py +0 -0
  195. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/security_port.py +0 -0
  196. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/url.py +0 -0
  197. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/policy_object/security/zone.py +0 -0
  198. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/service/acl.py +0 -0
  199. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/service/appqoe.py +0 -0
  200. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/service/bgp.py +0 -0
  201. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/service/dhcp_server.py +0 -0
  202. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/service/eigrp.py +0 -0
  203. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/service/lan/common.py +0 -0
  204. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/service/lan/ethernet.py +0 -0
  205. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/service/lan/gre.py +0 -0
  206. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/service/lan/ipsec.py +0 -0
  207. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/service/lan/svi.py +0 -0
  208. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/service/lan/vpn.py +0 -0
  209. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/service/multicast.py +0 -0
  210. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/service/object_tracker.py +0 -0
  211. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/service/ospf.py +0 -0
  212. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/service/ospfv3.py +0 -0
  213. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/service/route_policy.py +0 -0
  214. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/service/service_insertion_attachment.py +0 -0
  215. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/service/switchport.py +0 -0
  216. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/service/tracker.py +0 -0
  217. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/service/wireless_lan.py +0 -0
  218. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/system/aaa.py +0 -0
  219. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/feature_profile/sdwan/transport/cellular_controller.py +0 -0
  220. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/configuration/profile_type.py +0 -0
  221. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/device_inventory.py +0 -0
  222. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/feature_profile_parcel.py +0 -0
  223. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/misc/application_protocols.py +0 -0
  224. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/__init__.py +0 -0
  225. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/definitions/access_control_list.py +0 -0
  226. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/definitions/access_control_list_ipv6.py +0 -0
  227. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/definitions/control.py +0 -0
  228. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/definitions/device_access.py +0 -0
  229. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/definitions/device_access_ipv6.py +0 -0
  230. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/definitions/hub_and_spoke.py +0 -0
  231. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/definitions/mesh.py +0 -0
  232. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/definitions/qos_map.py +0 -0
  233. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/definitions/rewrite.py +0 -0
  234. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/definitions/rule_set.py +0 -0
  235. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/definitions/security_group.py +0 -0
  236. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/definitions/traffic_data.py +0 -0
  237. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/definitions/vpn_membership.py +0 -0
  238. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/definitions/zone_based_firewall.py +0 -0
  239. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/localized.py +0 -0
  240. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/policy.py +0 -0
  241. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/policy_definition.py +0 -0
  242. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/policy_list.py +0 -0
  243. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/policy/security.py +0 -0
  244. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/models/tenant.py +0 -0
  245. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/response.py +0 -0
  246. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/session.py +0 -0
  247. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/definitions/Basic_Cisco_VPN_Model.json +0 -0
  248. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/definitions/banner_1.json +0 -0
  249. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/definitions/basic/alias.json +0 -0
  250. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/definitions/basic/basic.json +0 -0
  251. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/definitions/basic/basic_no_value.json +0 -0
  252. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/definitions/basic/children.json +0 -0
  253. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/definitions/basic/children_nested.json +0 -0
  254. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/definitions/basic/children_nested_datapath.json +0 -0
  255. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/definitions/basic/data_path.json +0 -0
  256. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/definitions/cisco_bfd.json +0 -0
  257. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/definitions/complex_aaa.json +0 -0
  258. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/definitions/complex_cisco_vpn.json +0 -0
  259. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/definitions/default_cisco_system.json +0 -0
  260. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/definitions/iuo.json +0 -0
  261. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/definitions/omp_1.json +0 -0
  262. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/definitions/omp_2.json +0 -0
  263. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/definitions/omp_3.json +0 -0
  264. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/models/__init__.py +0 -0
  265. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/models/cisco_aaa.py +0 -0
  266. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/models/cisco_banner.py +0 -0
  267. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/models/cisco_bfd.py +0 -0
  268. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/models/cisco_system.py +0 -0
  269. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/models/cisco_vpn.py +0 -0
  270. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/models/omp_vsmart.py +0 -0
  271. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/schemas/basic/alias.json +0 -0
  272. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/schemas/basic/basic.json +0 -0
  273. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/schemas/basic/children.json +0 -0
  274. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/schemas/basic/children_nested.json +0 -0
  275. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/schemas/basic/children_nested_datapath.json +0 -0
  276. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/schemas/basic/data_path.json +0 -0
  277. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/schemas/cedge_aaa.json +0 -0
  278. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/schemas/cisco_banner.json +0 -0
  279. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/schemas/cisco_bfd.json +0 -0
  280. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/schemas/cisco_system.json +0 -0
  281. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/schemas/cisco_vpn.json +0 -0
  282. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/schemas/omp-vsmart.json +0 -0
  283. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/test_chose_model.py +0 -0
  284. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/test_deserialize_model.py +0 -0
  285. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/test_generate_payload.py +0 -0
  286. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/templates/test_serialize_model.py +0 -0
  287. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_admin_tech_api.py +0 -0
  288. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_administration.py +0 -0
  289. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_alarms_api.py +0 -0
  290. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_cli_template.py +0 -0
  291. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_creation_tools.py +0 -0
  292. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_device_action_api.py +0 -0
  293. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_devices_api.py +0 -0
  294. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_endpoints.py +0 -0
  295. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_feature_template_field.py +0 -0
  296. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_logs_api.py +0 -0
  297. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_monitoring_status_api.py +0 -0
  298. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_mtt_aaa_api.py +0 -0
  299. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_omp_api.py +0 -0
  300. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_packet_capture.py +0 -0
  301. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_response.py +0 -0
  302. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_session.py +0 -0
  303. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_speed_test_api.py +0 -0
  304. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_task_status_api.py +0 -0
  305. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_templates.py +0 -0
  306. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_tenant_backup_restore_api.py +0 -0
  307. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_tenant_management_api.py +0 -0
  308. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_tenant_migration_api.py +0 -0
  309. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_typed_list.py +0 -0
  310. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_version.py +0 -0
  311. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/tests/test_vmanage_auth.py +0 -0
  312. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/typed_list.py +0 -0
  313. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/utils/__init__.py +0 -0
  314. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/utils/alarm_status.py +0 -0
  315. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/utils/certificate_status.py +0 -0
  316. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/utils/colors.py +0 -0
  317. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/utils/config_status.py +0 -0
  318. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/utils/creation_tools.py +0 -0
  319. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/utils/dashboard.py +0 -0
  320. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/utils/device_model.py +0 -0
  321. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/utils/dict.py +0 -0
  322. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/utils/feature_template.py +0 -0
  323. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/utils/operation_status.py +0 -0
  324. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/utils/personality.py +0 -0
  325. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/utils/pydantic_field.py +0 -0
  326. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/utils/pydantic_validators.py +0 -0
  327. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/utils/reachability.py +0 -0
  328. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/utils/session_type.py +0 -0
  329. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/utils/template_type.py +0 -0
  330. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/utils/timezone.py +0 -0
  331. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/utils/upgrades_helper.py +0 -0
  332. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/utils/validate_status.py +0 -0
  333. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/version.py +0 -0
  334. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/vmanage_auth.py +0 -0
  335. {catalystwan-0.31.0.dev0 → catalystwan-0.31.0.dev2}/catalystwan/workflows/tenant_migration.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: catalystwan
3
- Version: 0.31.0.dev0
3
+ Version: 0.31.0.dev2
4
4
  Summary: Cisco Catalyst WAN SDK for Python
5
5
  Home-page: https://github.com/CiscoDevNet/catalystwan
6
6
  Author: kagorski
@@ -21,10 +21,10 @@ class _ParcelBase(BaseModel):
21
21
  validation_alias="description",
22
22
  description="Set the parcel description",
23
23
  )
24
- # data: Optional[Any] = None
24
+ data: Optional[Any] = None
25
25
  _parcel_data_key: str = PrivateAttr(default="data")
26
26
 
27
- @model_serializer(mode="wrap", when_used="json")
27
+ @model_serializer(mode="wrap")
28
28
  def envelope_parcel_data(self, handler) -> Dict[str, Any]:
29
29
  model_dict = handler(self)
30
30
  model_dict[self._parcel_data_key] = {}
@@ -49,7 +49,7 @@ class OptionType(str, Enum):
49
49
 
50
50
 
51
51
  class ParcelAttribute(BaseModel):
52
- model_config = ConfigDict(extra="forbid", populate_by_name=True)
52
+ model_config = ConfigDict(extra="forbid")
53
53
  option_type: OptionType = Field(serialization_alias="optionType", validation_alias="optionType")
54
54
 
55
55
 
@@ -1,11 +1,17 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- from typing import TYPE_CHECKING, Dict, List, Optional, cast
4
+ from typing import TYPE_CHECKING, List, Optional, cast
5
5
 
6
6
  from catalystwan.api.task_status_api import Task
7
- from catalystwan.api.versions_utils import DeviceVersions, RemovePartitionPayload, RepositoryAPI
7
+ from catalystwan.api.versions_utils import DeviceVersions, RepositoryAPI
8
8
  from catalystwan.dataclasses import Device
9
+ from catalystwan.endpoints.configuration_device_actions import (
10
+ PartitionActionPayload,
11
+ RemovePartitionActionPayload,
12
+ RemovePartitionDevice,
13
+ )
14
+ from catalystwan.exceptions import EmptyVersionPayloadError
9
15
  from catalystwan.typed_list import DataSequence
10
16
  from catalystwan.utils.upgrades_helper import get_install_specification, validate_personality_homogeneity
11
17
 
@@ -60,14 +66,20 @@ class PartitionManagerAPI:
60
66
  else:
61
67
  payload_devices = self.device_version.get_devices_current_version(devices)
62
68
 
63
- url = "/dataservice/device/action/defaultpartition"
64
- payload = {
65
- "action": "defaultpartition",
66
- "devices": [device.model_dump() for device in payload_devices], # type: ignore
67
- "deviceType": get_install_specification(devices.first()).device_type.value,
68
- }
69
- set_default = dict(self.session.post(url, json=payload).json())
70
- return Task(self.session, set_default["id"])
69
+ for device in payload_devices:
70
+ if not device.version:
71
+ raise EmptyVersionPayloadError("PartitionDevice payload contains entry with empty version field.")
72
+
73
+ device_type = get_install_specification(devices.first()).device_type.value
74
+ partition_payload = PartitionActionPayload(
75
+ action="defaultpartition", devices=[dev for dev in payload_devices], device_type=device_type
76
+ )
77
+
78
+ partition_action = self.session.endpoints.configuration_device_actions.process_mark_default_partition(
79
+ payload=partition_payload
80
+ )
81
+
82
+ return Task(self.session, partition_action.id)
71
83
 
72
84
  def remove_partition(
73
85
  self, devices: DataSequence[Device], partition: Optional[str] = None, force: bool = False
@@ -90,33 +102,36 @@ class PartitionManagerAPI:
90
102
  else:
91
103
  payload_devices = self.device_version.get_devices_available_versions(devices)
92
104
 
93
- remove_partition_payload = [
94
- RemovePartitionPayload(
95
- device_id=device.device_id, device_ip=device.device_id, version=device.version
96
- ) # type: ignore
97
- for device in payload_devices
98
- ]
99
-
100
- url = "/dataservice/device/action/removepartition"
101
- payload = {
102
- "action": "removepartition",
103
- "devices": [device.model_dump() for device in remove_partition_payload], # type: ignore
104
- "deviceType": get_install_specification(devices.first()).device_type.value,
105
- }
105
+ for device in payload_devices:
106
+ if not device.version:
107
+ raise EmptyVersionPayloadError("PartitionDevice payload contains entry with empty version field.")
108
+
109
+ device_type = get_install_specification(devices.first()).device_type.value
110
+ partition_payload = RemovePartitionActionPayload(
111
+ action="removepartition",
112
+ devices=[RemovePartitionDevice(**dev.model_dump()) for dev in payload_devices],
113
+ device_type=device_type,
114
+ )
115
+
106
116
  if force is False:
107
- self._check_remove_partition_possibility(cast(list, payload["devices"]))
108
- remove_action: Dict[str, str] = self.session.post(url, json=payload).json()
109
- return Task(self.session, remove_action["id"])
117
+ self._check_remove_partition_possibility(cast(list, partition_payload.devices))
118
+
119
+ partition_action = self.session.endpoints.configuration_device_actions.process_remove_partition(
120
+ payload=partition_payload
121
+ )
122
+
123
+ return Task(self.session, partition_action.id)
110
124
 
111
- def _check_remove_partition_possibility(self, payload_devices: List[dict]) -> None:
125
+ def _check_remove_partition_possibility(self, payload_devices: List[RemovePartitionDevice]) -> None:
112
126
  devices_versions_repository = self.repository.get_devices_versions_repository()
113
127
  invalid_devices = []
114
128
  for device in payload_devices:
115
- if device["version"] in (
116
- devices_versions_repository[device["deviceId"]].current_version,
117
- devices_versions_repository[device["deviceId"]].default_version,
118
- ):
119
- invalid_devices.append((device["deviceId"]))
129
+ for version in device.version:
130
+ if version in (
131
+ devices_versions_repository[device.device_id].current_version,
132
+ devices_versions_repository[device.device_id].default_version,
133
+ ):
134
+ invalid_devices.append((device.device_id))
120
135
  if invalid_devices:
121
136
  raise ValueError(
122
137
  f"Current or default version of devices with ids {invalid_devices} \
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import TYPE_CHECKING, Any, Dict, List, Mapping, Optional, Tuple, Type, overload
3
+ from typing import TYPE_CHECKING, Any, Dict, List, Mapping, Optional, Type, overload
4
4
  from uuid import UUID
5
5
 
6
6
  from catalystwan.api.task_status_api import Task
@@ -637,12 +637,6 @@ class PolicyListsAPI:
637
637
  return endpoints.get_lists_by_id(id=id)
638
638
  return endpoints.get_policy_lists()
639
639
 
640
- def get_all(self) -> List[AnyPolicyList]:
641
- infos: List[AnyPolicyList] = []
642
- for list_type, _ in POLICY_LIST_ENDPOINTS_MAP.items():
643
- infos.extend(self.get(list_type))
644
- return infos
645
-
646
640
 
647
641
  class PolicyDefinitionsAPI:
648
642
  def __init__(self, session: ManagerSession):
@@ -786,12 +780,6 @@ class PolicyDefinitionsAPI:
786
780
  return endpoints.get_policy_definition(id=id)
787
781
  return endpoints.get_definitions()
788
782
 
789
- def get_all(self) -> List[Tuple[type, PolicyDefinitionInfo]]:
790
- all_items: List[Tuple[type, PolicyDefinitionInfo]] = []
791
- for definition_type, _ in POLICY_DEFINITION_ENDPOINTS_MAP.items():
792
- all_items.extend([(definition_type, info) for info in self.get(definition_type)])
793
- return all_items
794
-
795
783
 
796
784
  class PolicyAPI:
797
785
  """This is exposing so called 'UX 1.0' API"""
@@ -1,12 +1,18 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- from typing import TYPE_CHECKING, Any, Dict, List, Optional, cast
4
+ from typing import TYPE_CHECKING, List, Optional, cast
5
5
 
6
6
  from catalystwan.api.task_status_api import Task
7
7
  from catalystwan.api.versions_utils import DeviceVersions, RepositoryAPI
8
8
  from catalystwan.dataclasses import Device
9
- from catalystwan.exceptions import VersionDeclarationError # type: ignore
9
+ from catalystwan.endpoints.configuration_device_actions import (
10
+ InstallActionPayload,
11
+ InstallDevice,
12
+ InstallInput,
13
+ PartitionActionPayload,
14
+ )
15
+ from catalystwan.exceptions import EmptyVersionPayloadError, VersionDeclarationError # type: ignore
10
16
  from catalystwan.typed_list import DataSequence
11
17
  from catalystwan.utils.personality import Personality
12
18
  from catalystwan.utils.upgrades_helper import get_install_specification, validate_personality_homogeneity
@@ -58,7 +64,7 @@ class SoftwareActionAPI:
58
64
  Args:
59
65
  devices (List[Device]): For those devices software will be activated
60
66
  version_to_activate (Optional[str]): version to be set as current version
61
- image (Optional[str]): path to software image
67
+ image (Optional[str]): path to software image or its name from available files
62
68
 
63
69
  Notice: Have to pass one of those arguments (version_to_activate,
64
70
  image)
@@ -74,14 +80,21 @@ class SoftwareActionAPI:
74
80
  else:
75
81
  raise VersionDeclarationError("You can not provide software_image and image version at the same time!")
76
82
 
77
- url = "/dataservice/device/action/changepartition"
78
- payload = {
79
- "action": "changepartition",
80
- "devices": [device.model_dump() for device in self.device_versions.get_device_available(version, devices)],
81
- "deviceType": get_install_specification(devices.first()).device_type.value,
82
- }
83
- activate = dict(self.session.post(url, json=payload).json())
84
- return Task(self.session, activate["id"])
83
+ payload_devices = self.device_versions.get_device_available(version, devices)
84
+ for device in payload_devices:
85
+ if not device.version:
86
+ raise EmptyVersionPayloadError("PartitionDevice payload contains entry with empty version field.")
87
+
88
+ device_type = get_install_specification(devices.first()).device_type.value
89
+ partition_payload = PartitionActionPayload(
90
+ action="changepartition", devices=[dev for dev in payload_devices], device_type=device_type
91
+ )
92
+
93
+ partition_action = self.session.endpoints.configuration_device_actions.process_mark_change_partition(
94
+ payload=partition_payload
95
+ )
96
+
97
+ return Task(self.session, partition_action.id)
85
98
 
86
99
  def install(
87
100
  self,
@@ -99,7 +112,7 @@ class SoftwareActionAPI:
99
112
  devices (List[Device]): For those devices software will be activated
100
113
  reboot (bool): reboot device after action end
101
114
  sync (bool, optional): Synchronize settings. Defaults to True.
102
- image (str): path to software image
115
+ image (str): path to software image or its name from available files
103
116
  image_version (str): version of software image
104
117
  downgrade_check (bool): perform a downgrade check when applicable
105
118
 
@@ -119,32 +132,38 @@ class SoftwareActionAPI:
119
132
  version = cast(str, image_version)
120
133
  else:
121
134
  raise VersionDeclarationError("You can not provide image and image version at the same time")
135
+
122
136
  install_specification = get_install_specification(devices.first())
137
+ install_devices = [
138
+ InstallDevice(**device.model_dump(by_alias=True))
139
+ for device in self.device_versions.get_device_list(devices)
140
+ ]
141
+ input = InstallInput(
142
+ v_edge_vpn=0,
143
+ v_smart_vpn=0,
144
+ family=install_specification.family.value,
145
+ version=version,
146
+ version_type=install_specification.version_type.value,
147
+ reboot=reboot,
148
+ sync=sync,
149
+ )
150
+ device_type = install_specification.device_type.value
151
+ install_payload = InstallActionPayload(
152
+ action="install", input=input, devices=install_devices, device_type=device_type
153
+ )
123
154
 
124
- url = "/dataservice/device/action/install"
125
- payload: Dict[str, Any] = {
126
- "action": "install",
127
- "input": {
128
- "vEdgeVPN": 0,
129
- "vSmartVPN": 0,
130
- "family": install_specification.family.value,
131
- "version": version,
132
- "versionType": install_specification.version_type.value,
133
- "reboot": reboot,
134
- "sync": sync,
135
- },
136
- "devices": [
137
- {"deviceId": device.device_id, "deviceIP": device.device_ip}
138
- for device in self.device_versions.get_device_list(devices)
139
- ], # type: ignore
140
- "deviceType": install_specification.device_type.value,
141
- }
142
155
  if downgrade_check and devices.first().personality in (Personality.VMANAGE, Personality.EDGE):
143
- self._downgrade_check(payload["devices"], payload["input"]["version"], install_specification.family.value)
144
- upgrade = dict(self.session.post(url, json=payload).json())
145
- return Task(self.session, upgrade["id"])
156
+ self._downgrade_check(
157
+ install_payload.devices, install_payload.input.version, install_specification.family.value
158
+ )
159
+
160
+ install_action = self.session.endpoints.configuration_device_actions.process_install_operation(
161
+ payload=install_payload
162
+ )
163
+
164
+ return Task(self.session, install_action.id)
146
165
 
147
- def _downgrade_check(self, payload_devices: List[dict], version_to_upgrade: str, family: str) -> None:
166
+ def _downgrade_check(self, payload_devices: List[InstallDevice], version_to_upgrade: str, family: str) -> None:
148
167
  """
149
168
  Check if upgrade operation is not actually a downgrade opeartion.
150
169
  If so, in some cases action is being blocked.
@@ -159,19 +178,18 @@ class SoftwareActionAPI:
159
178
  incorrect_devices = []
160
179
  devices_versions_repo = self.repository.get_devices_versions_repository()
161
180
  for device in payload_devices:
162
- device_id = device["deviceId"]
163
- current_version = parse_vmanage_version(devices_versions_repo[device_id].current_version)
181
+ current_version = parse_vmanage_version(devices_versions_repo[device.device_id].current_version)
164
182
  upgrade_version = parse_vmanage_version(version_to_upgrade)
165
183
  # check if downgrade
166
184
  if current_version > upgrade_version:
167
185
  logger.warning(
168
- f"Requested to downgrade device: {device_id} from {current_version} to {upgrade_version}"
186
+ f"Requested to downgrade device: {device.device_id} from {current_version} to {upgrade_version}"
169
187
  )
170
188
  # allow vmanage downgrade only if major and minor version match, downgrade for other devices is allowed
171
189
  if family == "vmanage":
172
190
  if not current_version.release[:2] == upgrade_version.release[:2]:
173
191
  logger.error(
174
- f"Blocking downgrade of device: {device_id} "
192
+ f"Blocking downgrade of device: {device.device_id} "
175
193
  f"from {current_version.release} to {upgrade_version.release}"
176
194
  )
177
195
  incorrect_devices.append(device)
@@ -4,15 +4,14 @@ import logging
4
4
  from pathlib import PurePath
5
5
  from typing import TYPE_CHECKING, Dict, List, Union
6
6
 
7
- from clint.textui.progress import Bar as ProgressBar # type: ignore
8
7
  from pydantic import BaseModel, ConfigDict, Field
9
- from pydantic.functional_validators import BeforeValidator
10
- from requests_toolbelt.multipart.encoder import MultipartEncoder, MultipartEncoderMonitor # type: ignore
11
- from typing_extensions import Annotated
12
8
 
13
9
  from catalystwan.dataclasses import Device
10
+ from catalystwan.endpoints.configuration.software_actions import SoftwareImageDetails
11
+ from catalystwan.endpoints.configuration_device_actions import PartitionDevice
14
12
  from catalystwan.exceptions import ImageNotInRepositoryError
15
13
  from catalystwan.typed_list import DataSequence
14
+ from catalystwan.utils.upgrades_helper import SoftwarePackageUploadPayload
16
15
 
17
16
  if TYPE_CHECKING:
18
17
  from catalystwan.session import ManagerSession
@@ -37,25 +36,6 @@ class DeviceSoftwareRepository(BaseModel):
37
36
  device_id: str = Field(default="", serialization_alias="uuid", validation_alias="uuid")
38
37
 
39
38
 
40
- class DeviceVersionPayload(BaseModel):
41
- device_id: str = Field(serialization_alias="deviceId")
42
- device_ip: str = Field(serialization_alias="deviceIP")
43
- version: Union[str, List[str]] = Field(default="")
44
-
45
-
46
- def convert_to_list(element: Union[str, List[str]]) -> List[str]:
47
- return [element] if isinstance(element, str) else element
48
-
49
-
50
- VersionList = Annotated[Union[str, List[str]], BeforeValidator(convert_to_list)]
51
-
52
-
53
- class RemovePartitionPayload(BaseModel):
54
- device_id: str = Field(serialization_alias="deviceId")
55
- device_ip: str = Field(serialization_alias="deviceIP")
56
- version: VersionList
57
-
58
-
59
39
  class RepositoryAPI:
60
40
  """
61
41
  API methods to get information about images and devices software versions
@@ -75,16 +55,14 @@ class RepositoryAPI:
75
55
  ):
76
56
  self.session = session
77
57
 
78
- def get_all_software_images(self) -> list:
58
+ def get_all_software_images(self) -> DataSequence[SoftwareImageDetails]:
79
59
  """
80
- Get all info about all software images stored
81
- in Vmanage repository
60
+ Get all info about all software images stored in Vmanage repository
82
61
 
83
62
  Returns:
84
63
  list: software images list
85
64
  """
86
- url = "/dataservice/device/action/software/images?imageType=software"
87
- software_images = list(self.session.get_data(url))
65
+ software_images = self.session.endpoints.configuration_software_actions.get_list_of_all_images()
88
66
  return software_images
89
67
 
90
68
  def get_devices_versions_repository(self) -> Dict[str, DeviceSoftwareRepository]:
@@ -97,13 +75,18 @@ class RepositoryAPI:
97
75
  information
98
76
  """
99
77
 
100
- url = "/dataservice/system/device/controllers"
101
- controllers_versions_info = self.session.get_data(url)
102
- url = "/dataservice/system/device/vedges"
103
- edges_versions_info = self.session.get_data(url)
78
+ controllers_versions_info = self.session.endpoints.configuration_device_actions.get_list_of_installed_devices(
79
+ device_type="controller"
80
+ )
81
+ edges_versions_info = self.session.endpoints.configuration_device_actions.get_list_of_installed_devices(
82
+ device_type="vedge"
83
+ )
84
+ vmanages_versions_info = self.session.endpoints.configuration_device_actions.get_list_of_installed_devices(
85
+ device_type="vmanage"
86
+ )
104
87
  devices_versions_repository = {}
105
- for device in controllers_versions_info + edges_versions_info:
106
- device_software_repository = DeviceSoftwareRepository(**device)
88
+ for device in controllers_versions_info + edges_versions_info + vmanages_versions_info:
89
+ device_software_repository = DeviceSoftwareRepository(**device.model_dump(by_alias=True))
107
90
  device_software_repository.installed_versions = [a for a in device_software_repository.available_versions]
108
91
  device_software_repository.installed_versions.append(device_software_repository.current_version)
109
92
  devices_versions_repository[device_software_repository.device_id] = device_software_repository
@@ -111,7 +94,7 @@ class RepositoryAPI:
111
94
 
112
95
  def get_image_version(self, software_image: str) -> Union[str, None]:
113
96
  """
114
- Get proper software image version
97
+ Get proper software image version, based on name in available files
115
98
 
116
99
  Args:
117
100
  software_image (str): path to software image
@@ -122,25 +105,16 @@ class RepositoryAPI:
122
105
 
123
106
  image_name = PurePath(software_image).name
124
107
  software_images = self.get_all_software_images()
125
- for img in software_images:
126
- if image_name in img["availableFiles"]:
127
- image_version = img["versionName"]
108
+ for image in software_images:
109
+ if image.available_files and image_name in image.available_files:
110
+ image_version = image.version_name
128
111
  return image_version
129
112
  logger.error(f"Software image {image_name} is not in available images")
130
113
  return None
131
114
 
132
- def _create_callback(self, encoder: MultipartEncoder):
133
- bar = ProgressBar(expected_size=encoder._calculate_length(), filled_char="=")
134
-
135
- def callback(monitor: MultipartEncoderMonitor):
136
- bar.show(monitor.bytes_read)
137
-
138
- return callback
139
-
140
- def upload_image(self, image_path: str) -> int:
115
+ def upload_image(self, image_path: str) -> None:
141
116
  """
142
- Upload software image 'tar.gz' to Vmanage
143
- software repository
117
+ Upload software image ('tar.gz' or 'SPA.bin') to vManage software repository
144
118
 
145
119
  Args:
146
120
  image_path (str): path to software image
@@ -148,21 +122,16 @@ class RepositoryAPI:
148
122
  Returns:
149
123
  str: Response status code
150
124
  """
151
- url = "/dataservice/device/action/software/package"
152
- encoder = MultipartEncoder(
153
- fields={"file": (PurePath(image_path).name, open(image_path, "rb"), "application/x-gzip")}
125
+ self.session.endpoints.configuration_device_software_update.upload_software_to_manager(
126
+ payload=SoftwarePackageUploadPayload(image_path=image_path)
154
127
  )
155
- callback = self._create_callback(encoder)
156
- monitor = MultipartEncoderMonitor(encoder, callback)
157
- upload = self.session.post(url, data=monitor, headers={"content-type": monitor.content_type})
158
- return upload.status_code
159
128
 
160
- def delete_image(self, image_name: str) -> int:
129
+ def delete_image(self, image_name: str) -> None:
161
130
  """
162
131
  Delete image from vManage software repository
163
132
 
164
133
  Args:
165
- image_name (str): image name
134
+ image_name (str): image name (in available files)
166
135
 
167
136
  Raises:
168
137
  ImageNotInRepositoryError: raise error if image not in repository
@@ -171,11 +140,12 @@ class RepositoryAPI:
171
140
  int: Reponse status code
172
141
  """
173
142
  for image in self.get_all_software_images():
174
- if image_name in image["availableFiles"]:
175
- version_id = image["versionId"]
176
- url = f"/dataservice/device/action/software/{version_id}"
177
- delete = self.session.delete(url)
178
- return delete.status_code
143
+ if image.available_files and image_name in image.available_files:
144
+ version_id = image.version_id
145
+ self.session.endpoints.configuration_software_actions.delete_software_from_software_repository(
146
+ version_id=version_id
147
+ )
148
+ return None
179
149
  raise ImageNotInRepositoryError(f"Image: {image_name} is not the vManage software repository")
180
150
 
181
151
 
@@ -189,7 +159,7 @@ class DeviceVersions:
189
159
 
190
160
  def _get_device_list_in(
191
161
  self, version_to_set_up: str, devices: DataSequence[Device], version_type: str
192
- ) -> DataSequence[DeviceVersionPayload]:
162
+ ) -> DataSequence[PartitionDevice]:
193
163
  """
194
164
  Create devices payload list included requested version, if requested version
195
165
  is in specified version type
@@ -203,8 +173,8 @@ class DeviceVersions:
203
173
  list : list of devices
204
174
  """
205
175
  devices_payload = DataSequence(
206
- DeviceVersionPayload,
207
- [DeviceVersionPayload(device_id=device.uuid, device_ip=device.id) for device in devices],
176
+ PartitionDevice,
177
+ [PartitionDevice(device_id=device.uuid, device_ip=device.id) for device in devices],
208
178
  )
209
179
  all_dev_versions = self.repository.get_devices_versions_repository()
210
180
  for device in devices_payload:
@@ -223,7 +193,7 @@ class DeviceVersions:
223
193
 
224
194
  def get_device_list_in_installed(
225
195
  self, version_to_set_up: str, devices: DataSequence[Device]
226
- ) -> DataSequence[DeviceVersionPayload]:
196
+ ) -> DataSequence[PartitionDevice]:
227
197
  """
228
198
  Create devices payload list included requested version, if requested version
229
199
  is in installed versions
@@ -239,7 +209,7 @@ class DeviceVersions:
239
209
 
240
210
  def get_device_available(
241
211
  self, version_to_set_up: str, devices: DataSequence[Device]
242
- ) -> DataSequence[DeviceVersionPayload]:
212
+ ) -> DataSequence[PartitionDevice]:
243
213
  """
244
214
  Create devices payload list included requested, if requested version
245
215
  is in available versions
@@ -256,7 +226,7 @@ class DeviceVersions:
256
226
 
257
227
  def _get_devices_chosen_version(
258
228
  self, devices: DataSequence[Device], version_type: str
259
- ) -> DataSequence[DeviceVersionPayload]:
229
+ ) -> DataSequence[PartitionDevice]:
260
230
  """
261
231
  Create devices payload list included software version key
262
232
  for every device in devices list
@@ -269,15 +239,15 @@ class DeviceVersions:
269
239
  list : list of devices
270
240
  """
271
241
  devices_payload = DataSequence(
272
- DeviceVersionPayload,
273
- [DeviceVersionPayload(device_id=device.uuid, device_ip=device.id) for device in devices],
242
+ PartitionDevice,
243
+ [PartitionDevice(device_id=device.uuid, device_ip=device.id) for device in devices],
274
244
  )
275
245
  all_dev_versions = self.repository.get_devices_versions_repository()
276
246
  for device in devices_payload:
277
247
  device.version = getattr(all_dev_versions[device.device_id], version_type)
278
248
  return devices_payload
279
249
 
280
- def get_devices_current_version(self, devices: DataSequence[Device]) -> DataSequence[DeviceVersionPayload]:
250
+ def get_devices_current_version(self, devices: DataSequence[Device]) -> DataSequence[PartitionDevice]:
281
251
  """
282
252
  Create devices payload list included current software version key
283
253
  for every device in devices list
@@ -292,7 +262,7 @@ class DeviceVersions:
292
262
 
293
263
  return self._get_devices_chosen_version(devices, "current_version")
294
264
 
295
- def get_devices_available_versions(self, devices: DataSequence[Device]) -> DataSequence[DeviceVersionPayload]:
265
+ def get_devices_available_versions(self, devices: DataSequence[Device]) -> DataSequence[PartitionDevice]:
296
266
  """
297
267
  Create devices payload list included available software versions key
298
268
  for every device in devices list
@@ -306,5 +276,5 @@ class DeviceVersions:
306
276
 
307
277
  return self._get_devices_chosen_version(devices, "available_versions")
308
278
 
309
- def get_device_list(self, devices: DataSequence[Device]) -> List[DeviceVersionPayload]:
310
- return [DeviceVersionPayload(device_id=device.uuid, device_ip=device.id) for device in devices] # type: ignore
279
+ def get_device_list(self, devices: DataSequence[Device]) -> List[PartitionDevice]:
280
+ return [PartitionDevice(device_id=device.uuid, device_ip=device.id) for device in devices] # type: ignore