Пример #1
0
def toto_munhak_detail(munhak_seq):
    data = {}

    munhak_rows = cache.get("munhak_rows_data")
    munhak_rows_data_dict = cache.get("munhak_rows_data_dict")

    target_munhak_row = munhak_rows_data_dict.get(munhak_seq, None)
    if target_munhak_row is None:
        return abort(404)

    data["munhak_row"] = target_munhak_row

    title_same_rows = []
    writer_same_rows = []

    for munhak_row in munhak_rows:
        if target_munhak_row["title"] == munhak_row["title"]:
            title_same_rows.append(munhak_row)
        elif target_munhak_row["writer"] != "작자 미상" and target_munhak_row[
                "writer"] == munhak_row["writer"]:
            writer_same_rows.append(munhak_row)
    data["title_same_rows"] = list(reversed(title_same_rows))
    data["writer_same_rows"] = list(reversed(writer_same_rows))

    return jsonify(data)
Пример #2
0
    def get_day_language_xp_list(self,
                                 since: arrow.Arrow) -> List[DailyLanguageXp]:
        cache_key = get_key_with_prefix(
            f"{self.username}_{since.strftime('%Y-%m-%d')}", 'day_language_xp')
        lock_key = get_key_with_prefix(cache_key, 'lock')

        data = cache.get(cache_key)
        # add lock to make sure only one request is fetching response from server (hopefully)
        lock = cache.cache.inc(lock_key, delta=1)
        set_redis_expire_seconds(lock_key, 15)
        while data is None and isinstance(lock, int) and lock > 1:
            time.sleep(1)
            data = cache.get(cache_key)
            lock = cache.get(lock_key)

        if data is None:
            post_data = '''{
                profile(username: "******") {
                    day_language_xps: dayLanguageXps(since: "%s") {date language xp}
                }
            }''' % (self.username, since.strftime('%Y-%m-%d'))
            response_json = requests.post(
                'https://codestats.net/profile-graph', data=post_data).json()
            current_app.logger.info('response json from %s: %s', self.username,
                                    response_json)
            data = response_json['data']['profile']['day_language_xps']
            cache.set(cache_key, data, timeout=30 * 60)
            current_app.logger.info('set cache [%s]', cache_key)
        cache.delete(lock_key)

        self.day_language_xp_list = DailyLanguageXpSchema().load(data,
                                                                 many=True)
        return self.day_language_xp_list
Пример #3
0
def add_pick():
    user_seq = session["user"]["user_seq"]
    args = request.form

    pick_list_tmp = [args.get(f"pick{i}", "NaN") for i in range(1, 7)]
    pick_list = []
    for pick in pick_list_tmp:
        if pick == "NaN":
            pick_list.append(None)
        else:
            pick_list.append(int(pick))

    print(args, pick_list)
    # return

    if len(pick_list) != 6:
        return abort(400)

    pick_list_not_none = [x for x in pick_list if x is not None]

    if not len(pick_list_not_none) >= 2 and len(pick_list_not_none) <= 6:
        print("@#@#$")
        return abort(400)

    if len(set(pick_list_not_none)) != len(pick_list_not_none):
        return abort(400)

    munhak_rows_data = cache.get("munhak_rows_data")
    munhak_rows = copy.deepcopy(munhak_rows_data)

    for pick in pick_list_not_none:
        munhak_row = [
            x for x in munhak_rows
            if x["munhak_seq"] == pick and is_toto_target_munhak(x)
        ]
        print(munhak_row, pick)
        if len(munhak_row) == 0:
            return abort(404)

    old_pick_row = TotoPick.query.filter_by(user_seq=user_seq).first()
    if old_pick_row is not None:
        db.session.delete(old_pick_row)

    pick_row = TotoPick(
        user_seq=user_seq,
        pick1=pick_list[0],
        pick2=pick_list[1],
        pick3=pick_list[2],
        pick4=pick_list[3],
        pick5=pick_list[4],
        pick6=pick_list[5],
        add_date=datetime.now(),
    )

    db.session.add(pick_row)
    db.session.commit()

    send_discord_alert_log(f"Pick add! {str(pick_list)}")

    return "", 200
