finished the core of platform/plugin system

This commit is contained in:
Ross Mountjoy 2020-02-06 12:00:03 -05:00
parent 43ae3103e1
commit 71b5f17f83
8 changed files with 55 additions and 67 deletions

View File

@ -40,18 +40,6 @@ class TemplateApps(db.Model):
open_in = db.Column(db.String())
class ApiCalls(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String())
resource = db.Column(db.String())
method = db.Column(db.String())
payload = db.Column(db.String())
authentication = db.Column(db.String())
username = db.Column(db.String())
password = db.Column(db.String())
value_template = db.Column(db.String())
class DataSources(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String())

View File

@ -1,6 +1,6 @@
import os
from configparser import ConfigParser
from dashmachine.main.models import Apps, ApiCalls, Groups, DataSources, DataSourcesArgs
from dashmachine.main.models import Apps, Groups, DataSources, DataSourcesArgs
from dashmachine.settings_system.models import Settings
from dashmachine.paths import user_data_folder
from dashmachine import db
@ -27,7 +27,6 @@ def read_config():
DataSources.query.delete()
DataSourcesArgs.query.delete()
Apps.query.delete()
ApiCalls.query.delete()
Settings.query.delete()
Groups.query.delete()

View File

@ -6,7 +6,6 @@ from flask import render_template, url_for, redirect, request, Blueprint, jsonif
from flask_login import current_user
from dashmachine.main.models import Files, Apps, DataSources
from dashmachine.main.utils import (
get_rest_data,
public_route,
check_groups,
get_data_source,
@ -71,12 +70,6 @@ def app_view(app_id):
return render_template("main/app-view.html", url=f"{app_db.prefix}{app_db.url}")
@main.route("/load_rest_data", methods=["GET"])
def load_rest_data():
data_template = get_rest_data(request.args.get("template"))
return data_template
@main.route("/load_data_source", methods=["GET"])
def load_data_source():
data_source = DataSources.query.filter_by(id=request.args.get("id")).first()

View File

@ -5,7 +5,7 @@ from shutil import copyfile
from requests import get
from configparser import ConfigParser
from dashmachine.paths import dashmachine_folder, images_folder, root_folder
from dashmachine.main.models import ApiCalls, TemplateApps, Groups
from dashmachine.main.models import TemplateApps, Groups
from dashmachine.main.read_config import read_config
from dashmachine.settings_system.models import Settings
from dashmachine.user_system.models import User
@ -104,26 +104,6 @@ def dashmachine_init():
user.role = "admin"
def get_rest_data(template):
while template and template.find("{{") > -1:
start_braces = template.find("{{") + 2
end_braces = template.find("}}")
key = template[start_braces:end_braces].strip()
key_w_braces = template[start_braces - 2 : end_braces + 2]
value = do_api_call(key)
template = template.replace(key_w_braces, value)
return template
def do_api_call(key):
api_call = ApiCalls.query.filter_by(name=key).first()
if api_call.method.upper() == "GET":
value = get(api_call.resource)
exec(f"{key} = {value.json()}")
value = str(eval(api_call.value_template))
return value
def check_groups(groups, current_user):
if current_user.is_anonymous:
current_user.role = "public_user"

View File

@ -1,4 +1,5 @@
from requests import get
from flask import render_template_string
class Platform:
@ -13,8 +14,6 @@ class Platform:
if source_arg.get("key") == "method":
self.method = source_arg.get("value")
else:
self.method = "GET"
if source_arg.get("key") == "payload":
self.payload = source_arg.get("value")
@ -30,18 +29,20 @@ class Platform:
if source_arg.get("key") == "value_template":
self.value_template = source_arg.get("value")
else:
self.value_template = "value"
if source_arg.get("key") == "data_template":
self.data_template = source_arg.get("value")
else:
self.value_template = self.name
# set defaults for omitted options
if not hasattr(self, "method"):
self.method = "GET"
def process(self):
if self.method.upper() == "GET":
try:
value = get(self.resource)
except:
pass
return self.name
value = get(self.resource).json()
except Exception as e:
value = f"{e}"
value_template = render_template_string(self.value_template, value=value)
data_template = render_template_string(self.data_template, value=value_template)
return data_template

View File

@ -23,20 +23,7 @@ $( document ).ready(function() {
data: {id: el.attr('data-id')},
success: function(data){
el.closest('.col').find('.data-source-loading').addClass('hide');
el.text(data);
}
});
});
$(".data-template").each(function(e) {
var el = $(this);
$.ajax({
url: el.attr('data-url'),
type: 'GET',
data: {template: el.text()},
success: function(data){
el.text(data);
el.removeClass('hide');
el.html(data);
}
});
});

View File

@ -91,4 +91,4 @@
{% block page_lvl_js %}
{{ process_js_sources(src="main/home.js")|safe }}
{% endblock page_lvl_js %}
{% endblock page_lvl_js %}

View File

@ -0,0 +1,40 @@
"""empty message
Revision ID: 45ebff47af9f
Revises: 6bd40f00f2eb
Create Date: 2020-02-06 11:48:22.563926
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = "45ebff47af9f"
down_revision = "6bd40f00f2eb"
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_table("api_calls")
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.create_table(
"api_calls",
sa.Column("id", sa.INTEGER(), nullable=False),
sa.Column("name", sa.VARCHAR(), nullable=True),
sa.Column("resource", sa.VARCHAR(), nullable=True),
sa.Column("method", sa.VARCHAR(), nullable=True),
sa.Column("payload", sa.VARCHAR(), nullable=True),
sa.Column("authentication", sa.VARCHAR(), nullable=True),
sa.Column("username", sa.VARCHAR(), nullable=True),
sa.Column("password", sa.VARCHAR(), nullable=True),
sa.Column("value_template", sa.VARCHAR(), nullable=True),
sa.PrimaryKeyConstraint("id"),
)
# ### end Alembic commands ###