def best(monkey_id): """Make a monkey your best friend.""" monkey_self = dba.get_monkey_by_id(session['id']) monkey = dba.get_monkey_by_id(monkey_id) if not dba.set_best_friend(monkey_self, monkey): flash('Error setting best friend!') return redirect(request.referrer or url_for('index'))
def add(monkey_id): """Add a monkey to friends.""" monkey_self = dba.get_monkey_by_id(session['id']) monkey = dba.get_monkey_by_id(monkey_id) if not dba.add_friend(monkey_self, monkey): flash('Error adding friend!') return redirect(request.referrer or url_for('index'))
def profile(monkey_id): """Display a monkey's profile, own or not.""" monkey_self = dba.get_monkey_by_id(session['id']) if monkey_self is None: return redirect(url_for('index')) # This condition avoids running a second query when viewing own # profile: if monkey_id == session['id']: # Viewing your own profile monkey = monkey_self else: # Viewing somebody else's profile monkey = dba.get_monkey_by_id(monkey_id) if monkey: profile = dba.get_monkey_profile(monkey) else: # Non-existent id in the URL return redirect(url_for('index')) return render_template('profile.html', monkey=monkey, monkey_self=monkey_self, mutual_friends=profile['mutual_friends'], other_friends=profile['other_friends'], also_friend_of=profile['also_friend_of'])
def remove(monkey_id): """Remove a monkey from friends.""" monkey_self = dba.get_monkey_by_id(session['id']) monkey = dba.get_monkey_by_id(monkey_id) # Only a friend can be the best friend: if monkey is monkey_self.best_friend: if not dba.clear_best_friend(monkey_self): flash('Error clearing best friend!') if not dba.remove_friend(monkey_self, monkey): flash('Error removing friend!') return redirect(request.referrer or url_for('index'))
def list(order=None, page=1): """List all monkeys.""" # Handling unacceptable sort orders: if order is not None and order not in ['best_friend', 'friends']: return redirect(url_for('list')) # Counting pages: monkeys_per_page = 10 page_count = math.ceil(dba.count_monkeys() / monkeys_per_page) # At least one page must always be present: if page_count < 1: page_count = 1 # Handling unacceptable page numbers: if page < 1 or page > page_count: return redirect(url_for('list')) monkey_self = dba.get_monkey_by_id(session['id']) monkeys = dba.list_monkeys(order, page, monkeys_per_page) if monkey_self is None or monkeys is None: return redirect(url_for('index')) return render_template('list.html', monkeys=monkeys, monkey_self=monkey_self, order=order)
def delete(confirmed=None): """Delete monkey's profile.""" monkey_self = dba.get_monkey_by_id(session['id']) if monkey_self is None: return redirect(url_for('index')) if confirmed == 'confirmed': if dba.delete_monkey(monkey_self): # If deleted, log out: session.pop('id', None) flash('Profile deleted') return redirect(url_for('index')) else: flash('Error deleting profile!') return redirect(url_for('edit')) else: return render_template('delete.html', monkey_self=monkey_self)
def edit(): """Edit monkey's own profile.""" monkey_self = dba.get_monkey_by_id(session['id']) if monkey_self is None: return redirect(url_for('index')) # If no formdata is present in the request, the form is populated # from the object: form = ProfileEditForm(request.form, monkey_self) if request.method == 'POST' and form.validate(): # Check for email uniqueness by querying for another monkey # with the same address: if dba.check_unique_email(form['email'].data, monkey_self.id): # If no duplicate found: if dba.edit_monkey_profile(monkey_self, form): flash('Changes saved') else: flash('Error saving changes!') else: form.email.errors.append( 'This e-mail address is registered with another user') return render_template('edit.html', form=form, monkey_self=monkey_self)
def test_get_monkey_by_id(self, test_monkey): """Test get_monkey_by_id().""" monkey = test_monkey same_monkey = dba.get_monkey_by_id(monkey.id) assert isinstance(same_monkey, Monkey) assert same_monkey.id == monkey.id
def clear_best(): """Clear your best friend.""" monkey_self = dba.get_monkey_by_id(session['id']) if not dba.clear_best_friend(monkey_self): flash('Error clearing best friend!') return redirect(request.referrer or url_for('index'))
def index(): """Display the index page, logged in or not.""" monkey_self = None if 'id' in session: monkey_self = dba.get_monkey_by_id(session['id']) return render_template('index.html', monkey_self=monkey_self)