diff --git a/make_post_sell/lib/digest_sender.py b/make_post_sell/lib/digest_sender.py
index 47d617a..e6804f0 100644
--- a/make_post_sell/lib/digest_sender.py
+++ b/make_post_sell/lib/digest_sender.py
@@ -2,12 +2,14 @@
Console script to send email digests to shop subscribers.
Usage:
+ digest_sender data/development.ini --frequency immediate
digest_sender data/development.ini --frequency daily
digest_sender data/development.ini --frequency weekly --dry-run
Cron setup:
- 0 8 * * * /path/to/env/bin/digest_sender /path/to/production.ini --frequency daily
- 0 8 * * 1 /path/to/env/bin/digest_sender /path/to/production.ini --frequency weekly
+ */5 * * * * /path/to/env/bin/digest_sender /path/to/production.ini --frequency immediate
+ 0 8 * * * /path/to/env/bin/digest_sender /path/to/production.ini --frequency daily
+ 0 8 * * 1 /path/to/env/bin/digest_sender /path/to/production.ini --frequency weekly
"""
import argparse
@@ -22,6 +24,7 @@ from ..models.product import Product
from ..models.shop_subscription import (
FREQUENCY_DAILY,
FREQUENCY_WEEKLY,
+ FREQUENCY_IMMEDIATE,
get_verified_subscriptions_for_shop,
)
from .mail import send_email
@@ -37,7 +40,7 @@ def parse_args(argv):
p.add_argument("config_uri", help="Pyramid config file, e.g. development.ini")
p.add_argument(
"--frequency",
- choices=["daily", "weekly"],
+ choices=["immediate", "daily", "weekly"],
required=True,
help="Which frequency of subscribers to process",
)
@@ -95,7 +98,12 @@ def build_digest_html(shop_name, items, unsubscribe_url, get_endpoint=""):
def run(env, frequency_str, dry_run=False):
"""Process all shops and send digests."""
- frequency = FREQUENCY_DAILY if frequency_str == "daily" else FREQUENCY_WEEKLY
+ freq_map = {
+ "immediate": FREQUENCY_IMMEDIATE,
+ "daily": FREQUENCY_DAILY,
+ "weekly": FREQUENCY_WEEKLY,
+ }
+ frequency = freq_map.get(frequency_str, FREQUENCY_DAILY)
request = env["request"]
dbsession = request.dbsession
settings = request.registry.settings
diff --git a/make_post_sell/models/shop_subscription.py b/make_post_sell/models/shop_subscription.py
index 21f7cdc..fb10039 100644
--- a/make_post_sell/models/shop_subscription.py
+++ b/make_post_sell/models/shop_subscription.py
@@ -13,10 +13,12 @@ from .meta import (
FREQUENCY_DAILY = 0
FREQUENCY_WEEKLY = 1
+FREQUENCY_IMMEDIATE = 2
FREQUENCY_HUMAN = {
FREQUENCY_DAILY: "Daily",
FREQUENCY_WEEKLY: "Weekly",
+ FREQUENCY_IMMEDIATE: "Immediate",
}
@@ -27,7 +29,7 @@ class ShopSubscription(RBase, Base):
shop_id = Column(UUIDType, foreign_key("Shop", "id"), nullable=False, index=True)
user_id = Column(UUIDType, foreign_key("User", "id"), nullable=True, index=True)
email = Column(Unicode(64), nullable=False)
- frequency = Column(Integer, nullable=False, default=FREQUENCY_WEEKLY)
+ frequency = Column(Integer, nullable=False, default=FREQUENCY_DAILY)
verified = Column(Boolean, nullable=False, default=False)
unsubscribe_token = Column(Unicode(64), nullable=False, unique=True)
verify_token = Column(Unicode(64), nullable=True)
@@ -40,7 +42,7 @@ class ShopSubscription(RBase, Base):
self.email = email
self.shop_id = shop_id
self.user_id = user_id
- self.frequency = FREQUENCY_WEEKLY
+ self.frequency = FREQUENCY_DAILY
self.disabled = False
self.unsubscribe_token = secrets.token_urlsafe(32)
self.created_timestamp = now_timestamp()
@@ -56,7 +58,7 @@ class ShopSubscription(RBase, Base):
@property
def human_frequency(self):
- return FREQUENCY_HUMAN.get(self.frequency, "Weekly")
+ return FREQUENCY_HUMAN.get(self.frequency, "Daily")
def get_subscription_for_email_and_shop(dbsession, email, shop_id):
diff --git a/make_post_sell/templates/subscribe.j2 b/make_post_sell/templates/subscribe.j2
index ad21517..1897234 100644
--- a/make_post_sell/templates/subscribe.j2
+++ b/make_post_sell/templates/subscribe.j2
@@ -111,12 +111,15 @@
-
-
+
+
-
+
+
+
+
diff --git a/make_post_sell/tests/test_models.py b/make_post_sell/tests/test_models.py
index 2d9481d..0d2f038 100644
--- a/make_post_sell/tests/test_models.py
+++ b/make_post_sell/tests/test_models.py
@@ -2548,12 +2548,12 @@ class TestShopSubscription(unittest.TestCase):
self.assertNotEqual(sub1.unsubscribe_token, sub2.unsubscribe_token)
self.assertNotEqual(sub1.verify_token, sub2.verify_token)
- def test_default_frequency_weekly(self):
- """Test that default frequency is weekly."""
- from ..models.shop_subscription import ShopSubscription, FREQUENCY_WEEKLY
+ def test_default_frequency_daily(self):
+ """Test that default frequency is daily."""
+ from ..models.shop_subscription import ShopSubscription, FREQUENCY_DAILY
sub = ShopSubscription("test@example.com", self.shop.id)
- self.assertEqual(sub.frequency, FREQUENCY_WEEKLY)
+ self.assertEqual(sub.frequency, FREQUENCY_DAILY)
def test_human_frequency(self):
"""Test human_frequency property."""
diff --git a/make_post_sell/views/subscribe.py b/make_post_sell/views/subscribe.py
index 1b62065..c680dda 100644
--- a/make_post_sell/views/subscribe.py
+++ b/make_post_sell/views/subscribe.py
@@ -7,6 +7,7 @@ from ..models.shop_subscription import (
ShopSubscription,
FREQUENCY_DAILY,
FREQUENCY_WEEKLY,
+ FREQUENCY_IMMEDIATE,
get_subscription_for_email_and_shop,
get_subscription_by_unsubscribe_token,
get_subscription_by_verify_token,
@@ -45,17 +46,17 @@ def subscribe(request):
)
if request.method == "POST":
- frequency_str = request.params.get("frequency", "1")
+ frequency_str = request.params.get("frequency", "0")
try:
frequency = int(frequency_str)
except (ValueError, TypeError):
- frequency = FREQUENCY_WEEKLY
+ frequency = FREQUENCY_DAILY
# frequency -1 means "None" — disable notifications
wants_unsubscribe = frequency == -1
- if frequency not in (FREQUENCY_DAILY, FREQUENCY_WEEKLY):
- frequency = FREQUENCY_WEEKLY
+ if frequency not in (FREQUENCY_DAILY, FREQUENCY_WEEKLY, FREQUENCY_IMMEDIATE):
+ frequency = FREQUENCY_DAILY
if request.user and request.user.authenticated:
# Logged-in user: one-click subscribe