def run(self): proposals = Proposal.query.\ filter(Proposal.state.in_(['reviewed'])).\ filter(Proposal.type.in_(['talk', 'workshop', 'youthworkshop'])).all() for proposal in proposals: send_email_for_proposal(proposal, reason="reserve-list", from_address=app.config['SPEAKERS_EMAIL'])
def run(self): proposals = Proposal.query.filter( (Proposal.potential_venue != None) | (Proposal.potential_time != None)).\ filter(Proposal.scheduled_duration.isnot(None)).\ filter(Proposal.state.in_(['accepted', 'finished'])).\ all() # noqa for proposal in proposals: user = proposal.user previously_unscheduled = True if proposal.scheduled_venue or proposal.scheduled_time: previously_unscheduled = False if proposal.potential_venue: proposal.scheduled_venue = proposal.potential_venue proposal.potential_venue = None if proposal.potential_time: proposal.scheduled_time = proposal.potential_time proposal.potential_time = None ok = False if previously_unscheduled: app.logger.info('Scheduling proposal "%s" by %s', proposal.title, user.email) ok = send_email_for_proposal(proposal, reason="scheduled", from_address=app.config['SPEAKERS_EMAIL']) else: app.logger.info('Moving proposal "%s" by %s', proposal.title, user.email) ok = send_email_for_proposal(proposal, reason="moved", from_address=app.config['SPEAKERS_EMAIL']) if ok: db.session.commit() else: raise Exception("Error when messaging user when applying schedule")
def run(self): proposals = Proposal.query.filter(Proposal.scheduled_duration.isnot(None)).\ filter(Proposal.state.in_(['accepted'])).\ filter(Proposal.type.in_(['talk', 'workshop', 'youthworkshop', 'performance'])).all() for proposal in proposals: send_email_for_proposal(proposal, reason="please-finalise", from_address=app.config['SPEAKERS_EMAIL'])
def run(self): proposals = Proposal.query.filter( (Proposal.potential_venue != None) | (Proposal.potential_time != None)).\ filter(Proposal.scheduled_duration.isnot(None)).\ filter(Proposal.state.in_(['accepted', 'finished'])).\ all() # noqa for proposal in proposals: user = proposal.user previously_unscheduled = True if proposal.scheduled_venue or proposal.scheduled_time: previously_unscheduled = False if proposal.potential_venue: proposal.scheduled_venue = proposal.potential_venue proposal.potential_venue = None if proposal.potential_time: proposal.scheduled_time = proposal.potential_time proposal.potential_time = None ok = False if previously_unscheduled: app.logger.info('Scheduling proposal "%s" by %s', proposal.title, user.email) ok = send_email_for_proposal(proposal, reason="scheduled", from_address=app.config['SPEAKERS_EMAIL']) else: app.logger.info('Moving proposal "%s" by %s', proposal.title, user.email) ok = send_email_for_proposal(proposal, reason="moved", from_address=app.config['SPEAKERS_EMAIL']) if ok: db.session.commit() else: raise Exception("Error when messaging user when applying schedule")
def run(self): proposals = Proposal.query.filter(Proposal.scheduled_duration.isnot(None)).\ filter(Proposal.state.in_(['accepted'])).\ filter(Proposal.type.in_(['talk', 'workshop', 'youthworkshop', 'performance'])).all() for proposal in proposals: send_email_for_proposal(proposal, reason="please-finalise", from_address=app.config['SPEAKERS_EMAIL'])
def run(self): proposals = Proposal.query.\ filter(Proposal.state.in_(['reviewed'])).\ filter(Proposal.type.in_(['talk', 'workshop', 'youthworkshop'])).all() for proposal in proposals: send_email_for_proposal(proposal, reason="reserve-list", from_address=app.config['SPEAKERS_EMAIL'])
def email_reserve(): """ Email speakers about reserve list """ proposals = (Proposal.query.filter(Proposal.state.in_([ "reviewed" ])).filter(Proposal.type.in_(["talk", "workshop", "youthworkshop"])).all()) for proposal in proposals: send_email_for_proposal(proposal, reason="reserve-list", from_address=app.config["SPEAKERS_EMAIL"])
def run(self): proposals = Proposal.query.filter(Proposal.state.in_(['reviewed'])).all() for proposal in proposals: proposal.set_state('rejected') proposal.has_rejected_email = True user = proposal.user app.logger.info('Emailing %s about rejecting proposal %s', user.email, proposal.title) send_email_for_proposal(proposal, reason="rejected") db.session.commit()
def apply_potential_schedule(email, type): app.logger.info(f"Apply schedule for {type} type(s)") if type == "all": query = Proposal.query elif type: query = Proposal.query.filter(Proposal.type == type) else: raise Exception("Set a type") proposals = ( query.filter((Proposal.potential_venue != None) # noqa: E711 | (Proposal.potential_time != None) # noqa: E711 ).filter(Proposal.scheduled_duration.isnot(None)).filter( Proposal.state.in_(["accepted", "finished"])).all()) app.logger.info(f"Got {len(proposals)} proposals") for proposal in proposals: user = proposal.user previously_unscheduled = True if proposal.scheduled_venue or proposal.scheduled_time: previously_unscheduled = False if proposal.potential_venue: proposal.scheduled_venue = proposal.potential_venue proposal.potential_venue = None if proposal.potential_time: proposal.scheduled_time = proposal.potential_time proposal.potential_time = None if previously_unscheduled: app.logger.info('Scheduling proposal "%s" by %s', proposal.title, user.email) if email: send_email_for_proposal( proposal, reason="scheduled", from_address=from_email("SPEAKERS_EMAIL"), ) else: app.logger.info('Moving proposal "%s" by %s', proposal.title, user.email) if email: send_email_for_proposal( proposal, reason="moved", from_address=from_email("SPEAKERS_EMAIL")) db.session.commit()
def run(self): proposals = Proposal.query.filter(Proposal.state.in_(['reviewed' ])).all() for proposal in proposals: proposal.set_state('rejected') proposal.has_rejected_email = True user = proposal.user app.logger.info('Emailing %s about rejecting proposal %s', user.email, proposal.title) send_email_for_proposal(proposal, reason="rejected") db.session.commit()
def email_finalise(): """ Email speakers about finalising their talk """ proposals = (Proposal.query.filter( Proposal.scheduled_duration.isnot(None)).filter( Proposal.state.in_(["accepted"])).filter( Proposal.type.in_( ["talk", "workshop", "youthworkshop", "performance"])).all()) for proposal in proposals: send_email_for_proposal( proposal, reason="please-finalise", from_address=app.config["SPEAKERS_EMAIL"], )
def email_check(): """Email speakers about their slot""" proposals = (Proposal.query.filter( Proposal.scheduled_duration.isnot(None)).filter( Proposal.state.in_(["accepted", "finished"])).filter( Proposal.type.in_( ["talk", "workshop", "youthworkshop", "performance"])).all()) for proposal in proposals: send_email_for_proposal( proposal, reason="check-your-slot", from_address=from_email("SPEAKERS_EMAIL"), )
def email_finalise(): """Email speakers about finalising their talk""" proposals = (Proposal.query.filter(Proposal.state.in_([ "accepted" ])).filter( Proposal.type.in_(["talk", "workshop", "youthworkshop", "performance"])).all()) for proposal in proposals: if not proposal.scheduled_duration: app.logger.info( "SKIPPING proposal %s due to lack of a scheduled duration. Set a duration!", proposal.id, ) continue send_email_for_proposal( proposal, reason="please-finalise", from_address=from_email("SPEAKERS_EMAIL"), )
def test_cfp(db, app, user, outbox, title, description, requirements): for c in ["\0", "\r", "\n"]: assume(c not in title) assume("\0" not in description) assume("\0" not in requirements) proposal = TalkProposal() proposal.title = title proposal.description = description proposal.requirements = requirements proposal.user = user db.session.add(proposal) db.session.commit() proposal.set_state('accepted') with app.test_request_context('/'): send_email_for_proposal(proposal, reason='accepted') assert len(outbox) == 1 del outbox[:]