DataTalksClub / DataTalksClub/website
D1.2ca Send the remaining datamailer mail through the package mail app and retire the datamailer client
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
- 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 throughcommunity_base.mail.sendwith replay-safe keys
derived from the business objects the datamailer idempotency keys used. - 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_RESOLVERsuppresses 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. - Delete
course_management/datamailer*,course_management/datamailer_templates/,
course_management/email_templates.py, thecourse_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 migrationslists onlyemail_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
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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