From 7788dc09f92dc2d21f6519442c8af8306271e176 Mon Sep 17 00:00:00 2001 From: iGodly Date: Tue, 12 May 2026 01:08:19 +0300 Subject: [PATCH] fix: add Mailchimp documented shortcut aliases --- .../mailchimp/_codegen/generate.py | 16 ++++++++ .../mailchimp/commands/automations.py | 2 + .../cli_anything/mailchimp/commands/lists.py | 2 + .../mailchimp/commands/reports.py | 12 ++++++ .../cli_anything/mailchimp/tests/test_core.py | 41 +++++++++++++++++++ 5 files changed, 73 insertions(+) diff --git a/mailchimp/agent-harness/cli_anything/mailchimp/_codegen/generate.py b/mailchimp/agent-harness/cli_anything/mailchimp/_codegen/generate.py index 135c6424f..473f13951 100644 --- a/mailchimp/agent-harness/cli_anything/mailchimp/_codegen/generate.py +++ b/mailchimp/agent-harness/cli_anything/mailchimp/_codegen/generate.py @@ -346,8 +346,24 @@ def _generate_module(tag: str, operations: list[tuple[str, str, dict]]) -> str: body_parts.append('campaigns_group.add_command(_cmd_list_campaigns_id_content, "list-content")\n') if tag.lower() == "campaigns" and cmd_name == "list-campaigns-id-send-checklist": body_parts.append('campaigns_group.add_command(_cmd_list_campaigns_id_send_checklist, "list-send-checklist")\n') + if tag.lower() == "reports" and cmd_name == "list-reports-id-click-details": + body_parts.append('reports_group.add_command(_cmd_list_reports_id_click_details, "list-click-details")\n') + if tag.lower() == "reports" and cmd_name == "list-reports-id-domain-performance": + body_parts.append('reports_group.add_command(_cmd_list_reports_id_domain_performance, "list-domain-performance")\n') + if tag.lower() == "reports" and cmd_name == "list-reports-id-email-activity": + body_parts.append('reports_group.add_command(_cmd_list_reports_id_email_activity, "list-email-activity")\n') + if tag.lower() == "reports" and cmd_name == "list-reports-id-locations": + body_parts.append('reports_group.add_command(_cmd_list_reports_id_locations, "list-locations")\n') + if tag.lower() == "reports" and cmd_name == "list-reports-id-open-details": + body_parts.append('reports_group.add_command(_cmd_list_reports_id_open_details, "list-open-details")\n') + if tag.lower() == "reports" and cmd_name == "list-reports-id-unsubscribed": + body_parts.append('reports_group.add_command(_cmd_list_reports_id_unsubscribed, "list-unsubscribed")\n') + if tag.lower() == "automations" and cmd_name == "list-automations-id-emails": + body_parts.append('automations_group.add_command(_cmd_list_automations_id_emails, "list-emails")\n') if tag.lower() == "lists" and cmd_name == "create-lists-id-members": body_parts.append('lists_group.add_command(_cmd_create_lists_id_members, "create-members")\n') + if tag.lower() == "lists" and cmd_name == "list-preview-a-segment": + body_parts.append('lists_group.add_command(_cmd_list_preview_a_segment, "list-lists-id-segments")\n') return header + "\n".join(body_parts) diff --git a/mailchimp/agent-harness/cli_anything/mailchimp/commands/automations.py b/mailchimp/agent-harness/cli_anything/mailchimp/commands/automations.py index 5c5c89704..67407cfa4 100644 --- a/mailchimp/agent-harness/cli_anything/mailchimp/commands/automations.py +++ b/mailchimp/agent-harness/cli_anything/mailchimp/commands/automations.py @@ -191,6 +191,8 @@ def _cmd_list_automations_id_emails(ctx, workflow_id, extra_params): return _out(result) +automations_group.add_command(_cmd_list_automations_id_emails, "list-emails") + @automations_group.command("delete") @click.argument("WORKFLOW_ID") @click.argument("WORKFLOW_EMAIL_ID") diff --git a/mailchimp/agent-harness/cli_anything/mailchimp/commands/lists.py b/mailchimp/agent-harness/cli_anything/mailchimp/commands/lists.py index 739197540..02fadd0c6 100644 --- a/mailchimp/agent-harness/cli_anything/mailchimp/commands/lists.py +++ b/mailchimp/agent-harness/cli_anything/mailchimp/commands/lists.py @@ -1340,6 +1340,8 @@ def _cmd_list_preview_a_segment(ctx, list_id, fields, exclude_fields, count, off return _out(result) +lists_group.add_command(_cmd_list_preview_a_segment, "list-lists-id-segments") + @lists_group.command("create-lists-id-segments") @click.argument("LIST_ID") @click.option("--data", default=None, help="Request body as JSON string.") diff --git a/mailchimp/agent-harness/cli_anything/mailchimp/commands/reports.py b/mailchimp/agent-harness/cli_anything/mailchimp/commands/reports.py index 3d7f29e33..c63dd9a0d 100644 --- a/mailchimp/agent-harness/cli_anything/mailchimp/commands/reports.py +++ b/mailchimp/agent-harness/cli_anything/mailchimp/commands/reports.py @@ -195,6 +195,8 @@ def _cmd_list_reports_id_click_details(ctx, campaign_id, fields, exclude_fields, return _out(result) +reports_group.add_command(_cmd_list_reports_id_click_details, "list-click-details") + @reports_group.command("get-reports-id-click-details-id") @click.argument("CAMPAIGN_ID") @click.argument("LINK_ID") @@ -303,6 +305,8 @@ def _cmd_list_reports_id_domain_performance(ctx, campaign_id, fields, exclude_fi return _out(result) +reports_group.add_command(_cmd_list_reports_id_domain_performance, "list-domain-performance") + @reports_group.command("list-reports-id-ecommerce-product-activity") @click.argument("CAMPAIGN_ID") @click.option("--fields", "fields", default=None, help="A comma-separated list of fields to return. Reference parameters of sub-objects ") @@ -390,6 +394,8 @@ def _cmd_list_reports_id_email_activity(ctx, campaign_id, fields, exclude_fields return _out(result) +reports_group.add_command(_cmd_list_reports_id_email_activity, "list-email-activity") + @reports_group.command("get-reports-id-email-activity-id") @click.argument("CAMPAIGN_ID") @click.argument("SUBSCRIBER_HASH") @@ -447,6 +453,8 @@ def _cmd_list_reports_id_locations(ctx, campaign_id, fields, exclude_fields, cou return _out(result) +reports_group.add_command(_cmd_list_reports_id_locations, "list-locations") + @reports_group.command("list-reports-id-open-details") @click.argument("CAMPAIGN_ID") @click.option("--fields", "fields", default=None, help="A comma-separated list of fields to return. Reference parameters of sub-objects ") @@ -482,6 +490,8 @@ def _cmd_list_reports_id_open_details(ctx, campaign_id, fields, exclude_fields, return _out(result) +reports_group.add_command(_cmd_list_reports_id_open_details, "list-open-details") + @reports_group.command("get-reports-id-open-details-id-members-id") @click.argument("CAMPAIGN_ID") @click.argument("SUBSCRIBER_HASH") @@ -617,6 +627,8 @@ def _cmd_list_reports_id_unsubscribed(ctx, campaign_id, fields, exclude_fields, return _out(result) +reports_group.add_command(_cmd_list_reports_id_unsubscribed, "list-unsubscribed") + @reports_group.command("get-reports-id-unsubscribed-id") @click.argument("CAMPAIGN_ID") @click.argument("SUBSCRIBER_HASH") diff --git a/mailchimp/agent-harness/cli_anything/mailchimp/tests/test_core.py b/mailchimp/agent-harness/cli_anything/mailchimp/tests/test_core.py index 673a289bf..727856836 100644 --- a/mailchimp/agent-harness/cli_anything/mailchimp/tests/test_core.py +++ b/mailchimp/agent-harness/cli_anything/mailchimp/tests/test_core.py @@ -434,6 +434,47 @@ class TestGeneratedCommandsImport(unittest.TestCase): client.get.assert_any_call("/campaigns/campaign-1/content", params=None) client.get.assert_any_call("/campaigns/campaign-1/send-checklist", params=None) + def test_report_shortcut_aliases_match_generated_commands(self): + from click.testing import CliRunner + from cli_anything.mailchimp.commands.reports import reports_group + + client = MagicMock() + client.get.return_value = {"items": []} + + shortcuts = { + "list-email-activity": "/reports/campaign-1/email-activity", + "list-click-details": "/reports/campaign-1/click-details", + "list-open-details": "/reports/campaign-1/open-details", + "list-unsubscribed": "/reports/campaign-1/unsubscribed", + "list-locations": "/reports/campaign-1/locations", + "list-domain-performance": "/reports/campaign-1/domain-performance", + } + + with patch("cli_anything.mailchimp.core.client.get_client", return_value=client): + for command in shortcuts: + result = CliRunner().invoke(reports_group, [command, "campaign-1"]) + assert result.exit_code == 0, result.output + + for path in shortcuts.values(): + client.get.assert_any_call(path, params=None) + + def test_automation_and_segment_shortcut_aliases_match_generated_commands(self): + from click.testing import CliRunner + from cli_anything.mailchimp.commands.automations import automations_group + from cli_anything.mailchimp.commands.lists import lists_group + + client = MagicMock() + client.get.return_value = {"items": []} + + with patch("cli_anything.mailchimp.core.client.get_client", return_value=client): + emails = CliRunner().invoke(automations_group, ["list-emails", "workflow-1"]) + segments = CliRunner().invoke(lists_group, ["list-lists-id-segments", "list-1"]) + + assert emails.exit_code == 0, emails.output + assert segments.exit_code == 0, segments.output + client.get.assert_any_call("/automations/workflow-1/emails", params=None) + client.get.assert_any_call("/lists/list-1/segments", params=None) + def test_ping_group_invokes_health_check_without_list_subcommand(self): from click.testing import CliRunner from cli_anything.mailchimp.mailchimp_cli import cli