grooveondemand/groove/webserver.py

64 lines
1.6 KiB
Python
Raw Normal View History

import json
2022-11-20 01:00:54 -08:00
import logging
import os
import bottle
from bottle import HTTPResponse
from bottle.ext import sqlalchemy
2022-11-20 01:00:54 -08:00
from groove.auth import is_authenticated
from groove.db.manager import database_manager
from groove.db import metadata
from groove.playlist import Playlist
2022-11-20 01:00:54 -08:00
server = bottle.Bottle()
2022-11-20 01:00:54 -08:00
2022-11-20 16:44:33 -08:00
def start(host: str, port: int, debug: bool) -> None: # pragma: no cover
2022-11-20 01:00:54 -08:00
"""
2022-11-20 09:28:00 -08:00
Start the Bottle app.
2022-11-20 01:00:54 -08:00
"""
2022-11-20 09:28:00 -08:00
logging.debug(f"Configuring sqllite using {os.environ.get('DATABASE_PATH')}")
with database_manager() as manager:
server.install(sqlalchemy.Plugin(
manager.engine,
metadata,
keyword='db',
create=True,
commit=True,
))
logging.debug(f"Configuring webserver with host={host}, port={port}, debug={debug}")
server.run(
host=os.getenv('HOST', host),
port=os.getenv('PORT', port),
debug=debug,
server='paste',
quiet=True
)
@server.route('/')
def index():
return "Groovy."
2022-11-20 01:00:54 -08:00
@server.route('/build')
@bottle.auth_basic(is_authenticated)
def build():
return "Authenticated. Groovy."
2022-11-20 01:00:54 -08:00
@server.route('/playlist/<slug>')
def get_playlist(slug, db):
"""
Retrieve a playlist and its entries by a slug.
"""
logging.debug(f"Looking up playlist: {slug}...")
playlist = Playlist(slug=slug, session=db)
if not playlist.exists:
2022-11-20 01:00:54 -08:00
return HTTPResponse(status=404, body="Not found")
response = json.dumps(playlist.as_dict)
logging.debug(response)
return HTTPResponse(status=200, content_type='application/json', body=response)