Пример #4
0
def start_live(data):
    global room_info
    # room_info = cache.get("room_info")
    room_id = data["room_id"]
    if room_id not in room_info or room_info[room_id]["room_master"] != request.sid or room_info[room_id][
        "is_playing"] is not False:
        emit("error")

    for sid in room_info[room_id]["users"]:
        if sid != request.sid and room_info[room_id]["users"][sid]["is_ready"] != True:
            emit("alert_message", "모두 준비하지 않았습니다")
            return

    munhak_rows_data = cache.get("munhak_quiz_rows_data")

    room_info[room_id]["is_playing"] = True

    selected_quiz_list = []
    quiz_data_list = []
    munhak_rows = copy.deepcopy(munhak_rows_data)
    for quiz_no in range(1, len(munhak_rows)):

        not_selected_munhak_rows = [munhak_row for munhak_row in munhak_rows if
                                    munhak_row["munhak_seq"] not in selected_quiz_list]


        if not not_selected_munhak_rows:
            break


        quiz_data = make_quiz(munhak_rows, not_selected_munhak_rows)
        quiz_data["quiz_no"] = quiz_no

        selected_quiz_list.append(quiz_data["munhak_seq"])
        quiz_data_list.append(quiz_data)

    print(quiz_data_list)

    room_info[room_id]["quiz_data_list"] = quiz_data_list

    for sid in room_info[room_id]["users"]:
        room_info[room_id]["users"][sid]["quiz_no"] = 1
        room_info[room_id]["users"][sid]["correct"] = 0
        room_info[room_id]["users"][sid]["wrong"] = 0
        room_info[room_id]["users"][sid]["score"] = 0

    game_code = uuid.uuid4()
    room_info[room_id]["game_code"] = game_code

    emit("live_started", {
        "users": room_info[room_id]["users"],
        "goal_score": room_info[room_id]["setting"]["goal_score"],
        "correct_score": room_info[room_id]["setting"]["correct_score"],
        "wrong_score": room_info[room_id]["setting"]["wrong_score"]
    }, room=room_id)

    import time
    time.sleep(303)
    if room_info[room_id]["game_code"] == game_code and room_info[room_id]["is_playing"] is True:
        end_live(room_id)
Пример #5
0
def random_munhak():
    munhak_rows_data = cache.get("munhak_rows_data")
    munhak_rows = copy.deepcopy(munhak_rows_data)

    random_munhak_row = random.choice(munhak_rows)

    return redirect(url_for("board.munhak_board_detail", munhak_seq=random_munhak_row["munhak_seq"]))
Пример #6
0
def add_tip():
    args = request.form
    munhak_seq = args.get("munhak_seq", None)
    content = args.get("content", None)
    print(args)
    if munhak_seq is None or not munhak_seq.isdigit() or content is None or type(content) != str:
        return abort(400)
    if not (1 <= len(content) <= 1000):
        return abort(400)
    munhak_seq = int(munhak_seq)

    munhak_rows_data = cache.get("munhak_rows_data")
    munhak_rows = copy.deepcopy(munhak_rows_data)
    if len([munhak_row for munhak_row in munhak_rows if munhak_row["munhak_seq"] == munhak_seq]) == 0:
        return abort(404)

    # tag_name = re.sub("[^가-힣ㄱ-ㅎㅏ-ㅣa-zA-Z0-9]", "", tag_name)

    user_seq = session["user"]["user_seq"]

    old_tip_row = Tip.query.filter_by(user_seq=user_seq, munhak_seq=munhak_seq).first()
    if old_tip_row is not None:
        return abort(409)

    tag_row = Tip(
        tip_content=content,
        user_seq=user_seq,
        munhak_seq=munhak_seq,
        add_date=datetime.now(),
    )

    db.session.add(tag_row)
    db.session.commit()

    return "", 200
Пример #7
0
        def ratelimit_wrapper(*args, **kwargs):
            ip_address = current_user.get_ip()
            key = f"{key_prefix}:{ip_address}:{request.endpoint}"
            current = cache.get(key)

            if request.method == method:
                if (current and int(current) > limit - 1):
                    return abort(429)
                else:
                    if current is None:
                        cache.set(key, 1, timeout=interval)
                    else:
                        cache.set(key, int(current) + 1, timeout=interval)

            return f(*args, **kwargs)
