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