😸

GAE GCP python37 bottlepy で静的ファイルを公開する

2021/09/11に公開約1,300字

GCPは基本的にアプリケーションサーバなので、静的ファイルを公開する機能はないのだが、 python37/bottlepyで、簡単な静的ファイルサーバを実装すればそれで済む話でもある。

bottlepy の static_file は静的ファイル専用のAPIがで、必要に応じて200/304を返してくれる。

/page/に関しては、リダイレクトの処理である。 別途redirect.iniを作成しておき、一緒にデプロイする。

#!python3

import configparser
import bottle
from bottle import Bottle, get, static_file, debug
import os
import os.path
import logging
import datetime
import json
from typing import Tuple
import glob

# https://bottlepy.org/docs/dev/tutorial.html#debug-mode
debug(True)

app = Bottle()

# https://bottlepy.org/docs/dev/recipes.html#debugging-with-style-debugging-middleware
# app.catchall = True

_mtime: os.stat_result = os.stat("/home/.")


@app.get("/isversion")
def isversion():
    return _mtime.st_mtime.__str__()


@app.get("/")
def root():
    return static_file("index.html", root="./statics")


@app.get("/pages/<url>")
def obsolete(url):
    INI = configparser.RawConfigParser()
    with open("redirect.ini") as src:
        INI.read_file(src)
        logging.warning(INI.items())
    if url in INI["redirects"]:
        newurl = INI["redirects"][url]
        newurl = newurl.replace(".md", ".html")
        return bottle.redirect(newurl)
    return static_file("404.html", root=".")


@app.get('/<file_path:path>')
def staticfile(file_path):
    return static_file(file_path, root='./statics')

Discussion

ログインするとコメントできます