Пример #8
0
def pick_toto_form():
    munhak_rows_data = cache.get("munhak_rows_data")
    munhak_rows_data_dict = cache.get("munhak_rows_data_dict")

    munhak_rows = copy.deepcopy(munhak_rows_data)

    user_seq = session["user"]["user_seq"]

    data = {}
    munhak_group_data = defaultdict(list)
    for munhak_row in munhak_rows:
        if is_toto_target_munhak(munhak_row):
            munhak_group_data[munhak_row["category"]].append(munhak_row)
    data["munhak_group_data"] = munhak_group_data

    old_pick_data = []

    old_pick_row = TotoPick.query.filter_by(user_seq=user_seq).first()
    if old_pick_row is not None:
        for pick in [
                old_pick_row.pick1, old_pick_row.pick2, old_pick_row.pick3,
                old_pick_row.pick4, old_pick_row.pick5, old_pick_row.pick6
        ]:
            if pick is not None:
                old_pick_data.append(munhak_rows_data_dict[pick])

    data["old_pick_data"] = old_pick_data
    print(data)

    r = make_response(render_template("./toto/toto_form.html", data=data))
    r.set_cookie('PJAX-URL',
                 base64.b64encode(request.url.encode("UTF-8")),
                 max_age=None,
                 expires=None,
                 path='/')
    return r
Пример #9
0
 def set_real_username(self) -> None:
     # use lowercase for cache key because it's case insensitive
     username_lower = self.username.lower()
     cache_key = get_key_with_prefix(username_lower, 'real_username')
     real_username = cache.get(cache_key)
     if real_username is None:
         response = requests.get(
             f'https://codestats.net/api/users/{self.username}')
         if response.status_code == requests.codes.not_found:
             raise UserNotFoundException()
         real_username = response.json()['user']
         current_app.logger.info('got real username %s for %s',
                                 real_username, self.username)
         cache.set(cache_key, real_username, timeout=24 * 60 * 60)
         current_app.logger.info('set cache [%s]', cache_key)
     # username in profile-graph api is case sensitive so set the username to the correct one
     self.username = real_username
Пример #10
0
def index():
    munhak_rows_data = cache.get("munhak_quiz_rows_data")

    munhak_rows = copy.deepcopy(munhak_rows_data)

    source_list = sorted(list(set([munhak_row["source"] for munhak_row in munhak_rows])))
    source_dict = defaultdict(list)
    for source in source_list:
        source_dict[source[:5]].append(source)


    data = {
        "total_munhak": len(munhak_rows),
        "source_list": sorted(set([munhak_row["source"] for munhak_row in munhak_rows])),
        "source_dict" : source_dict
    }
    print(data)

    session["quiz_count"] = 0
    return render_template("quiz/index.html", data=data)
Пример #11
0
def write_tip_form(munhak_seq):
    munhak_seq = munhak_seq

    munhak_rows_data = cache.get("munhak_rows_data")
    munhak_rows = copy.deepcopy(munhak_rows_data)

    try:
        munhak_row = [munhak_row for munhak_row in munhak_rows if munhak_row["munhak_seq"] == munhak_seq][0]
    except:
        return "", 404
    data = {
        "munhak_row": munhak_row
    }

    user_seq = session["user"]["user_seq"]
    tip_row = Tip.query.filter_by(munhak_seq=munhak_seq, user_seq=user_seq).first()

    if tip_row is not None:
        data["content"] = tip_row.tip_content

    return render_template("munhak_board_tip_form.html", data=data)
Пример #12
0
def write_reading_quiz_form(munhak_seq):
    munhak_seq = munhak_seq

    munhak_rows_data = cache.get("munhak_rows_data")
    munhak_rows = copy.deepcopy(munhak_rows_data)

    munhak_row = ContentQuizMunhak.query.filter_by(
        munhak_seq=munhak_seq).first()
    if munhak_row is None:
        return abort(404)

    data = {"munhak_row": munhak_row}

    user_seq = session["user"]["user_seq"]
    quiz_row = ContentQuiz.query.filter_by(munhak_seq=munhak_seq,
                                           user_seq=user_seq).first()

    if quiz_row is not None:
        data["content"] = quiz_row.quiz_content
        print(data["content"])

    return render_template("reading_quiz_form.html", data=data)
