def verify_user(connection, user_id, message): user = db_queries.get_user(connection, user_id) if not user: db_queries.add_user(connection, message) user = db_queries.get_user(connection, user_id) return get_user_dict(user)
def update_user_role(connection, user_id): db_user = get_user_dict(db_queries.get_user(connection, user_id)) points = count_points(db_user) if 'user' in db_user['role']: if points > 15: db_queries.update_parameter(connection, user_id, 'role', 'user1') elif points > 12: db_queries.update_parameter(connection, user_id, 'role', 'user2')
def on_new_user_page(data): """ new user """ print('received data from client ' + str(data['user_id'])) user = db_queries.get_user(data['user_id']) print(user['email']) socketio.emit('user page load', {'user': user})
def statistics(): text = db_queries.get_page_content('statistics') statistics = db_queries.get_users_statistics(current_user.primary_email, None) #get user id to pass to the template to build the link to the last correctly submitted exercise user_id = db_queries.get_user(current_user.primary_email).user_id link_dir = app.config['STORAGE_FOLDER'] return render_template("statistics.html", text=text, statistics=statistics, link_dir=link_dir, user_id=user_id)
def on_fork_page(data): """ on fork page """ recipe = db_queries.get_recipe(data["id"]) username = db_queries.get_user(recipe["user"])["name"] # namespace = "/recipe/" + str(id) recipe["name"] = username emit_recipe("load fork page", recipe)
def on_recipe_page(data): """ recipe page """ print('received data from client ' + str(data['id'])) recipe = db_queries.get_recipe(data['id']) client_id = flask.request.sid username = db_queries.get_user(recipe["user"])["name"] namespace = "/recipe/" + str(id) recipe['name'] = username emit_recipe(SEND_ONE_RECIPE_CHANNEL, recipe)
def delete_user(primary_email): #deletes a user and their profile user = db_queries.get_user(primary_email) #does not use the get_profile query to be sure it's the actual db #profile, and not the one stored in cache profile = models.Profile.query.get(user.user_id) statistics = models.Statistics.query.filter_by(profile_id=profile.profile_id).all() for s in statistics: db.session.delete(s) db.session.delete(profile) db.session.delete(user) db.session.commit()
def delete_user(primary_email): #deletes a user and their profile user = db_queries.get_user(primary_email) #does not use the get_profile query to be sure it's the actual db #profile, and not the one stored in cache profile = models.Profile.query.get(user.user_id) statistics = models.Statistics.query.filter_by( profile_id=profile.profile_id).all() for s in statistics: db.session.delete(s) db.session.delete(profile) db.session.delete(user) db.session.commit()
def emit_all_recipes(channel): """ emit all recipes """ recipes = db_queries.get_n_recipes(10) for recipe in recipes: user = db_queries.get_user(recipe["user"]) username = user['name'] recipe['name'] = username all_searches = recipes client_id = flask.request.sid socketio.emit(channel, { 'all_display': all_searches, }, room=client_id)
def process_message(bot, connection, message, markups, settings): answer_text = choice(const.other_answers) answer_markup = None user_id = str(message.from_user.id) user_text = message.text crimes = get_crimes(user_text) if user_text[1:] in const.commands: answer_text = const.commands[user_text[1:]] answer_markup = markups['Назад'] elif user_text in const.usually_answers.keys(): answer_text = get_answer(user_text) if user_text in markups.keys(): answer_markup = markups[user_text] if crimes: answer_text = const.bad_answer if connection: db_user = verify_user(connection, user_id, message) if user_text == 'Обо мне': answer_markup = get_user_markup(db_user) answer_text = 'Для редакирования данных нажмите на соответствующий параметр' elif user_text == 'Обо всех': answer_text = get_role_stat(connection, db_user['role']) elif ': ' in user_text: rus_parameter = user_text.split(':')[0] answer_text = f'Пожалуйста введите {rus_parameter.lower()}' if rus_parameter in markups.keys(): answer_markup = markups[rus_parameter] elif ': ' in db_user['last_message']: parameter = get_parameter(db_user['last_message']) if parameter and verify_user_parameter(parameter, user_text): db_queries.update_parameter(connection, user_id, parameter, user_text) answer_text = f'Ваш {db_user["last_message"].split(":")[0].lower()} был успешно сохранён.' answer_markup = get_user_markup(get_user_dict(db_queries.get_user(connection, user_id))) update_user_role(connection, user_id) else: answer_text = 'Параметр введён некорректно' db_queries.update_user(connection, user_id, user_text, db_user['num_messages']+1, db_user['crimes']+crimes) bot.send_message(user_id, answer_text, reply_markup=answer_markup, parse_mode=settings.parse_mode) print(get_log_text(message, datetime.now(), answer_text, crimes, settings))
def on_new_user_page(data): """ new user """ user = db_queries.get_user(data["user_id"]) saved_recipes = [] saved_recipes_id = user["saved_recipes"] for recipe_id in saved_recipes_id: recipe = db_queries.get_recipe(recipe_id) username = db_queries.get_user(recipe["user"])["name"] recipe["name"] = username saved_recipes.append(recipe) owned_recipes = [] owned_recipes_id = user["owned_recipes"] for recipe_id in owned_recipes_id: recipe = db_queries.get_recipe(recipe_id) username = db_queries.get_user(recipe["user"])["name"] recipe["name"] = username owned_recipes.append(recipe) favorite_recipes = [] favorite_recipes_id = user["favorite_recipes"] for recipe_id in favorite_recipes_id: recipe = db_queries.get_recipe(recipe_id) username = db_queries.get_user(recipe["user"])["name"] recipe["name"] = username favorite_recipes.append(recipe) socketio.emit( "user page load", { "user": user, "owned_recipes": owned_recipes, "saved_recipes": saved_recipes, "favorite_recipes": favorite_recipes, }, room=flask.request.sid, )
def on_new_search(data): """ search for recipe """ print("Got an event for new search input with data:", data) client_id = flask.request.sid search_filter = data['filter'] if search_filter == "name": search_query = db_queries.search_with_name(data['search']) if search_filter == "tag": search_query = db_queries.search_by_tag(data['search']) if search_filter == "difficulty": search_query = db_queries.search_by_difficulty(data['search']) for recipe in search_query: username = db_queries.get_user(recipe["user"])['name'] recipe['name'] = username socketio.emit(SEARCHES_RECEIVED_CHANNEL, {'search_output': search_query}, room=client_id)
def getPage(page, type): dbwrapper = db_queries.DBWrapper(type) user = db_queries.get_user(session["user_id"]) if user: devices_id, devices_dss = user["devices_id"], user["devices_dss"] dss_dict = {} # ???? else: # there is no such user in our db del session["user_id"] devices_id, devices_dss, dss_dict = [], [], {} # nothing to return first_comp_index = (int(page) - 1) * COMPUTERS_ON_PAGE last_comp_index = min(int(page) * COMPUTERS_ON_PAGE, len(devices_id)) devices_id_on_page = devices_id[first_comp_index:last_comp_index] devices_dss_on_page = devices_dss[first_comp_index:last_comp_index] pretty_devices = pretty_data.small_devices(devices_id_on_page, devices_dss_on_page, dbwrapper) resp = jsonify({"pretty_devices": pretty_devices}) resp.status_code = 200 return resp
def getPage(page, type): dbwrapper = db_queries.DBWrapper(type) user = db_queries.get_user(session['user_id']) if user: devices_id, devices_dss = user['devices_id'], user['devices_dss'] dss_dict = {} # ???? else: # there is no such user in our db del session['user_id'] devices_id, devices_dss, dss_dict = [], [], {} # nothing to return first_comp_index = (int(page) - 1) * COMPUTERS_ON_PAGE last_comp_index = min(int(page) * COMPUTERS_ON_PAGE, len(devices_id)) devices_id_on_page = devices_id[first_comp_index:last_comp_index] devices_dss_on_page = devices_dss[first_comp_index:last_comp_index] pretty_devices = pretty_data.small_devices(devices_id_on_page, devices_dss_on_page, dbwrapper) resp = jsonify({"pretty_devices": pretty_devices}) resp.status_code = 200 return resp
def on_recipe_page(data): """ recipe page """ recipe = db_queries.get_recipe(data["id"]) username = db_queries.get_user(recipe["user"])["name"] start_adding = False video_parsed = "" for video in recipe["videos"]: for character in video: if character == "=": start_adding = True continue if start_adding is True: video_parsed += character recipe["name"] = username emit_recipe(SEND_ONE_RECIPE_CHANNEL, recipe) if start_adding: # If there is a youtube video in the recipe socketio.emit("video available", video_parsed)
def on_new_search(data): """ search for recipe """ client_id = flask.request.sid search_filter = data["filter"] if search_filter == "name": search_query = db_queries.search_with_name(data["search"]) if search_filter == "tag": search_query = db_queries.search_by_tag(data["search"]) if search_filter == "difficulty": search_query = db_queries.search_by_difficulty(data["search"]) for recipe in search_query: username = db_queries.get_user(recipe["user"])["name"] recipe["name"] = username socketio.emit( SEARCHES_RECEIVED_CHANNEL, {"search_output": search_query}, room=client_id )
def on_new_google_user(data): """ login using google """ print("Got an event for new google user input with data:", data) user = db_queries.add_user(data) print("USER IS: " + str(user)) user_obj = db_queries.get_user(user) username = user_obj['name'] user_email = user_obj['email'] shopping_list = db_queries.get_shopping_list(user_obj["id"]) cart_num_items = len(shopping_list) print("THIS IS " + str(username)) socketio.emit( 'logged in', { 'username': username, 'email': user_email, 'cartNumItems': cart_num_items, })
def on_new_google_user(data): """ login using google """ user = db_queries.add_user(data) user_obj = db_queries.get_user(user) username = user_obj["name"] user_email = user_obj["email"] client_id = flask.request.sid shopping_list = db_queries.get_shopping_list(user_obj["id"]) cart_num_items = len(shopping_list) socketio.emit( "logged in", { "userId": user, "username": username, "email": user_email, "cartNumItems": cart_num_items, }, room=client_id, )
def log(provider_name): #clears any previously stored login cache info app_cache.clear_cache() #function to actually login the user with oauth requests if g.user is not None and g.user.is_authenticated(): #check to see if the user is already logged in return redirect(url_for('login')) #get the result from the oauth provider response = make_response() result = authomatic.login(WerkzeugAdapter(request, response), provider_name) if result: #a result was returned from the oauth provider if result.user: result.user.update() if result.user.email is None or result.user.email == "": #An error occured, produce error message to user return redirect(url_for('login')) #at this point, the user oauth information should be valid #check the database to see if it is an existing user user = db_queries.get_user(result.user.email) if user is None: #user was not in the database, a new entry will be registered for them #first_name = result.user.first_name #last_name = result.user.last_name email = result.user.email user = db_posts.add_user(email) #user is valid, log the user in login_user(user, remember=False) return redirect(request.args.get('next') or url_for('index')) #if it is the first call, return the reponse #user info is handled on the second call return response
def test_get_user(self): db.session.add( models.Users( id=self.TEST_ID, email=self.TEST_USER["email"], name=self.TEST_USER["name"], shopping_list=[], shared_recipes=[], saved_recipes=[], profile_pic=self.TEST_USER["imageURL"], ) ) db_user = db_queries.get_user(self.TEST_ID) self.assertEqual(self.TEST_USER["name"], db_user["name"]) self.assertEqual(self.TEST_USER["email"], db_user["email"]) self.assertEqual(self.TEST_USER["imageURL"], db_user["profile_pic"]) self.assertEqual(db_user["shopping_list"], []) self.assertEqual(db_user["saved_recipes"], []) self.assertEqual(db_user["shared_recipes"], []) self.assertEqual(db_user["owned_recipes"], [])
def load_user(email): return db_queries.get_user(email)