init, homepage and puzzle page

master
km0 2 years ago
commit f0e3510341

15
.gitignore vendored

@ -0,0 +1,15 @@
venv/
*.pyc
__pycache__/
.ipynb_checkpoints
instance/
.pytest_cache/
.coverage
htmlcov/
dist/
build/
*.egg-info/

@ -0,0 +1,3 @@
{
"python.formatting.provider": "black"
}

@ -0,0 +1,4 @@
include chaospuzzles/schema.sql
graft chaospuzzles/static
graft chaospuzzles/templates
global-exclude *.pyc

@ -0,0 +1,48 @@
import os
from flask import Flask
class PrefixMiddleware(object):
def __init__(self, app, prefix=""):
self.app = app
self.prefix = prefix
def __call__(self, environ, start_response):
if environ["PATH_INFO"].startswith(self.prefix):
environ["PATH_INFO"] = environ["PATH_INFO"][len(self.prefix) :]
environ["SCRIPT_NAME"] = self.prefix
return self.app(environ, start_response)
else:
start_response("404", [("Content-Type", "text/plain")])
return ["This url does not belong to the app.".encode()]
def create_app(test_config=None):
# create and configure the app
app = Flask(__name__, instance_relative_config=True)
app.config.from_mapping(
SECRET_KEY="dev",
# DATABASE=os.path.join(app.instance_path, 'puzzles'),
)
if test_config is None:
# load the instance config, if it exists, when not testing
app.config.from_pyfile("config.py", silent=True)
else:
# load the test config if passed in
app.config.from_mapping(test_config)
# ensure the instance folder exists
try:
os.makedirs(app.instance_path)
except OSError:
pass
from . import puzzle
app.register_blueprint(puzzle.bp)
app.wsgi_app = PrefixMiddleware(app.wsgi_app, prefix="/soupboat/chaospuzzles")
return app

@ -0,0 +1,29 @@
import os
import json
from flask import Blueprint, render_template
bp = Blueprint("puzzle", __name__, url_prefix="/")
def list_folders(path):
"""Return all the folders in a folder"""
names = []
for entry in os.scandir(path):
# add to the list only proper files
if not entry.name.startswith(".") and entry.is_dir():
# remove the extension from the filename
names.append(entry.name)
return names
@bp.route("/")
def home():
puzzles = list_folders("chaospuzzles/puzzles")
return render_template("home.html", puzzles=puzzles)
@bp.route("/<puzzle>")
def puzzle(puzzle=None):
with open(f"chaospuzzles/puzzles/{puzzle}/info.json") as data:
info = json.load(data)
return render_template("puzzle.html", puzzle=puzzle, **info)

@ -0,0 +1,7 @@
{
"name": "katamari",
"rows": 10,
"columns": 15,
"image": "katamari.jpg",
"clusters": []
}

@ -0,0 +1,19 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Chaos Puzzles Prototype</title>
</head>
<body>
<h1>Chaos Puzzles</h1>
<ul>
{%for puzzle in puzzles%}
<li>
<a href="{{puzzle}}">{{puzzle}}</a>
</li>
{% endfor %}
</ul>
</body>
</html>

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{puzzle}}</title>
</head>
<body>
<h1>{{puzzle}}</h1>
{{rows}}, {{columns}}, {{clusters}}
</body>
</html>

@ -0,0 +1,13 @@
from setuptools import find_packages, setup
setup(
name='Chaos Puzzles',
version='1.0.0',
packages=find_packages(),
include_package_data=True,
zip_safe=False,
install_requires=[
'flask',
'shortuuid'
],
)
Loading…
Cancel
Save