Ejemplo n.º 1
0
    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'])
Ejemplo n.º 2
0
    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")
Ejemplo n.º 3
0
    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'])
Ejemplo n.º 4
0
    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")
Ejemplo n.º 5
0
    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'])
Ejemplo n.º 6
0
    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'])
Ejemplo n.º 7
0
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"])
Ejemplo n.º 8
0
    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()
Ejemplo n.º 9
0
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()
Ejemplo n.º 10
0
    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()
Ejemplo n.º 11
0
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"],
        )
Ejemplo n.º 12
0
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"),
        )
Ejemplo n.º 13
0
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"),
        )
Ejemplo n.º 14
0
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[:]