Compare commits

...

7 Commits

Author SHA1 Message Date
Kostanjevec e2da724551 trying to catch edgecase bugs 2022-06-14 02:27:05 +02:00
Kostanjevec 36caf80a34 try to catch edgecase bugs... 2022-06-14 02:26:38 +02:00
Kostanjevec edf0dd1ffa added share fuctionality 2022-06-14 02:25:00 +02:00
Kostanjevec effd1f915f added a errors template 2022-06-14 02:18:27 +02:00
Kostanjevec b787449905 added some matching functionality 2022-06-14 02:17:58 +02:00
Kostanjevec fb67c7a49f new TODO: ne dela za več fileov 2022-06-14 02:15:34 +02:00
Kostanjevec 17a15dd416 cleanup 2022-06-13 14:51:13 +02:00
7 changed files with 117 additions and 25 deletions

18
app.py
View File

@ -9,6 +9,7 @@ from deck import bp as deck_bp
from menu import bp as menu_bp from menu import bp as menu_bp
from upload import bp as upload_bp from upload import bp as upload_bp
from share import share from share import share
from matches import bp as matches_bp
from create_db import Card, Deck from create_db import Card, Deck
from config import CONFIG from config import CONFIG
@ -57,6 +58,10 @@ def create_app(test_config=None):
deck_query = dbsession.query(Deck).filter(Deck.owner_id == user_id) deck_query = dbsession.query(Deck).filter(Deck.owner_id == user_id)
deck_object = deck_query.filter(Deck.completed == False).first() deck_object = deck_query.filter(Deck.completed == False).first()
# @TODO: ce deck, ne obstaja, kaj naj zaj jas? # @TODO: ce deck, ne obstaja, kaj naj zaj jas?
if len(deck_object.cards_by_id.split(",")) == 0:
deck_query.filter(Deck)
return index()
deck_id = deck_object.id deck_id = deck_object.id
@ -116,18 +121,16 @@ def create_app(test_config=None):
show_card = dbsession.query(Card).get(show_card_id) show_card = dbsession.query(Card).get(show_card_id)
if not show_card: if not show_card:
raise Exception("Ne najdem naslednje karte") print("SHOWWWWWWW")
return render_template("error/no_cards_in_collection.html")
#raise Exception("Ne najdem naslednje karte")
# Prikaži obrazec # Prikaži obrazec
return render_template("deck/index.html", username=username, card=show_card) return render_template("deck/index.html", username=username, card=show_card)
@app.route("/share_button", methods=["GET", "POST"]) @app.route("/share_button", methods=["GET", "POST"])
def share_button(): def share_button():
userid = session["user_id"]
username = session["username"]
card_number = session["card_number"]
print("share!!!") print("share!!!")
return redirect(url_for("deck")) return redirect(url_for("deck"))
@ -141,12 +144,13 @@ def create_app(test_config=None):
def match(): def match():
return "match" return "match"
#app.register_blueprint(bp) # ?? #app.register_blueprint(bp) # ??
app.register_blueprint(auth_bp) app.register_blueprint(auth_bp)
app.register_blueprint(deck_bp) app.register_blueprint(deck_bp)
app.register_blueprint(menu_bp) app.register_blueprint(menu_bp)
app.register_blueprint(upload_bp) app.register_blueprint(upload_bp)
app.register_blueprint(matches_bp)
app.add_url_rule('/', endpoint='index') app.add_url_rule('/', endpoint='index')
return app return app

49
matches.py 100644
View File

@ -0,0 +1,49 @@
from flask import (
Blueprint, redirect, render_template, request, session, url_for
)
from requests import get
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from config import CONFIG
from create_db import Card
bp = Blueprint('matches', __name__, url_prefix='/matches')
engine = create_engine(CONFIG['DB_CONNECTION'])
dbsessionmaker = sessionmaker(bind=engine)
dbsession = dbsessionmaker()
def get_matches(user_id):
list_of_matches = []
#in all shared cards for the ones you votes yes
all_cards = dbsession.query(Card)
all_shared_of_user_of_ir_1 = all_cards.filter(Card.share_id != "0", Card.owner_id == user_id, Card.interest_rate == 1).all()
if all_shared_of_user_of_ir_1 == []:
return list_of_matches
# see who else voted yes
for c in all_shared_of_user_of_ir_1:
others_yes = all_cards.filter(Card.share_id == c.share_id, Card.interest_rate == 1).all()
if others_yes == []:
pass
else:
list_of_matches.append(others_yes)
return list_of_matches
@bp.route("/", methods=("GET", "POST"))
def index():
if not 'user_id' in session:
redirect(url_for('index'))
user_id = session["user_id"]
username = session["username"]
list_of_matches = get_matches(user_id)
#@TODO tu bi morali dodati še nek users object, da own_id pretvorimo v username
return render_template("matches.html", username=username, list_of_matches=list_of_matches)

32
menu.py
View File

