finished the core of platform/plugin system
This commit is contained in:
parent
43ae3103e1
commit
71b5f17f83
@ -40,18 +40,6 @@ class TemplateApps(db.Model):
|
|||||||
open_in = db.Column(db.String())
|
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):
|
class DataSources(db.Model):
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
name = db.Column(db.String())
|
name = db.Column(db.String())
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
from configparser import ConfigParser
|
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.settings_system.models import Settings
|
||||||
from dashmachine.paths import user_data_folder
|
from dashmachine.paths import user_data_folder
|
||||||
from dashmachine import db
|
from dashmachine import db
|
||||||
@ -27,7 +27,6 @@ def read_config():
|
|||||||
DataSources.query.delete()
|
DataSources.query.delete()
|
||||||
DataSourcesArgs.query.delete()
|
DataSourcesArgs.query.delete()
|
||||||
Apps.query.delete()
|
Apps.query.delete()
|
||||||
ApiCalls.query.delete()
|
|
||||||
Settings.query.delete()
|
Settings.query.delete()
|
||||||
Groups.query.delete()
|
Groups.query.delete()
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@ from flask import render_template, url_for, redirect, request, Blueprint, jsonif
|
|||||||
from flask_login import current_user
|
from flask_login import current_user
|
||||||
from dashmachine.main.models import Files, Apps, DataSources
|
from dashmachine.main.models import Files, Apps, DataSources
|
||||||
from dashmachine.main.utils import (
|
from dashmachine.main.utils import (
|
||||||
get_rest_data,
|
|
||||||
public_route,
|
public_route,
|
||||||
check_groups,
|
check_groups,
|
||||||
get_data_source,
|
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}")
|
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"])
|
@main.route("/load_data_source", methods=["GET"])
|
||||||
def load_data_source():
|
def load_data_source():
|
||||||
data_source = DataSources.query.filter_by(id=request.args.get("id")).first()
|
data_source = DataSources.query.filter_by(id=request.args.get("id")).first()
|
||||||
|
@ -5,7 +5,7 @@ from shutil import copyfile
|
|||||||
from requests import get
|
from requests import get
|
||||||
from configparser import ConfigParser
|
from configparser import ConfigParser
|
||||||
from dashmachine.paths import dashmachine_folder, images_folder, root_folder
|
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.main.read_config import read_config
|
||||||
from dashmachine.settings_system.models import Settings
|
from dashmachine.settings_system.models import Settings
|
||||||
from dashmachine.user_system.models import User
|
from dashmachine.user_system.models import User
|
||||||
@ -104,26 +104,6 @@ def dashmachine_init():
|
|||||||
user.role = "admin"
|
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):
|
def check_groups(groups, current_user):
|
||||||
if current_user.is_anonymous:
|
if current_user.is_anonymous:
|
||||||
current_user.role = "public_user"
|
current_user.role = "public_user"
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
from requests import get
|
from requests import get
|
||||||
|
from flask import render_template_string
|
||||||
|
|
||||||
|
|
||||||
class Platform:
|
class Platform:
|
||||||
@ -13,8 +14,6 @@ class Platform:
|
|||||||
|
|
||||||
if source_arg.get("key") == "method":
|
if source_arg.get("key") == "method":
|
||||||
self.method = source_arg.get("value")
|
self.method = source_arg.get("value")
|
||||||
else:
|
|
||||||
self.method = "GET"
|
|
||||||
|
|
||||||
if source_arg.get("key") == "payload":
|
if source_arg.get("key") == "payload":
|
||||||
self.payload = source_arg.get("value")
|
self.payload = source_arg.get("value")
|
||||||
@ -30,18 +29,20 @@ class Platform:
|
|||||||
|
|
||||||
if source_arg.get("key") == "value_template":
|
if source_arg.get("key") == "value_template":
|
||||||
self.value_template = source_arg.get("value")
|
self.value_template = source_arg.get("value")
|
||||||
else:
|
|
||||||
self.value_template = "value"
|
|
||||||
|
|
||||||
if source_arg.get("key") == "data_template":
|
if source_arg.get("key") == "data_template":
|
||||||
self.data_template = source_arg.get("value")
|
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):
|
def process(self):
|
||||||
if self.method.upper() == "GET":
|
if self.method.upper() == "GET":
|
||||||
try:
|
try:
|
||||||
value = get(self.resource)
|
value = get(self.resource).json()
|
||||||
except:
|
except Exception as e:
|
||||||
pass
|
value = f"{e}"
|
||||||
return self.name
|
value_template = render_template_string(self.value_template, value=value)
|
||||||
|
data_template = render_template_string(self.data_template, value=value_template)
|
||||||
|
return data_template
|
||||||
|
@ -23,20 +23,7 @@ $( document ).ready(function() {
|
|||||||
data: {id: el.attr('data-id')},
|
data: {id: el.attr('data-id')},
|
||||||
success: function(data){
|
success: function(data){
|
||||||
el.closest('.col').find('.data-source-loading').addClass('hide');
|
el.closest('.col').find('.data-source-loading').addClass('hide');
|
||||||
el.text(data);
|
el.html(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');
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
40
migrations/versions/45ebff47af9f_.py
Normal file
40
migrations/versions/45ebff47af9f_.py
Normal 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 ###
|
Loading…
x
Reference in New Issue
Block a user