wxcli 1.2.0__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.
- wxcli/__init__.py +4 -0
- wxcli/_playbook/.claude/agents/migration-advisor.md +239 -0
- wxcli/_playbook/.claude/agents/wxc-calling-builder.md +946 -0
- wxcli/_playbook/.claude/rules/cleanup.md +29 -0
- wxcli/_playbook/.claude/rules/cucm-migration.md +58 -0
- wxcli/_playbook/.claude/rules/org-health.md +14 -0
- wxcli/_playbook/.claude/settings.json +8 -0
- wxcli/_playbook/.claude/skills/audit-compliance/SKILL.md +515 -0
- wxcli/_playbook/.claude/skills/call-control/SKILL.md +747 -0
- wxcli/_playbook/.claude/skills/configure-features/SKILL.md +623 -0
- wxcli/_playbook/.claude/skills/configure-routing/SKILL.md +627 -0
- wxcli/_playbook/.claude/skills/contact-center/SKILL.md +1181 -0
- wxcli/_playbook/.claude/skills/cucm-migrate/SKILL.md +820 -0
- wxcli/_playbook/.claude/skills/customer-assist/SKILL.md +443 -0
- wxcli/_playbook/.claude/skills/device-platform/SKILL.md +407 -0
- wxcli/_playbook/.claude/skills/manage-call-settings/SKILL.md +757 -0
- wxcli/_playbook/.claude/skills/manage-devices/SKILL.md +790 -0
- wxcli/_playbook/.claude/skills/manage-identity/SKILL.md +638 -0
- wxcli/_playbook/.claude/skills/manage-licensing/SKILL.md +528 -0
- wxcli/_playbook/.claude/skills/manage-meetings/SKILL.md +708 -0
- wxcli/_playbook/.claude/skills/messaging-bots/SKILL.md +365 -0
- wxcli/_playbook/.claude/skills/messaging-spaces/SKILL.md +520 -0
- wxcli/_playbook/.claude/skills/org-health/SKILL.md +159 -0
- wxcli/_playbook/.claude/skills/provision-calling/SKILL.md +421 -0
- wxcli/_playbook/.claude/skills/query-live/SKILL.md +183 -0
- wxcli/_playbook/.claude/skills/query-live/domains/call-flow-trace.md +223 -0
- wxcli/_playbook/.claude/skills/query-live/domains/call-history.md +44 -0
- wxcli/_playbook/.claude/skills/query-live/domains/features.md +169 -0
- wxcli/_playbook/.claude/skills/query-live/domains/numbers.md +93 -0
- wxcli/_playbook/.claude/skills/query-live/domains/people-and-settings.md +146 -0
- wxcli/_playbook/.claude/skills/query-live/domains/routing.md +124 -0
- wxcli/_playbook/.claude/skills/reporting/SKILL.md +501 -0
- wxcli/_playbook/.claude/skills/reporting/references/cdr-recipes.md +1628 -0
- wxcli/_playbook/.claude/skills/reporting-cc/SKILL.md +251 -0
- wxcli/_playbook/.claude/skills/reporting-meetings/SKILL.md +290 -0
- wxcli/_playbook/.claude/skills/teardown/SKILL.md +214 -0
- wxcli/_playbook/.claude/skills/video-mesh/SKILL.md +379 -0
- wxcli/_playbook/.claude/skills/wxc-calling-debug/SKILL.md +475 -0
- wxcli/_playbook/CLAUDE.md +373 -0
- wxcli/_playbook/docs/reference/CLAUDE.md +25 -0
- wxcli/_playbook/docs/reference/admin-apps-data.md +643 -0
- wxcli/_playbook/docs/reference/admin-audit-security.md +322 -0
- wxcli/_playbook/docs/reference/admin-hybrid.md +383 -0
- wxcli/_playbook/docs/reference/admin-identity-scim.md +1007 -0
- wxcli/_playbook/docs/reference/admin-licensing.md +414 -0
- wxcli/_playbook/docs/reference/admin-org-management.md +586 -0
- wxcli/_playbook/docs/reference/admin-partner.md +357 -0
- wxcli/_playbook/docs/reference/archive/wxc-sdk-patterns.md +1229 -0
- wxcli/_playbook/docs/reference/archive/wxcadm-advanced.md +835 -0
- wxcli/_playbook/docs/reference/archive/wxcadm-core.md +743 -0
- wxcli/_playbook/docs/reference/archive/wxcadm-devices-workspaces.md +1305 -0
- wxcli/_playbook/docs/reference/archive/wxcadm-features.md +849 -0
- wxcli/_playbook/docs/reference/archive/wxcadm-locations.md +938 -0
- wxcli/_playbook/docs/reference/archive/wxcadm-person.md +1255 -0
- wxcli/_playbook/docs/reference/archive/wxcadm-routing.md +1262 -0
- wxcli/_playbook/docs/reference/authentication.md +965 -0
- wxcli/_playbook/docs/reference/call-control.md +1205 -0
- wxcli/_playbook/docs/reference/call-features-additional.md +2541 -0
- wxcli/_playbook/docs/reference/call-features-major.md +1320 -0
- wxcli/_playbook/docs/reference/call-routing.md +2304 -0
- wxcli/_playbook/docs/reference/contact-center-analytics.md +1049 -0
- wxcli/_playbook/docs/reference/contact-center-core.md +1614 -0
- wxcli/_playbook/docs/reference/contact-center-journey.md +457 -0
- wxcli/_playbook/docs/reference/contact-center-routing.md +1138 -0
- wxcli/_playbook/docs/reference/devices-core.md +1869 -0
- wxcli/_playbook/docs/reference/devices-dect.md +1150 -0
- wxcli/_playbook/docs/reference/devices-platform.md +467 -0
- wxcli/_playbook/docs/reference/devices-workspaces.md +1426 -0
- wxcli/_playbook/docs/reference/emergency-services.md +1122 -0
- wxcli/_playbook/docs/reference/location-calling-core.md +2037 -0
- wxcli/_playbook/docs/reference/location-calling-media.md +1334 -0
- wxcli/_playbook/docs/reference/location-recording-advanced.md +1482 -0
- wxcli/_playbook/docs/reference/meetings-content.md +473 -0
- wxcli/_playbook/docs/reference/meetings-core.md +903 -0
- wxcli/_playbook/docs/reference/meetings-infrastructure.md +899 -0
- wxcli/_playbook/docs/reference/meetings-settings.md +850 -0
- wxcli/_playbook/docs/reference/messaging-bots.md +1091 -0
- wxcli/_playbook/docs/reference/messaging-spaces.md +695 -0
- wxcli/_playbook/docs/reference/person-call-settings-behavior.md +1639 -0
- wxcli/_playbook/docs/reference/person-call-settings-handling.md +1394 -0
- wxcli/_playbook/docs/reference/person-call-settings-media.md +1898 -0
- wxcli/_playbook/docs/reference/person-call-settings-permissions.md +1329 -0
- wxcli/_playbook/docs/reference/provisioning.md +1366 -0
- wxcli/_playbook/docs/reference/reporting-analytics.md +1318 -0
- wxcli/_playbook/docs/reference/self-service-call-settings.md +1020 -0
- wxcli/_playbook/docs/reference/virtual-lines.md +1132 -0
- wxcli/_playbook/docs/reference/webhooks-events.md +1444 -0
- wxcli/_playbook/docs/reference/wxcadm-xsi-realtime.md +953 -0
- wxcli/_version.py +24 -0
- wxcli/auth.py +137 -0
- wxcli/commands/__init__.py +0 -0
- wxcli/commands/_registry.py +181 -0
- wxcli/commands/activation_email.py +103 -0
- wxcli/commands/admin_recordings.py +585 -0
- wxcli/commands/analytics.py +105 -0
- wxcli/commands/announcement_playlists.py +219 -0
- wxcli/commands/announcements.py +519 -0
- wxcli/commands/archive_users.py +36 -0
- wxcli/commands/attachment_actions.py +60 -0
- wxcli/commands/audit_events.py +83 -0
- wxcli/commands/authorizations.py +113 -0
- wxcli/commands/auto_attendant.py +642 -0
- wxcli/commands/broadworks_billing_reports.py +126 -0
- wxcli/commands/broadworks_enterprises.py +160 -0
- wxcli/commands/broadworks_subscribers.py +319 -0
- wxcli/commands/broadworks_workspaces.py +108 -0
- wxcli/commands/call_controls.py +1304 -0
- wxcli/commands/call_park.py +494 -0
- wxcli/commands/call_pickup.py +229 -0
- wxcli/commands/call_queue.py +1878 -0
- wxcli/commands/call_recording.py +707 -0
- wxcli/commands/call_routing.py +1610 -0
- wxcli/commands/call_settings_for_me_phase_5.py +212 -0
- wxcli/commands/caller_reputation.py +169 -0
- wxcli/commands/calling_service.py +305 -0
- wxcli/commands/cc_address_book.py +770 -0
- wxcli/commands/cc_agent_greetings.py +242 -0
- wxcli/commands/cc_agent_summaries.py +39 -0
- wxcli/commands/cc_agent_wellbeing.py +216 -0
- wxcli/commands/cc_agents.py +425 -0
- wxcli/commands/cc_ai_assistant.py +55 -0
- wxcli/commands/cc_ai_feature.py +294 -0
- wxcli/commands/cc_audio_files.py +149 -0
- wxcli/commands/cc_auto_csat.py +311 -0
- wxcli/commands/cc_aux_code.py +458 -0
- wxcli/commands/cc_business_hour.py +353 -0
- wxcli/commands/cc_call_monitoring.py +228 -0
- wxcli/commands/cc_callbacks.py +194 -0
- wxcli/commands/cc_campaign.py +212 -0
- wxcli/commands/cc_captures.py +39 -0
- wxcli/commands/cc_contact_list.py +169 -0
- wxcli/commands/cc_contact_number.py +295 -0
- wxcli/commands/cc_data_sources.py +235 -0
- wxcli/commands/cc_desktop_layout.py +380 -0
- wxcli/commands/cc_desktop_profile.py +322 -0
- wxcli/commands/cc_dial_number.py +511 -0
- wxcli/commands/cc_dial_plan.py +347 -0
- wxcli/commands/cc_dnc.py +101 -0
- wxcli/commands/cc_entry_point.py +545 -0
- wxcli/commands/cc_ewt.py +51 -0
- wxcli/commands/cc_flow.py +477 -0
- wxcli/commands/cc_global_vars.py +430 -0
- wxcli/commands/cc_holiday_list.py +335 -0
- wxcli/commands/cc_journey.py +1261 -0
- wxcli/commands/cc_legacy_flows.py +49 -0
- wxcli/commands/cc_multimedia_profile.py +436 -0
- wxcli/commands/cc_notification.py +51 -0
- wxcli/commands/cc_outdial_ani.py +604 -0
- wxcli/commands/cc_overrides.py +341 -0
- wxcli/commands/cc_queue.py +1083 -0
- wxcli/commands/cc_queue_stats.py +55 -0
- wxcli/commands/cc_realtime.py +51 -0
- wxcli/commands/cc_resource_collection.py +312 -0
- wxcli/commands/cc_search.py +46 -0
- wxcli/commands/cc_site.py +400 -0
- wxcli/commands/cc_skill.py +350 -0
- wxcli/commands/cc_skill_profile.py +289 -0
- wxcli/commands/cc_subscriptions.py +426 -0
- wxcli/commands/cc_summaries.py +130 -0
- wxcli/commands/cc_tasks.py +844 -0
- wxcli/commands/cc_team.py +325 -0
- wxcli/commands/cc_user_profiles.py +349 -0
- wxcli/commands/cc_users.py +701 -0
- wxcli/commands/cc_work_types.py +363 -0
- wxcli/commands/cdr.py +89 -0
- wxcli/commands/classifications.py +38 -0
- wxcli/commands/cleanup.py +1427 -0
- wxcli/commands/client_settings.py +72 -0
- wxcli/commands/conference.py +328 -0
- wxcli/commands/configure.py +72 -0
- wxcli/commands/converged_recordings.py +347 -0
- wxcli/commands/converged_recordings_export.py +310 -0
- wxcli/commands/cq_playlists.py +42 -0
- wxcli/commands/cucm.py +2794 -0
- wxcli/commands/cucm_config.py +129 -0
- wxcli/commands/customer_assist.py +373 -0
- wxcli/commands/data_sources.py +227 -0
- wxcli/commands/dect_devices.py +787 -0
- wxcli/commands/device_configurations.py +77 -0
- wxcli/commands/device_dynamic_settings.py +320 -0
- wxcli/commands/device_settings.py +1489 -0
- wxcli/commands/devices.py +280 -0
- wxcli/commands/domains.py +142 -0
- wxcli/commands/ecm.py +178 -0
- wxcli/commands/emergency_services.py +827 -0
- wxcli/commands/events.py +83 -0
- wxcli/commands/external_voicemail.py +52 -0
- wxcli/commands/groups.py +206 -0
- wxcli/commands/guest_management.py +76 -0
- wxcli/commands/hds.py +340 -0
- wxcli/commands/hot_desk.py +67 -0
- wxcli/commands/hot_desking_members.py +118 -0
- wxcli/commands/hot_desking_portal.py +124 -0
- wxcli/commands/hunt_group.py +577 -0
- wxcli/commands/hybrid_clusters.py +71 -0
- wxcli/commands/hybrid_connectors.py +67 -0
- wxcli/commands/identity_org.py +159 -0
- wxcli/commands/init_playbook.py +155 -0
- wxcli/commands/licenses.py +106 -0
- wxcli/commands/live_monitoring.py +40 -0
- wxcli/commands/location_call_handling.py +577 -0
- wxcli/commands/location_schedules.py +341 -0
- wxcli/commands/location_settings.py +1297 -0
- wxcli/commands/location_voicemail.py +494 -0
- wxcli/commands/locations.py +336 -0
- wxcli/commands/meeting_captions.py +110 -0
- wxcli/commands/meeting_chats.py +63 -0
- wxcli/commands/meeting_invitees.py +234 -0
- wxcli/commands/meeting_messages.py +28 -0
- wxcli/commands/meeting_participants.py +278 -0
- wxcli/commands/meeting_polls.py +111 -0
- wxcli/commands/meeting_preferences.py +515 -0
- wxcli/commands/meeting_qa.py +78 -0
- wxcli/commands/meeting_qualities.py +43 -0
- wxcli/commands/meeting_reports.py +101 -0
- wxcli/commands/meeting_session_types.py +105 -0
- wxcli/commands/meeting_site.py +57 -0
- wxcli/commands/meeting_slido.py +44 -0
- wxcli/commands/meeting_summaries.py +92 -0
- wxcli/commands/meeting_tracking_codes.py +233 -0
- wxcli/commands/meeting_transcripts.py +230 -0
- wxcli/commands/meetings.py +1997 -0
- wxcli/commands/memberships.py +164 -0
- wxcli/commands/messages.py +213 -0
- wxcli/commands/mode_management.py +244 -0
- wxcli/commands/my_call_settings.py +3577 -0
- wxcli/commands/numbers.py +405 -0
- wxcli/commands/operating_modes.py +410 -0
- wxcli/commands/org_contacts.py +284 -0
- wxcli/commands/org_health_cli.py +55 -0
- wxcli/commands/org_settings.py +71 -0
- wxcli/commands/organizations.py +83 -0
- wxcli/commands/paging_group.py +257 -0
- wxcli/commands/partner_admins.py +141 -0
- wxcli/commands/partner_reports.py +188 -0
- wxcli/commands/partner_tags.py +216 -0
- wxcli/commands/people.py +279 -0
- wxcli/commands/person_call_settings.py +71 -0
- wxcli/commands/pstn.py +280 -0
- wxcli/commands/recording_report.py +154 -0
- wxcli/commands/report_templates.py +38 -0
- wxcli/commands/reports.py +144 -0
- wxcli/commands/resource_group_memberships.py +160 -0
- wxcli/commands/resource_groups.py +67 -0
- wxcli/commands/roles.py +63 -0
- wxcli/commands/room_tabs.py +160 -0
- wxcli/commands/rooms.py +225 -0
- wxcli/commands/scim_bulk.py +46 -0
- wxcli/commands/scim_groups.py +246 -0
- wxcli/commands/scim_schemas.py +82 -0
- wxcli/commands/scim_users.py +283 -0
- wxcli/commands/security_audit.py +54 -0
- wxcli/commands/service_apps.py +51 -0
- wxcli/commands/single_number_reach.py +209 -0
- wxcli/commands/team_memberships.py +155 -0
- wxcli/commands/teams.py +153 -0
- wxcli/commands/ucm_profile.py +42 -0
- wxcli/commands/update.py +219 -0
- wxcli/commands/user_settings.py +5116 -0
- wxcli/commands/video_mesh.py +1090 -0
- wxcli/commands/virtual_extensions.py +502 -0
- wxcli/commands/virtual_line_settings.py +2072 -0
- wxcli/commands/webhooks.py +176 -0
- wxcli/commands/wholesale_billing_reports.py +147 -0
- wxcli/commands/wholesale_provisioning.py +523 -0
- wxcli/commands/workspace_locations.py +339 -0
- wxcli/commands/workspace_metrics.py +103 -0
- wxcli/commands/workspace_personalization.py +70 -0
- wxcli/commands/workspace_settings.py +3347 -0
- wxcli/commands/workspaces.py +279 -0
- wxcli/commands/xapi.py +114 -0
- wxcli/config.py +139 -0
- wxcli/errors.py +77 -0
- wxcli/main.py +210 -0
- wxcli/migration/CLAUDE.md +106 -0
- wxcli/migration/__init__.py +1 -0
- wxcli/migration/advisory/CLAUDE.md +196 -0
- wxcli/migration/advisory/__init__.py +46 -0
- wxcli/migration/advisory/advisor.py +107 -0
- wxcli/migration/advisory/advisory_patterns.py +2552 -0
- wxcli/migration/advisory/recommendation_rules.py +835 -0
- wxcli/migration/cucm/CLAUDE.md +74 -0
- wxcli/migration/cucm/__init__.py +5 -0
- wxcli/migration/cucm/connection.py +265 -0
- wxcli/migration/cucm/discovery.py +225 -0
- wxcli/migration/cucm/extractors/__init__.py +1 -0
- wxcli/migration/cucm/extractors/announcements.py +92 -0
- wxcli/migration/cucm/extractors/base.py +90 -0
- wxcli/migration/cucm/extractors/device_profiles.py +98 -0
- wxcli/migration/cucm/extractors/devices.py +193 -0
- wxcli/migration/cucm/extractors/e911.py +103 -0
- wxcli/migration/cucm/extractors/features.py +309 -0
- wxcli/migration/cucm/extractors/helpers.py +73 -0
- wxcli/migration/cucm/extractors/informational.py +295 -0
- wxcli/migration/cucm/extractors/locations.py +221 -0
- wxcli/migration/cucm/extractors/moh.py +100 -0
- wxcli/migration/cucm/extractors/remote_destinations.py +96 -0
- wxcli/migration/cucm/extractors/routing.py +493 -0
- wxcli/migration/cucm/extractors/shared_lines.py +146 -0
- wxcli/migration/cucm/extractors/templates.py +229 -0
- wxcli/migration/cucm/extractors/tier4.py +173 -0
- wxcli/migration/cucm/extractors/users.py +240 -0
- wxcli/migration/cucm/extractors/voicemail.py +243 -0
- wxcli/migration/cucm/extractors/workspaces.py +88 -0
- wxcli/migration/cucm/unity_connection.py +304 -0
- wxcli/migration/execute/CLAUDE.md +372 -0
- wxcli/migration/execute/__init__.py +303 -0
- wxcli/migration/execute/batch.py +277 -0
- wxcli/migration/execute/dependency.py +483 -0
- wxcli/migration/execute/engine.py +964 -0
- wxcli/migration/execute/handlers.py +2232 -0
- wxcli/migration/execute/planner.py +1939 -0
- wxcli/migration/execute/runtime.py +571 -0
- wxcli/migration/export/CLAUDE.md +49 -0
- wxcli/migration/export/__init__.py +8 -0
- wxcli/migration/export/csv_export.py +126 -0
- wxcli/migration/export/deployment_plan.py +479 -0
- wxcli/migration/export/json_export.py +60 -0
- wxcli/migration/models.py +941 -0
- wxcli/migration/phone_models.py +50 -0
- wxcli/migration/preflight/CLAUDE.md +52 -0
- wxcli/migration/preflight/__init__.py +89 -0
- wxcli/migration/preflight/checks.py +911 -0
- wxcli/migration/preflight/runner.py +293 -0
- wxcli/migration/rate_limiter.py +144 -0
- wxcli/migration/report/CLAUDE.md +245 -0
- wxcli/migration/report/__init__.py +7 -0
- wxcli/migration/report/appendix.py +2437 -0
- wxcli/migration/report/assembler.py +183 -0
- wxcli/migration/report/charts.py +263 -0
- wxcli/migration/report/executive.py +776 -0
- wxcli/migration/report/explainer.py +704 -0
- wxcli/migration/report/helpers.py +74 -0
- wxcli/migration/report/ingest.py +152 -0
- wxcli/migration/report/notice_templates.py +192 -0
- wxcli/migration/report/score.py +375 -0
- wxcli/migration/report/styles.py +1052 -0
- wxcli/migration/report/user_diff.py +1052 -0
- wxcli/migration/report/user_notice.py +425 -0
- wxcli/migration/state.py +139 -0
- wxcli/migration/store.py +860 -0
- wxcli/migration/transform/CLAUDE.md +107 -0
- wxcli/migration/transform/__init__.py +12 -0
- wxcli/migration/transform/analysis_pipeline.py +453 -0
- wxcli/migration/transform/analyzers/__init__.py +142 -0
- wxcli/migration/transform/analyzers/css_permission.py +189 -0
- wxcli/migration/transform/analyzers/css_routing.py +335 -0
- wxcli/migration/transform/analyzers/device_compatibility.py +122 -0
- wxcli/migration/transform/analyzers/dn_ambiguity.py +131 -0
- wxcli/migration/transform/analyzers/duplicate_user.py +221 -0
- wxcli/migration/transform/analyzers/extension_conflict.py +173 -0
- wxcli/migration/transform/analyzers/feature_approximation.py +227 -0
- wxcli/migration/transform/analyzers/layout_overflow.py +174 -0
- wxcli/migration/transform/analyzers/location_ambiguity.py +184 -0
- wxcli/migration/transform/analyzers/missing_data.py +300 -0
- wxcli/migration/transform/analyzers/selective_call_handling.py +394 -0
- wxcli/migration/transform/analyzers/shared_line.py +170 -0
- wxcli/migration/transform/analyzers/voicemail_compatibility.py +267 -0
- wxcli/migration/transform/analyzers/workspace_license.py +212 -0
- wxcli/migration/transform/cross_reference.py +1136 -0
- wxcli/migration/transform/cucm_pattern.py +246 -0
- wxcli/migration/transform/decisions.py +301 -0
- wxcli/migration/transform/e164.py +145 -0
- wxcli/migration/transform/engine.py +256 -0
- wxcli/migration/transform/mappers/CLAUDE.md +123 -0
- wxcli/migration/transform/mappers/__init__.py +76 -0
- wxcli/migration/transform/mappers/announcement_mapper.py +122 -0
- wxcli/migration/transform/mappers/base.py +190 -0
- wxcli/migration/transform/mappers/button_template_mapper.py +186 -0
- wxcli/migration/transform/mappers/call_forwarding_mapper.py +228 -0
- wxcli/migration/transform/mappers/call_settings_mapper.py +144 -0
- wxcli/migration/transform/mappers/css_mapper.py +868 -0
- wxcli/migration/transform/mappers/dect_mapper.py +367 -0
- wxcli/migration/transform/mappers/device_layout_mapper.py +289 -0
- wxcli/migration/transform/mappers/device_mapper.py +227 -0
- wxcli/migration/transform/mappers/device_profile_mapper.py +190 -0
- wxcli/migration/transform/mappers/device_settings_mapper.py +464 -0
- wxcli/migration/transform/mappers/e911_mapper.py +129 -0
- wxcli/migration/transform/mappers/ecbn_mapper.py +263 -0
- wxcli/migration/transform/mappers/executive_assistant_mapper.py +156 -0
- wxcli/migration/transform/mappers/feature_mapper.py +1179 -0
- wxcli/migration/transform/mappers/line_mapper.py +310 -0
- wxcli/migration/transform/mappers/location_mapper.py +235 -0
- wxcli/migration/transform/mappers/moh_mapper.py +114 -0
- wxcli/migration/transform/mappers/monitoring_mapper.py +221 -0
- wxcli/migration/transform/mappers/receptionist_mapper.py +245 -0
- wxcli/migration/transform/mappers/routing_mapper.py +821 -0
- wxcli/migration/transform/mappers/snr_mapper.py +201 -0
- wxcli/migration/transform/mappers/softkey_mapper.py +205 -0
- wxcli/migration/transform/mappers/user_mapper.py +264 -0
- wxcli/migration/transform/mappers/voicemail_group_mapper.py +286 -0
- wxcli/migration/transform/mappers/voicemail_mapper.py +514 -0
- wxcli/migration/transform/mappers/workspace_mapper.py +464 -0
- wxcli/migration/transform/normalizers.py +2008 -0
- wxcli/migration/transform/pattern_converter.py +106 -0
- wxcli/migration/transform/pipeline.py +271 -0
- wxcli/migration/transform/rules.py +255 -0
- wxcli/org_health/CLAUDE.md +63 -0
- wxcli/org_health/__init__.py +7 -0
- wxcli/org_health/analyze.py +93 -0
- wxcli/org_health/checks.py +458 -0
- wxcli/org_health/collector.py +62 -0
- wxcli/org_health/models.py +78 -0
- wxcli/org_health/report.py +300 -0
- wxcli/output.py +101 -0
- wxcli-1.2.0.dist-info/METADATA +505 -0
- wxcli-1.2.0.dist-info/RECORD +413 -0
- wxcli-1.2.0.dist-info/WHEEL +5 -0
- wxcli-1.2.0.dist-info/entry_points.txt +2 -0
- wxcli-1.2.0.dist-info/licenses/LICENSE +191 -0
- wxcli-1.2.0.dist-info/scm_file_list.json +751 -0
- wxcli-1.2.0.dist-info/scm_version.json +8 -0
- wxcli-1.2.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import typer
|
|
3
|
+
from wxcli.auth import get_api
|
|
4
|
+
from wxcli.errors import WebexError, handle_rest_error
|
|
5
|
+
from wxcli.output import print_table, print_json
|
|
6
|
+
from wxcli.config import resolve_org_id, get_cc_base_url, get_cc_org_id
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
app = typer.Typer(help="Manage Webex Contact Center cc-ai-feature.")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@app.command("create")
|
|
13
|
+
def create(
|
|
14
|
+
organization_id: str = typer.Option(None, "--organization-id", help="ID of the contact center organization. This field is require"),
|
|
15
|
+
id_param: str = typer.Option(None, "--id", help="ID of this contact center resource. It should not be specifi"),
|
|
16
|
+
version: str = typer.Option(None, "--version", help="The version of this resource. For a newly created resource,"),
|
|
17
|
+
question_id: str = typer.Option(None, "--question-id", help="(required) Question ID that is mapped for Auto CSAT configuration"),
|
|
18
|
+
questionnaire_id: str = typer.Option(None, "--questionnaire-id", help="(required) Questionnaire ID corresponding to the Question ID that is ma"),
|
|
19
|
+
created_time: str = typer.Option(None, "--created-time", help="This is the created time of the entity."),
|
|
20
|
+
last_updated_time: str = typer.Option(None, "--last-updated-time", help="This is the updated time of the entity."),
|
|
21
|
+
json_body: str = typer.Option(None, "--json-body", help="Full JSON body (overrides other options)"),
|
|
22
|
+
output: str = typer.Option("id", "--output", "-o", help="Output format: id|json"),
|
|
23
|
+
debug: bool = typer.Option(False, "--debug"),
|
|
24
|
+
):
|
|
25
|
+
"""Create a new Question mapped to AutoCSAT."""
|
|
26
|
+
api = get_api(debug=debug)
|
|
27
|
+
cc_base_url = get_cc_base_url()
|
|
28
|
+
orgid = get_cc_org_id(api.session)
|
|
29
|
+
url = f"{cc_base_url}/organization/{orgid}/ai-feature/auto-csat/question"
|
|
30
|
+
if json_body:
|
|
31
|
+
body = json.loads(json_body)
|
|
32
|
+
else:
|
|
33
|
+
body = {}
|
|
34
|
+
if organization_id is not None:
|
|
35
|
+
body["organizationId"] = organization_id
|
|
36
|
+
if id_param is not None:
|
|
37
|
+
body["id"] = id_param
|
|
38
|
+
if version is not None:
|
|
39
|
+
body["version"] = version
|
|
40
|
+
if question_id is not None:
|
|
41
|
+
body["questionId"] = question_id
|
|
42
|
+
if questionnaire_id is not None:
|
|
43
|
+
body["questionnaireId"] = questionnaire_id
|
|
44
|
+
if created_time is not None:
|
|
45
|
+
body["createdTime"] = created_time
|
|
46
|
+
if last_updated_time is not None:
|
|
47
|
+
body["lastUpdatedTime"] = last_updated_time
|
|
48
|
+
_missing = [f for f in ['questionId', 'questionnaireId'] if f not in body or body[f] is None]
|
|
49
|
+
if _missing:
|
|
50
|
+
typer.echo("Error: Missing required fields: " + ", ".join(_missing), err=True)
|
|
51
|
+
raise typer.Exit(1)
|
|
52
|
+
try:
|
|
53
|
+
result = api.session.rest_post(url, json=body)
|
|
54
|
+
except WebexError as e:
|
|
55
|
+
handle_rest_error(e)
|
|
56
|
+
if output == "json":
|
|
57
|
+
print_json(result)
|
|
58
|
+
elif isinstance(result, dict) and "id" in result:
|
|
59
|
+
typer.echo(f"Created: {result['id']}")
|
|
60
|
+
elif not result or result == {}:
|
|
61
|
+
typer.echo("Created.")
|
|
62
|
+
else:
|
|
63
|
+
print_json(result)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
@app.command("create-bulk")
|
|
68
|
+
def create_bulk(
|
|
69
|
+
json_body: str = typer.Option(None, "--json-body", help="Full JSON body (overrides other options)"),
|
|
70
|
+
output: str = typer.Option("id", "--output", "-o", help="Output format: id|json"),
|
|
71
|
+
debug: bool = typer.Option(False, "--debug"),
|
|
72
|
+
):
|
|
73
|
+
"""Bulk save Question mapped to AutoCSAT\n\nExample --json-body:\n '{"items":[{"itemIdentifier":"...","item":"...","requestAction":"..."}]}'."""
|
|
74
|
+
api = get_api(debug=debug)
|
|
75
|
+
cc_base_url = get_cc_base_url()
|
|
76
|
+
orgid = get_cc_org_id(api.session)
|
|
77
|
+
url = f"{cc_base_url}/organization/{orgid}/ai-feature/auto-csat/question/bulk"
|
|
78
|
+
if json_body:
|
|
79
|
+
body = json.loads(json_body)
|
|
80
|
+
else:
|
|
81
|
+
body = {}
|
|
82
|
+
try:
|
|
83
|
+
result = api.session.rest_post(url, json=body)
|
|
84
|
+
except WebexError as e:
|
|
85
|
+
handle_rest_error(e)
|
|
86
|
+
if output == "json":
|
|
87
|
+
print_json(result)
|
|
88
|
+
elif isinstance(result, dict) and "id" in result:
|
|
89
|
+
typer.echo(f"Created: {result['id']}")
|
|
90
|
+
elif not result or result == {}:
|
|
91
|
+
typer.echo("Created.")
|
|
92
|
+
else:
|
|
93
|
+
print_json(result)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
@app.command("show")
|
|
98
|
+
def show(
|
|
99
|
+
id: str = typer.Argument(help="id"),
|
|
100
|
+
output: str = typer.Option("json", "--output", "-o", help="Output format: table|json"),
|
|
101
|
+
debug: bool = typer.Option(False, "--debug"),
|
|
102
|
+
):
|
|
103
|
+
"""Get specific Question mapped to AutoCSAT by ID."""
|
|
104
|
+
api = get_api(debug=debug)
|
|
105
|
+
cc_base_url = get_cc_base_url()
|
|
106
|
+
orgid = get_cc_org_id(api.session)
|
|
107
|
+
url = f"{cc_base_url}/organization/{orgid}/ai-feature/auto-csat/question/{id}"
|
|
108
|
+
try:
|
|
109
|
+
result = api.session.rest_get(url)
|
|
110
|
+
except WebexError as e:
|
|
111
|
+
handle_rest_error(e)
|
|
112
|
+
if output == "json":
|
|
113
|
+
print_json(result)
|
|
114
|
+
else:
|
|
115
|
+
if isinstance(result, dict):
|
|
116
|
+
print_table([result], columns=[("Key", ""), ("Value", "")], limit=0)
|
|
117
|
+
elif isinstance(result, list):
|
|
118
|
+
print_table(result, columns=[("ID", "id"), ("Name", "name")], limit=0)
|
|
119
|
+
else:
|
|
120
|
+
print_json(result)
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
@app.command("delete")
|
|
125
|
+
def delete(
|
|
126
|
+
id: str = typer.Argument(help="id"),
|
|
127
|
+
force: bool = typer.Option(False, "--force", help="Skip confirmation"),
|
|
128
|
+
debug: bool = typer.Option(False, "--debug"),
|
|
129
|
+
):
|
|
130
|
+
"""Delete specific Question mapped to AutoCSAT by ID."""
|
|
131
|
+
if not force:
|
|
132
|
+
typer.confirm(f"Delete {id}?", abort=True)
|
|
133
|
+
api = get_api(debug=debug)
|
|
134
|
+
cc_base_url = get_cc_base_url()
|
|
135
|
+
orgid = get_cc_org_id(api.session)
|
|
136
|
+
url = f"{cc_base_url}/organization/{orgid}/ai-feature/auto-csat/question/{id}"
|
|
137
|
+
try:
|
|
138
|
+
api.session.rest_delete(url)
|
|
139
|
+
except WebexError as e:
|
|
140
|
+
handle_rest_error(e)
|
|
141
|
+
typer.echo(f"Deleted: {id}")
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
@app.command("show-ai-feature")
|
|
146
|
+
def show_ai_feature(
|
|
147
|
+
id: str = typer.Argument(help="id"),
|
|
148
|
+
output: str = typer.Option("json", "--output", "-o", help="Output format: table|json"),
|
|
149
|
+
debug: bool = typer.Option(False, "--debug"),
|
|
150
|
+
):
|
|
151
|
+
"""Get specific AI Feature resource by ID."""
|
|
152
|
+
api = get_api(debug=debug)
|
|
153
|
+
cc_base_url = get_cc_base_url()
|
|
154
|
+
orgid = get_cc_org_id(api.session)
|
|
155
|
+
url = f"{cc_base_url}/organization/{orgid}/ai-feature/{id}"
|
|
156
|
+
try:
|
|
157
|
+
result = api.session.rest_get(url)
|
|
158
|
+
except WebexError as e:
|
|
159
|
+
handle_rest_error(e)
|
|
160
|
+
if output == "json":
|
|
161
|
+
print_json(result)
|
|
162
|
+
else:
|
|
163
|
+
if isinstance(result, dict):
|
|
164
|
+
print_table([result], columns=[("Key", ""), ("Value", "")], limit=0)
|
|
165
|
+
elif isinstance(result, list):
|
|
166
|
+
print_table(result, columns=[("ID", "id"), ("Name", "name")], limit=0)
|
|
167
|
+
else:
|
|
168
|
+
print_json(result)
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
@app.command("update")
|
|
173
|
+
def update(
|
|
174
|
+
id: str = typer.Argument(help="id"),
|
|
175
|
+
organization_id: str = typer.Option(None, "--organization-id", help="ID of the contact center organization. This field is require"),
|
|
176
|
+
id_param: str = typer.Option(None, "--id", help="ID of this contact center resource. It should not be specifi"),
|
|
177
|
+
version: str = typer.Option(None, "--version", help="The version of this resource. For a newly created resource,"),
|
|
178
|
+
created_time: str = typer.Option(None, "--created-time", help="This is the created time of the entity."),
|
|
179
|
+
last_updated_time: str = typer.Option(None, "--last-updated-time", help="This is the updated time of the entity."),
|
|
180
|
+
json_body: str = typer.Option(None, "--json-body", help="Full JSON body (overrides other options)"),
|
|
181
|
+
debug: bool = typer.Option(False, "--debug"),
|
|
182
|
+
):
|
|
183
|
+
"""Partially update AI Feature resource by ID\n\nExample --json-body:\n '{"organizationId":"...","id":"...","version":0,"realtimeTranscripts":{"enable":true,"agentInclusionType":"ALL","queuesInclusionType":"ALL"},"suggestedResponses":{"enable":true},"generatedSummaries":{"callDropSummariesEnabled":true,"virtualAgentTransferSummariesEnabled":true,"consultTransferSummariesEnabled":true,"wrapUpSummariesEnabled":true,"queuesInclusionType":"ALL"},"agentWellbeing":{"enable":true,"agentInclusionType":"ALL","wellnessBreakReminders":"DISABLED"},"autoCSAT":{"enable":true,"queuesInclusionType":"ALL","selectedGlobalVariableId":"...","surveyDataSource":"EXPERIENCE_MANAGEMENT"}}'."""
|
|
184
|
+
api = get_api(debug=debug)
|
|
185
|
+
cc_base_url = get_cc_base_url()
|
|
186
|
+
orgid = get_cc_org_id(api.session)
|
|
187
|
+
url = f"{cc_base_url}/organization/{orgid}/ai-feature/{id}"
|
|
188
|
+
if json_body:
|
|
189
|
+
body = json.loads(json_body)
|
|
190
|
+
else:
|
|
191
|
+
body = {}
|
|
192
|
+
if organization_id is not None:
|
|
193
|
+
body["organizationId"] = organization_id
|
|
194
|
+
if id_param is not None:
|
|
195
|
+
body["id"] = id_param
|
|
196
|
+
if version is not None:
|
|
197
|
+
body["version"] = version
|
|
198
|
+
if created_time is not None:
|
|
199
|
+
body["createdTime"] = created_time
|
|
200
|
+
if last_updated_time is not None:
|
|
201
|
+
body["lastUpdatedTime"] = last_updated_time
|
|
202
|
+
try:
|
|
203
|
+
result = api.session.rest_patch(url, json=body)
|
|
204
|
+
except WebexError as e:
|
|
205
|
+
handle_rest_error(e)
|
|
206
|
+
typer.echo(f"Updated.")
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
@app.command("list")
|
|
211
|
+
def cmd_list(
|
|
212
|
+
filter_param: str = typer.Option(None, "--filter", help="Specify a filter based on which the results will be fetched."),
|
|
213
|
+
attributes: str = typer.Option(None, "--attributes", help="Specify the attributes to be returned. By default, all attri"),
|
|
214
|
+
page: str = typer.Option(None, "--page", help="Defines the number of displayed page. The page number starts"),
|
|
215
|
+
page_size: str = typer.Option(None, "--page-size", help="Defines the number of items to be displayed on a page. If th"),
|
|
216
|
+
output: str = typer.Option("table", "--output", "-o", help="Output format: table|json"),
|
|
217
|
+
limit: int = typer.Option(0, "--limit", help="Max results (0=all for paginated endpoints, API default for non-paginated)"),
|
|
218
|
+
offset: int = typer.Option(0, "--offset", help="Start offset"),
|
|
219
|
+
debug: bool = typer.Option(False, "--debug"),
|
|
220
|
+
):
|
|
221
|
+
"""List AI Feature resource(s)."""
|
|
222
|
+
api = get_api(debug=debug)
|
|
223
|
+
cc_base_url = get_cc_base_url()
|
|
224
|
+
orgid = get_cc_org_id(api.session)
|
|
225
|
+
url = f"{cc_base_url}/organization/{orgid}/v2/ai-feature"
|
|
226
|
+
params = {}
|
|
227
|
+
if filter_param is not None:
|
|
228
|
+
params["filter"] = filter_param
|
|
229
|
+
if attributes is not None:
|
|
230
|
+
params["attributes"] = attributes
|
|
231
|
+
if page is not None:
|
|
232
|
+
params["page"] = page
|
|
233
|
+
if page_size is not None:
|
|
234
|
+
params["pageSize"] = page_size
|
|
235
|
+
if limit > 0:
|
|
236
|
+
params["max"] = limit
|
|
237
|
+
if offset > 0:
|
|
238
|
+
params["start"] = offset
|
|
239
|
+
result = None
|
|
240
|
+
try:
|
|
241
|
+
result = api.session.rest_get(url, params=params)
|
|
242
|
+
except WebexError as e:
|
|
243
|
+
handle_rest_error(e)
|
|
244
|
+
result = result or []
|
|
245
|
+
items = result.get("data", result.get("data", result if isinstance(result, list) else [])) if isinstance(result, dict) else (result if isinstance(result, list) else [])
|
|
246
|
+
if output == "json":
|
|
247
|
+
print_json(items)
|
|
248
|
+
else:
|
|
249
|
+
print_table(items, columns=[("ID", "id"), ("Name", "name")], limit=limit)
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
@app.command("list-question")
|
|
254
|
+
def list_question(
|
|
255
|
+
filter_param: str = typer.Option(None, "--filter", help="Specify a filter based on which the results will be fetched."),
|
|
256
|
+
attributes: str = typer.Option(None, "--attributes", help="Specify the attributes to be returned. By default, all attri"),
|
|
257
|
+
page: str = typer.Option(None, "--page", help="Defines the number of displayed page. The page number starts"),
|
|
258
|
+
page_size: str = typer.Option(None, "--page-size", help="Defines the number of items to be displayed on a page. If th"),
|
|
259
|
+
output: str = typer.Option("table", "--output", "-o", help="Output format: table|json"),
|
|
260
|
+
limit: int = typer.Option(0, "--limit", help="Max results (0=all for paginated endpoints, API default for non-paginated)"),
|
|
261
|
+
offset: int = typer.Option(0, "--offset", help="Start offset"),
|
|
262
|
+
debug: bool = typer.Option(False, "--debug"),
|
|
263
|
+
):
|
|
264
|
+
"""List Question mapped to AutoCSAT(s)."""
|
|
265
|
+
api = get_api(debug=debug)
|
|
266
|
+
cc_base_url = get_cc_base_url()
|
|
267
|
+
orgid = get_cc_org_id(api.session)
|
|
268
|
+
url = f"{cc_base_url}/organization/{orgid}/v2/ai-feature/auto-csat/question"
|
|
269
|
+
params = {}
|
|
270
|
+
if filter_param is not None:
|
|
271
|
+
params["filter"] = filter_param
|
|
272
|
+
if attributes is not None:
|
|
273
|
+
params["attributes"] = attributes
|
|
274
|
+
if page is not None:
|
|
275
|
+
params["page"] = page
|
|
276
|
+
if page_size is not None:
|
|
277
|
+
params["pageSize"] = page_size
|
|
278
|
+
if limit > 0:
|
|
279
|
+
params["max"] = limit
|
|
280
|
+
if offset > 0:
|
|
281
|
+
params["start"] = offset
|
|
282
|
+
result = None
|
|
283
|
+
try:
|
|
284
|
+
result = api.session.rest_get(url, params=params)
|
|
285
|
+
except WebexError as e:
|
|
286
|
+
handle_rest_error(e)
|
|
287
|
+
result = result or []
|
|
288
|
+
items = result.get("items", result.get("data", result if isinstance(result, list) else [])) if isinstance(result, dict) else (result if isinstance(result, list) else [])
|
|
289
|
+
if output == "json":
|
|
290
|
+
print_json(items)
|
|
291
|
+
else:
|
|
292
|
+
print_table(items, columns=[("ID", "id"), ("Name", "name")], limit=limit)
|
|
293
|
+
|
|
294
|
+
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import typer
|
|
3
|
+
from wxcli.auth import get_api
|
|
4
|
+
from wxcli.errors import WebexError, handle_rest_error
|
|
5
|
+
from wxcli.output import print_table, print_json
|
|
6
|
+
from wxcli.config import resolve_org_id, get_cc_base_url, get_cc_org_id
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
app = typer.Typer(help="Manage Webex Contact Center cc-audio-files.")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@app.command("show")
|
|
13
|
+
def show(
|
|
14
|
+
id: str = typer.Argument(help="id"),
|
|
15
|
+
include_url: str = typer.Option(None, "--include-url", help="Indicates if the URL for downloading Audio Fileshould be inc"),
|
|
16
|
+
output: str = typer.Option("json", "--output", "-o", help="Output format: table|json"),
|
|
17
|
+
debug: bool = typer.Option(False, "--debug"),
|
|
18
|
+
):
|
|
19
|
+
"""Get specific Audio File by ID."""
|
|
20
|
+
api = get_api(debug=debug)
|
|
21
|
+
cc_base_url = get_cc_base_url()
|
|
22
|
+
orgid = get_cc_org_id(api.session)
|
|
23
|
+
url = f"{cc_base_url}/organization/{orgid}/audio-file/{id}"
|
|
24
|
+
params = {}
|
|
25
|
+
if include_url is not None:
|
|
26
|
+
params["includeUrl"] = include_url
|
|
27
|
+
try:
|
|
28
|
+
result = api.session.rest_get(url, params=params)
|
|
29
|
+
except WebexError as e:
|
|
30
|
+
handle_rest_error(e)
|
|
31
|
+
if output == "json":
|
|
32
|
+
print_json(result)
|
|
33
|
+
else:
|
|
34
|
+
if isinstance(result, dict):
|
|
35
|
+
print_table([result], columns=[("Key", ""), ("Value", "")], limit=0)
|
|
36
|
+
elif isinstance(result, list):
|
|
37
|
+
print_table(result, columns=[("ID", "id"), ("Name", "name")], limit=0)
|
|
38
|
+
else:
|
|
39
|
+
print_json(result)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
@app.command("delete")
|
|
44
|
+
def delete(
|
|
45
|
+
id: str = typer.Argument(help="id"),
|
|
46
|
+
force: bool = typer.Option(False, "--force", help="Skip confirmation"),
|
|
47
|
+
debug: bool = typer.Option(False, "--debug"),
|
|
48
|
+
):
|
|
49
|
+
"""Delete specific Audio File by ID."""
|
|
50
|
+
if not force:
|
|
51
|
+
typer.confirm(f"Delete {id}?", abort=True)
|
|
52
|
+
api = get_api(debug=debug)
|
|
53
|
+
cc_base_url = get_cc_base_url()
|
|
54
|
+
orgid = get_cc_org_id(api.session)
|
|
55
|
+
url = f"{cc_base_url}/organization/{orgid}/audio-file/{id}"
|
|
56
|
+
try:
|
|
57
|
+
api.session.rest_delete(url)
|
|
58
|
+
except WebexError as e:
|
|
59
|
+
handle_rest_error(e)
|
|
60
|
+
typer.echo(f"Deleted: {id}")
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
@app.command("list")
|
|
65
|
+
def cmd_list(
|
|
66
|
+
id: str = typer.Argument(help="id"),
|
|
67
|
+
type_param: str = typer.Option(None, "--type", help="Entity type of the other entity that has a reference to this"),
|
|
68
|
+
page: str = typer.Option(None, "--page", help="Defines the number of displayed page. The page number starts"),
|
|
69
|
+
page_size: str = typer.Option(None, "--page-size", help="Defines the number of items to be displayed on a page. If th"),
|
|
70
|
+
output: str = typer.Option("table", "--output", "-o", help="Output format: table|json"),
|
|
71
|
+
limit: int = typer.Option(0, "--limit", help="Max results (0=all for paginated endpoints, API default for non-paginated)"),
|
|
72
|
+
offset: int = typer.Option(0, "--offset", help="Start offset"),
|
|
73
|
+
debug: bool = typer.Option(False, "--debug"),
|
|
74
|
+
):
|
|
75
|
+
"""List references for a specific Audio File."""
|
|
76
|
+
api = get_api(debug=debug)
|
|
77
|
+
cc_base_url = get_cc_base_url()
|
|
78
|
+
orgid = get_cc_org_id(api.session)
|
|
79
|
+
url = f"{cc_base_url}/organization/{orgid}/audio-file/{id}/incoming-references"
|
|
80
|
+
params = {}
|
|
81
|
+
if type_param is not None:
|
|
82
|
+
params["type"] = type_param
|
|
83
|
+
if page is not None:
|
|
84
|
+
params["page"] = page
|
|
85
|
+
if page_size is not None:
|
|
86
|
+
params["pageSize"] = page_size
|
|
87
|
+
if limit > 0:
|
|
88
|
+
params["max"] = limit
|
|
89
|
+
if offset > 0:
|
|
90
|
+
params["start"] = offset
|
|
91
|
+
result = None
|
|
92
|
+
try:
|
|
93
|
+
result = api.session.rest_get(url, params=params)
|
|
94
|
+
except WebexError as e:
|
|
95
|
+
handle_rest_error(e)
|
|
96
|
+
result = result or []
|
|
97
|
+
items = result.get("data", result.get("data", result if isinstance(result, list) else [])) if isinstance(result, dict) else (result if isinstance(result, list) else [])
|
|
98
|
+
if output == "json":
|
|
99
|
+
print_json(items)
|
|
100
|
+
else:
|
|
101
|
+
print_table(items, columns=[("ID", "id"), ("Name", "name")], limit=limit)
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
@app.command("list-audio-file")
|
|
106
|
+
def list_audio_file(
|
|
107
|
+
filter_param: str = typer.Option(None, "--filter", help="Specify a filter based on which the results will be fetched."),
|
|
108
|
+
attributes: str = typer.Option(None, "--attributes", help="Specify the attributes to be returned.Default all attributes"),
|
|
109
|
+
search: str = typer.Option(None, "--search", help="Filter data based on the search keyword.Supported search col"),
|
|
110
|
+
page: str = typer.Option(None, "--page", help="Defines the number of displayed page. The page number starts"),
|
|
111
|
+
page_size: str = typer.Option(None, "--page-size", help="Defines the number of items to be displayed on a page. If th"),
|
|
112
|
+
output: str = typer.Option("table", "--output", "-o", help="Output format: table|json"),
|
|
113
|
+
limit: int = typer.Option(0, "--limit", help="Max results (0=all for paginated endpoints, API default for non-paginated)"),
|
|
114
|
+
offset: int = typer.Option(0, "--offset", help="Start offset"),
|
|
115
|
+
debug: bool = typer.Option(False, "--debug"),
|
|
116
|
+
):
|
|
117
|
+
"""List Audio File(s)."""
|
|
118
|
+
api = get_api(debug=debug)
|
|
119
|
+
cc_base_url = get_cc_base_url()
|
|
120
|
+
orgid = get_cc_org_id(api.session)
|
|
121
|
+
url = f"{cc_base_url}/organization/{orgid}/v2/audio-file"
|
|
122
|
+
params = {}
|
|
123
|
+
if filter_param is not None:
|
|
124
|
+
params["filter"] = filter_param
|
|
125
|
+
if attributes is not None:
|
|
126
|
+
params["attributes"] = attributes
|
|
127
|
+
if search is not None:
|
|
128
|
+
params["search"] = search
|
|
129
|
+
if page is not None:
|
|
130
|
+
params["page"] = page
|
|
131
|
+
if page_size is not None:
|
|
132
|
+
params["pageSize"] = page_size
|
|
133
|
+
if limit > 0:
|
|
134
|
+
params["max"] = limit
|
|
135
|
+
if offset > 0:
|
|
136
|
+
params["start"] = offset
|
|
137
|
+
result = None
|
|
138
|
+
try:
|
|
139
|
+
result = api.session.rest_get(url, params=params)
|
|
140
|
+
except WebexError as e:
|
|
141
|
+
handle_rest_error(e)
|
|
142
|
+
result = result or []
|
|
143
|
+
items = result.get("data", result.get("data", result if isinstance(result, list) else [])) if isinstance(result, dict) else (result if isinstance(result, list) else [])
|
|
144
|
+
if output == "json":
|
|
145
|
+
print_json(items)
|
|
146
|
+
else:
|
|
147
|
+
print_table(items, columns=[("ID", "id"), ("Name", "name")], limit=limit)
|
|
148
|
+
|
|
149
|
+
|