From d9fb66c0fd9dbc7e4d18bd005b1b081782712b86 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Carl=20Sch=C3=B6nfelder?= <carsc272@student.liu.se>
Date: Mon, 8 Mar 2021 09:23:38 +0000
Subject: [PATCH] Resolve "Fix python warnings"

---
 .gitignore                                 |  3 ++-
 server/app/__init__.py                     |  2 +-
 server/app/api/admin.py                    |  1 -
 server/app/api/users.py                    | 24 ++++++++---------
 server/app/database/__init__.py            |  1 -
 server/app/database/controller.py          |  9 -------
 server/app/database/controller/__init__.py |  2 ++
 server/app/database/controller/add.py      | 31 ++++++++++++++++++++++
 server/app/database/controller/get.py      |  7 +++++
 server/app/database/models.py              |  8 ++----
 server/app/database/populate.py            | 21 +++++++--------
 server/app/utils/test_helpers.py           | 14 +++++-----
 server/app/utils/validator.py              |  2 +-
 server/tests/test_db.py                    | 20 +++++++-------
 14 files changed, 84 insertions(+), 61 deletions(-)
 delete mode 100644 server/app/database/controller.py
 create mode 100644 server/app/database/controller/__init__.py
 create mode 100644 server/app/database/controller/add.py
 create mode 100644 server/app/database/controller/get.py

diff --git a/.gitignore b/.gitignore
index 51cc949e..69ba52b5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,4 +4,5 @@ __pycache__
 *.coverage
 */coverage
 htmlcov
-.pytest_cache
\ No newline at end of file
+.pytest_cache
+/.idea
\ No newline at end of file
diff --git a/server/app/__init__.py b/server/app/__init__.py
index 677eb3d8..6655bdb0 100644
--- a/server/app/__init__.py
+++ b/server/app/__init__.py
@@ -38,4 +38,4 @@ def identity(payload):
 def check_if_token_in_blacklist(decrypted_token):
     jti = decrypted_token["jti"]
 
-    return models.Blacklist.query.filter_by(jti=jti).first() != None
+    return models.Blacklist.query.filter_by(jti=jti).first() is not None
diff --git a/server/app/api/admin.py b/server/app/api/admin.py
index 1d935910..92d3922c 100644
--- a/server/app/api/admin.py
+++ b/server/app/api/admin.py
@@ -1,7 +1,6 @@
 ###
 # Admin stuff placed here for later use
 # No need to implement this before the application is somewhat done
-# Only adding basic thigns like addning countries
 ###
 
 from flask import Blueprint
diff --git a/server/app/api/users.py b/server/app/api/users.py
index 5678e92c..94f2107c 100644
--- a/server/app/api/users.py
+++ b/server/app/api/users.py
@@ -1,12 +1,11 @@
 import datetime
 
+import app.database.controller as dbc
 from app import db
 from app.api import api_blueprint
-from app.database.controller import add_user
 from app.database.models import Blacklist, User
-from app.utils.validator import edit_user_schema, login_schema, register_schema, validateObject
+from app.utils.validator import edit_user_schema, login_schema, register_schema, validate_object
 from flask import request