Пример #13
0
def get_quiz():
    # import time
    # time.sleep(1)
    if "exclude_quiz_source" not in session:
        session["exclude_quiz_source"] = []



    exclude_quiz_source = session["exclude_quiz_source"]
    munhak_rows_data = copy.deepcopy(cache.get("munhak_quiz_rows_data"))

    print(exclude_quiz_source)

    # munhak_rows_data = []

    def source_check(source):
        if source in exclude_quiz_source:
            return False
        else:
            return True

    include_munhak_rows_data = [munhak_row for munhak_row in munhak_rows_data if source_check(munhak_row["source"])]

    if "is_end" in session and session["is_end"] is True:
        session["quiz_count"] = 0
        session["total_munhak"] = len(include_munhak_rows_data)
        session["solved_quiz"] = []
        session["current_munhak"] = None
        session["is_end"] = False

    if "quiz_count" not in session:
        session["quiz_count"] = 0
        session["total_munhak"] = len(include_munhak_rows_data)
    if "solved_quiz" not in session:
        session["solved_quiz"] = []
    session["result"] = None

    quiz_no = session["quiz_count"] + 1
    solved_quiz = session["solved_quiz"]

    if "_id" not in session:
        session["_id"] = uuid.uuid4()

    if "current_munhak" not in session or session["current_munhak"] is None:

        # munhak_rows = Munhak.query.filter_by(is_available=True).all()

        include_munhak_rows = copy.deepcopy(include_munhak_rows_data)
        all_munhak_rows = copy.deepcopy(munhak_rows_data)


        not_solved_munhak_rows = [munhak_row for munhak_row in include_munhak_rows if
                                  munhak_row["munhak_seq"] not in solved_quiz]

        if len(not_solved_munhak_rows) == 0:  # 다 맞았을 때
            session["result"] = True
            return "wow", 404

        quiz_data = make_quiz(include_munhak_rows, not_solved_munhak_rows, all_munhak_rows=all_munhak_rows)

        session["correct"] = simpleEnDecrypt.encrypt(f"{quiz_data['correct']}:{uuid.uuid4()}")

        session["current_munhak"] = {
            "munhak_seq": quiz_data["munhak_seq"],
            "source": quiz_data["source"],
            "category": quiz_data["category"],
            "hint": quiz_data["hint"],
            # "title": correct_munhak_row["title"],
            # "writer": correct_munhak_row["writer"]
        }
        session["options"] = [munhak_row for munhak_row in quiz_data["option_munhak_rows"]]
        data = {
            "quiz_no": quiz_no,
            "type": "객관식",
            "category": quiz_data["category"],
            "hint": quiz_data["hint"],
            "options": quiz_data["options"],
            "total_munhak": len(include_munhak_rows_data)
        }
        print(data)
        #
        return render_template("quiz/quiz.html", data=data)
    else:
        # print(hint)
        data = {
            "quiz_no": quiz_no,
            "type": "객관식",
            "category": session["current_munhak"]["category"],
            "hint": session["current_munhak"]["hint"],
            "options": [
                f"{munhak_row['writer']}, 『{munhak_row['title']}』" for munhak_row in session["options"]
            ],
            "total_munhak": len(include_munhak_rows_data)
        }
        print(data)
        #
        return render_template("quiz/quiz.html", data=data)
Пример #14
0
def add_video():
    from urllib import parse

    args = request.form
    munhak_seq = args.get("munhak_seq", None)
    munhak_source = args.get("munhak_source", None)
    video_url = args.get("video_url", None)
    type = args.get("type", None)

    munhak_rows_data = cache.get("munhak_rows_data")
    munhak_rows = copy.deepcopy(munhak_rows_data)

    print(munhak_rows)
    print(munhak_seq)
    print(munhak_source)

    if type == "munhak":
        munhak_seq = int(munhak_seq)
        if len([munhak_row for munhak_row in munhak_rows if munhak_row["munhak_seq"] == munhak_seq]) == 0:
            return abort(404)

    elif type == "exam":
        if len([munhak_row for munhak_row in munhak_rows if munhak_row["source"] == munhak_source]) == 0:
            return abort(404)
    else:
        return abort(404)

    parts = parse.urlparse(video_url)
    query = parse.parse_qs(parts.query)
    print(query)

    video_code = ""
    start_time = "0"

    try:
        if "v" in query:
            video_code = query["v"][0]
            if "t" in query:
                start_time = query["t"][0]
            else:
                start_time = "0"
        else:
            if parts.netloc == "youtu.be":
                video_code = parts.path[1:]
                if "t" in query:
                    start_time = query["t"][0]

                else:
                    start_time = "0"

        if not start_time.isdigit():
            return abort(400)

        video_url = f"https://youtu.be/{video_code}?t={start_time}"
        print(video_url)
        res = requests.get("https://www.googleapis.com/youtube/v3/videos", params={
            "key": YOUTUBE_KEY, "part": "snippet", "id": video_code
        })
        print(res.text)
        video = json.loads(res.text)["items"][0]
    except:
        return abort(400)

    user_seq = session["user"]["user_seq"]

    video_title = video["snippet"]["title"].replace("&#39;", "'")

    video_thumbnail = None
    if "standard" in video["snippet"]["thumbnails"]:
        video_thumbnail = video["snippet"]["thumbnails"]["standard"]["url"]
    elif "high" in video["snippet"]["thumbnails"]:
        video_thumbnail = video["snippet"]["thumbnails"]["high"]["url"]
    elif "medium" in video["snippet"]["thumbnails"]:
        video_thumbnail = video["snippet"]["thumbnails"]["medium"]["url"]
    elif "default" in video["snippet"]["thumbnails"]:
        video_thumbnail = video["snippet"]["thumbnails"]["default"]["url"]

    if video_thumbnail is None:
        return abort(404)

    if type == "munhak":
        old_video_row = Video.query.filter_by(munhak_seq=munhak_seq, youtube_code=video_code).first()
        if old_video_row is not None:
            return abort(409)

        video_row = Video(user_seq=user_seq, munhak_seq=munhak_seq, youtube_url=video_url, youtube_title=video_title,
                          youtube_thumbnail=video_thumbnail, add_date=datetime.now(), youtube_code=video_code)
        db.session.add(video_row)
        db.session.commit()
    else:
        old_video_row = Video.query.filter_by(munhak_source=munhak_source, youtube_code=video_code).first()
        if old_video_row is not None:
            return abort(409)

        video_row = Video(user_seq=user_seq, munhak_source=munhak_source, youtube_url=video_url,
                          youtube_title=video_title,
                          youtube_thumbnail=video_thumbnail, add_date=datetime.now(), youtube_code=video_code)
        db.session.add(video_row)
        db.session.commit()

    return "", 200
