Esempio n. 1
0
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}))
Esempio n. 2
0
 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}}))
Esempio n. 3
0
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}}))
Esempio n. 4
0
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}))
Esempio n. 5
0
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}))
Esempio n. 6
0
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}))
Esempio n. 7
0
File: vote.py Progetto: niggor/apiDB
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}))
Esempio n. 8
0
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)}}))
Esempio n. 9
0
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}))
Esempio n. 10
0
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}))
Esempio n. 11
0
 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
Esempio n. 12
0
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}))
Esempio n. 13
0
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}))
Esempio n. 14
0
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
                               }))
Esempio n. 15
0
    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})) 
Esempio n. 16
0
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
                               }))
Esempio n. 17
0
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}))
Esempio n. 18
0
File: list.py Progetto: niggor/apiDB
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})) 
Esempio n. 19
0
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}))