Exemplo n.º 1
0
    def test_get_from_date_with_period(self):
        now = datetime.utcnow()
        past = now - relativedelta(days=1)

        period = Period(name=PERIOD.DAILY)
        from_date = Period.get_from_date(period, now)
        self.assertEqual(from_date, past)
Exemplo n.º 2
0
def test_get_from_date_with_period(session):
    now = datetime.utcnow()
    past = now - relativedelta(days=1)

    period = Period(name=PERIOD.DAILY)
    from_date = Period.get_from_date(period, now)
    assert from_date == past
Exemplo n.º 3
0
def send_update(period_name=None, user_id=None):
    period_name = request.args.get('period', period_name)
    user_id = request.args.get('user_id', user_id)

    period = Period.query.filter_by(name=period_name).first()
    if not period:
        abort(400)

    if user_id:
        users = []
        user = User.query.filter_by(id=user_id).first()
        users.append(user)
        if not users:
            abort(400)
    else:
        users = User.query.filter_by(active=True).all()

    app.logger.info(u'Running {0} update for {1} users'
                    .format(period, len(users)))

    emails = []
    subs = []
    now = datetime.utcnow()

    entries_from = Period.get_from_date(period, now)

    for user in users:
        email, sent_subs = subhandler.create_period_email(user, period, entries_from)
        if email:
            emails.append(email)
        if sent_subs:
            subs.extend(sent_subs)

    subhandler.send_emails(emails)
    subhandler.update_subscription_last_email_sent(subs, datetime.utcnow())

    db.session.commit()

    app.logger.info(u'Sent {0} {1} emails'.format(len(emails), period))

    return Response(status=200)
Exemplo n.º 4
0
    def send_update_email(cls, user_id: int, period_name: str) -> None:
        """
        Creates and sends a Periodic update email to a User.

        :param user_id: Id of user
        :param period_name: Name of period
        :return: None
        """
        period = Period.query.filter_by(name=period_name).first()
        if not period:
            app.logger.exception("No Period found with name %s", period_name)
            return

        entries_from = Period.get_from_date(period, datetime.utcnow())

        user = User.query.filter_by(id=user_id).first()
        if not user:
            app.logger.exception("No user found with Id %s", user_id)
            return

        mail_result = cls.create_period_email(user, period, entries_from)
        if not mail_result:
            app.logger.info("No %s Email created for User %s", period.name, user)
            return

        email, sent_subs = mail_result

        cls.send_email(email)
        # task_send_email.delay(email.msg)
        # email.sent_at = datetime.utcnow()
        db.session.add(email)

        cls.update_subscriptions_last_email_sent(sent_subs, datetime.utcnow())
        db.session.add_all(sent_subs)
        app.logger.info("Sent %s Email to %s", period, user)
        db.session.commit()
        return