128 lines
3.8 KiB
Python
128 lines
3.8 KiB
Python
import sqlite3
|
|
import json
|
|
import sys
|
|
|
|
destroy_button_table = r'''
|
|
DROP TABLE IF EXISTS buttons
|
|
'''
|
|
|
|
destroy_group_table = r'''
|
|
DROP TABLE IF EXISTS groups
|
|
'''
|
|
|
|
make_button_table = r'''
|
|
CREATE TABLE IF NOT EXISTS buttons
|
|
(button_name TEXT PRIMARY KEY,
|
|
page_group TEXT NOT NULL,
|
|
video_url TEXT NOT NULL,
|
|
video_arguments TEXT NOT NULL,
|
|
is_default BOOLEAN NOT NULL CHECK (is_default IN (0, 1)),
|
|
is_active BOOLEAN NOT NULL CHECK (is_active IN (0, 1)))
|
|
'''
|
|
|
|
make_group_table = r'''
|
|
CREATE TABLE IF NOT EXISTS groups
|
|
(group_name TEXT PRIMARY KEY,
|
|
parent_group TEXT NOT NULL
|
|
)
|
|
'''
|
|
|
|
insert_button_row = r'''
|
|
INSERT INTO buttons VALUES
|
|
(?, ?, ?, ?, ?, ?)
|
|
'''
|
|
|
|
insert_group_row = r'''
|
|
INSERT INTO groups VALUES
|
|
(?, ?)
|
|
'''
|
|
|
|
default_count = 0
|
|
failed_a_test = False
|
|
|
|
def recursive_data_check(next_list: list, current_group_name: str):
|
|
global default_count
|
|
global failed_a_test
|
|
|
|
for element in next_list:
|
|
if not "type" in element.keys():
|
|
print(f"An element in {current_group_name} is missing the type key")
|
|
failed_a_test = True
|
|
|
|
if not "name" in element.keys():
|
|
print(f"An element in {current_group_name} with type {element["type"]} is missing the name key")
|
|
failed_a_test = True
|
|
|
|
if element["type"] == "Group":
|
|
if not "data" in element.keys():
|
|
print(f"The element in {current_group_name} with name {element["name"]} is missing the data key")
|
|
failed_a_test = True
|
|
|
|
recursive_data_check(element["data"], element["name"])
|
|
else:
|
|
if not "video_url" in element.keys():
|
|
print(f"The element in {current_group_name} with name {element["name"]} is missing the video_url key")
|
|
failed_a_test = True
|
|
|
|
if not "video_tool_arguments" in element.keys():
|
|
print(f"The element in {current_group_name} with name {element["name"]} is missing the video_tool_arguments key")
|
|
failed_a_test = True
|
|
|
|
if not "default" in element.keys():
|
|
print(f"The element in {current_group_name} with name {element["name"]} is missing the default key")
|
|
failed_a_test = True
|
|
|
|
if element["default"]:
|
|
default_count = default_count + 1
|
|
|
|
def recursive_insert(db: sqlite3.Connection, next_list: list, current_group_name: str):
|
|
for element in next_list:
|
|
if element["type"] == "Group":
|
|
db.execute(insert_group_row, [
|
|
element["name"],
|
|
current_group_name
|
|
])
|
|
db.commit()
|
|
recursive_insert(db, element["data"], element["name"])
|
|
else:
|
|
db.execute(insert_button_row, [
|
|
element["name"],
|
|
current_group_name,
|
|
element["video_url"],
|
|
" ".join(element["video_tool_arguments"]) if len(element["video_tool_arguments"]) != 0 else "",
|
|
1 if element["default"] else 0,
|
|
1 if element["default"] else 0
|
|
])
|
|
|
|
db.commit()
|
|
|
|
with open("config.json", "r") as config_file:
|
|
config_json = json.loads(config_file.read())
|
|
|
|
if not "instance_name" in config_json.keys():
|
|
print("The config item instance_name is required")
|
|
|
|
recursive_data_check(config_json["data"], "Home")
|
|
|
|
if default_count > 1:
|
|
print(f"There can only be one default button configured, current number configured: {default_count}")
|
|
failed_a_test = True
|
|
elif default_count == 0:
|
|
print("There must be one default button configured, currently there are none")
|
|
|
|
if failed_a_test:
|
|
sys.exit(1)
|
|
|
|
db = sqlite3.connect(config_json["db_name"])
|
|
db.execute(destroy_button_table)
|
|
db.execute(destroy_group_table)
|
|
db.execute(make_button_table)
|
|
db.execute(make_group_table)
|
|
|
|
recursive_insert(db, config_json["data"], "Home")
|
|
|
|
db.close()
|
|
|
|
|
|
|