Beispiel #1
0
def html_index():
    action = request.args.get("action")

    # Catch statement if nothing was changed, and action is build
    if action in ['build'] and (Applet.current_plans == Applet.default_plans):
        log.warning(
            "At request to submit applet plans was received, but the plans were not changed from defaults.")
        return redirect(request.path, code=302)

    if action == 'build':
        # Send applet plans to builder and reset to default
        Applet.current_plans["applet_name"] = request.args.get(
            'applet_name') or random_words.name()

        plugins.applet_build(Applet.current_plans)
        Applet.current_plans = copy.deepcopy(Applet.default_plans)
        return redirect(request.path, code=302)

    elif action == 'modify':
        applet_id = request.args.get('applet_id')

        # Load database plans into current plans
        Applet.current_plans = plugins.applet_load(applet_id)

        return redirect("/new_applet", code=302)

    elif action == 'clear':
        Applet.current_plans = copy.deepcopy(Applet.default_plans)
        return redirect(request.path, code=302)

    elif action == 'remove':
        applet_id = request.args.get('applet_id')
        plugins.applet_delete(applet_id)
        return redirect(request.path, code=302)

    elif action == 'run':
        from ultrasonics.scheduler import pool

        applet_id = request.args.get('applet_id')

        # plugins.applet_run(applet_id)
        pool.submit(plugins.applet_run, applet_id)
        return redirect(request.path, code=302)

    elif action == 'new_install':
        database.Core().new_install(update=True)
        return redirect(request.path, code=302)

    elif database.Core().new_install():
        return redirect("/welcome", code=302)

    else:
        # Clear applet plans anyway
        Applet.current_plans = copy.deepcopy(Applet.default_plans)

        applet_list = plugins.applet_gather()
        return render_template('index.html', applet_list=applet_list)
Beispiel #2
0
def html_settings():
    """
    Global ultrasonics settings page.
    """
    if request.form.get('action') == "save":
        database.Core().save(request.form.to_dict())

        return redirect("/", code=302)

    settings = database.Core().load()

    return render_template("settings.html", settings=settings)
Beispiel #3
0
#!/usr/bin/env python3

"""
app
Main ultrasonics entrypoint. Run this to start ultrasonics.

XDGFX, 2020
"""

import os

from ultrasonics import database, plugins, scheduler, webapp

_ultrasonics = {
    "version": "1.0.0-rc.1",
    "config_dir": os.path.join(os.path.dirname(__file__), "config")
}

database.Core().connect()
plugins.plugin_gather()
scheduler.scheduler_start()
webapp.server_start()
Beispiel #4
0
def trigger_poll():
    """
    Gets the trigger_poll value from the ultrasonics database.
    """
    trigger_poll = database.Core().get("trigger_poll")
    return int(trigger_poll)
Beispiel #5
0
def html_configure_plugin():
    """
    Settings page for each instance for a plugin.
    """

    global_settings = database.Core().load(raw=True)

    # Data received is to update persistent plugin settings
    if request.form.get('action') in ['add', 'test']:

        plugin = request.form.get('plugin')
        version = request.form.get('version')
        component = request.form.get('component')
        new_data = {key: value for key, value in request.form.to_dict().items() if key not in [
            'action', 'plugin', 'version', 'component'] and value != ""}

        # Merge new settings with existing database settings
        data = plugins.plugin_load(plugin, version)

        if data is None:
            data = new_data
        else:
            data.update(new_data)

        persistent = False

        if request.form.get('action') == 'test':
            response = plugins.plugin_test(plugin, version, data, component)
            sio.emit("plugin_test", response)
            return
        else:
            plugins.plugin_update(plugin, version, data)

        # # Redirect to remove url parameters, so that refreshing won't keep adding more plugin instances
        # return redirect(request.path, code=302)

    else:
        plugin = request.args.get('plugin')
        version = request.args.get('version')
        component = request.args.get('component')
        persistent = request.args.get('persistent') != '0'

    # Get persistent settings for the plugin
    for item in plugins.handshakes:
        if item["name"] == plugin and item["version"] == version:
            persistent_settings = item["settings"]

    # If persistent settings are supplied
    try:
        if persistent_settings:
            settings = plugins.plugin_build(plugin, version, component)

            # Force redirect to persistent settings if manually requested through url parameters, or if plugin has not been configured
            persistent = persistent or settings is None

            if persistent:
                settings = persistent_settings

        else:
            # No persistent settings exist
            settings = plugins.plugin_build(
                plugin, version, component, force=True)

            persistent = -1

    except Exception as e:
        log.error(
            "Could not build plugin! Check your database settings are correct.", e)
        return render_template('index.html')

    # Check if any settings are custom html strings
    custom_html = any([isinstance(setting, str) for setting in settings])

    test_exists = plugins.plugin_test(plugin, version, component=component)

    return render_template('configure_plugin.html', settings=settings, plugin=plugin, version=version, component=component, persistent=persistent, custom_html=custom_html, test_exists=test_exists, global_settings=global_settings)