@ -5,9 +5,10 @@ from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import sessionmaker
from config import CONFIG from config import CONFIG
from create_db import Deck from create_db import Deck, Card
from deck import get_deck, probabilistic_deck_generator from deck import get_deck, probabilistic_deck_generator
from auth import login
bp = Blueprint('menu', __name__, url_prefix='/menu') bp = Blueprint('menu', __name__, url_prefix='/menu')
@ -17,6 +18,9 @@ dbsession = dbsessionmaker()
@bp.route("/", methods=("GET", "POST")) @bp.route("/", methods=("GET", "POST"))
def index(): def index():
if 'user_id' not in session:
return login()
if 'user_id' in session: if 'user_id' in session:
user_id = session['user_id'] user_id = session['user_id']
username = session['username'] username = session['username']
@ -29,19 +33,29 @@ def index():
if action == "new_session": if action == "new_session":
# @TODO tu bi moral preveriti če je kak unfinished deck, potem bi pisalo continiue, namesto new # @TODO tu bi moral preveriti če je kak unfinished deck, potem bi pisalo continiue, namesto new
#preverimo če so sploh karte v collectionu
c = dbsession.query(Card).filter(Card.owner_id == user_id).all()
if c == []:
print("ne najdem collectiona")
return render_template("error/no_cards_in_collection.html")
#ustvari novi vnos v Deck #ustvari novi vnos v Deck
deck = probabilistic_deck_generator(user_id, 5, 5) deck = probabilistic_deck_generator(user_id, 5, 5)
cards_by_id = get_deck(deck) cards_by_id = get_deck(deck)
number_of_cards = len(cards_by_id.split(",")) if cards_by_id == None:
print("DECK IS NONE")
print(cards_by_id, number_of_cards) return render_template(index())
deck = Deck(cards_by_id=cards_by_id, owner_id=user_id, number_of_cards=number_of_cards, current_card=0, completed=False) else:
dbsession.add(deck) number_of_cards = len(cards_by_id.split(","))
dbsession.commit()
print(cards_by_id, number_of_cards)
deck = Deck(cards_by_id=cards_by_id, owner_id=user_id, number_of_cards=number_of_cards, current_card=0, completed=False)
dbsession.add(deck)
dbsession.commit()
return redirect(url_for("deck")) return redirect(url_for("deck"))
elif action == "matches": elif action == "matches":
pass return redirect(url_for("matches.index"))
elif action == "upload": elif action == "upload":
return redirect(url_for("upload.index")) return redirect(url_for("upload.index"))
elif action == "settings": elif action == "settings":

View File

@ -12,17 +12,17 @@ dbsession = dbsessionmaker()
def share(card, user_id): def share(card, user_id):
print(card.share_id, card.id)
#tu bi lahko naredili nek autoincrement ampak i guess da hash unique idja tudi daje unique share_id, tega potem uporabljamo, da preverimo matche #tu bi lahko naredili nek autoincrement ampak i guess da hash unique idja tudi daje unique share_id, tega potem uporabljamo, da preverimo matche
h = md5(str(card.id).encode("utf-8")).hexdigest() h = md5(str(card.id).encode("utf-8")).hexdigest()
print("hash: ", h)
card.share_id = h card.share_id = h
# all users # all users
users = dbsession.query(User).filter(User.id != user_id).all() users = dbsession.query(User).filter(User.id != user_id).all()
for user in users: for user in users:
print("hey, ", user.id) #skip če že ima ta card v db.
#TODO skip če že ima ta card v db. existing = dbsession.query(Card).filter(Card.title == card.title, Card.owner_id==user.id).all()
new_card = card = Card(title=card.title, interest_rate=-1.0, owner_id=user.id, item_location=card.item_location, last_review=None, share_id=h) if existing == []:
dbsession.add(new_card) print("sharing to, ", user.id)
dbsession.commit() new_card = card = Card(title=card.title, interest_rate=-1.0, owner_id=user.id, item_location=card.item_location, last_review=None, share_id=h)
dbsession.add(new_card)
dbsession.commit()

View File

@ -0,0 +1,6 @@
{% extends 'base.html' %}
{% block content %}
<h1>Error: No cards foud</h1>
<p>No cards were found in your collection. Consider <a href="{{ url_for('upload.index') }}">uploading</a> some.</p>
{% endblock %}

View File

@ -0,0 +1,19 @@
{% extends 'base.html' %}
{% block header %}
<head>Matches</head>
{% endblock %}
{% block content %}
<p>Hello</p>
{% if list_of_matches %}
{% for match in list_of_matches %}
{% for card in match %}
<p>{{ card['title'] }}</p>
{% endfor %}
{% endfor %}
{% else %}
<p>You have no matches at the moment</p>
{% endif %}
{% endblock %}

View File

@ -45,8 +45,8 @@ def upload_file():
script_path = os.path.dirname(os.path.abspath(__file__)) script_path = os.path.dirname(os.path.abspath(__file__))
temp_path = os.path.join(script_path, "temp") temp_path = os.path.join(script_path, "temp")
# @TODO ne dela za več fajlov
#a lot of stuff can wrong here and nobody may know # a lot of stuff can wrong here and nobody may know
with tempfile.NamedTemporaryFile(dir=temp_path, delete=False) as fp: with tempfile.NamedTemporaryFile(dir=temp_path, delete=False) as fp:
fp.write(upload.stream.read()) fp.write(upload.stream.read())
path = fp.name path = fp.name