def forum_details():
    connection = dbConnector.connect()
    params = functions.get_json(request)
    try:
        functions.check(params, ["forum"])
        response = forum.details(
            connection, params["forum"], functions.get_related(params))
    except Exception, e:
        connection.close()
        return json.dumps({"code": 3, "response": e.message})
def forum_list_users():
    connection = dbConnector.connect()
    params = functions.get_json(request)
    optional = functions.get_optional(params, ["since_id", "limit", "order"])
    try:
        functions.check(params, ["forum"])
        response = forum.forum_listUsers(
            connection=connection, optional=optional, forum_shortname=params["forum"][0])
    except Exception, e:
        connection.close()
        return json.dumps({"code": 3, "response": e.message})
def forum_list_threads():
    connection = dbConnector.connect()
    params = functions.get_json(request)
    optional = functions.get_optional(params, ["since", "limit", "order"])
    related = functions.get_related(params)
    try:
        functions.check(params, ["forum"])
        response = thread.list(connection=connection, optional=optional,
                               required=params, related=related)
    except Exception, e:
        connection.close()
        return json.dumps({"code": 3, "response": e.message})
def post_details():
    connection = dbConnector.connect()
    params = functions.get_json(request)
    required_data = ["post"]
    related = functions.get_related(params)
    try:
        functions.check(params, required_data)
        response = post.details(connection, params["post"], related)
    except Exception as e:
        connection.close()
        return json.dumps({"code": 1, "response": e.message})
    connection.close()
    return json.dumps({"code": 0, "response": response})
def user_details():

    connection = dbConnector.connect()
    params = functions.get_json(request)

    try:
        functions.check(params, ["user"])
        userr = user.details(connection, params["user"])
    except Exception as e:
        connection.close()
        return json.dumps({"code": 1, "response": e.message})

    connection.close()
    return json.dumps({"code": 0, "response": userr})
def list_posts():
    connection = dbConnector.connect()
    params = functions.get_json(request)
    optional = functions.get_optional(
        request=params, values=["limit", "order", "since", "sort"])
    try:
        functions.check(params, ["thread"])
        response = post.posts_list(
            connection=connection, entity="thread", params=optional, identifier=params["thread"], related=[])
    except Exception as e:
        connection.close()
        return json.dumps({"code": 1, "response": e.message})
    connection.close()
    return json.dumps({"code": 0, "response": response})
def user_listFollowers():

    connection = dbConnector.connect()

    params = functions.get_json(request)

    optional = functions.get_optional(params, ["limit", "order", "since_id"])

    try:
        functions.check(params, ["user"])
        response = user.listFollowers(connection, params["user"], optional)
    except Exception as e:
        connection.close()
        return json.dumps({"code": 1, "response": e.message})
    connection.close()
    return json.dumps({"code": 0, "response": response})
def forum_list_posts():
    connection = dbConnector.connect()
    params = functions.get_json(request)
    optional = functions.get_optional(
        params,
        ["since",
         "limit",
         "order"]
    )
    related = functions.get_related(params)
    try:
        functions.check(params, ["forum"])
        response = post.posts_list(connection, entity="forum", params=optional, identifier=params[
                                   "forum"], related=related)
    except Exception, e:
        connection.close()
        return json.dumps({"code": 3, "response": e.message})
def details_thread():

    connection = dbConnector.connect()
    params = functions.get_json(request)
    required_data = ["thread"]
    related = functions.get_related(params)

    if 'thread' in related:
        connection.close()
        return json.dumps({"code": 3, "response": "error"})
    try:
        functions.check(params, required_data)
        response = thread.details(connection, params["thread"], related)
    except Exception as e:
        connection.close()
        return json.dumps({"code": 1, "response": e.message})
    connection.close()
    return json.dumps({"code": 0, "response": response})
def list_thread():

    connection = dbConnector.connect()

    params = functions.get_json(request)

    optional = functions.get_optional(
        request=params, values=["since", "limit", "order"])

    try:
        response = thread.list(connection=connection, required=params,
                               optional=optional, related=[])
    except Exception as e:
        connection.close()
        return json.dumps({"code": 1, "response": e.message})

    connection.close()
    return json.dumps({"code": 0, "response": response})
def post_list():
    connection = dbConnector.connect()
    content = functions.get_json(request)
    try:
        identifier = content["forum"]
        entity = "forum"
    except KeyError:
        try:
            identifier = content["thread"]
            entity = "thread"
        except Exception as e:
            connection.close()
            return json.dumps({"code": 1, "response": e.message})

    optional = functions.get_optional(
        request=content, values=["limit", "order", "since"])
    try:
        p_list = post.posts_list(
            connection=connection, entity=entity, params=optional, identifier=identifier, related=[])
    except Exception as e:
        connection.close()
        return json.dumps({"code": 1, "response": e.message})
    connection.close()
    return json.dumps({"code": 0, "response": p_list})