Skip to content

Commit

Permalink
bugfixes
Browse files Browse the repository at this point in the history
  • Loading branch information
bunjdo committed Jan 26, 2022
1 parent a43f2f2 commit a5cf2c6
Show file tree
Hide file tree
Showing 13 changed files with 646 additions and 457 deletions.
946 changes: 586 additions & 360 deletions client/package-lock.json

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions client/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "client",
"version": "0.0.1",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
Expand All @@ -12,7 +12,7 @@
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^0.21.1",
"axios": "^0.21.4",
"classnames": "^2.2.6",
"howler": "^2.2.0",
"konva": "^7.1.3",
Expand Down
2 changes: 1 addition & 1 deletion client/src/feud/Question.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const Question = ({game, showHiddenAnswers, className, onSelect}) => {
const answers = [];
let strikesContainersCount = 0;
game.question.answers.forEach((answer, index) => {
let isAnswerOpened = (game.state !== "final_questions") ? answer.is_opened : answer.is_final_answered
let isAnswerOpened = (game.state !== "final_questions") ? answer.is_opened : showHiddenAnswers && answer.is_final_answered
answers.push(
<div key={'answer_' + index}
onClick={() => !isAnswerOpened && onSelect(answer.id)}
Expand Down
2 changes: 1 addition & 1 deletion client/src/feud/View.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ const useStateContent = (game) => {
case "final_questions_reveal":
return <FinalQuestions game={game} className={styles.question}/>;
case "end":
return <TextContent>{answerer.score > 200 ? "Victory" : "Defeat"}</TextContent>;
return <TextContent>{answerer.final_score > 200 ? "Victory" : "Defeat"}: {answerer.final_score}</TextContent>;
default:
return <TextContent>Friends Feud</TextContent>
}
Expand Down
8 changes: 4 additions & 4 deletions mobile/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ packages:
name: async
url: "https://pub.dartlang.org"
source: hosted
version: "2.6.1"
version: "2.8.1"
boolean_selector:
dependency: transitive
description:
Expand All @@ -28,7 +28,7 @@ packages:
name: charcode
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
version: "1.3.1"
clock:
dependency: transitive
description:
Expand Down Expand Up @@ -188,7 +188,7 @@ packages:
name: meta
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
version: "1.7.0"
nested:
dependency: transitive
description:
Expand Down Expand Up @@ -396,7 +396,7 @@ packages:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.3.0"
version: "0.4.2"
typed_data:
dependency: transitive
description:
Expand Down
28 changes: 16 additions & 12 deletions parser/feud_parser.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import datetime

import random
from bs4 import BeautifulSoup
import requests
import re
import traceback
import json
from lxml import etree
from collections import OrderedDict


class _Getch:
Expand Down Expand Up @@ -126,7 +127,7 @@ def process_game_pack(_data: dict):

answers_for_print = [f'{answer[0]}: {answer[1]}' for answer in norm_answers]
print(f'{question}: {", ".join(answers_for_print)}')
print('y - Accept\nd - Decline and remove\nany other key - Decline but keep\nEnter command:')
print('y - Accept\nd - Decline and remove\nq - Exit\nany other key - Decline but keep\nEnter command:')
char = getch()
if char == 'y':
if len(questions_xml) < 4:
Expand All @@ -136,6 +137,8 @@ def process_game_pack(_data: dict):
_data_to_remove[question] = _data[question]
elif char == 'd':
_data_to_remove[question] = _data[question]
elif char == 'q':
return False
else:
pass

Expand All @@ -149,24 +152,25 @@ def process_game_pack(_data: dict):
f.write(content.decode("utf-8"))
f.close()
all(map(_data.pop, _data_to_remove))
return
return True

with open(path) as json_file:
with open(path, 'r+') as json_file:
data = json.load(json_file)
while data:
process_game_pack(data)
json.dump(data, path, ensure_ascii=False)
is_continue = True
while is_continue and data:
is_continue = process_game_pack(data)
json.dump(data, json_file, ensure_ascii=False)


def parse():
questions = parse_100k1_biniko_com()
items = list(questions.items())
random.shuffle(items)
questions = OrderedDict(items)
with open('parsed_data/100k1_biniko_com.json', 'w', encoding="utf-8") as file:
json.dump(questions, file, ensure_ascii=False)


def process():
create_games_from_json('parsed_data/100k1_biniko_com.json')


if __name__ == '__main__':
process()
# parse()
create_games_from_json('parsed_data/100k1_biniko_com.json')
51 changes: 6 additions & 45 deletions parser/weakest_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,54 +47,14 @@ def __call__(self):
getch = _Getch()


def parse_100k1_biniko_com():
questions = {}
BASE_URL = 'http://web.archive.org/web/20190202203822/http://100k1.biniko.com'

def parse_text(text, delimiter='\n'):
def parse_text_item(item):
item = re.sub(r'\d\.', '', item).replace('-', '').strip()
value = re.search(r'\.*(\d+)', item)
if value:
value = value.group(0)
item = item.replace(value, '').strip()
return item, value
return item
return [parse_text_item(item) for item in text.split(delimiter) if item.strip()]

def parse_item(question, url):
try:
soup = BeautifulSoup(
requests.get(f'{BASE_URL}/{url}').text,
'lxml'
)
text = soup.find(class_='otvet').text.strip()
parsed_text = parse_text(text)
if len(parsed_text) <= 1:
parsed_text = parse_text(text, delimiter=',')
if len(parsed_text) <= 1:
return
print(question, parsed_text)
questions[question] = parsed_text
except Exception:
print(traceback.format_exc())

soup = BeautifulSoup(
requests.get(f'{BASE_URL}/list100k1.php').text,
'lxml'
)
for a in soup.find(id='content_otvet').children:
parse_item(a.get_text(strip=True), a.get('href'))
return questions


def create_games_from_file(path, divider='|'):
def process_game_pack(_data: list):
game_xml = etree.Element('game')
questions_xml = etree.Element('questions')
final_questions_xml = etree.Element('final_questions')

for line in _data:
_index = 0
for _index, line in enumerate(_data):
question_xml = etree.Element('question')
q, a = line.split(divider)
question_question_xml = etree.Element('question')
Expand Down Expand Up @@ -128,11 +88,12 @@ def process_game_pack(_data: list):
f = open(f'packs/{filename}.weakest', 'w')
f.write(content.decode("utf-8"))
f.close()
return _index

with open(path, 'r') as file:
with open(path, 'r+') as file:
lines = file.readlines()
process_game_pack(lines)
json.dump(lines, path, ensure_ascii=False)
index = process_game_pack(lines)
json.dump(lines[index:], file, ensure_ascii=False)


def process():
Expand Down
41 changes: 17 additions & 24 deletions server/common/api.py
Original file line number Diff line number Diff line change
@@ -1,28 +1,21 @@
import time
from rest_framework.generics import ListAPIView

from django.utils.functional import cached_property
from rest_framework.response import Response
from rest_framework.views import APIView
from common.serializers import GameTypeSerializer
from feud.models import Game as FeudGame
from jeopardy.models import Game as JeopardyGame
from weakest.models import Game as WeakestGame

from common.serializers import TokenSerializer

class AvailableGamesListApi(ListAPIView):
serializer_class = GameTypeSerializer

class TokenContextMixin:
@cached_property
def token(self):
serializer = TokenSerializer(data=self.request.query_params)
serializer.is_valid(raise_exception=True)
return serializer.validated_data.get('token')

def get_serializer_context(self):
context = dict(token=self.token)
if hasattr(super(), "get_serializer_context"):
context.update(super().get_serializer_context())
return context


class TimeAPI(APIView):
def get(self, request):
return Response(dict(
time=int(round(time.time() * 1000))
))
def get_queryset(self):
result = []
token = self.kwargs['token']
if FeudGame.objects.filter(token=token).exists():
result.append(dict(type="feud"))
if JeopardyGame.objects.filter(token=token).exists():
result.append(dict(type="jeopardy"))
if WeakestGame.objects.filter(token=token).exists():
result.append(dict(type="weakest"))
return result
4 changes: 4 additions & 0 deletions server/common/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
class AvailableGame:
def __init__(self, _type: str, token: str):
self.type = _type
self.token = token
7 changes: 2 additions & 5 deletions server/common/serializers.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
from rest_framework import serializers


class TokenSerializer(serializers.Serializer):
token = serializers.CharField(allow_null=True, required=False)

def __init__(self, *args, **kwargs):
serializers.Serializer.__init__(self, *args, **kwargs)
class GameTypeSerializer(serializers.Serializer):
type = serializers.CharField()
2 changes: 1 addition & 1 deletion server/common/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
from common import api

urlpatterns = [
path('v1/time', api.TimeAPI.as_view()),
path('v1/games/<str:token>/available', api.AvailableGamesListApi.as_view()),
]
4 changes: 2 additions & 2 deletions server/feud/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ def answer(self, is_correct, answer_id=None):
self.intercom('right')
if self.state == self.STATE_ANSWERS:
if opponent.strikes >= 3 or self.question.answers.filter(is_opened=False).count() == 0:
answerer.score += self.question.answers.filter(is_opened=True).aggregate(sum=Sum('value'))['sum']
answerer.score += self.question.answers.filter(is_opened=True).aggregate(sum=Sum('value'))['sum'] or 0
answerer.save()
self.state = self.STATE_ANSWERS_REVEAL
self.intercom('right')
Expand All @@ -258,7 +258,7 @@ def answer(self, is_correct, answer_id=None):
answerer.save()

if opponent.strikes >= 3:
opponent.score += self.question.answers.filter(is_opened=True).aggregate(sum=Sum('value'))['sum']
opponent.score += self.question.answers.filter(is_opened=True).aggregate(sum=Sum('value'))['sum'] or 0
opponent.save()
self.state = self.STATE_ANSWERS_REVEAL
elif answerer.strikes >= 3:
Expand Down
4 changes: 4 additions & 0 deletions server/jeopardy/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,10 @@ def next_state(self, from_state):
elif self.state == self.STATE_ROUND:
if self.is_final_round():
self.state = self.STATE_FINAL_THEMES
filtered_themes = self.get_themes().filter(is_removed=False)
if filtered_themes.count() == 1:
self.state = self.STATE_FINAL_BETS
self.question = filtered_themes.get().questions.get()
else:
self.state = self.STATE_ROUND_THEMES
elif self.state == self.STATE_ROUND_THEMES:
Expand Down

0 comments on commit a5cf2c6

Please sign in to comment.