def update(request): cursor = connection.cursor() try: json_request = loads(request.body) except ValueError as value_err: cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": unicode(value_err)})) try: postId = json_request["post"] message = unicode(json_request["message"]) except KeyError as key_err: cursor.close() return HttpResponse( dumps({"code": codes.INCORRECT_QUERY, "response": "Not found: {}".format(unicode(key_err))}) ) postId = codes_and_utils.validate_id(postId) if postId == False: cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": "post id should be int"})) try: cursor.execute(SELECT_POST_BY_ID, [postId]) if cursor.rowcount == 0: cursor.close() return HttpResponse(dumps({"code": codes.NOT_FOUND, "response": "post not found"})) postId_qs = cursor.execute(UPDATE_POST_MESSAGE, [message, postId]) post, related_obj = get_post_by_id(cursor, postId) except DatabaseError as db_err: cursor.close() return HttpResponse(dumps({"code": codes.UNKNOWN_ERR, "response": unicode(db_err)})) cursor.close() return HttpResponse(dumps({"code": codes.OK, "response": post}))
def change_delete_flag(request): cursor = connection.cursor() try: json_request = loads(request.body) except ValueError as value_err: cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": unicode(value_err)})) try: postId = json_request["post"] except KeyError as key_err: cursor.close() return HttpResponse( dumps({"code": codes.INCORRECT_QUERY, "response": "Not found: {}".format(unicode(key_err))}) ) postId = codes_and_utils.validate_id(postId) if postId == False: cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": "post id should be int"})) try: cursor.execute(SELECT_THREAD_BY_postId, [postId]) if cursor.rowcount == 0: cursor.close() return HttpResponse(dumps({"code": codes.NOT_FOUND, "response": "post not found"})) threadId = cursor.fetchone()[0] if delete_flag.upper() == "TRUE": posts_diff = -1 else: posts_diff = 1 update_thread_posts(cursor, threadId, posts_diff) cursor.execute(UPDATE_POST_SET_DELETE_FLAG.format(delete_flag), [postId]) except DatabaseError as db_err: cursor.close() return HttpResponse(dumps({"code": codes.UNKNOWN_ERR, "response": unicode(db_err)})) cursor.close() return HttpResponse(dumps({"code": codes.OK, "response": {"post": postId}}))
def subscribe(request): __cursor = connection.cursor() try: json_request = loads(request.body) except ValueError as value_err: __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': str(value_err)})) try: email = unicode(json_request['user']) thread = json_request['thread'] except KeyError as key_err: __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'Not found: {}'.format(str(key_err))})) # validate user try: user_id_qs = __cursor.execute(SELECT_USER_BY_EMAIL, [email, ]) except DatabaseError as db_err: __cursor.close() return HttpResponse(dumps({'code': codes.UNKNOWN_ERR, 'response': unicode(db_err)})) if not __cursor.rowcount: __cursor.close() return HttpResponse(dumps({'code': codes.NOT_FOUND, 'response': 'user was not found'})) user_id = __cursor.fetchone()[0] #validate thread thread_id = general_utils.validate_id(thread) if thread_id == False: __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': 'thread id should be int'})) try: thread_id_qs = __cursor.execute(SELECT_THREAD_BY_ID, [thread_id,]) except DatabaseError as db_err: __cursor.close() return HttpResponse(dumps({'code': codes.UNKNOWN_ERR, 'response': unicode(db_err)})) if not __cursor.rowcount: __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': 'thread was not found'})) thread_id = __cursor.fetchone()[0] try: __cursor.execute(INSERT_SUBSCRIPTION, [user_id, thread_id]) except IntegrityError: pass except DatabaseError as db_err: __cursor.close() return HttpResponse(dumps({'code': codes.UNKNOWN_ERR, 'response': unicode(db_err)})) __cursor.close() return HttpResponse(dumps({'code': codes.OK, 'response': {"thread": thread_id, "user": email}}))
def update(request): cursor = connection.cursor() try: json_request = loads(request.body) except ValueError as value_err: cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": unicode(value_err)})) try: message = json_request["message"] slug = json_request["slug"] threadId = json_request["thread"] except KeyError as key_err: cursor.close() return HttpResponse( dumps({"code": codes.INCORRECT_QUERY, "response": "Not found: {}".format(unicode(key_err))}) ) threadId = general_utils.validate_id(threadId) if threadId == False: cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": "thread id should be int"})) try: cursor.execute(SELECT_THREAD_BY_ID, [threadId]) if cursor.rowcount == 0: cursor.close() return HttpResponse(dumps({"code": codes.NOT_FOUND, "response": "thread not found"})) cursor.execute(UPDATE_THREAD, [unicode(message), unicode(slug), threadId]) thread, related_obj = get_thread_by_id(cursor, threadId) except DatabaseError as db_err: cursor.close() return HttpResponse(dumps({"code": codes.UNKNOWN_ERR, "response": unicode(db_err)})) cursor.close() return HttpResponse(dumps({"code": codes.OK, "response": thread}))
def details(request): cursor = connection.cursor() if request.method != "GET": cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": "request method should be GET"})) postId = codes_and_utils.validate_id(request.GET.get("post")) if postId is None: cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": "post id not found"})) if postId == False: cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": "post id should be int"})) try: post, related_ids = get_post_by_id(cursor, postId) except DatabaseError as db_err: cursor.close() return HttpResponse(dumps({"code": codes.UNKNOWN_ERR, "response": unicode(db_err)})) except TypeError: cursor.close() return HttpResponse(dumps({"code": codes.NOT_FOUND, "response": "post not found"})) related = request.GET.getlist("related") related_functions_dict = {"user": get_user_by_id, "thread": get_thread_by_id, "forum": get_forum_by_id} for related_ in related: if related_ in ["user", "forum", "thread"]: get_related_info_func = related_functions_dict[related_] post[related_], related_ids_ = get_related_info_func(cursor, related_ids[related_]) else: cursor.close() return HttpResponse(dumps({"code": codes.INCORRECT_QUERY, "response": "incorrect related parameter"})) cursor.close() return HttpResponse(dumps({"code": codes.OK, "response": post}))
def listUsers(request): __cursor = connection.cursor() if request.method != "GET": __cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": "request method should be GET"})) short_name = request.GET.get("forum") if not short_name: __cursor.close() return HttpResponse(dumps({"code": codes.INCORRECT_QUERY, "response": "forum name not found"})) try: forum_qs = __cursor.execute(SELECT_FORUM_BY_SHORT_NAME, [short_name]) if not __cursor.rowcount: __cursor.close() return HttpResponse(dumps({"code": codes.NOT_FOUND, "response": "forum not found"})) except DatabaseError as db_err: __cursor.close() return HttpResponse(dumps({"code": codes.UNKNOWN_ERR, "response": unicode(db_err)})) forum_id = __cursor.fetchone()[0] get_all_forum_users_specified_query = SELECT_USER_ID_BY_FORUM query_params = [forum_id] since_id = general_utils.validate_id(request.GET.get("since_id")) if since_id: get_all_forum_users_specified_query += """AND user_id >= %s """ query_params.append(since_id) elif since_id == False and since_id is not None: __cursor.close() return HttpResponse(dumps({"code": codes.INCORRECT_QUERY, "response": "since_id should be int"})) order = request.GET.get("order", "desc") if order.lower() not in ("asc", "desc"): __cursor.close() return HttpResponse( dumps({"code": codes.INCORRECT_QUERY, "response": "incorrect order parameter: {}".format(order)}) ) get_all_forum_users_specified_query += """ORDER BY user_name """ + order limit = request.GET.get("limit") if limit: try: limit = int(limit) except ValueError: __cursor.close() return HttpResponse(dumps({"code": codes.INCORRECT_QUERY, "response": "limit should be int"})) get_all_forum_users_specified_query += """ LIMIT %s""" query_params.append(limit) try: users_qs = __cursor.execute(get_all_forum_users_specified_query, query_params) except DatabaseError as db_err: __cursor.close() return HttpResponse(dumps({"code": codes.UNKNOWN_ERR, "response": unicode(db_err)})) users = [] for user in __cursor.fetchall(): users.append(get_user_by_id(__cursor, user[0])[0]) __cursor.close() return HttpResponse(dumps({"code": codes.OK, "response": users}))
def vote(request): __cursor = connection.cursor() try: json_request = loads(request.body) except ValueError as value_err: __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': unicode(value_err)})) try: post_id = json_request['post'] vote_ = json_request['vote'] except KeyError as key_err: __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'Not found: {}'.format(unicode(key_err))})) post_id = general_utils.validate_id(post_id) if post_id == False: __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': 'post id should be int'})) try: vote_ = int(vote_) if abs(vote_) != 1: raise ValueError except ValueError: __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'incorrect vote value'})) if vote_ < 0: column_name = 'dislikes' else: column_name = 'likes' try: __cursor.execute(SELECT_POST_BY_ID, [post_id, ]) if not __cursor.rowcount: __cursor.close() return HttpResponse(dumps({'code': codes.NOT_FOUND, 'response': 'post not found'})) __cursor.execute(UPDATE_POST_VOTES.format(column_name, column_name), [post_id, ]) if not __cursor.rowcount: __cursor.close() return HttpResponse(dumps({'code': codes.NOT_FOUND, 'response': 'post not found'})) post, related_obj = get_post_by_id(__cursor, post_id) except DatabaseError as db_err: __cursor.close() return HttpResponse(dumps({'code': codes.UNKNOWN_ERR, 'response': unicode(db_err)})) __cursor.close() return HttpResponse(dumps({'code': codes.OK, 'response': post}))
def subscribe(request): cursor = connection.cursor() try: json_request = loads(request.body) except ValueError as value_err: cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": str(value_err)})) try: email = json_request["user"] thread = json_request["thread"] except KeyError as key_err: cursor.close() return HttpResponse(dumps({"code": codes.INCORRECT_QUERY, "response": "Not found: {}".format(str(key_err))})) # user validate try: cursor.execute(SELECT_USER_BY_EMAIL, [unicode(email)]) except DatabaseError as db_err: cursor.close() return HttpResponse(dumps({"code": codes.UNKNOWN_ERR, "response": unicode(db_err)})) if cursor.rowcount == 0: cursor.close() return HttpResponse(dumps({"code": codes.NOT_FOUND, "response": "user not found"})) userId = cursor.fetchone()[0] # thread validate threadId = general_utils.validate_id(thread) if threadId == False: cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": "thread id should be int"})) try: cursor.execute(SELECT_THREAD_BY_ID, [threadId]) except DatabaseError as db_err: cursor.close() return HttpResponse(dumps({"code": codes.UNKNOWN_ERR, "response": unicode(db_err)})) if cursor.rowcount == 0: cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": "thread was not found"})) threadId = cursor.fetchone()[0] try: cursor.execute(INSERT_SUBSCRIPTION, [userId, threadId]) except IntegrityError: pass except DatabaseError as db_err: cursor.close() return HttpResponse(dumps({"code": codes.UNKNOWN_ERR, "response": unicode(db_err)})) cursor.close() return HttpResponse(dumps({"code": codes.OK, "response": {"thread": threadId, "user": unicode(email)}}))
def vote(request): cursor = connection.cursor() try: json_request = loads(request.body) except ValueError as value_err: cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": unicode(value_err)})) try: postId = json_request["post"] vote = json_request["vote"] except KeyError as key_err: cursor.close() return HttpResponse( dumps({"code": codes.INCORRECT_QUERY, "response": "Not found: {}".format(unicode(key_err))}) ) postId = codes_and_utils.validate_id(postId) if postId == False: cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": "post id should be int"})) vote = int(vote) if abs(vote) != 1: cursor.close() return HttpResponse(dumps({"code": codes.INCORRECT_QUERY, "response": "incorrect vote value"})) if vote < 0: column_name = "dislikes" else: column_name = "likes" try: cursor.execute(SELECT_POST_BY_ID, [postId]) if cursor.rowcount == 0: cursor.close() return HttpResponse(dumps({"code": codes.NOT_FOUND, "response": "post not found"})) cursor.execute(UPDATE_POST_VOTES.format(column_name, column_name), [postId]) if cursor.rowcount == 0: cursor.close() return HttpResponse(dumps({"code": codes.NOT_FOUND, "response": "post not found"})) post, related_obj = get_post_by_id(cursor, postId) except DatabaseError as db_err: cursor.close() return HttpResponse(dumps({"code": codes.UNKNOWN_ERR, "response": unicode(db_err)})) cursor.close() return HttpResponse(dumps({"code": codes.OK, "response": post}))
def details(request): __cursor = connection.cursor() if request.method != 'GET': __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': 'request method should be GET'})) thread_id = general_utils.validate_id(request.GET.get('thread')) if thread_id is None: __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': 'thread id not found'})) if thread_id == False: __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': 'thread id should be int'})) try: thread, related_ids = get_thread_by_id(__cursor, thread_id) #print related_ids except TypeError: __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'thread doesn\'t exist'})) except DatabaseError as db_err: __cursor.close() return HttpResponse(dumps({'code': codes.UNKNOWN_ERR, 'response': unicode(db_err)})) related = request.GET.getlist('related') related_functions_dict = {'user': get_user_by_id, 'forum': get_forum_by_id } for related_ in related: if related_ in ['user', 'forum']: get_related_info_func = related_functions_dict[related_] thread[related_], related_ids_ = get_related_info_func(__cursor, related_ids[related_]) else: __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'incorrect related parameter'})) __cursor.close() return HttpResponse(dumps({'code': codes.OK, 'response': thread}))
def change_delete_flag(request): try: __cursor = connection.cursor() try: json_request = loads(request.body) except ValueError as value_err: __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': unicode(value_err)})) try: post_id = json_request['post'] except KeyError as key_err: __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'Not found: {}'.format(unicode(key_err))})) post_id = general_utils.validate_id(post_id) if post_id == False: __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': 'post id should be int'})) try: __cursor.execute(SELECT_THREAD_BY_POST_ID, [post_id, ]) if not __cursor.rowcount: __cursor.close() return HttpResponse(dumps({'code': codes.NOT_FOUND, 'response': 'post not found'})) thread_id = __cursor.fetchone()[0] if delete_flag.upper() == 'TRUE': posts_diff = -1 else: posts_diff = 1 update_thread_posts(__cursor, thread_id, posts_diff) __cursor.execute(UPDATE_POST_SET_DELETE_FLAG.format(delete_flag), [post_id, ]) except DatabaseError as db_err: __cursor.close() return HttpResponse(dumps({'code': codes.UNKNOWN_ERR, 'response': unicode(db_err)})) __cursor.close() return HttpResponse(dumps({'code': codes.OK, 'response': {"post": post_id}})) except Exception as e: print e
def update(request): __cursor = connection.cursor() try: json_request = loads(request.body) except ValueError as value_err: __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': unicode(value_err)})) try: thread_id = json_request['thread'] message = unicode(json_request['message']) slug = unicode(json_request['slug']) except KeyError as key_err: __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'Not found: {}'.format(unicode(key_err))})) thread_id = general_utils.validate_id(thread_id) if thread_id == False: __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': 'thread id should be int'})) try: __cursor.execute(SELECT_THREAD_BY_ID, [thread_id, ]) if not __cursor.rowcount: __cursor.close() return HttpResponse(dumps({'code': codes.NOT_FOUND, 'response': 'thread not found'})) __cursor.execute(UPDATE_THREAD, [message, slug, thread_id, ]) thread, related_obj = get_thread_by_id(__cursor, thread_id) except DatabaseError as db_err: __cursor.close() return HttpResponse(dumps({'code': codes.UNKNOWN_ERR, 'response': unicode(db_err)})) __cursor.close() return HttpResponse(dumps({'code': codes.OK, 'response': thread}))
def update(request): __cursor = connection.cursor() try: json_request = loads(request.body) except ValueError as value_err: __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': unicode(value_err)})) try: post_id = json_request['post'] message = unicode(json_request['message']) except KeyError as key_err: __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'Not found: {}'.format(unicode(key_err))})) post_id = general_utils.validate_id(post_id) if post_id == False: __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': 'post id should be int'})) try: __cursor.execute(SELECT_POST_BY_ID, [post_id, ]) if not __cursor.rowcount: __cursor.close() return HttpResponse(dumps({'code': codes.NOT_FOUND, 'response': 'post not found'})) post_id_qs = __cursor.execute(UPDATE_POST_MESSAGE, [message, post_id]) post, related_obj = get_post_by_id(__cursor, post_id) except DatabaseError as db_err: __cursor.close() return HttpResponse(dumps({'code': codes.UNKNOWN_ERR, 'response': unicode(db_err)})) __cursor.close() return HttpResponse(dumps({'code': codes.OK, 'response': post}))
def listUsers(request): __cursor = connection.cursor() if request.method != 'GET': __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': 'request method should be GET'})) short_name = request.GET.get('forum') if not short_name: __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'forum name not found'})) try: forum_qs = __cursor.execute(SELECT_FORUM_BY_SHORT_NAME, [short_name, ]) if not __cursor.rowcount: __cursor.close() return HttpResponse(dumps({'code': codes.NOT_FOUND, 'response': 'forum not found'})) except DatabaseError as db_err: __cursor.close() return HttpResponse(dumps({'code': codes.UNKNOWN_ERR, 'response': unicode(db_err)})) forum_id = __cursor.fetchone()[0] get_all_forum_users_specified_query = SELECT_USER_ID_BY_FORUM query_params = [forum_id, ] since_id = general_utils.validate_id(request.GET.get('since_id')) if since_id: get_all_forum_users_specified_query += '''AND user.id >= %s ''' query_params.append(since_id) elif since_id == False and since_id is not None: __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'since_id should be int'})) order = request.GET.get('order', 'desc') if order.lower() not in ('asc', 'desc'): __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'incorrect order parameter: {}'.format(order)})) get_all_forum_users_specified_query += '''ORDER BY user.name ''' + order limit = request.GET.get('limit') if limit: try: limit = int(limit) except ValueError: __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'limit should be int'})) get_all_forum_users_specified_query += ''' LIMIT %s''' query_params.append(limit) try: users_qs = __cursor.execute(get_all_forum_users_specified_query, query_params) except DatabaseError as db_err: __cursor.close() return HttpResponse(dumps({'code': codes.UNKNOWN_ERR, 'response': unicode(db_err)})) users = [] for user in __cursor.fetchall(): users.append(get_user_by_id(__cursor, user[0])[0]) __cursor.close() return HttpResponse(dumps({'code': codes.OK, 'response': users }))
def list_follow_relationship(request): __cursor = connection.cursor() if request.method != 'GET': __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': 'request method should be GET'})) email = request.GET.get('user') # validate user try: __cursor.execute(SELECT_USER_BY_EMAIL, [email, ]) except DatabaseError as db_err: __cursor.close() return HttpResponse(dumps({'code': codes.UNKNOWN_ERR, 'response': unicode(db_err)})) if not __cursor.rowcount: __cursor.close() return HttpResponse(dumps({'code': codes.NOT_FOUND, 'response': 'user not found'})) user_id = __cursor.fetchone()[0] if relationship == 'follower': partner_relationship = 'following' else: partner_relationship = 'follower' query = SELECT_FOLLOW_RELATIONS.format(relationship, partner_relationship) query_params = [user_id, ] since_id = general_utils.validate_id(request.GET.get('id')) if since_id: query += '''AND {}_id >= %s '''.format(relationship) query_params.append(since_id) elif since_id == False and since_id is not None: __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'incorrect since_id fromat'})) order = request.GET.get('order', 'desc') if order.lower() not in ('asc', 'desc'): __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'incorrect order parameter: {}'.format(order)})) query += '''ORDER BY user.name ''' + order limit = request.GET.get('limit') if limit: try: limit = int(limit) except ValueError: __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'limit should be int'})) query += ''' LIMIT %s''' query_params.append(limit) try: __cursor.execute(query, query_params) except DatabaseError as db_err: __cursor.close() return HttpResponse(dumps({'code': codes.UNKNOWN_ERR, 'response': unicode(db_err)})) followers = [] for user_id in __cursor.fetchall(): try: user, related_ids = get_user_by_id(__cursor, user_id[0]) except DatabaseError as db_err: __cursor.close() return HttpResponse(dumps({'code': codes.UNKNOWN_ERR, 'response': unicode(db_err)})) followers.append(user) __cursor.close() return HttpResponse(dumps({'code': codes.OK, 'response': followers}))
def listPosts(request): __cursor = connection.cursor() if request.method != 'GET': __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': 'request method should be GET'})) thread = request.GET.get('thread') thread_id = general_utils.validate_id(thread) if thread_id is None: __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': 'thread id is required'})) if thread_id == False: __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': 'thread id should be int'})) try: thread_id_qs = __cursor.execute(SELECT_THREAD_BY_ID, [thread_id,]) except DatabaseError as db_err: __cursor.close() return HttpResponse(dumps({'code': codes.UNKNOWN_ERR, 'response': unicode(db_err)})) if not __cursor.rowcount: __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': 'thread was not found'})) thread_id = __cursor.fetchone()[0] get_all_posts_specified_query = SELECT_ALL_POSTS_BY_THREAD query_params = [thread_id, ] since_date = general_utils.validate_date(request.GET.get('since')) if since_date: get_all_posts_specified_query += '''AND post.date >= %s ''' query_params.append(since_date) elif since_date == False and since_date is not None: __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'incorrect since_date fromat'})) order = request.GET.get('order', 'desc') if order.lower() not in ('asc', 'desc'): __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'incorrect order parameter: {}'.format(order)})) get_all_posts_query_postfix = ''' ORDER BY post.{} ''' + order sort = request.GET.get('sort', 'flat') if sort.lower() not in ('flat', 'tree', 'parent_tree'): __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'incorrect sort parameter: {}'.format(sort)})) else: sort = 'flat' if sort == 'flat': get_all_posts_query_postfix = get_all_posts_query_postfix.format('date') else: get_all_posts_query_postfix = get_all_posts_query_postfix.format('hierarchy_id') limit = request.GET.get('limit') if limit: try: limit = int(limit) except ValueError: __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'limit should be int'})) if sort == 'flat' or sort == 'tree': get_all_posts_specified_query += get_all_posts_query_postfix + ''' LIMIT %s''' query_params.append(limit) else: if order == 'asc': operation = '<=' else: operation = '>=' try: max_posts_number_qs = __cursor.execute(SELECT_TOP_POST_NUMBER, [thread_id,]) except DatabaseError as db_err: __cursor.close() return HttpResponse(dumps({'code': codes.UNKNOWN_ERR, 'response': unicode(db_err)})) if __cursor.rowcount: max_posts_number = __cursor.fetchone()[0] else: max_posts_number = 0 limit = max_posts_number - limit + 1 if limit < 1: limit = 1 get_all_posts_specified_query += "AND post.hierarchy_id {} '{}' ".format(operation, limit) + \ get_all_posts_query_postfix else: get_all_posts_specified_query += get_all_posts_query_postfix try: posts_qs = __cursor.execute(get_all_posts_specified_query, query_params) except DatabaseError as db_err: __cursor.close() return HttpResponse(dumps({'code': codes.UNKNOWN_ERR, 'response': unicode(db_err)})) posts = [] for post in __cursor.fetchall(): posts.append({ "date": post[0].strftime("%Y-%m-%d %H:%M:%S") , "dislikes": post[1], "forum": post[2], "id": post[3], "isApproved": not not post[4], "isDeleted": not not post[5], "isEdited": not not post[6], "isHighlighted": not not post[7], "isSpam": post[8], "likes": post[9], "message": post[10], "parent": post[11], "points": post[12], "thread": post[13], "user": post[14] }) __cursor.close() return HttpResponse(dumps({'code': codes.OK, 'response': posts }))
def listPosts(request): cursor = connection.cursor() if request.method != "GET": cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": "request method should be GET"})) thread = request.GET.get("thread") threadId = general_utils.validate_id(thread) if threadId is None: cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": "thread id is required"})) if threadId == False: cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": "thread id should be int"})) try: cursor.execute(SELECT_THREAD_BY_ID, [threadId]) except DatabaseError as db_err: cursor.close() return HttpResponse(dumps({"code": codes.UNKNOWN_ERR, "response": unicode(db_err)})) if cursor.rowcount == 0: cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": "thread was not found"})) threadId = cursor.fetchone()[0] all_posts_query = SELECT_ALL_POSTS_BY_THREAD query_params = [threadId] since_date = general_utils.validate_date(request.GET.get("since")) if since_date: all_posts_query += """AND post.date >= %s """ query_params.append(since_date) elif since_date == False and since_date is not None: cursor.close() return HttpResponse(dumps({"code": codes.INCORRECT_QUERY, "response": "incorrect since_date fromat"})) order = request.GET.get("order", "desc") if order.lower() not in ("asc", "desc"): cursor.close() return HttpResponse( dumps({"code": codes.INCORRECT_QUERY, "response": "incorrect order parameter: {}".format(order)}) ) posts_query_postfix = """ ORDER BY post.{} """ + order sort = request.GET.get("sort", "flat") if sort.lower() not in ("flat", "tree", "parent_tree"): cursor.close() return HttpResponse( dumps({"code": codes.INCORRECT_QUERY, "response": "incorrect sort parameter: {}".format(sort)}) ) if sort == "flat": posts_query_postfix = posts_query_postfix.format("date") else: posts_query_postfix = posts_query_postfix.format("hierarchy_id") limit = request.GET.get("limit") if limit: try: limit = int(limit) except ValueError: cursor.close() return HttpResponse(dumps({"code": codes.INCORRECT_QUERY, "response": "limit should be int"})) if sort == "flat" or sort == "tree": all_posts_query += posts_query_postfix + """ LIMIT %s""" query_params.append(limit) else: if order == "asc": operation = "<=" else: operation = ">=" try: cursor.execute(SELECT_TOP_POST_NUMBER, [threadId]) except DatabaseError as db_err: cursor.close() return HttpResponse(dumps({"code": codes.UNKNOWN_ERR, "response": unicode(db_err)})) if cursor.rowcount: max_posts_number = cursor.fetchone()[0] else: max_posts_number = 0 limit = max_posts_number - limit + 1 if limit < 1: limit = 1 all_posts_query += "AND post.hierarchy_id {} '{}' ".format(operation, limit) + posts_query_postfix else: all_posts_query += posts_query_postfix try: cursor.execute(all_posts_query, query_params) except DatabaseError as db_err: cursor.close() return HttpResponse(dumps({"code": codes.UNKNOWN_ERR, "response": unicode(db_err)})) posts = [] for post in cursor.fetchall(): posts.append( { "date": post[0].strftime("%Y-%m-%d %H:%M:%S"), "dislikes": post[1], "forum": post[2], "id": post[3], "isApproved": not not post[4], "isDeleted": not not post[5], "isEdited": not not post[6], "isHighlighted": not not post[7], "isSpam": post[8], "likes": post[9], "message": post[10], "parent": post[11], "points": post[12], "thread": post[13], "user": post[14], } ) cursor.close() return HttpResponse(dumps({"code": codes.OK, "response": posts}))
def list_posts(request): __cursor = connection.cursor() if request.method != 'GET': __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': 'request method should be GET'})) thread_id = general_utils.validate_id(request.GET.get('thread')) forum = request.GET.get('forum') if thread_id is None and forum is None: __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': 'thread id or forum id not found'})) if thread_id == False: __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': 'thread id should be int'})) if thread_id and forum: __cursor.close() return HttpResponse(dumps({'code': codes.INVALID_QUERY, 'response': 'you should specify thread OR forum'})) if thread_id: related_table_name = 'thread' related_query = SELECT_THREAD_BY_ID related_params = [thread_id, ] else: related_table_name = 'forum' related_query = SELECT_FORUM_BY_SHORT_NAME related_params = [forum, ] try: __cursor.execute(related_query, related_params) if not __cursor.rowcount: __cursor.close() return HttpResponse(dumps({'code': codes.NOT_FOUND, 'response': '{} not found'.format(related_table_name)})) except DatabaseError as db_err: __cursor.close() return HttpResponse(dumps({'code': codes.UNKNOWN_ERR, 'response': unicode(db_err)})) related_id = __cursor.fetchone()[0] query_params = [related_id, ] get_post_list_specified_query = SELECT_POSTS_BY_FORUM_OR_THREAD since_date = general_utils.validate_date(request.GET.get('since')) if since_date: get_post_list_specified_query += '''AND post.date >= %s ''' query_params.append(since_date) elif since_date == False and since_date is not None: __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'incorrect since_date fromat'})) order = request.GET.get('order', 'desc') if order.lower() not in ('asc', 'desc'): __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'incorrect order parameter: {}'.format(order)})) get_post_list_specified_query += '''ORDER BY post.date ''' + order limit = request.GET.get('limit') if limit: try: limit = int(limit) except ValueError: __cursor.close() return HttpResponse(dumps({'code': codes.INCORRECT_QUERY, 'response': 'limit should be int'})) get_post_list_specified_query += ''' LIMIT %s''' query_params.append(limit) try: __cursor.execute(get_post_list_specified_query.format(related_table_name), query_params) except DatabaseError as db_err: __cursor.close() return HttpResponse(dumps({'code': codes.UNKNOWN_ERR, 'response': unicode(db_err)})) posts = [] for post in __cursor.fetchall(): posts.append({ "date": post[0].strftime("%Y-%m-%d %H:%M:%S") , "dislikes": post[1], "forum": post[2], "id": post[3], "isApproved": post[4], "isDeleted": post[5], "isEdited": post[6], "isHighlighted": post[7], "isSpam": post[8], "likes": post[9], "message": post[10], "parent": post[11], "points": post[12], "thread": post[13], "user": post[14] }) __cursor.close() return HttpResponse(dumps({'code': codes.OK, 'response': posts}))
def list_posts(request): cursor = connection.cursor() if request.method != "GET": cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": "request method should be GET"})) threadId = codes_and_utils.validate_id(request.GET.get("thread")) forum = request.GET.get("forum") if threadId is None and forum is None: cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": "thread id or forum id not found"})) if threadId == False: cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": "thread id should be int"})) if threadId and forum: cursor.close() return HttpResponse(dumps({"code": codes.INVALID_QUERY, "response": "you should specify thread OR forum"})) if not threadId: related_table_name = "forum" related_query = SELECT_FORUM_BY_SHORT_NAME related_params = [forum] else: related_table_name = "thread" related_query = SELECT_THREAD_BY_ID related_params = [threadId] try: cursor.execute(related_query, related_params) if cursor.rowcount == 0: cursor.close() return HttpResponse(dumps({"code": codes.NOT_FOUND, "response": "{} not found".format(related_table_name)})) except DatabaseError as db_err: cursor.close() return HttpResponse(dumps({"code": codes.UNKNOWN_ERR, "response": unicode(db_err)})) related_id = cursor.fetchone()[0] query_params = [related_id] get_post_list_specified_query = SELECT_POSTS_BY_FORUM_OR_THREAD since_date = codes_and_utils.validate_date(request.GET.get("since")) if since_date: get_post_list_specified_query += """AND post.date >= %s """ query_params.append(since_date) elif since_date == False and since_date is not None: cursor.close() return HttpResponse(dumps({"code": codes.INCORRECT_QUERY, "response": "incorrect since_date fromat"})) order = request.GET.get("order", "desc") if order.lower() not in ("asc", "desc"): cursor.close() return HttpResponse( dumps({"code": codes.INCORRECT_QUERY, "response": "incorrect order parameter: {}".format(order)}) ) get_post_list_specified_query += """ORDER BY post.date """ + order limit = request.GET.get("limit") if limit: try: limit = int(limit) except ValueError: cursor.close() return HttpResponse(dumps({"code": codes.INCORRECT_QUERY, "response": "limit should be int"})) get_post_list_specified_query += """ LIMIT %s""" query_params.append(limit) try: cursor.execute(get_post_list_specified_query.format(related_table_name), query_params) except DatabaseError as db_err: cursor.close() return HttpResponse(dumps({"code": codes.UNKNOWN_ERR, "response": unicode(db_err)})) posts = [] for post in cursor.fetchall(): posts.append( { "date": post[0].strftime("%Y-%m-%d %H:%M:%S"), "dislikes": post[1], "forum": post[2], "id": post[3], "isApproved": post[4], "isDeleted": post[5], "isEdited": post[6], "isHighlighted": post[7], "isSpam": post[8], "likes": post[9], "message": post[10], "parent": post[11], "points": post[12], "thread": post[13], "user": post[14], } ) cursor.close() return HttpResponse(dumps({"code": codes.OK, "response": posts}))