Пример #15
0
def munhak_board_detail(munhak_seq, munhak_title):
    # import time
    # time.sleep(2)

    munhak_rows_data = cache.get("munhak_rows_data")
    munhak_rows = copy.deepcopy(munhak_rows_data)

    target_munhak_row = None
    for munhak_row in munhak_rows:
        if munhak_row["munhak_seq"] == munhak_seq:
            target_munhak_row = munhak_row

    if target_munhak_row is None:
        return render_template("munhak_board_detail_404.html")

    if munhak_title != format_url_title(target_munhak_row["title"]):
        return redirect(url_for('board.munhak_board_detail', munhak_seq=munhak_seq,
                                munhak_title=format_url_title(target_munhak_row["title"])))

    if "user" in session:
        user_seq = session["user"]["user_seq"]
    else:
        user_seq = -1

    munhak_video_rows = Video.query.filter_by(munhak_seq=target_munhak_row["munhak_seq"]).all()
    exam_video_rows = Video.query.filter_by(munhak_source=target_munhak_row["source"]).all()

    munhak_video_list = [
        dict(video_row.as_dict(), **{"is_mine": "true" if video_row.user_seq == user_seq else "false"}) for video_row
        in munhak_video_rows]
    exam_video_list = [
        dict(video_row.as_dict(), **{"is_mine": "true" if video_row.user_seq == user_seq else "false"}) for video_row
        in exam_video_rows]

    tag_rows = db.session.query(Tag, func.count(Like.like_seq).label("like_count"),
                                func.count(Like.like_seq).filter(Like.user_seq == user_seq).label("liked")

                                ).outerjoin(
        Like,
        Tag.tag_seq == Like.tag_seq).filter(Tag.munhak_seq == munhak_seq).group_by(Tag.tag_seq).order_by(
        desc("like_count")).all()

    tip_rows = db.session.query(Tip, func.count(Like.like_seq).label("like_count"),
                                func.count(Like.like_seq).filter(Like.user_seq == user_seq).label("liked")

                                ).outerjoin(
        Like,
        Tip.tip_seq == Like.tip_seq).filter(Tip.munhak_seq == munhak_seq).group_by(Tip.tip_seq).order_by(
        desc("like_count")).all()

    # return "DD"
    tips = [dict(tip_row.Tip.as_dict(),
                 **{"like_count": tip_row.like_count, "liked": "true" if tip_row.liked == 1 else "false",
                    "is_mine": "true" if tip_row.Tip.user_seq == user_seq else "false",
                    "user_nickname": tip_row.Tip.user.nickname}, ) for
            tip_row in tip_rows]

    tip_mine_exist = False
    for tip in tips:
        tip_mine_exist = tip_mine_exist or (tip["is_mine"] == "true")

    try:
        subject_last_word = target_munhak_row["subject"].split()[-1]
    except:
        subject_last_word = "N"
    print(subject_last_word)
    related_list = [munhak_row for munhak_row in munhak_rows
                    if (
                            munhak_row["title"] in target_munhak_row["title"] or
                            (target_munhak_row["writer"] != "작자 미상" and
                             munhak_row["writer"] == target_munhak_row["writer"]) or
                            target_munhak_row["title"] in munhak_row["title"]
                    ) and (munhak_row["munhak_seq"] != target_munhak_row["munhak_seq"])]

    related_list_subject = [munhak_row for munhak_row in munhak_rows if
                            (subject_last_word in munhak_row["subject"].split(" ")) and (
                                    munhak_row["munhak_seq"] != target_munhak_row[
                                "munhak_seq"]) and munhak_row not in related_list]

    random.shuffle(related_list_subject)
    related_list_subject = related_list_subject[:min(5, len(related_list_subject))]

    # related_list = list(related_list)
    print(related_list)

    data = {
        "munhak_seq": munhak_seq,
        "title": target_munhak_row["title"],
        "writer": target_munhak_row["writer"],
        "source": target_munhak_row["source"],
        "category": target_munhak_row["category"],
        "munhak_video_list": munhak_video_list,
        "exam_video_list": exam_video_list,
        "subject": target_munhak_row["subject"],
        "tags": [dict(tag_row.Tag.as_dict(),
                      **{"like_count": tag_row.like_count, "liked": "true" if tag_row.liked == 1 else "false",
                         "is_mine": "true" if tag_row.Tag.user_seq == user_seq else "false"}) for
                 tag_row in tag_rows],
        "tips": tips,
        "tip_mine_exist": tip_mine_exist,
        "related_list": related_list,
        "related_list_subject": related_list_subject
    }
    print(request.url)
    r = make_response(render_template("munhak_board_detail.html", data=data))
    r.set_cookie('PJAX-URL', base64.b64encode(request.url.encode("UTF-8")), max_age=None, expires=None, path='/')

    return r
