diff --git a/.gitignore b/.gitignore index 7bbc71c0..cd4bc569 100644 --- a/.gitignore +++ b/.gitignore @@ -99,3 +99,6 @@ ENV/ # mypy .mypy_cache/ + +# SQLite databases +*.db diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..3d1d782e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,6 @@ +FROM python:3 +COPY . /app +WORKDIR /app +RUN pip install -r requirements.txt +EXPOSE 8006 +CMD ["python", "app.py"] diff --git a/app.py b/app.py new file mode 100644 index 00000000..97670327 --- /dev/null +++ b/app.py @@ -0,0 +1,43 @@ +from sanic import Sanic +from sanic import response +from sanic_jinja2 import SanicJinja2 +import sqlite3 +import json + +app = Sanic(__name__) +jinja = SanicJinja2(app) + +#conn = sqlite3.connect('file:flights.db?immutable=1', uri=True) +conn = sqlite3.connect('file:northwind.db?immutable=1', uri=True) +conn.row_factory = sqlite3.Row + + +@app.route('/') +async def index(request, sql=None): + sql = sql or request.args.get('sql', '') + if not sql: + sql = 'select * from sqlite_master' + rows = conn.execute(sql) + headers = [r[0] for r in rows.description] + return jinja.render('index.html', request, + headers=headers, + rows=list(rows), + ) + + +@app.route('/.json') +async def table_json(request, table): + sql = 'select * from {} limit 20'.format(table) + return response.json([ + dict(r) for r in conn.execute(sql) + ]) + + +@app.route('/') +async def table(request, table): + sql = 'select * from {} limit 20'.format(table) + return await index(request, sql) + + +if __name__ == '__main__': + app.run(host="0.0.0.0", port=8006) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..26410e3e --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +sanic==0.6.0 +sanic-jinja2==0.5.5 diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 00000000..61b7f4b2 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,20 @@ + + + + {% for header in headers %}{% endfor %} + + {% for row in rows %} + + {% for td in row %} + + {% endfor %} + + {% endfor %} +
{{ header }}
{{ td }}