# HG changeset patch # User paulo # Date 1642668245 28800 # Node ID 221d6ea7c6c81effa5d6cf336bf041fb8a6f284a # Parent 06f97e38e1b2bc231375be8f3d0a3cc38caf7f79 cs: add cs_flask_app files diff -r 06f97e38e1b2 -r 221d6ea7c6c8 cs/Dockerfile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cs/Dockerfile Thu Jan 20 00:44:05 2022 -0800 @@ -0,0 +1,17 @@ +# Use the official lightweight Python image. +# https://hub.docker.com/_/python +FROM python:3.6-slim + +# Copy local code to the container image. +ENV APP_HOME /app +WORKDIR $APP_HOME +COPY . ./ + +# Install production dependencies. +RUN pip install -r requirements.pip + +# Run the web service on container startup. Here we use the gunicorn +# webserver, with one worker process and 8 threads. +# For environments with multiple CPU cores, increase the number of workers +# to be equal to the cores available. +CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 cs_flask_app:app diff -r 06f97e38e1b2 -r 221d6ea7c6c8 cs/cs_flask_app.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cs/cs_flask_app.py Thu Jan 20 00:44:05 2022 -0800 @@ -0,0 +1,23 @@ +import os + +import flask +import google.cloud.storage +from html3.html3 import HTML + +app = flask.Flask(__name__) + +GCS_CLIENT = google.cloud.storage.Client() +GCS_BUCKET = GCS_CLIENT.get_bucket(os.environ.get("GCS_BUCKET")) + +@app.route("/") +def index(): + return flask.redirect(flask.url_for("file_serve", filename="index.html")) + + +@app.route("/") +def file_serve(filename): + file_blob = GCS_BUCKET.get_blob(f"cs/{filename}") + if not file_blob: + flask.abort(404) + + return flask.send_file(file_blob.open("rb"), download_name=filename) diff -r 06f97e38e1b2 -r 221d6ea7c6c8 cs/flask_run_dev.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cs/flask_run_dev.sh Thu Jan 20 00:44:05 2022 -0800 @@ -0,0 +1,8 @@ +#!/bin/sh + +export GOOGLE_APPLICATION_CREDENTIALS=dev.key.json +export GCS_BUCKET=dev.pauloang.com +export FLASK_APP=cs_flask_app.py +export FLASK_ENV=development + +./bin/flask run diff -r 06f97e38e1b2 -r 221d6ea7c6c8 cs/requirements.pip --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cs/requirements.pip Thu Jan 20 00:44:05 2022 -0800 @@ -0,0 +1,32 @@ +cachetools==4.2.2 +certifi==2021.5.30 +cffi==1.14.6 +charset-normalizer==2.0.6 +click==8.0.1 +dataclasses==0.8 +Flask==2.0.1 +google-api-core==2.0.1 +google-auth==2.1.0 +google-cloud-core==2.0.0 +google-cloud-storage==1.42.2 +google-crc32c==1.1.2 +google-resumable-media==2.0.2 +googleapis-common-protos==1.53.0 +gunicorn==20.1.0 +html3==1.18 +idna==3.2 +importlib-metadata==4.8.1 +itsdangerous==2.0.1 +Jinja2==3.0.1 +MarkupSafe==2.0.1 +protobuf==3.18.0 +pyasn1==0.4.8 +pyasn1-modules==0.2.8 +pycparser==2.20 +requests==2.26.0 +rsa==4.7.2 +six==1.16.0 +typing-extensions==3.10.0.2 +urllib3==1.26.6 +Werkzeug==2.0.1 +zipp==3.5.0