def post(self, event_id, email):
     """
     Signup an email for the given event_id.
     """
     try:
         event = get_event_by_id(event_id)
         if not event:
             raise ErrEventNotFound
         db = get_db()
         db.execute("INSERT INTO signup(email, event_id) VALUES(?,?)",
                    (email, event_id))
         db.commit()
     except sqlite3.IntegrityError as e:
         if str(e).startswith('FOREIGN KEY'):
             raise ErrEventNotFound
         # UNIQUE constraint of primary key.
         raise ErrAlreadySignup
     try:
         notification = Notification(event=event, signup_email=email)
         notification.send_signup_email()
         notification.send_invitation()
     except Exception as e:
         current_app.logger.error(
             "failed to send signup (%s for %s(id=%d)) notification: %s",
             email, event['name'], event_id, e)
         raise ErrSignupMailFailure
     return {}, 201, {
         'Location': url_for('signup_emails_list', event_id=event_id)
     }
 def get(self):
     """
     List all events.
     """
     db = get_db()
     events = db.execute('SELECT id, name, start_time, end_time, location'
                         ' FROM event ORDER BY id DESC').fetchall()
     return events
def get_event_by_id(event_id):
    """
    Get a single event by its id.
    Return None if it's not found.
    """
    db = get_db()
    return db.execute(('SELECT id, name, start_time, end_time, location '
                       'FROM event WHERE id=?'), (event_id, )).fetchone()
 def delete(self, event_id, email):
     """
     Remove an email from the given event_id.
     """
     db = get_db()
     db.execute("DELETE FROM signup WHERE email=? AND event_id=?",
                (email, event_id))
     db.commit()
     return {}, 204
def get_signup(app, event_id, email):
    """
    Get a single event by its id.
    Return None if it's not found.
    """
    with app.app_context():
        db = get_db()
        return db.execute(('SELECT event_id, email '
                           'FROM signup WHERE event_id=? AND email=?'),
                          (event_id, email)).fetchone()
 def get(self, event_id):
     """
     List all emails signed up to the given event.
     """
     event = get_event_by_id(event_id)
     if not event:
         raise ErrEventNotFound
     db = get_db()
     emails = db.execute(('SELECT event_id, email FROM signup WHERE'
                          ' event_id=? ORDER BY email'),
                         (event_id, )).fetchall()
     return emails
def init_events():
    """Reset database and insert predefined data."""
    db = get_db()

    from emapp.db import init_db
    init_db()
    for event in current_app.config['PREDEFINED_EVENTS']:
        db.execute(('INSERT INTO event '
                    '(name, location, start_time, end_time)'
                    'VALUES (?,?,?,?)'),
                   (event['name'], event['location'], event['start_time'],
                    event['end_time']))
    db.commit()