Skip to main content

Shared enums and optional PostgreSQL helpers for email workflows

Project description

wr-common-lib

Shared enums and optional PostgreSQL helpers for the email table.

PyPI wr-common-lib
import wr_common_lib

Requires Python 3.12+.

Install

pip install wr-common-lib
pip install "wr-common-lib[db]"   # adds async-db-tools

Package layout

src/wr_common_lib/
├── __init__.py          # __version__
└── email/
    ├── __init__.py      # public exports
    ├── constants.py     # MailFlow, MailStatus
    ├── types.py         # OutboundTask, InboundTask
    └── db_oper.py       # EmailDbOper ([db] extra)

Enums

MailFlow and MailStatus are StrEnum values aligned with PostgreSQL mail_flow / mail_status.

from wr_common_lib.email import MailFlow, MailStatus

MailFlow.OUTBOUND
MailStatus.QUEUED.value   # use .value in raw SQL parameters
MailStatus.SENT.is_terminal

Status flows

Outbound (sender):   PENDING → QUEUED → SENT | FAILED
Outbound (webhook):  SENT → DELIVERED | BOUNCED | DEFERRED
Inbound:             RECEIVED → PARSED | PARSE_FAILED

EmailDbOper

Requires the [db] extra and a async-db-tools PostgresPool.

EmailDbOper is lazy-imported: from wr_common_lib.email import MailStatus does not require async-db-tools.

from wr_common_lib.email import EmailDbOper, MailStatus, OutboundTask

db_oper = EmailDbOper(pool)

# Outbound
email_id = await db_oper.mark_queued(task)
await db_oper.mark_sent(email_id)
await db_oper.mark_failed(email_id)

# Lookup
row = await db_oper.find_by_content_hash("...")

# Inbound
email_id = await db_oper.insert_inbound_received(task, content_hash)
await db_oper.mark_parsed(email_id, {"key": "value"})
await db_oper.mark_parse_failed(email_id)

Task dict fields

Outbound (mark_queued):

Field Required
imo, voyage_id, mail_from, to, content_hash yes
id no (update existing row)
cc, subject, content, attachments, created_user_id no

Inbound (insert_inbound_received):

Field Required
imo, voyage_id, mail_from, mail_to yes
mail_cc, subject, body_markdown, raw_text, attachments no
brevo_uuid, message_id, in_reply_to no (stored in parsed_data)

Inserts use ON CONFLICT (content_hash) for idempotent upserts.

Dependencies

install brings in
wr-common-lib
wr-common-lib[db] async-db-tools

Your application still owns the database URL and pool lifecycle.

Development

pip install -e ".[db]"

uv version 0.1.2          # bump before release
export UV_PUBLISH_TOKEN=pypi-...
uv build && uv publish

PyPI does not allow re-uploading the same version; always bump the version for a new release.

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wr_common_lib-0.1.2.tar.gz (4.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wr_common_lib-0.1.2-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file wr_common_lib-0.1.2.tar.gz.

File metadata

  • Download URL: wr_common_lib-0.1.2.tar.gz
  • Upload date:
  • Size: 4.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for wr_common_lib-0.1.2.tar.gz
Algorithm Hash digest
SHA256 8d3269b819f2bb0107b76b0e84e221fe4939709160eecb39ebb1ab4740718524
MD5 19bb0dd96e35b7903ee3cc059f8fc181
BLAKE2b-256 80f59ffdbc40285074665781cd771e433d2533382aa3855bb32747fd7267e327

See more details on using hashes here.

File details

Details for the file wr_common_lib-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: wr_common_lib-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 5.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for wr_common_lib-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 511ab3a9550c180e0a8a65cf38560d69bdd221f2ebdb6a9b0c5eb60813adfcfb
MD5 b98dcda18600b9fad7f2660f630838ac
BLAKE2b-256 15c5e0f02377c0a3463e1d5247def1ac95f82ea95a361a794c486446699d178e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page