-from flask.globals import session
 from flask_jwt_extended import (
     create_access_token,
     create_refresh_token,
@@ -36,15 +35,15 @@ def test_auth():
 def login():
     json_dict = request.get_json(force=True)
 
-    validate_msg = validateObject(login_schema, json_dict)
-    if validate_msg != None:
+    validate_msg = validate_object(login_schema, json_dict)
+    if validate_msg is not None:
         return {"message": validate_msg}, 400
 
     email = json_dict["email"]
     password = json_dict["password"]
     user = User.query.filter_by(email=email).first()
 
-    # Dont show the user that the email was correct unless the password was also correct
+    # Don't show the user that the email was correct unless the password was also correct
     if not user:
         return {"message": "The email or password you entered is incorrect."}, 401
 
@@ -82,17 +81,16 @@ def refresh():
 def create():
     json_dict = request.get_json(force=True)
 
-    validate_msg = validateObject(register_schema, json_dict)
-    if validate_msg != None:
+    validate_msg = validate_object(register_schema, json_dict)
+    if validate_msg is not None:
         return {"message": validate_msg}, 400
 
     existing_user = User.query.filter_by(email=json_dict["email"]).first()
 
-    if existing_user != None:
+    if existing_user is not None:
         return {"message": "User already exists"}, 400
 
-    add_user(json_dict["email"], json_dict["password"], json_dict["role"], json_dict["city"])
-    db.session.commit()
+    dbc.add.user(json_dict["email"], json_dict["password"], json_dict["role"], json_dict["city"])
 
     item_user = User.query.filter_by(email=json_dict["email"]).first()
 
@@ -104,8 +102,8 @@ def create():
 def edit():
     json_dict = request.get_json(force=True)
 
-    validate_msg = validateObject(edit_user_schema, json_dict)
-    if validate_msg != None:
+    validate_msg = validate_object(edit_user_schema, json_dict)
+    if validate_msg is not None:
         return {"message": validate_msg}, 400
 
     user = get_current_user()
diff --git a/server/app/database/__init__.py b/server/app/database/__init__.py
index 4a1dc8b7..c6d0e532 100644
--- a/server/app/database/__init__.py
+++ b/server/app/database/__init__.py
@@ -1,6 +1,5 @@
 import sqlalchemy as sa
 from flask_sqlalchemy.model import Model
-from sqlalchemy.ext.declarative import declared_attr
 from sqlalchemy.sql import func
 
 
diff --git a/server/app/database/controller.py b/server/app/database/controller.py
deleted file mode 100644
index 385e9f05..00000000
--- a/server/app/database/controller.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from app import db
-from app.database.models import City, Role, User
-
-
-def add_user(email, plaintext_password, role, city):
-    item_role = Role.query.filter_by(name=role).first()
-    item_city = City.query.filter_by(name=city).first()
-    user = User(email, plaintext_password, item_role.id, item_city.id)
-    db.session.add(user)
diff --git a/server/app/database/controller/__init__.py b/server/app/database/controller/__init__.py
new file mode 100644
index 00000000..b3cfb1fc
--- /dev/null
+++ b/server/app/database/controller/__init__.py
@@ -0,0 +1,2 @@
+# import add, get
+from app.database.controller import add, get
diff --git a/server/app/database/controller/add.py b/server/app/database/controller/add.py
new file mode 100644
index 00000000..d00b791f
--- /dev/null
+++ b/server/app/database/controller/add.py
@@ -0,0 +1,31 @@
+from app import db
+from app.database.models import City, Competition, Role, Slide, Style, User
+
+
+def user(email, plaintext_password, role, city):
+    item_role = Role.query.filter(Role.name == role).first()
+    item_city = City.query.filter(City.name == city).first()
+
+    new_user = User(email, plaintext_password, item_role.id, item_city.id)
+    db.session.add(new_user)
+    db.session.commit()
+
+    return User.query.filter(User.email == email).first()
+
+
+def competition(name, style_id, city_id):
+    db.session.add(Competition(name, style_id, city_id))
+    db.session.commit()
+
+    filters = (Competition.name == name) & (Competition.city_id == city_id)
+    return Competition.query.filter(filters).first()
+
+
+def slide(competition_id):
+    # item_slides = Slide.query.filter(Slide.competition_id == competition_id).order_by(Slide.order).all()
+    order = Slide.query.filter(Slide.competition_id == competition_id).count()
+    db.session.add(Slide(order, competition_id))
+    db.session.commit()
+
+    filters = (Slide.order == order) & (Competition.competition_id == competition_id)
+    return Slide.query.filter(filters).first()
diff --git a/server/app/database/controller/get.py b/server/app/database/controller/get.py
new file mode 100644
index 00000000..9a4fb26b
--- /dev/null
+++ b/server/app/database/controller/get.py
@@ -0,0 +1,7 @@
+from app import db
+from app.database.models import City, Competition, Role, Slide, Style, User
+from sqlalchemy import and_, or_
+
+
+def user():
+    return
diff --git a/server/app/database/models.py b/server/app/database/models.py
index 7cf7e5dc..29e076dc 100644
--- a/server/app/database/models.py
+++ b/server/app/database/models.py
@@ -1,7 +1,4 @@
-from enum import unique
-
 from app import bcrypt, db
-from sqlalchemy.ext.declarative import declared_attr
 from sqlalchemy.ext.hybrid import hybrid_method, hybrid_property
 
 STRING_SIZE = 254
@@ -45,10 +42,9 @@ class User(db.Model):
 
     _password = db.Column(db.LargeBinary(60), nullable=False)
 
-    # Change to false for Two factor authen
     authenticated = db.Column(db.Boolean, default=False)
-    twoAuthConfirmed = db.Column(db.Boolean, default=True)
-    twoAuthCode = db.Column(db.String(STRING_SIZE), nullable=True)
+    # twoAuthConfirmed = db.Column(db.Boolean, default=True)
+    # twoAuthCode = db.Column(db.String(STRING_SIZE), nullable=True)
 
     role_id = db.Column(db.Integer, db.ForeignKey("role.id"), nullable=False)
     city_id = db.Column(db.Integer, db.ForeignKey("city.id"), nullable=False)
diff --git a/server/app/database/populate.py b/server/app/database/populate.py
index 47891acf..7eb58710 100644
--- a/server/app/database/populate.py
+++ b/server/app/database/populate.py
@@ -1,5 +1,5 @@
+import app.database.controller as dbc
 from app import db
-from app.database.controller import add_user
 from app.database.models import City, MediaType, QuestionType, Role
 
 media_types = ["Image", "Video"]
@@ -11,24 +11,23 @@ cities = ["Linköping"]
 def add_default_values():
 
     # Add media types
-    for type in media_types:
-        db.session.add(MediaType(type))
+    for item in media_types:
+        db.session.add(MediaType(item))
 
     # Add question types
-    for type in question_types:
-        db.session.add(QuestionType(type))
+    for item in question_types:
+        db.session.add(QuestionType(item))
 
     # Add roles
-    for role in roles:
-        db.session.add(Role(role))
+    for item in roles:
+        db.session.add(Role(item))
 
     # Add cities
-    for city in cities:
-        db.session.add(City(city))
+    for item in cities:
+        db.session.add(City(item))
 
     # Commit changes to db
     db.session.commit()
 
     # Add user with role and city
-    add_user("test@test.se", "password", "Admin", "Linköping")
-    db.session.commit()
+    dbc.add.user("test@test.se", "password", "Admin", "Linköping")
diff --git a/server/app/utils/test_helpers.py b/server/app/utils/test_helpers.py
index e6d34cce..b8798492 100644
--- a/server/app/utils/test_helpers.py
+++ b/server/app/utils/test_helpers.py
@@ -2,21 +2,21 @@ from app import db
 
 
 # Try insert invalid row. If it fails then the test is passed
-def assert_insert_fail(type, *args):
+def assert_insert_fail(db_type, *args):
     try:
-        db.session.add(type(*args))
+        db.session.add(db_type(*args))
         db.session.commit()
         assert False
     except:
         db.session.rollback()
 
 
-def assert_exists(type, length, **kwargs):
-    items = type.query.filter_by(**kwargs).all()
+def assert_exists(db_type, length, **kwargs):
+    items = db_type.query.filter_by(**kwargs).all()
     assert len(items) == length
     return items[0]
 
 
-def assert_object_values(object, dict):
-    for k, v in dict.items():
-        assert getattr(object, k) == v
+def assert_object_values(obj, values):
+    for k, v in values.items():
+        assert getattr(obj, k) == v
diff --git a/server/app/utils/validator.py b/server/app/utils/validator.py
index 497d3b41..2e31fac5 100644
--- a/server/app/utils/validator.py
+++ b/server/app/utils/validator.py
@@ -1,7 +1,7 @@
 from cerberus import Validator
 
 
-def validateObject(schema, obj, allow_unknown=False):
+def validate_object(schema, obj, allow_unknown=False):
     v = Validator(schema, allow_unknown)
     if not v.validate(obj):
         return v.errors
diff --git a/server/tests/test_db.py b/server/tests/test_db.py
index e561f970..a6801279 100644
--- a/server/tests/test_db.py
+++ b/server/tests/test_db.py
@@ -1,5 +1,4 @@
 import pytest
-from app.database.controller import add_user
 from app.database.models import (
     City,
     Competition,
@@ -14,6 +13,7 @@ from app.database.models import (
     Team,
     User,
 )
+import app.database.controller as dbc
 from app.database.populate import add_default_values
 from app.utils.test_helpers import *
 
@@ -27,7 +27,7 @@ def test_user(client):
     item_user = User.query.filter_by(email="test@test.se").first()
 
     # Assert user
-    assert item_user != None
+    assert item_user is not None
     assert item_user.city.name == "Linköping"
     assert item_user.role.name == "Admin"
 
@@ -52,7 +52,7 @@ def test_media_style(client):
 
     # Assert image
     item_media = Media.query.filter_by(filename="bild.png").first()
-    assert item_media != None
+    assert item_media is not None
     assert len(item_user.media) == 1
     assert item_media.upload_by.email == "test@test.se"
 
@@ -62,7 +62,7 @@ def test_media_style(client):
 
     # Assert style
     item_style = Style.query.filter_by(name="template").first()
-    assert item_style != None
+    assert item_style is not None
     assert len(item_media.styles) == 1
     assert item_style.bg_image.filename == "bild.png"
 
@@ -95,7 +95,7 @@ def test_question(client):
     item_competition = Competition.query.filter_by(name="teknik8").first()
     item_competition_2 = Competition.query.filter_by(name="teknik9").first()
 
-    assert item_competition != None
+    assert item_competition is not None
     assert item_competition.id == 1
     assert item_competition.style.name == "template"
     assert item_competition.city.name == "Linköping"
@@ -131,9 +131,9 @@ def test_question(client):
     item_slide2 = Slide.query.filter_by(order=2).first()
     item_slide3 = Slide.query.filter_by(order=3).first()
 
-    assert item_slide1 != None
-    assert item_slide2 != None
-    assert item_slide3 != None
+    assert item_slide1 is not None
+    assert item_slide2 is not None
+    assert item_slide3 is not None
 
     # Add questions
     question_type_bool = QuestionType.query.filter_by(name="Boolean").first()
@@ -143,8 +143,8 @@ def test_question(client):
     db.session.add(Question("Fråga2", 1, question_type_multiple.id, item_slide3.id))
     db.session.commit()
 
-    assert question_type_bool != None
-    assert question_type_multiple != None
+    assert question_type_bool is not None
+    assert question_type_multiple is not None
 
     item_q1 = Question.query.filter_by(name="Fråga1").first()
     item_q2 = Question.query.filter_by(name="Fråga2").first()
-- 
GitLab