refactor(campaign): restore route docstrings
This commit is contained in:
@@ -1631,14 +1631,14 @@ def fork_version_for_edit(
|
|||||||
session: Session = Depends(get_session),
|
session: Session = Depends(get_session),
|
||||||
principal: ApiPrincipal = Depends(require_scope("campaigns:campaign:copy")),
|
principal: ApiPrincipal = Depends(require_scope("campaigns:campaign:copy")),
|
||||||
):
|
):
|
||||||
_get_campaign_for_principal(session, campaign_id, principal, write=True)
|
|
||||||
_require_permission(principal, "campaigns:recipient:read")
|
|
||||||
"""Create the campaign's next and only editable working version.
|
"""Create the campaign's next and only editable working version.
|
||||||
|
|
||||||
A new working copy may be created only after the current version is
|
A new working copy may be created only after the current version is
|
||||||
permanently user-locked or delivery-final. Validation and temporary user
|
permanently user-locked or delivery-final. Validation and temporary user
|
||||||
locks must be removed in place instead of creating parallel drafts.
|
locks must be removed in place instead of creating parallel drafts.
|
||||||
"""
|
"""
|
||||||
|
_get_campaign_for_principal(session, campaign_id, principal, write=True)
|
||||||
|
_require_permission(principal, "campaigns:recipient:read")
|
||||||
|
|
||||||
payload = payload or CampaignVersionUpdateRequest()
|
payload = payload or CampaignVersionUpdateRequest()
|
||||||
source_version = _get_version_for_tenant(session, version_id, principal.tenant_id)
|
source_version = _get_version_for_tenant(session, version_id, principal.tenant_id)
|
||||||
@@ -1713,12 +1713,12 @@ def unlock_version_validation(
|
|||||||
session: Session = Depends(get_session),
|
session: Session = Depends(get_session),
|
||||||
principal: ApiPrincipal = Depends(require_scope("campaigns:campaign:update")),
|
principal: ApiPrincipal = Depends(require_scope("campaigns:campaign:update")),
|
||||||
):
|
):
|
||||||
_get_campaign_for_principal(session, campaign_id, principal, write=True)
|
|
||||||
"""Unlock a successfully validated version before delivery starts.
|
"""Unlock a successfully validated version before delivery starts.
|
||||||
|
|
||||||
Unlocking invalidates validation/build state and removes generated jobs for
|
Unlocking invalidates validation/build state and removes generated jobs for
|
||||||
that version. Sent/final versions cannot be unlocked and must be copied.
|
that version. Sent/final versions cannot be unlocked and must be copied.
|
||||||
"""
|
"""
|
||||||
|
_get_campaign_for_principal(session, campaign_id, principal, write=True)
|
||||||
|
|
||||||
return _campaign_version_detail_response(
|
return _campaign_version_detail_response(
|
||||||
session,
|
session,
|
||||||
@@ -3019,10 +3019,10 @@ def campaign_summary(
|
|||||||
session: Session = Depends(get_session),
|
session: Session = Depends(get_session),
|
||||||
principal: ApiPrincipal = Depends(require_scope("campaigns:campaign:read")),
|
principal: ApiPrincipal = Depends(require_scope("campaigns:campaign:read")),
|
||||||
):
|
):
|
||||||
|
"""Return dashboard-friendly campaign status counters and summaries."""
|
||||||
_get_campaign_for_principal(session, campaign_id, principal)
|
_get_campaign_for_principal(session, campaign_id, principal)
|
||||||
if include_jobs:
|
if include_jobs:
|
||||||
_require_permission(principal, "campaigns:recipient:read")
|
_require_permission(principal, "campaigns:recipient:read")
|
||||||
"""Return dashboard-friendly campaign status counters and summaries."""
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return generate_campaign_report(
|
return generate_campaign_report(
|
||||||
@@ -3046,9 +3046,9 @@ def campaign_report(
|
|||||||
session: Session = Depends(get_session),
|
session: Session = Depends(get_session),
|
||||||
principal: ApiPrincipal = Depends(require_scope("campaigns:report:read")),
|
principal: ApiPrincipal = Depends(require_scope("campaigns:report:read")),
|
||||||
):
|
):
|
||||||
|
"""Return the recipient-level JSON report for one campaign."""
|
||||||
_get_campaign_for_principal(session, campaign_id, principal)
|
_get_campaign_for_principal(session, campaign_id, principal)
|
||||||
_require_permission(principal, "campaigns:recipient:read")
|
_require_permission(principal, "campaigns:recipient:read")
|
||||||
"""Return the full JSON report for one campaign."""
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return generate_campaign_report(
|
return generate_campaign_report(
|
||||||
@@ -3071,9 +3071,9 @@ def campaign_jobs_csv(
|
|||||||
session: Session = Depends(get_session),
|
session: Session = Depends(get_session),
|
||||||
principal: ApiPrincipal = Depends(require_scope("campaigns:report:export")),
|
principal: ApiPrincipal = Depends(require_scope("campaigns:report:export")),
|
||||||
):
|
):
|
||||||
|
"""Export per-job campaign status as CSV."""
|
||||||
_get_campaign_for_principal(session, campaign_id, principal)
|
_get_campaign_for_principal(session, campaign_id, principal)
|
||||||
_require_permission(principal, "campaigns:recipient:export")
|
_require_permission(principal, "campaigns:recipient:export")
|
||||||
"""Export per-job campaign status as CSV."""
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
csv_text = generate_jobs_csv(
|
csv_text = generate_jobs_csv(
|
||||||
@@ -3101,6 +3101,7 @@ def email_campaign_report(
|
|||||||
session: Session = Depends(get_session),
|
session: Session = Depends(get_session),
|
||||||
principal: ApiPrincipal = Depends(require_scope("campaigns:report:send")),
|
principal: ApiPrincipal = Depends(require_scope("campaigns:report:send")),
|
||||||
):
|
):
|
||||||
|
"""Generate a campaign report and send it to one or more email addresses."""
|
||||||
campaign = _get_campaign_for_principal(session, campaign_id, principal)
|
campaign = _get_campaign_for_principal(session, campaign_id, principal)
|
||||||
_require_permission(principal, "campaigns:recipient:export")
|
_require_permission(principal, "campaigns:recipient:export")
|
||||||
selected_version_id = payload.version_id or campaign.current_version_id
|
selected_version_id = payload.version_id or campaign.current_version_id
|
||||||
@@ -3110,8 +3111,6 @@ def email_campaign_report(
|
|||||||
principal,
|
principal,
|
||||||
selected_version.raw_json if isinstance(selected_version.raw_json, dict) else {},
|
selected_version.raw_json if isinstance(selected_version.raw_json, dict) else {},
|
||||||
)
|
)
|
||||||
"""Generate a campaign report and send it to one or more email addresses."""
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
result = send_campaign_report_email(
|
result = send_campaign_report_email(
|
||||||
session,
|
session,
|
||||||
@@ -3498,14 +3497,14 @@ def mock_send_campaign(
|
|||||||
session: Session = Depends(get_session),
|
session: Session = Depends(get_session),
|
||||||
principal: ApiPrincipal = Depends(require_scope("campaigns:campaign:send_test")),
|
principal: ApiPrincipal = Depends(require_scope("campaigns:campaign:send_test")),
|
||||||
):
|
):
|
||||||
_get_campaign_for_principal(session, campaign_id, principal, write=True)
|
|
||||||
_require_permission(principal, "campaigns:recipient:read")
|
|
||||||
"""Run a fully visible mock delivery flow without mutating campaign state.
|
"""Run a fully visible mock delivery flow without mutating campaign state.
|
||||||
|
|
||||||
The route validates and builds the selected version, then optionally records
|
The route validates and builds the selected version, then optionally records
|
||||||
mock SMTP deliveries and mock IMAP appends. It never talks to the configured
|
mock SMTP deliveries and mock IMAP appends. It never talks to the configured
|
||||||
real SMTP/IMAP servers and it does not mark the version sent/final.
|
real SMTP/IMAP servers and it does not mark the version sent/final.
|
||||||
"""
|
"""
|
||||||
|
_get_campaign_for_principal(session, campaign_id, principal, write=True)
|
||||||
|
_require_permission(principal, "campaigns:recipient:read")
|
||||||
|
|
||||||
payload = payload or MockCampaignSendRequest()
|
payload = payload or MockCampaignSendRequest()
|
||||||
_require_campaign_profile_use_if_needed(session, principal, campaign_id, payload.version_id)
|
_require_campaign_profile_use_if_needed(session, principal, campaign_id, payload.version_id)
|
||||||
@@ -3550,9 +3549,9 @@ def send_campaign_now_endpoint(
|
|||||||
session: Session = Depends(get_session),
|
session: Session = Depends(get_session),
|
||||||
principal: ApiPrincipal = Depends(require_scope("campaigns:campaign:send")),
|
principal: ApiPrincipal = Depends(require_scope("campaigns:campaign:send")),
|
||||||
):
|
):
|
||||||
|
"""Preflight and synchronously send a policy-bounded built execution."""
|
||||||
_get_campaign_for_principal(session, campaign_id, principal, write=True)
|
_get_campaign_for_principal(session, campaign_id, principal, write=True)
|
||||||
_require_permission(principal, "campaigns:recipient:read")
|
_require_permission(principal, "campaigns:recipient:read")
|
||||||
"""Preflight and synchronously send a policy-bounded built execution."""
|
|
||||||
|
|
||||||
payload = payload or SendCampaignNowRequest()
|
payload = payload or SendCampaignNowRequest()
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user