def create_new_event(): c = Client(mock=False) id_network = request.args.get('id') user_id = current_user.id network = c.get_network(id_network) network_info = gather_network_info(id_network, user_id, c) if not network_info['user_is_member']: return render_template('network_create_event_post_not_member.html', curr_user_id=user_id, id_network=id_network, network_info=network_info, form=NetworkJoinForm()) network_title = network_info['network_title'] error_msg = None if request.method == 'GET': pass else: data = request.form form_submitted = CreateEventForm(request.form) if form_submitted.validate(): event_date = data['event_date'] title = data['title'] address_1 = data['address_1'] address_2 = data.get('address_2', None) country = data['country'] region = data.get('region', None) city = data.get('city', None) description = data['description'] event = { "id_network": id_network, "id_host": user_id, "event_date": event_date, "title": title, "address_1": address_1, "address_2": address_2, "country": country, "region": region, "city": city, "description": description } c.create_event(current_user, event) return redirect( url_for('networks.network_events') + "?id=%s" % str(id_network)) else: error_msg = "Oops. An error occurred. Did you enter all \ of the form fields correctly?" new_form = CreateEventForm() return render_template('network_create_event.html', curr_user_id=user_id, id_network=id_network, network_title=network_title, form=new_form, error_msg=error_msg)
def leave_event(): current_event_id = request.args.get('id') c = Client(mock=False) c.leave_event(current_user, current_event_id) return redirect( url_for('events.render_event', id=current_event_id) )
def test_autocomplete(): """ Test mock autocomplete. """ c = Client(mock=True) autocomplete_ = c.location_autocomplete("some text") print(autocomplete_)
def go_to_network(tries=0): c = Client(mock=False) form = GoToNetworkForm(request.form) if not form.validate(): raise CSRFError() curr_loc_query = request.form['curr_loc'] try: if request.form.get('language', None): networks = c.get_networks(1, near_location=curr_loc_query, language=request.form['language']) elif request.form.get('from_loc', None): networks = c.get_networks(1, near_location=curr_loc_query, from_location=request.form['from_loc']) else: abort(HTTPStatus.BAD_REQUEST) except requests.exceptions.ConnectionError as e: # Let's keep trying, but less agressively. if tries >= GO_TO_NETWORK_MAX_RETRIES: raise e time.sleep(GO_TO_NETWORK_WAIT_SECS) go_to_network(tries + 1) if len(networks) != 1: abort(HTTPStatus.INTERNAL_SERVER_ERROR) return redirect(url_for('networks.network', id=str(networks[0]['id'])))
def update_profile_and_render_home(): user_id = current_user.id c = Client(mock=False) data = request.form form = UserInfo(request.form) first_name = data['first_name'] last_name = data['last_name'] about_me = data['about_me'] if not about_me: about_me = "" user = { 'id': user_id, 'first_name': first_name, 'last_name': last_name, 'about_me': about_me } if form.validate(): c.update_user(current_user, user) user = c.get_user(user_id) if user is None: return page_not_found("") user['img_url'] = get_user_image_url(current_user) user_info_form = UserInfo() user_info_form.first_name.process_data(user['first_name']) user_info_form.last_name.process_data(user['last_name']) user_info_form.about_me.process_data(user['about_me']) return render_template('account.html', user=user, user_info_form=user_info_form)
def register(): if current_user and current_user.is_authenticated: return redirect(url_for('home')) def make_register_page_tmpl(message, data_=None): return render_template('register.html', msg=message, privacy_msg=PRIVACY_MSG, form=RegisterForm(data=data_)) if request.method == 'POST': form = RegisterForm(request.form) firstname = request.form['firstname'].strip() lastname = request.form['lastname'].strip() username = request.form["username"].strip() email = request.form["email"].strip() password = request.form["password"].strip() confirm_password = request.form["confirm_password"].strip() data = { 'firstname': firstname, 'lastname': lastname, 'username': username, 'email': email, 'password': '', 'confirm_password': '' } if not form.validate(): return make_register_page_tmpl(REGISTER_ERROR_MSG, data) c = Client(mock=False) if password != confirm_password: return make_register_page_tmpl(REGISTER_PASSWORDS_DONT_MATCH_MSG, data) user = { 'username': username, 'password': password, 'first_name': firstname, 'last_name': lastname, 'email': email, 'role': '0', 'about_me': '', 'gender': '', 'act_code': 'NULL' # TODO: what to do here? } try: c.create_user(user) except werkzeug.exceptions.BadRequest: return make_register_page_tmpl(REGISTER_UPSTREAM_ERROR_MSG, data) return attempt_login(c, username, password) else: return make_register_page_tmpl(REGISTER_MSG)
def test_get_network(): """ Tests we can retrieve a network. For illustrative purposes, client returns mock data. """ c = Client(mock=True) network = c.get_network(1) assert_true(network is not None)
def test_autocomplete(): """ Basic mock autocomplete functionality. """ c = Client(mock=True) autocomplete_ = c.language_autocomplete("some text") print(autocomplete_) assert_equal(autocomplete_, "some text + [language autocompleted text]")
def test_get_post(): """ Tests we can get a single post. """ c = Client(mock=True) post = c.get_post(4) print(post) assert_equal(post['vid_link'], "https://www.lorempixel.com/1016/295")
def cancel_event(): current_event_id = request.args.get('id') c = Client(mock=False) event = c.get_event(current_event_id) # The current user should only be able to cancel an event if they # are the host of that event. if str(current_user.id) == str(event['id_host']): c.delete_event(current_user, current_event_id) return redirect(url_for('user_home.render_user_home'))
def test_language(): """ Basic functionality of retrieving a mock language. """ c = Client(mock=True) lang1 = c.get_language(2) print(lang1) assert_true(lang1) assert_equal(lang1['name'], "entish")
def test_get_user(): """ Tests we can retrieve a user. The client returns dummy data. """ c = Client(mock=True) # Here, we want to mock the client. user = c.get_user(3) print(user) assert_true(user is not None)
def create_new_post(): c = Client(mock=False) id_network = request.args.get('id') user_id = current_user.id network = c.get_network(id_network) network_info = gather_network_info(id_network, user_id, c) if not network_info['user_is_member']: return render_template( 'network_create_event_post_not_member.html', curr_user_id=user_id, id_network=id_network, network_info=network_info, form=NetworkJoinForm() ) network_title = network_info['network_title'] error_msg = None if request.method == 'GET': pass else: data = request.form form_submitted = CreatePostForm(request.form) if form_submitted.validate(): post_text = data['post_content'] post = { 'id_user': user_id, 'id_network': id_network, 'post_text': post_text, 'vid_link': "", 'img_link': "" } c.create_post(current_user, post) return redirect( url_for('networks.network_posts') + "?id=%s" % str(id_network) ) else: error_msg = "Oops. An error ocurred. Did you forget to add text to your \ post before submitting?" new_form = CreatePostForm() return render_template( 'network_create_post.html', curr_user_id=user_id, id_network=id_network, network_title=network_title, form=new_form, error_msg=error_msg )
def join_network(): id_network = request.args.get('id') id_user = current_user.id form = NetworkJoinForm(request.form) c = Client(mock=False) if form.validate(): c.join_network(current_user, id_network) network_info = gather_network_info(id_network, id_user, c, "join") return render_template( 'network.html', network_info=network_info, form=NetworkJoinForm() )
def test_get_region(): """ Basic get region API routine. """ c = Client(mock=True) region1 = c.get_region(2) region2 = c.get_region(5) assert_true(region1 is not None) assert_equal(region1['name'], "south") assert_equal(region1['country_name'], 'corneria') print(region1) assert_true(region2 is None)
def render_post(): current_post_id = safe_get_query_arg(request, 'id') user_id = current_user.id c = Client(mock=False) post = c.get_post(current_post_id) post['network_title'] = get_network_title(c.get_network( post['id_network'])) post['username'] = c.get_user(post["id_user"])["username"] post['time_ago'] = get_time_ago(post['post_date']) # NOTE: this will not show more than the latest 100 replies replies = c.get_post_replies(post["id"], NUM_REPLIES_TO_SHOW) replies = sorted(replies, key=lambda x: int(x['id'])) error_msg = None for reply in replies: reply['username'] = c.get_user(reply["id_user"])["username"] reply['time_ago'] = get_time_ago(reply['reply_date']) if request.method == 'GET': pass else: data = request.form form_submitted = CreatePostReplyForm(request.form) if form_submitted.validate(): post_reply_content = data['post_reply_content'] reply = { 'id_parent': current_post_id, 'id_user': user_id, 'id_network': post['id_network'], 'reply_text': post_reply_content } c.create_post_reply(current_user, current_post_id, reply) return redirect( url_for('posts.render_post') + "?id=%s" % str(current_post_id)) else: error_msg = "Oops. An error occurred. Did you forget to type a reply \ before submitting?" new_form = CreatePostReplyForm() return render_template('post.html', post=post, replies=replies, num_replies=len(replies), curr_user_id=user_id, form=new_form, error_msg=error_msg)
def test_get_event(): """ Tests we can get a single event. """ c = Client(mock=True) event1 = c.get_event(2) event2 = c.get_event(0) print(event1) assert_true(event1 is not None) assert_equal(event1['title'], "Reverse-engineered 6thgeneration neural-net") assert_true(event2 is None)
def test_get_events(): """ Tests we can retrieve events related to a user. The client returns dummy data. """ c = Client(mock=True) events = c.get_user_events(user_id=5, role="hosting", count=3) print(events) assert_equal(len(events), 2) assert_true(events[0]['id'] > events[1]['id']) events1 = c.get_user_events(user_id=5, role="hosting", count=2, max_id=3) assert_equal(len(events1), 1) assert_equal(len(c.get_user_events(user_id=1, role="hosting", count=5)), 0)
def test_get_country(): """ Basic get country API routine. """ c = Client(mock=True) country1 = c.get_country(2) country2 = c.get_country(5) assert_true(country1 is not None) assert_equal(country1['name'], "rohan") print(country1) assert_equal(country1['latitude'], 100.100) assert_true(country2 is None)
def test_get_networks(): """ Tests basic network retrieval pagination. For illustrative purposes, client returns mock data. """ c = Client(mock=True) networks = c.get_networks(10) assert_equal(len(networks), 2) networks1 = c.get_networks(1) assert_equal(networks1[0]['id'], 2) assert_equal(len(networks1), 1) networks2 = c.get_networks(1, max_id=1) assert_equal(networks2[0]['id'], 1) assert_equal(len(networks2), 1)
def test_get_network_users(): """ Tests we can retrieve a network's users (network registrations). For illustrative purposes, client returns mock data. """ c = Client(mock=True) registrations = c.get_network_users(2, 10) assert_true(len(registrations) == 3) registrations1 = c.get_network_users(2, 1) assert_equal(registrations1[0]['join_date'], "2017-02-27 11:53:30") assert_equal(len(registrations1), 1) registrations2 = c.get_network_users(2, 1, max_id="2017-02-28 11:53:30") assert_equal(registrations2[0]['join_date'], "2017-02-27 11:53:30") assert_equal(len(registrations2), 1)
def test_get_network_events(): """ Tests we can retrieve a network's events. For illustrative purposes, client returns mock data. """ c = Client(mock=True) events = c.get_network_events(1, 10) assert_true(len(events) == 2) events1 = c.get_network_events(1, 1) assert_equal(events1[0]['id'], 3) assert_equal(len(events1), 1) events2 = c.get_network_events(1, 1, max_id=3) assert_equal(events2[0]['id'], 3) assert_equal(len(events2), 1)
def cancel_event_confirm(): current_event_id = request.args.get('id') c = Client(mock=False) event = c.get_event(current_event_id) network = c.get_network(event['id_network']) network_info = gather_network_info(network['id'], current_user.id, c) # The current user should only be able to cancel an event if they # are the host of that event. if not str(current_user.id) == str(event['id_host']): return redirect(url_for('user_home')) return render_template('event_cancel.html', network_info=network_info, event=event, form=EventCancelConfirmForm())
def test_get_posts(): """ Tests user posts with paginated calls. The client returns dummy data. """ c = Client(mock=True) posts = c.get_user_posts(user_id=4, count=2) print(posts) assert_equal(len(posts), 2) posts2 = c.get_user_posts(user_id=4, count=2, max_id=2) print(posts2) assert_equal(len(posts2), 1) posts = c.get_user_posts(user_id=4, count=1) print(posts) assert_equal(len(posts), 1) assert_equal(posts[0]['id'], 5)
def user_profile(user_id): c = Client(mock=False) user = c.get_user(user_id) user['img_url'] = get_user_image_url(user) user_networks = c.get_user_networks(user_id, MAX_NETWORKS_TO_LOAD) networks = [] for network in user_networks: network_ = {'id': network['id']} network_['title'] = get_network_title(network) network_['join_date'] = get_short_network_join_date(network) num_users = c.get_network_user_count(network['id'])['user_count'] network_['user_count'] = num_users networks.append(network_) return render_template('profile.html', user=user, networks=networks)
def test_get_users(): """ Tests basic user pagination. """ c = Client(mock=True) users1 = c.get_users(3) assert_equal(len(users1), 3) assert_equal(users1[0]['id'], 5) min_id_got = min(u['id'] for u in users1) users2 = c.get_users(3, max_id=min_id_got - 1) assert_equal(len(users2), 2) assert_equal(users2[0]['id'], 2) users3 = c.get_users(3, 1) assert_equal(len(users3), 1)
def test_get_post_replies(): """ Tests that we can get post replies as expected. """ c = Client(mock=True) posts1 = c.get_post_replies(1, count=5) posts2 = c.get_post_replies(2, count=5) print(posts1) posts3 = c.get_post_replies(1, count=1) posts4 = c.get_post_replies(1, count=3, max_id=1) assert_equal(len(posts1), 2) assert_equal(len(posts2), 0) assert_equal(len(posts3), 1) assert_equal(posts3[0]['id'], 2) assert_equal(len(posts4), 1) assert_equal(posts4[0]['id'], 1)
def test_get_city(): """ Basic get city API routine. """ c = Client(mock=True) city1 = c.get_city(2) city2 = c.get_city(4) city3 = c.get_city(0) assert_true(city1 is not None) assert_equal(city1['name'], "City B") assert_equal(city1['population'], 100000) assert_true(city2 is not None) assert_equal(city2['name'], "City D") assert_equal(city2['population'], 280) print(city2) assert_true(city3 is None)
def render_login_page(): if request.method == 'POST': if not LoginForm(request.form).validate(): return render_template('login.html', msg=LOGIN_ERROR, form=LoginForm()) email_or_username = request.form['email_or_username'] password = request.form['password'] return attempt_login(Client(mock=False), email_or_username, password) else: return render_template('login.html', msg=LOGIN_MSG, form=LoginForm())
def test_event_attendance(): """ Tests the basic event attendance API call. """ c = Client(mock=True) list1 = c.get_event_registration_list(1, 2) list2 = c.get_event_registration_list(2, 2) print(list1) print(list2) assert_true(list1 is not None) assert_equal(list1[0]['id_guest'], 1) assert_equal(len(list2), 2) list3 = c.get_event_registration_list(2, 3, "2017-12-10 08:53:43") print(list3) assert_equal(len(list3), 1) assert_equal(list3[0]['id_guest'], 3)