Пример #16
0
def munhak_board_list():


    cookies = request.cookies




    munhak_rows_data = cache.get("munhak_rows_data")
    munhak_rows = copy.deepcopy(munhak_rows_data)

    args = request.args
    query = args.get("query", None)
    tag = args.get("tag", None)
    category = args.get("category", None)
    source = args.get("source", None)
    clear = args.get("clear", None)

    if "query" not in cookies:
        clear = True



    query_cookie = ""
    if query is not None:
        query_cookie += query + " "

    source_list = sorted(list(set([munhak_row["source"] for munhak_row in munhak_rows])))
    if clear is not None:
        if category is not None:
            query_cookie += " $" + category + " "
        else:
            query_cookie += "".join([" $" + x + " " for x in ["고전시가", "현대시", "고전산문", "현대소설", "극", "수필"]])

        if source is not None:
            query_cookie += " @" + source + " "
        else:
            query_cookie += "".join([" @" + x.replace(" ", "-") + " " for x in source_list])

        if tag is not None:
            query_cookie += " #" + tag + " "

        print(query_cookie)
        resp = make_response(redirect(url_for("board.munhak_board_list")))
        resp.set_cookie('query', base64.b64encode(query_cookie.encode("UTF-8")))
        resp.set_cookie("page", "1")
        return resp

    # print(query, tags)

    try:
        page = int(request.cookies.get("page", 1))
    except:
        page = 1
    print(page * 10000000)

    page_size = 10

    source_dict = defaultdict(list)
    for source in source_list:
        source_dict[source[:5]].append(source)

    data = {
        "source_dict": source_dict
    }

    resp = make_response(render_template("munhak_board_list.html", data=data))

    # resp.set_cookie('query', base64.b64encode(query_cookie.encode("UTF-8")))
    resp.set_cookie("page", str(page))
    resp.set_cookie('PJAX-URL', base64.b64encode(request.url.encode("UTF-8")), max_age=None, expires=None, path='/')
    return resp
