Example #1
0
def get_posts() -> Any:
    args = parse_args(Config.ARGS, request.args)
    valid, message = validate_args(Config.ARGS, args)
    if not valid:
        return make_response(jsonify({"error": message}), 400)

    if args["update"] == "sync":
        logger.info("sync update requested")
        Post.fetch_all(Config)
        logger.info("sync update done")
    if args["update"] == "async":
        logger.info("async update requested")
        redis_conn = Redis(host=Config.REDIS_HOST,
                           port=Config.REDIS_PORT,
                           db=Config.REDIS_DB)
        q = Queue(connection=redis_conn)  # no args implies the default queue
        job = q.enqueue(Post.fetch_all, Config)
        logger.info(f"job for async update issued, job id: {job.id}")
        return make_response(
            jsonify({"message": f"update requested, job id: {job.id}"}), 200)

    query = Post.query_posts(
        sort=args["sort"],
        order=args["order"],
        limit=args["limit"],
        offset=args["offset"],
    )

    return make_response(jsonify([p.to_dict() for p in query]), 200)