def amazon_fetch_product(friend_id): user = UserActions.find_by_id(g.user['id']) friend = UserActions.find_by_id(friend_id) task = amazon_task.get_product.apply_async([friend]) return jsonify(**{"data": {'task_id': task.id}})
def check_user_logged_in(): if session.get('user'): g.user = session.get('user') return result = get_user_from_cookie(cookies=request.cookies, app_id=app.config["FB_APP_ID"], app_secret=app.config["FB_APP_SECRET"]) if result: user = UserActions.find_by_id(result['uid']) if not user: graph = GraphAPI(result['access_token']) args = {'fields': 'birthday, name, email'} profile = graph.get_object('me', **args) UserActions.new_facebook_user(profile, result) elif user.access_token != result['access_token']: user.access_token = result['access_token'] user = UserActions.find_by_id(result['uid']) session['user'] = dict(name=user.name, profile_url=user.profile_url, id=user.id, access_token=user.access_token) db.session.commit() g.user = session.get('user', None)
def index(name="index", *args, **kawrgs): if request.is_xhr: return "", 400 if g.user: # try: graph = GraphAPI(g.user['access_token']) args = {'fields': 'birthday, name, email'} facebook_friends = graph.get_object('me/friends', **args) user = UserActions.find_by_id(g.user['id']) for facebook_friend in facebook_friends['data']: friend = UserActions.new(facebook_friend) FriendRelationshipActions.create(user, friend) relations = FriendRelationshipActions.find_by_user(user) return render_template("index.html", app_id=app.config["FB_APP_ID"], user=user, relations=relations) # except Exception: # return redirect(url_for('logout')) return render_template("login.html", app_id=app.config["FB_APP_ID"])
def setUp(self): app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql://*****:*****@localhost/giftsmarts_test" db.session.close() db.drop_all() db.create_all() self.profile_1 = ['118600698523151', 'Luke Skywalker Alaaaiffajfch Occhinosky', '', '', '1980-01-30'] profile_2 = {'id': '118600698523152', 'name': 'Han Solo Alaaaiffajfch Occhinosky', 'birthday': '01/30/1979'} profile_3 = {'id': '118600698523153', 'name': 'Padme Alaaaiffajfch Occhinosky', 'birthday': '01/30/1979'} family_rel_name = "family" friend_rel_name = "friend" FriendRelationShipTypeActions.create(family_rel_name) FriendRelationShipTypeActions.create(friend_rel_name) FriendRelationShipTypeActions.create("acquaintance") rel_family = FriendRelationShipTypeActions.find_by_name(family_rel_name) rel_friend = FriendRelationShipTypeActions.find_by_name(friend_rel_name) self.user_1 = UserActions.create_user_from_csv(self.profile_1) user_2 = UserActions.new_facebook_user(profile_2, {'access_token': 'mock access token'}) user_3 = UserActions.new_facebook_user(profile_3, {'access_token': 'mock access token'}) FriendRelationshipActions.create(self.user_1, user_2, rel_family) FriendRelationshipActions.create(self.user_1, user_3, rel_friend) product_1 = ProductActions.create("1") product_2 = ProductActions.create("2") category = CategoryActions.create("Book") UserProductActions.create(self.user_1, product_1, category) UserProductActions.create(self.user_1, product_2, category)
def check_user_logged_in(): if session.get('user'): g.user = session.get('user') return result = get_user_from_cookie(cookies=request.cookies, app_id=app.config["FB_APP_ID"], app_secret=app.config["FB_APP_SECRET"]) if result: user = UserActions.find_by_id(result['uid']) if not user: graph = GraphAPI(result['access_token']) args = {'fields': 'birthday, name, email'} profile = graph.get_object('me', **args); UserActions.new_facebook_user(profile, result) elif user.access_token != result['access_token']: user.access_token = result['access_token'] user = UserActions.find_by_id(result['uid']) session['user'] = dict(name=user.name, profile_url=user.profile_url, id=user.id, access_token=user.access_token) db.session.commit() g.user = session.get('user', None)
def setUp(self): app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql://*****:*****@localhost/giftsmarts_test" db.session.close() db.drop_all() db.create_all() FriendRelationShipTypeActions.create("relationship 1") FriendRelationShipTypeActions.create("relationship 2") FriendRelationShipTypeActions.create("relationship 3") self.profile_1 = ['118600698523151', 'Luke Skywalker Alaaaiffajfch Occhinosky', '', '', '1980-01-30'] profile_2 = {'id': '118600698523152', 'name': 'Han Solo Alaaaiffajfch Occhinosky', 'birthday': '01/30/1979'} profile_3 = {'id': '118600698523153', 'name': 'Padme Alaaaiffajfch Occhinosky', 'birthday': '01/30/1979'} self.user_1 = UserActions.create_user_from_csv(self.profile_1) user_2 = UserActions.new_facebook_user(profile_2, {'access_token': 'mock access token'}) user_3 = UserActions.new_facebook_user(profile_3, {'access_token': 'mock access token'}) FriendRelationshipActions.create(self.user_1, user_2) FriendRelationshipActions.create(self.user_1, user_3) product_1 = ProductActions.create("1") product_2 = ProductActions.create("2") category = CategoryActions.create("Book") UserProductActions.create(self.user_1, product_1, category) UserProductActions.create(self.user_1, product_2, category)
def get_product(self, user): product_list = {} products = [] searches = nltk.Nltk.generate_searches( Post.query.filter_by(user_id=user.id)) print('# of searches') print(len(searches)) print('post searches') for i in range(3): search = random.choice(searches) print(i, search) try: ps = amazon.search(Keywords=search, SearchIndex=AMAZON_CATEGORIES[0]) for p in ps: product_list[p.title] = p except Exception as e: print('Exception') print(e) continue for p in product_list.keys(): print(p.title) products.append(product_list[p]) print('Total # of products') print(len(products)) random.shuffle(products) products = products[:100] print('Sliced # of products') print(len(products)) for index, product in enumerate(products, start=1): # default is zero product_endity = ProductActions.create(product.asin) redis.set(product.asin, product.to_string()) # check category product_category = product.get_attribute('ProductGroup') category = CategoryActions.find_by_name(product_category) if category is None: category = CategoryActions.create(product_category) UserActions.add_category(user, category) UserProductActions.create(user, product_endity, category) self.update_state(state='PROGRESS', meta={ 'current': index, 'total': 100, 'user_id': user.id }) return {'user_id': user.id, 'status': 'Task completed!'}
def get_product(self, user): product_list = {} products = [] searches = nltk.Nltk.generate_searches(Post.query.filter_by(user_id=user.id)) print('# of searches') print(len(searches)) print('post searches') for i in range(3): search = random.choice(searches) print(i, search) try: ps = amazon.search(Keywords=search, SearchIndex=AMAZON_CATEGORIES[0]) for p in ps: product_list[p.title] = p except Exception as e: print('Exception') print(e) continue for p in product_list.keys(): print(p.title) products.append(product_list[p]) print('Total # of products') print(len(products)) random.shuffle(products) products = products[:100] print('Sliced # of products') print(len(products)) for index, product in enumerate(products, start=1): # default is zero product_endity = ProductActions.create(product.asin) redis.set(product.asin, product.to_string()) # check category product_category = product.get_attribute('ProductGroup') category = CategoryActions.find_by_name(product_category) if category is None: category = CategoryActions.create(product_category) UserActions.add_category(user, category) UserProductActions.create(user, product_endity, category) self.update_state(state='PROGRESS', meta={ 'current': index, 'total': 100, 'user_id': user.id }) return {'user_id': user.id, 'status': 'Task completed!'}
def amazon_fetch_product(friend_id): user = UserActions.find_by_id(g.user['id']) friend = UserActions.find_by_id(friend_id) task = amazon_task.get_product.apply_async([friend]) return jsonify(**{ "data": { 'task_id': task.id } })
def contact_us(): user = UserActions.find_by_id(g.user['id']) if request.method == 'POST': user = UserActions.find_by_id(g.user['id']) subject = comment.subject.data, feedback = comment.message.data, CommentActions.create(user, subject, feedback) return render_template('contact_us.html', success=True, user=user) elif request.method == 'GET': return render_template("contact_us.html", user=user)
def contact_us(): user = UserActions.find_by_id(g.user['id']) if request.method == 'POST': user = UserActions.find_by_id(g.user['id']) subject=comment.subject.data, feedback=comment.message.data, CommentActions.create(user, subject, feedback) return render_template('contact_us.html', success=True, user=user) elif request.method == 'GET': return render_template("contact_us.html", user=user)
def taskstatus(task_id): task = amazon_task.get_product.AsyncResult(task_id) if task.status == "PROGRESS": response = { 'state': task.state, 'task_id': task_id, 'current': task.info.get('current', 0), 'total': task.info.get('total', 0), 'status': 'Pending...' } friend = UserActions.find_by_id(task.info.get('user_id')) products = [] user_products = UserProductActions.find_by_user(friend) result_to_json = Serializer("UserProduct", user_products).run() for user_product in result_to_json: product = redis.get(user_product['product_id']) product_dict = xmltodict.parse(product) user_product['product_details']= product_dict response['data'] = result_to_json elif task.status == 'SUCCESS': response = { 'state': task.state, 'task_id': task_id, 'current': 3, 'total': 3, 'status': task.status, } friend = UserActions.find_by_id(task.info.get('user_id')) products = [] user_products = UserProductActions.find_by_user(friend) result_to_json = Serializer("UserProduct", user_products).run() for user_product in result_to_json: product = redis.get(user_product['product_id']) product_dict = xmltodict.parse(product) user_product['product_details']= product_dict response['data'] = result_to_json else: response = { 'state': task.state, 'task_id': task_id, 'current': 0, 'total': 0, 'status': 'Pending...' } return json.dumps(response)
def taskstatus(task_id): task = amazon_task.get_product.AsyncResult(task_id) if task.status == "PROGRESS": response = { 'state': task.state, 'task_id': task_id, 'current': task.info.get('current', 0), 'total': task.info.get('total', 0), 'status': 'Pending...' } friend = UserActions.find_by_id(task.info.get('user_id')) products = [] user_products = UserProductActions.find_by_user(friend) result_to_json = Serializer("UserProduct", user_products).run() for user_product in result_to_json: product = redis.get(user_product['product_id']) product_dict = xmltodict.parse(product) user_product['product_details'] = product_dict response['data'] = result_to_json elif task.status == 'SUCCESS': response = { 'state': task.state, 'task_id': task_id, 'current': 3, 'total': 3, 'status': task.status, } friend = UserActions.find_by_id(task.info.get('user_id')) products = [] user_products = UserProductActions.find_by_user(friend) result_to_json = Serializer("UserProduct", user_products).run() for user_product in result_to_json: product = redis.get(user_product['product_id']) product_dict = xmltodict.parse(product) user_product['product_details'] = product_dict response['data'] = result_to_json else: response = { 'state': task.state, 'task_id': task_id, 'current': 0, 'total': 0, 'status': 'Pending...' } return json.dumps(response)
def user_feedback(): user = UserActions.find_by_id(g.user['id']) form = ContactForm() if request.method == 'POST': user = UserActions.find_by_id(g.user['id']) subject=form.subject.data, feedback=form.message.data, CommentActions.create(user, subject, feedback) return render_template('user_feedback.html', success=True, user=user) elif request.method == 'GET': return render_template("user_feedback.html", form=form, user=user)
def user_feedback(): user = UserActions.find_by_id(g.user['id']) form = ContactForm() if request.method == 'POST': user = UserActions.find_by_id(g.user['id']) subject = form.subject.data, feedback = form.message.data, CommentActions.create(user, subject, feedback) return render_template('user_feedback.html', success=True, user=user) elif request.method == 'GET': return render_template("user_feedback.html", form=form, user=user)
def run(self): print("Get friends datas from facebook") user = UserActions.find_by_id('118600698523150') graph = GraphAPI(user.access_token) args = {'fields' : 'birthday, name, email'} friends = graph.get_object('me/friends', **args) for friend in friends['data']: UserActions.create(friend) posts = graph.get_connections(friend['id'], 'posts') for post in posts['data']: post = PostActions.create(post, friend) print(post) pass
def run(self): print("Get friends datas from facebook") user = UserActions.find_by_id('118600698523150') graph = GraphAPI(user.access_token) args = {'fields': 'birthday, name, email'} friends = graph.get_object('me/friends', **args) for friend in friends['data']: UserActions.create(friend) posts = graph.get_connections(friend['id'], 'posts') for post in posts['data']: post = PostActions.create(post, friend) print(post) pass
def username(name="username", token=None): user_id = jwt.get_payload(token)["sub"] username = UserActions.get_username(user_id) return jsonify(**{ "username": username })
def get_friends(user): graph = GraphAPI(user.access_token) args = {'fields': 'birthday, name, email'} facebook_friends = graph.get_object('me/friends', **args) for facebook_friend in facebook_friends['data']: friend = UserActions.new(facebook_friend) FriendRelationshipActions.create(user, friend) get_friend_post(facebook_friend, user.access_token) get_friend_event(facebook_friend, user.access_token) pass
def get_friends(user): graph = GraphAPI(user.access_token) args = {'fields' : 'birthday, name, email'} facebook_friends = graph.get_object('me/friends', **args) for facebook_friend in facebook_friends['data']: friend = UserActions.new(facebook_friend) FriendRelationshipActions.create(user, friend) get_friend_post(facebook_friend, user.access_token) get_friend_event(facebook_friend, user.access_token) pass
def test_user_serialize(self): user_schema = UserSchema(many=True) users = UserActions.find_all() user_result = user_schema.dump(users) user_result_json = json.dumps(user_result.data) user_expected_json = '[{"id": 118600698523151, "name": "Luke Skywalker Alaaaiffajfch Occhinosky",' \ ' "profile_url": "", "birthday": "1980-01-30"}, {"id": 118600698523152, "name": ' \ '"Han Solo Alaaaiffajfch Occhinosky", "profile_url": "", "birthday": "1979-01-30"}, ' \ '{"id": 118600698523153, "name": "Padme Alaaaiffajfch Occhinosky", ' \ '"profile_url": "", "birthday": "1979-01-30"}]' self.assertEqual(user_expected_json, user_result_json) pass
def run(self): print("Add posts to facebook profile") directory = os.path.dirname(os.path.realpath(__file__)) file = open(directory + '/posts.txt', 'r') posts = file.readlines() for user in UserActions.find_all(): if user.access_token is not "": graph = GraphAPI(user.access_token) for post in posts: print(graph.put_object("me", "feed", message=post)) pass
def test_user_serializer(self): users = UserActions.find_all() serializer = Serializer("User", users) # @todo assert an ordered dictionary instead user_result_json = json.dumps(serializer.run()) user_expected_json = '[{"id": 118600698523151, "name": "Luke Skywalker Alaaaiffajfch Occhinosky",' \ ' "profile_url": "", "birthday": "1980-01-30"}, {"id": 118600698523152, "name": ' \ '"Han Solo Alaaaiffajfch Occhinosky", "profile_url": "", "birthday": "1979-01-30"}, ' \ '{"id": 118600698523153, "name": "Padme Alaaaiffajfch Occhinosky", ' \ '"profile_url": "", "birthday": "1979-01-30"}]' self.assertEqual(user_expected_json, user_result_json)
def index(name="index", *args, **kawrgs): if request.is_xhr: return "", 400 if g.user: # try: graph = GraphAPI(g.user['access_token']) args = {'fields': 'birthday, name, email'} facebook_friends = graph.get_object('me/friends', **args); user = UserActions.find_by_id(g.user['id']) for facebook_friend in facebook_friends['data']: friend = UserActions.new(facebook_friend) FriendRelationshipActions.create(user, friend) relations = FriendRelationshipActions.find_by_user(user) return render_template("index.html", app_id=app.config["FB_APP_ID"], user=user, relations=relations) # except Exception: # return redirect(url_for('logout')) return render_template("login.html", app_id=app.config["FB_APP_ID"])
def load_fixtures(): pprint.pprint("Load fixtures -----------------") dir = os.path.dirname(os.path.realpath(__file__)) file = open(dir + '/posts.txt', 'r') posts = file.readlines() # pprint.pprint(posts) users = UserActions.find_all() for user in users: if user.access_token is not "": graph = GraphAPI(user.access_token) for post in posts: graph.put_object("me", "feed", message=post) pprint.pprint("Total user: " + str(len(users)))
def api_request(entity, id=None): if g.user: try: # args = request.args.lists() user = UserActions.find_by_id(g.user['id']) repository = ActionsFactory.get_repository(entity) result = repository.filter(user, id=id) result_to_json = Serializer(entity, result).run() if entity == "UserProduct": for elt in result_to_json: product = redis.get(elt['product_id']) product_dict = xmltodict.parse(product) elt['product_details'] = product_dict return jsonify(**{"data": result_to_json}) except Exception: return "Request invalid", 500 else: return "not connected"
def api_request(entity, id=None): if g.user: try: # args = request.args.lists() user = UserActions.find_by_id(g.user['id']) repository = ActionsFactory.get_repository(entity) result = repository.filter(user, id=id) result_to_json = Serializer(entity, result).run() if entity == "UserProduct": for elt in result_to_json: product = redis.get(elt['product_id']) product_dict = xmltodict.parse(product) elt['product_details'] = product_dict return jsonify(**{ "data": result_to_json }) except Exception: return "Request invalid", 500 else: return "not connected"
def username(name="username", token=None): user_id = jwt.get_payload(token)["sub"] username = UserActions.get_username(user_id) return jsonify(**{"username": username})
def login(username, password, *args, **kwargs): user = UserActions.match_credentials(username, password) if user: return jwt.create_auth_token(user) return None
def get_facebook_friends_data(): user = UserActions.find_by_id(g.user['id']) facebook_task.get_friends.delay(user) return redirect(url_for('index'))