Пример #17
0
def munhak_board_render_card():
    munhak_rows_data = cache.get("munhak_rows_data")
    munhak_rows = copy.deepcopy(munhak_rows_data)

    args = request.args
    query = args.get("q", "")
    # tags = args.get("tags", None)

    query_list = query.split()
    origin_query_list = copy.deepcopy(query_list)
    try:
        page = int(args.get("page", 1))
    except:
        page = 1
    page_size = 10
    # query_list.remove("#")
    print(query)
    print(query_list)
    query_source_list = [word[1:].replace("-", " ") for word in query_list if word[0] == "@"]
    print("qsl", query_source_list)
    query_category_list = [word[1:] for word in query_list if word[0] == "$"]
    print("qcl", query_category_list)

    query_list = [word for word in query_list if word[0] != "@" and word[0] != "$"]

    if len(query_list) != 0:
        query_munhak_seq_set = set()

        for word in query_list:

            if word[0] != "#":
                for munhak_row in munhak_rows:
                    if word in munhak_row["title"].replace(" ", "") or word == munhak_row["writer"]:
                        query_munhak_seq_set.add(munhak_row["munhak_seq"])

        print(Tag.query.filter(
            Tag.tag_name.in_([word[1:] for word in query_list if word[0] == "#"])).all())

        tag_rows = Tag.query.filter(
            Tag.tag_name.in_([word[1:] for word in query_list if word[0] == "#"])).all()

        for tag_row in tag_rows:
            query_munhak_seq_set.add(tag_row.munhak_seq)
        # query_munhak_seq_set.add()

        print(query_munhak_seq_set)

        query_munhak_rows = [
            [munhak_row for munhak_row in munhak_rows if munhak_seq == munhak_row["munhak_seq"]][0] for munhak_seq in
            query_munhak_seq_set]
        print(query_munhak_rows)

    else:
        query_munhak_rows = munhak_rows

    query_munhak_rows = [
        munhak_row for munhak_row in query_munhak_rows if munhak_row["source"] in query_source_list and munhak_row[
            "category"] in query_category_list]

    query_munhak_rows = sorted(query_munhak_rows, key=lambda x: (x["source"][:5], x["source"]), reverse=True)

    data = {
        "page": page,
        "max_page": (len(query_munhak_rows) - 1) // page_size + 1,
        "query": query,
        "munhak_rows": [
            {
                "munhak_seq": munhak_row["munhak_seq"],
                "title": munhak_row["title"],
                "writer": munhak_row["writer"],
                "source": munhak_row["source"],
                "category": munhak_row["category"],
                "tags": [tag_row.tag_name for tag_row in
                         db.session.query(Tag)
                             .outerjoin(Like, Tag.tag_seq == Like.tag_seq)
                             .filter(Tag.munhak_seq == munhak_row["munhak_seq"])
                             .group_by(Tag.tag_seq)
                             .order_by(desc(func.count(Like.like_seq).label("like_count")))
                             .all()
                         ][:5],

            } for munhak_row in query_munhak_rows[(page - 1) * page_size:  page * page_size]
        ],
        "search_query_tags": [word[1:] for word in query_list if word[0] == "#"],
        "total_rows": len(query_munhak_rows)
    }
    print([word[1:] for word in query_list if word[0] == "#"])
    resp = make_response(render_template("munhak_board_card.html", data=data))

    query_cookie = " ".join(origin_query_list)
    resp.set_cookie('query', base64.b64encode(query_cookie.encode("UTF-8")))
    # print( )

    return resp
Пример #18
0
def toto_index():
    munhak_rows_data_dict = cache.get("munhak_rows_data_dict")
    pick_deadline = datetime(2021, 11, 16, 23, 59, 59)
    toto_real_result = [120, 122, 124, 126, 128, 130]
    is_result_open = False

    data = {}
    data["is_result_open"] = is_result_open

    try:
        user_seq = session["user"]["user_seq"]
    except:
        user_seq = None
    data["user_seq"] = user_seq

    print(data)

    if datetime.now() < pick_deadline:
        # 픽 가능
        data["is_pick_available"] = True
        pick_rows = TotoPick.query.all()

        pick_list = [{
            "nickname": x.user.nickname,
            "pick1": munhak_rows_data_dict.get(x.pick1),
            "pick2": munhak_rows_data_dict.get(x.pick2),
            "pick3": munhak_rows_data_dict.get(x.pick3),
            "pick4": munhak_rows_data_dict.get(x.pick4),
            "pick5": munhak_rows_data_dict.get(x.pick5),
            "pick6": munhak_rows_data_dict.get(x.pick6),
            "date": x.add_date.strftime("%Y-%m-%d"),
            "user_seq": x.user.user_seq
        } for x in pick_rows]

        print(pick_list)

        random.shuffle(pick_list)
        data["pick_list"] = pick_list

        resp = make_response(render_template("toto/index.html", data=data))
        resp.set_cookie('PJAX-URL',
                        base64.b64encode(request.url.encode("UTF-8")),
                        max_age=None,
                        expires=None,
                        path='/')
        return resp
    else:
        # 픽 종료
        data["is_pick_available"] = False
        if is_result_open:
            pass
        else:
            pick_rows = TotoPick.query.all()

            pick_list = [{
                "nickname": x.user.nickname,
                "pick1": munhak_rows_data_dict.get(x.pick1),
                "pick2": munhak_rows_data_dict.get(x.pick2),
                "pick3": munhak_rows_data_dict.get(x.pick3),
                "pick4": munhak_rows_data_dict.get(x.pick4),
                "pick5": munhak_rows_data_dict.get(x.pick5),
                "pick6": munhak_rows_data_dict.get(x.pick6),
                "date": x.add_date.strftime("%Y-%m-%d"),
                "user_seq": x.user.user_seq
            } for x in pick_rows]

            random.shuffle(pick_list)
            data["pick_list"] = pick_list

            resp = make_response(render_template("toto/index.html", data=data))
            resp.set_cookie('PJAX-URL',
                            base64.b64encode(request.url.encode("UTF-8")),
                            max_age=None,
                            expires=None,
                            path='/')
            return resp
