Initial commit
This commit is contained in:
commit
f9ea730711
9
.gitignore
vendored
Normal file
9
.gitignore
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
|
||||
# Elastic Beanstalk Files
|
||||
.elasticbeanstalk/*
|
||||
!.elasticbeanstalk/*.cfg.yml
|
||||
!.elasticbeanstalk/*.global.yml
|
||||
|
||||
.env
|
||||
.idea/
|
||||
__pycache__/
|
68
application.py
Normal file
68
application.py
Normal file
@ -0,0 +1,68 @@
|
||||
from flask import Flask, render_template, redirect, url_for
|
||||
from botocore.exceptions import ClientError
|
||||
import boto3
|
||||
import random
|
||||
from dynamodb_json import json_util
|
||||
|
||||
application = Flask(__name__)
|
||||
application.config.from_pyfile("config.py")
|
||||
|
||||
|
||||
def get_table(table_name):
|
||||
dynamo = boto3.resource("dynamodb", aws_access_key_id=application.config["AWS_ACCESS_KEY_ID"],
|
||||
aws_secret_access_key=application.config["AWS_SECRET_ACCESS_KEY"], region_name=application.config["REGION_NAME"])
|
||||
return dynamo.Table(table_name)
|
||||
|
||||
|
||||
def get_question(table, id):
|
||||
response = table.get_item(Key={"id": id})
|
||||
return json_util.loads(response["Item"])
|
||||
|
||||
|
||||
@application.route("/")
|
||||
def index():
|
||||
try:
|
||||
table = get_table("BibleQuestions")
|
||||
|
||||
item = get_question(table, random.randint(0, table.item_count - 1))
|
||||
return render_template(
|
||||
"index.html",
|
||||
title="Bible Trivia",
|
||||
question=item["Question"],
|
||||
answer=item["Answer"],
|
||||
addresses=item["Address"],
|
||||
category=item["Category"],
|
||||
difficulty=item["Difficulty"],
|
||||
)
|
||||
except ClientError as e:
|
||||
return e.response["Error"]["Message"]
|
||||
except Exception as e:
|
||||
return str(e)
|
||||
|
||||
|
||||
@application.route("/question/<int:question_index>")
|
||||
def question(question_index):
|
||||
try:
|
||||
table = get_table("BibleQuestions")
|
||||
if question_index < table.item_count:
|
||||
response = get_question(table, question_index)
|
||||
item = json_util.loads(response["Item"])
|
||||
return render_template(
|
||||
"index.html",
|
||||
title="Bible Trivia",
|
||||
question=item["Question"],
|
||||
answer=item["Answer"],
|
||||
addresses=item["Address"],
|
||||
category=item["Category"],
|
||||
difficulty=item["Difficulty"],
|
||||
)
|
||||
else:
|
||||
return "<h1>Question not found.</h1>"
|
||||
except ClientError as e:
|
||||
return e.response["Error"]["Message"]
|
||||
except Exception as e:
|
||||
return str(e)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
application.run()
|
12
config.py
Normal file
12
config.py
Normal file
@ -0,0 +1,12 @@
|
||||
from os import environ
|
||||
from pathlib import Path
|
||||
from dotenv import load_dotenv
|
||||
|
||||
|
||||
basedir = Path(__file__)
|
||||
load_dotenv(str(basedir / ".env"))
|
||||
|
||||
SECRET_KEY = environ.get("SECRET_KEY")
|
||||
AWS_ACCESS_KEY_ID = environ.get("AWS_ACCESS_KEY_ID")
|
||||
AWS_SECRET_ACCESS_KEY = environ.get("AWS_SECRET_ACCESS_KEY")
|
||||
REGION_NAME = environ.get("REGION_NAME")
|
5
requirements.txt
Normal file
5
requirements.txt
Normal file
@ -0,0 +1,5 @@
|
||||
boto3==1.16.18
|
||||
botocore==1.19.18
|
||||
Flask==1.1.2
|
||||
dynamodb-json==1.3
|
||||
python-dotenv>=0.15.0
|
11
static/style.css
Normal file
11
static/style.css
Normal file
@ -0,0 +1,11 @@
|
||||
.title {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.question {
|
||||
font-size: 25px;
|
||||
}
|
||||
|
||||
#answer {
|
||||
display: none;
|
||||
}
|
63
templates/index.html
Normal file
63
templates/index.html
Normal file
@ -0,0 +1,63 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>{{ title }}</title>
|
||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootswatch/4.5.2/cyborg/bootstrap.min.css">
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
|
||||
<link rel="stylesheet" href="/static/style.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container-md align-content-center">
|
||||
<h1 class="title">Quiz The Word</h1>
|
||||
<div class="card question">
|
||||
<p id="question">{{ question }}</p>
|
||||
<button id="show-answer" class="btn btn-secondary" onclick="showAnswer()">Show Answer</button>
|
||||
<p id="answer">{{ answer }}</p>
|
||||
<div id="bible-verses"></div>
|
||||
<p>{{ difficulty }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<script>
|
||||
let raw_addresses = {{ addresses|tojson }};
|
||||
let addresses = [];
|
||||
for (let address of raw_addresses) {
|
||||
let verses = "";
|
||||
if (address["Verses"] != null) {
|
||||
for (let verse of address["Verses"]) {
|
||||
if (verses != "") {
|
||||
verses += ", ";
|
||||
} else {
|
||||
verses = ":";
|
||||
}
|
||||
if (typeof verse != "number") {
|
||||
verses += `${verse[0]}-${verse[1]}`;
|
||||
} else {
|
||||
verses += verse.toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (address["Chapter"] != null) {
|
||||
addresses.push(`${address["Book"]} ${address["Chapter"]}${verses}`);
|
||||
} else if (address["Book"] != null) {
|
||||
addresses.push(`${address["Book"]}`);
|
||||
}
|
||||
}
|
||||
let bibleVerses = $("#bible-verses");
|
||||
if (addresses.length > 0) {
|
||||
for (let address of addresses) {
|
||||
if (address != addresses[0]) {
|
||||
bibleVerses.append(`; ${address}`);
|
||||
} else {
|
||||
bibleVerses.append(address);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function showAnswer() {
|
||||
$("#answer").css("display", "block");
|
||||
$("#show-answer").css("display", "none");
|
||||
}
|
||||
</script>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user