DataTalksClub / DataTalksClub/website

D1.2ca Send the remaining datamailer mail through the package mail app and retire the datamailer client

Open
#409 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
0
Forks
0
PR merge metrics
No merged PRs in 30d

Description

Plan issue D1.2ca, phase 1 of the community-base unification plan.

Spec: docs/plan/phase-1.md, section D1.2ca, in DataTalksClub/community-base. Status is tracked in docs/plan/STATUS.md there, which stays the source of truth.

Depends on: D1.2b. Do not start until every one of them is done in STATUS.md.

Currently blocked in STATUS.md: website#372 branch issue-372 gates green; dev deploy blocked on a fully green main CI run (website#345: the corpus-bound django test clusters are fixed, merged as website fc534fcf; the Playwright lane remains in flight); worker self-check IAM grant merged as aws-infra 3acefe43 but not yet effective: the protected development apply is blocked on the sandbox-account trust-policy bootstrap (aws-infra#56)

Process

This repository's AGENTS.md and _docs/PROCESS.md govern this work, with _docs/specs/ as the product authority. The plan says what to build and how to verify it; the site process says how work is done here.

Spec

Repository: DataTalksClub/website. Depends on: D1.2b. Split from the combined retirement issue for one-landing scoping.

Steps

  1. Commit the remaining datamailer purposes as templates in email_templates/ (homework
    submission confirmation, homework score notification, project score notification, peer
    review assignment) and send them through community_base.mail.send with replay-safe keys
    derived from the business objects the datamailer idempotency keys used.
  2. Replace the remote datamailer preference store: the three category opt-outs become fields
    on the site user, the account email-preferences page reads and writes them, and the site
    MAIL_PREFERENCE_RESOLVER suppresses on an explicit opt-out (unset and userless sends
    stay allowed; Relay-side global unsubscribe still applies). Provide a command that imports
    opt-outs from a datamailer preferences export; the production import is an operator step
    before the D1.3 freeze.
  3. Delete course_management/datamailer*, course_management/datamailer_templates/,
    course_management/email_templates.py, the course_management/datamailer_outbox_*
    modules, the datamailer campaign/status/audit/sync management commands, the studio
    datamailer views and their URL entries, the datamailer send-audits API view and the
    datamailer webhook route. Studio email pages come from the package.

Verification

  • grep -rln datamailer --include=*.py . | grep -v migrations lists only email_app/ and
    data/ remnants.
  • manage.py check, makemigrations --check --dry-run, ruff check/format, mypy; the
    affected Django suites pass.

Done when

  • no product code path contacts the datamailer; every send goes through the package

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

First confirm D1.2b is done in docs/plan/STATUS.md, then read docs/plan/phase-1.md section D1.2ca, AGENTS.md, _docs/PROCESS.md, and _docs/specs/. Trace the named email_templates/, community_base.mail.send, preference page and MAIL_PREFERENCE_RESOLVER entry points; verify with the listed grep, manage.py checks, lint/type checks, and affected Django suites that no product path contacts datamailer.

Written by the indexing model from the issue text.

Assessment

Tech stack
django, python
Domain
backend
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.