Пример #19
0
def get_quiz():
    # import time
    # time.sleep(1)
    # time.sleep(1)
    if "quiz_source" not in session:
        session["quiz_source"] = "all"
    else:
        quiz_source = session["quiz_source"]

    quiz_rows_data = cache.get("quiz_data")

    # if quiz_source == "s1":
    #     munhak_rows_data = [munhak_row for munhak_row in munhak_rows_data if
    #                         munhak_row["source"].split()[-1] != "수능특강" and munhak_row["source"].split()[-1] != "수능완성"]
    # elif quiz_source == "s2":
    #     munhak_rows_data = [munhak_row for munhak_row in munhak_rows_data if
    #                         munhak_row["source"].split()[-1] == "수능특강" or munhak_row["source"].split()[-1] == "수능완성"]
    #
    # if "is_end" in session and session["is_end"] is True:
    #     session["quiz_count"] = 0
    #     session["total_munhak"] = len(munhak_rows_data)
    #     session["solved_quiz"] = []
    #     session["current_munhak"] = None
    #     session["is_end"] = False
    #
    # if "quiz_count" not in session:
    #     session["quiz_count"] = 0
    #     session["total_munhak"] = len(munhak_rows_data)
    if "solved_quiz" not in session:
        session["solved_quiz"] = []
    # session["result"] = None
    #
    # quiz_no = session["quiz_count"] + 1
    solved_quiz = session["solved_quiz"]
    #
    # if "_id" not in session:
    #     session["_id"] = uuid.uuid4()

    if "current_quiz" not in session or session["current_quiz"] is None:

        # munhak_rows = Munhak.query.filter_by(is_available=True).all()

        quiz_rows = copy.deepcopy(quiz_rows_data)

        not_solved_quiz_rows = [quiz_row for quiz_row in quiz_rows if
                                quiz_row["quiz_seq"] not in solved_quiz]

        if len(not_solved_quiz_rows) == 0:  # 다 맞았을 때
            session["solved_quiz"] = []
            not_solved_quiz_rows = quiz_rows

        quiz_data = make_quiz(quiz_rows, not_solved_quiz_rows)

        session["current_quiz"] = quiz_data

        if quiz_data["type"] == "choose":
            data = {
                "wrong_sentence": quiz_data["wrong_sentence"],
                "type": quiz_data["type"]
            }
        elif quiz_data["type"] == "option":
            data = {
                "problem_sentence": quiz_data["problem_sentence"],
                "key_list": quiz_data["key_list"],
                "type" : quiz_data["type"]
            }

        return render_template("quiz.html", data=data)
    else:
        if session["current_quiz"]["type"] == "choose":

            data = {
                "wrong_sentence": session["current_quiz"]["wrong_sentence"],
                "type": session["current_quiz"]["type"],
            }
        elif session["current_quiz"]["type"] == "option":
            data = {
                "problem_sentence": session["current_quiz"]["problem_sentence"],
                "key_list": session["current_quiz"]["key_list"],
                "type": session["current_quiz"]["type"]
            }
        # print(hint)

        return render_template("quiz.html", data=data)
Пример #20
0
def index():
    quiz_data = cache.get("quiz_data")

    quiz_rows = copy.deepcopy(quiz_data)

    return render_template("index_new.html")