예제 #1
0
파일: details.py 프로젝트: niggor/apiDB
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'}))
    email = request.GET.get('user')
    # 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 not found'}))
    user_id = __cursor.fetchone()[0]

    try:
        user, related_ids = get_user_by_id(__cursor, user_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': user}))    
예제 #2
0
파일: listUsers.py 프로젝트: niggor/apiDB
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}))
예제 #3
0
파일: follow.py 프로젝트: niggor/apiDB
def follow(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:
        follower = unicode(json_request['follower'])
        followee = unicode(json_request['followee'])
    except KeyError as key_err:
        __cursor.close()
        return HttpResponse(dumps({'code': codes.INCORRECT_QUERY,
                                   'response': 'Not found: {}'.format(str(key_err))}))  

    # validate users
    users = [] 
    for email in [follower, followee]:
        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 with not found'}))
        user_id = __cursor.fetchone()[0]
        users.append(user_id)

    try:
        __cursor.execute(INSERT_FOLLOWER, users)  
    except IntegrityError:
        pass
    except DatabaseError as db_err: 
        __cursor.close()
        return HttpResponse(dumps({'code': codes.UNKNOWN_ERR,
                                   'response': unicode(db_err)}))  
    
    try:
        user, related_ids = get_user_by_id(__cursor, users[0])
    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': user}))
예제 #4
0
파일: details.py 프로젝트: niggor/apiDB
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'}))
    short_name = request.GET.get('forum')
    if not short_name:
        __cursor.close()
        return HttpResponse(dumps({'code': codes.INVALID_QUERY,
                                   'response': 'forum name not found'})) 
    try:
        __cursor.execute(SELECT_FORUM_BY_SHORT_NAME_FULL, [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 = __cursor.fetchone()
    response = {"id": forum[0],
                "name": forum[1],
                "short_name": forum[2]
               }

    related = request.GET.get('related')
    if related:
        if related != 'user':
            __cursor.close()
            return HttpResponse(dumps({'code': codes.INCORRECT_QUERY,
                                       'response': 'incorrect related parameter: {}'.format(related)}))
        user_id = forum[4]
        try:
            user, related_ids = get_user_by_id(__cursor, user_id)
        except DatabaseError as db_err: 
            __cursor.close()
            return HttpResponse(dumps({'code': codes.UNKNOWN_ERR,
                                       'response': unicode(db_err)}))
        response['user'] = user
        
    else:
        response["user"] = forum[3]  
        __cursor.close()       
    return HttpResponse(dumps({'code': codes.OK,
                               'response': response}))
예제 #5
0
def updateProfile(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:
        name = json_request['name']
        email = json_request['user']
        about = json_request['about']
    except KeyError as key_err:
        cursor.close()
        return HttpResponse(dumps({'code': codes.INCORRECT_QUERY,
                                   'response': 'Not found: {}'.format(str(key_err))}))
    try:
        cursor.execute(SELECT_USER_BY_EMAIL, [email, ])
        if cursor.rowcount == 0:
            return HttpResponse(dumps({'code': codes.INVALID_QUERY,
                                       'response': 'user does not exist'}))
    except DatabaseError as db_err:
        cursor.close()
        return HttpResponse(dumps({'code': codes.UNKNOWN_ERR,
                                   'response': str(db_err)}))

    userId = cursor.fetchone()[0]
    try:
        cursor.execute(UPDATE_USER, [about, name, userId])
    except DatabaseError as db_err:
        cursor.close()
        return HttpResponse(dumps({'code': codes.UNKNOWN_ERR,
                                   'response': str(db_err)}))

    try:
        user, related_ids = get_user_by_id(cursor, userId)
    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': user}))
예제 #6
0
def details(request):
    cursor = connection.cursor()
    if request.method != "GET":
        cursor.close()
        return HttpResponse(dumps({"code": general_utils.INVALID_QUERY, "response": "request method should be GET"}))
    short_name = request.GET.get("forum")
    if not short_name:
        cursor.close()
        return HttpResponse(dumps({"code": general_utils.INVALID_QUERY, "response": "forum name not found"}))
    try:
        cursor.execute(SELECT_FORUM_BY_SHORT_NAME_FULL, [short_name])
        if cursor.rowcount == 0:
            cursor.close()
            return HttpResponse(dumps({"code": general_utils.NOT_FOUND, "response": "forum not found"}))
    except DatabaseError as db_err:
        cursor.close()
        return HttpResponse(dumps({"code": general_utils.UNKNOWN_ERR, "response": unicode(db_err)}))
    forum = cursor.fetchone()
    response = {"id": forum[0], "name": forum[1], "short_name": forum[2]}

    related = request.GET.get("related")
    if related:
        if related != "user":
            cursor.close()
            return HttpResponse(
                dumps(
                    {
                        "code": general_utils.INCORRECT_QUERY,
                        "response": "incorrect related parameter: {}".format(related),
                    }
                )
            )
        user_id = forum[4]
        try:
            user, related_itemids = get_user_by_id(cursor, user_id)
        except DatabaseError as db_err:
            cursor.close()
            return HttpResponse(dumps({"code": general_utils.UNKNOWN_ERR, "response": unicode(db_err)}))
        response["user"] = user

    else:
        response["user"] = forum[3]
        cursor.close()
    return HttpResponse(dumps({"code": general_utils.OK, "response": response}))
예제 #7
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
                               }))
예제 #8
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}))