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)
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)
#!/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()
def trigger_poll(): """ Gets the trigger_poll value from the ultrasonics database. """ trigger_poll = database.Core().get("trigger_poll") return int(trigger_poll)
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)