Source code for flexget.ui.v1
import fnmatch
import os
from flask import Flask, redirect, request, send_from_directory
from flask_compress import Compress
from loguru import logger
from flexget.webserver import register_app, register_home
logger = logger.bind(name='webui')
manager = None
debug = False
app_base = None
ui_base = os.path.dirname(os.path.realpath(__file__))
ui_src = os.path.join(ui_base, 'src')
ui_dist = os.path.join(ui_base, 'app')
bower_components = os.path.join(ui_base, 'bower_components')
webui_app = Flask(__name__)
Compress(webui_app)
webui_app.url_path = '/v1/'
HTTP_METHODS = ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH']
[docs]
@webui_app.route('/<path:path>')
def serve_app(path):
if debug:
if path.startswith('bower_components'):
return send_from_directory(
bower_components, path.lstrip('bower_components').lstrip('/')
)
if os.path.exists(os.path.join(ui_src, path)):
return send_from_directory(ui_src, path)
if not app_base:
return send_from_directory(ui_base, 'load.failure.html')
return send_from_directory(app_base, path)
[docs]
@webui_app.route('/api/')
@webui_app.route('/api/<path:path>', methods=HTTP_METHODS)
def api_redirect(path='/'):
return redirect(request.url.replace('/v1', '', 1), 307)
[docs]
@webui_app.route('/')
def root():
if not app_base:
return send_from_directory(ui_base, 'load.failure.html')
return send_from_directory(app_base, 'app.html')
[docs]
def _find(path, f):
matches = []
for root_dir, _, file_names in os.walk(path):
for filename in fnmatch.filter(file_names, f):
matches.append(os.path.join(root_dir, filename))
return matches
[docs]
def register_web_ui(mgr):
global manager, app_base, debug
manager = mgr
if 'debug' in manager.args:
debug = True
if debug:
app_base = os.path.join(ui_base, '.tmp', 'serve')
if not os.path.exists(app_base):
logger.warning(
'Unable to start web ui in debug mode. To enable debug mode please run the debug build, '
'see https://flexget.com/Web-UI for instructions'
)
logger.warning('Attempting to serve web ui from complied directory')
app_base = None
if not app_base:
app_base = ui_dist
if not os.path.exists(app_base):
logger.critical(
'Failed to start web ui,'
' this can happen if you are running from GitHub version and forgot to run the web ui build, '
'see https://flexget.com/Web-UI for instructions'
)
app_base = None
register_app(webui_app.url_path, webui_app, 'WebUI (v1)')
register_home('%s/' % webui_app.url_path)