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)
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
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)
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