Compare commits
13 Commits
master
...
system/met
| Author | SHA1 | Date | |
|---|---|---|---|
| d923798622 | |||
| 663a40e0a4 | |||
| db036aff77 | |||
| 25db50e6bc | |||
| 68c85c3efe | |||
| 8f3b7488eb | |||
| 46c069f54f | |||
| f9fc02564e | |||
| 8acf3da0eb | |||
| b069aaac19 | |||
| 826275b70f | |||
| 96456c485b | |||
| 6328c35c93 |
@ -1,3 +1 @@
|
||||
title = "CostaPy"
|
||||
|
||||
copyright = "Copyright (C) 2022 Dita Aji Pratama"
|
||||
|
||||
51
handler.py
51
handler.py
@ -11,6 +11,9 @@ from config import directory
|
||||
import templates.plain.main as template_public
|
||||
import modules.public.home as public_home
|
||||
|
||||
import modules.api.metaprofile.metaprofile as api_metaprofile_metaprofile
|
||||
import modules.api.metaprofile.baseurl as api_metaprofile_baseurl
|
||||
|
||||
app = Bottle()
|
||||
|
||||
@app.route('/')
|
||||
@ -21,3 +24,51 @@ def index():
|
||||
}
|
||||
}
|
||||
return public_home.main().html(params)
|
||||
|
||||
@app.route('/api/metaprofile/<alder>', method=['OPTIONS', 'POST'])
|
||||
def index(alder):
|
||||
try:
|
||||
if request.method == 'OPTIONS':
|
||||
return None
|
||||
else:
|
||||
response.content_type = 'application/json'
|
||||
params = request.json
|
||||
if alder == 'add':
|
||||
return json.dumps(api_metaprofile_metaprofile.metaprofile().add(params), indent = 2).encode()
|
||||
elif alder == 'list':
|
||||
return json.dumps(api_metaprofile_metaprofile.metaprofile().list(params), indent = 2).encode()
|
||||
elif alder == 'detail':
|
||||
return json.dumps(api_metaprofile_metaprofile.metaprofile().detail(params), indent = 2).encode()
|
||||
elif alder == 'edit':
|
||||
return json.dumps(api_metaprofile_metaprofile.metaprofile().edit(params), indent = 2).encode()
|
||||
elif alder == 'remove':
|
||||
return json.dumps(api_metaprofile_metaprofile.metaprofile().remove(params), indent = 2).encode()
|
||||
else:
|
||||
return json.dumps({}, indent = 2).encode()
|
||||
except Exception as e:
|
||||
print(str(e),flush=True)
|
||||
return json.dumps({}, indent = 2).encode()
|
||||
|
||||
@app.route('/api/metaprofile/baseurl/<alder>', method=['OPTIONS', 'POST'])
|
||||
def index(alder):
|
||||
try:
|
||||
if request.method == 'OPTIONS':
|
||||
return None
|
||||
else:
|
||||
response.content_type = 'application/json'
|
||||
params = request.json
|
||||
if alder == 'add':
|
||||
return json.dumps(api_metaprofile_baseurl.baseurl().add(params), indent = 2).encode()
|
||||
elif alder == 'list':
|
||||
return json.dumps(api_metaprofile_baseurl.baseurl().list(params), indent = 2).encode()
|
||||
elif alder == 'detail':
|
||||
return json.dumps(api_metaprofile_baseurl.baseurl().detail(params), indent = 2).encode()
|
||||
elif alder == 'edit':
|
||||
return json.dumps(api_metaprofile_baseurl.baseurl().edit(params), indent = 2).encode()
|
||||
elif alder == 'remove':
|
||||
return json.dumps(api_metaprofile_baseurl.baseurl().remove(params), indent = 2).encode()
|
||||
else:
|
||||
return json.dumps({}, indent = 2).encode()
|
||||
except Exception as e:
|
||||
print(str(e),flush=True)
|
||||
return json.dumps({}, indent = 2).encode()
|
||||
|
||||
139
modules/api/metaprofile/baseurl.py
Normal file
139
modules/api/metaprofile/baseurl.py
Normal file
@ -0,0 +1,139 @@
|
||||
import mysql.connector as mariadb
|
||||
|
||||
from config import database
|
||||
from scripts import loggorilla
|
||||
|
||||
import datetime
|
||||
|
||||
class baseurl:
|
||||
|
||||
def __init__(self):
|
||||
self.db_main = mariadb.connect(**database.db_main)
|
||||
self.cursor = self.db_main.cursor(dictionary=True)
|
||||
|
||||
def add(self, params):
|
||||
APIADDR = "/api/metaprofile/baseurl/add"
|
||||
response = {}
|
||||
loggorilla.prcss(APIADDR, "Define Models")
|
||||
metaprofile = params["metaprofile" ]
|
||||
name = params["name" ]
|
||||
url = params["url" ]
|
||||
self.cursor.execute("BEGIN;")
|
||||
try:
|
||||
loggorilla.prcss(APIADDR, "Activity: Insert")
|
||||
self.cursor.execute("INSERT INTO `metaprofile_baseurl` VALUES (DEFAULT, %s, %s, %s) ;", (metaprofile, name, url) )
|
||||
loggorilla.prcss(APIADDR, "Set Response")
|
||||
response["status" ] = "success"
|
||||
response["desc" ] = "data updated"
|
||||
except Exception as e:
|
||||
self.cursor.execute("ROLLBACK;")
|
||||
loggorilla.error(APIADDR, str(e) )
|
||||
loggorilla.prcss(APIADDR, "Set Response")
|
||||
response["status" ] = "failed"
|
||||
response["desc" ] = "Internal Server Error. Please contact us if you still have an error."
|
||||
finally:
|
||||
self.cursor.execute("COMMIT;")
|
||||
self.cursor.close()
|
||||
self.db_main.close()
|
||||
return response
|
||||
|
||||
def list(self, params):
|
||||
APIADDR = "/api/metaprofile/baseurl/list"
|
||||
response = {}
|
||||
loggorilla.prcss(APIADDR, "Define Models")
|
||||
key = params["key" ]
|
||||
self.cursor.execute("BEGIN;")
|
||||
try:
|
||||
self.cursor.execute("select `id`, `name`, `url` from `metaprofile_baseurl` where `metaprofile` = %s ;", (key,) )
|
||||
row = self.cursor.fetchall()
|
||||
loggorilla.prcss(APIADDR, "Set Response")
|
||||
response["status" ] = "success"
|
||||
response["desc" ] = "data collected"
|
||||
response["data" ] = row
|
||||
except Exception as e:
|
||||
self.cursor.execute("ROLLBACK;")
|
||||
loggorilla.error(APIADDR, str(e) )
|
||||
loggorilla.prcss(APIADDR, "Set Response")
|
||||
response["status" ] = "failed"
|
||||
response["desc" ] = "Internal Server Error. Please contact us if you still have an error."
|
||||
finally:
|
||||
self.cursor.execute("COMMIT;")
|
||||
self.cursor.close()
|
||||
self.db_main.close()
|
||||
return response
|
||||
|
||||
def detail(self, params):
|
||||
APIADDR = "/api/metaprofile/baseurl/detail"
|
||||
response = {}
|
||||
loggorilla.prcss(APIADDR, "Define Models")
|
||||
key = params["key" ]
|
||||
self.cursor.execute("BEGIN;")
|
||||
try:
|
||||
self.cursor.execute("select `id`, `metaprofile`, `name`, `url` from `metaprofile_baseurl` where `id` = %s ;", (key,) )
|
||||
row = self.cursor.fetchone()
|
||||
loggorilla.prcss(APIADDR, "Set Response")
|
||||
response["status" ] = "success"
|
||||
response["desc" ] = "data collected"
|
||||
response["data" ] = row
|
||||
except Exception as e:
|
||||
self.cursor.execute("ROLLBACK;")
|
||||
loggorilla.error(APIADDR, str(e) )
|
||||
loggorilla.prcss(APIADDR, "Set Response")
|
||||
response["status" ] = "failed"
|
||||
response["desc" ] = "Internal Server Error. Please contact us if you still have an error."
|
||||
finally:
|
||||
self.cursor.execute("COMMIT;")
|
||||
self.cursor.close()
|
||||
self.db_main.close()
|
||||
return response
|
||||
|
||||
def edit(self, params):
|
||||
APIADDR = "/api/metaprofile/baseurl/edit"
|
||||
response = {}
|
||||
loggorilla.prcss(APIADDR, "Define Models")
|
||||
key = params["key" ]
|
||||
name = params["name" ]
|
||||
url = params["url" ]
|
||||
self.cursor.execute("BEGIN;")
|
||||
try:
|
||||
loggorilla.prcss(APIADDR, "Activity: Update")
|
||||
self.cursor.execute("UPDATE `metaprofile_baseurl` SET `name` = %s, `url` = %s WHERE `id` = %s ;", (name, url, key) )
|
||||
loggorilla.prcss(APIADDR, "Set Response")
|
||||
response["status" ] = "success"
|
||||
response["desc" ] = "data updated"
|
||||
except Exception as e:
|
||||
self.cursor.execute("ROLLBACK;")
|
||||
loggorilla.error(APIADDR, str(e) )
|
||||
loggorilla.prcss(APIADDR, "Set Response")
|
||||
response["status" ] = "failed"
|
||||
response["desc" ] = "Internal Server Error. Please contact us if you still have an error."
|
||||
finally:
|
||||
self.cursor.execute("COMMIT;")
|
||||
self.cursor.close()
|
||||
self.db_main.close()
|
||||
return response
|
||||
|
||||
def remove(self, params):
|
||||
APIADDR = "/api/metaprofile/baseurl/remove"
|
||||
response = {}
|
||||
loggorilla.prcss(APIADDR, "Define Models")
|
||||
key = params["key" ]
|
||||
self.cursor.execute("BEGIN;")
|
||||
try:
|
||||
loggorilla.prcss(APIADDR, "Activity: Remove")
|
||||
self.cursor.execute("DELETE FROM `metaprofile_baseurl` WHERE `id` = %s ;", (key,) )
|
||||
loggorilla.prcss(APIADDR, "Set Response")
|
||||
response["status" ] = "success"
|
||||
response["desc" ] = "data updated"
|
||||
except Exception as e:
|
||||
self.cursor.execute("ROLLBACK;")
|
||||
loggorilla.error(APIADDR, str(e) )
|
||||
loggorilla.prcss(APIADDR, "Set Response")
|
||||
response["status" ] = "failed"
|
||||
response["desc" ] = "Internal Server Error. Please contact us if you still have an error."
|
||||
finally:
|
||||
self.cursor.execute("COMMIT;")
|
||||
self.cursor.close()
|
||||
self.db_main.close()
|
||||
return response
|
||||
|
||||
136
modules/api/metaprofile/metaprofile.py
Normal file
136
modules/api/metaprofile/metaprofile.py
Normal file
@ -0,0 +1,136 @@
|
||||
import mysql.connector as mariadb
|
||||
|
||||
from config import database
|
||||
from scripts import loggorilla
|
||||
|
||||
import datetime
|
||||
|
||||
class metaprofile:
|
||||
|
||||
def __init__(self):
|
||||
self.db_main = mariadb.connect(**database.db_main)
|
||||
self.cursor = self.db_main.cursor(dictionary=True)
|
||||
|
||||
def add(self, params):
|
||||
APIADDR = "/api/metaprofile/add"
|
||||
response = {}
|
||||
loggorilla.prcss(APIADDR, "Define Models")
|
||||
favicon = params["favicon" ]
|
||||
copyright = params["copyright" ]
|
||||
self.cursor.execute("BEGIN;")
|
||||
try:
|
||||
loggorilla.prcss(APIADDR, "Activity: Insert")
|
||||
self.cursor.execute("INSERT INTO `metaprofile` VALUES (DEFAULT, %s, %s) ;", (favicon, copyright) )
|
||||
loggorilla.prcss(APIADDR, "Set Response")
|
||||
response["status" ] = "success"
|
||||
response["desc" ] = "data updated"
|
||||
except Exception as e:
|
||||
self.cursor.execute("ROLLBACK;")
|
||||
loggorilla.error(APIADDR, str(e) )
|
||||
loggorilla.prcss(APIADDR, "Set Response")
|
||||
response["status" ] = "failed"
|
||||
response["desc" ] = "Internal Server Error. Please contact us if you still have an error."
|
||||
finally:
|
||||
self.cursor.execute("COMMIT;")
|
||||
self.cursor.close()
|
||||
self.db_main.close()
|
||||
return response
|
||||
|
||||
def list(self, params):
|
||||
APIADDR = "/api/metaprofile/list"
|
||||
response = {}
|
||||
self.cursor.execute("BEGIN;")
|
||||
try:
|
||||
self.cursor.execute("select `id`, `favicon`, `copyright` from `metaprofile`;")
|
||||
row = self.cursor.fetchall()
|
||||
loggorilla.prcss(APIADDR, "Set Response")
|
||||
response["status" ] = "success"
|
||||
response["desc" ] = "data collected"
|
||||
response["data" ] = row
|
||||
except Exception as e:
|
||||
self.cursor.execute("ROLLBACK;")
|
||||
loggorilla.error(APIADDR, str(e) )
|
||||
loggorilla.prcss(APIADDR, "Set Response")
|
||||
response["status" ] = "failed"
|
||||
response["desc" ] = "Internal Server Error. Please contact us if you still have an error."
|
||||
finally:
|
||||
self.cursor.execute("COMMIT;")
|
||||
self.cursor.close()
|
||||
self.db_main.close()
|
||||
return response
|
||||
|
||||
def detail(self, params):
|
||||
APIADDR = "/api/metaprofile/detail"
|
||||
response = {}
|
||||
loggorilla.prcss(APIADDR, "Define Models")
|
||||
key = params["key" ]
|
||||
self.cursor.execute("BEGIN;")
|
||||
try:
|
||||
self.cursor.execute("select `id`, `favicon`, `copyright` from `metaprofile` where `id` = %s ;", (key,) )
|
||||
row = self.cursor.fetchone()
|
||||
loggorilla.prcss(APIADDR, "Set Response")
|
||||
response["status" ] = "success"
|
||||
response["desc" ] = "data collected"
|
||||
response["data" ] = row
|
||||
except Exception as e:
|
||||
self.cursor.execute("ROLLBACK;")
|
||||
loggorilla.error(APIADDR, str(e) )
|
||||
loggorilla.prcss(APIADDR, "Set Response")
|
||||
response["status" ] = "failed"
|
||||
response["desc" ] = "Internal Server Error. Please contact us if you still have an error."
|
||||
finally:
|
||||
self.cursor.execute("COMMIT;")
|
||||
self.cursor.close()
|
||||
self.db_main.close()
|
||||
return response
|
||||
|
||||
def edit(self, params):
|
||||
APIADDR = "/api/metaprofile/edit"
|
||||
response = {}
|
||||
loggorilla.prcss(APIADDR, "Define Models")
|
||||
key = params["key" ]
|
||||
favicon = params["favicon" ]
|
||||
copyright = params["copyright" ]
|
||||
self.cursor.execute("BEGIN;")
|
||||
try:
|
||||
loggorilla.prcss(APIADDR, "Activity: Update")
|
||||
self.cursor.execute("UPDATE `metaprofile` SET `favicon` = %s, `copyright` = %s WHERE `id` = %s ;", (favicon, copyright, key) )
|
||||
loggorilla.prcss(APIADDR, "Set Response")
|
||||
response["status" ] = "success"
|
||||
response["desc" ] = "data updated"
|
||||
except Exception as e:
|
||||
self.cursor.execute("ROLLBACK;")
|
||||
loggorilla.error(APIADDR, str(e) )
|
||||
loggorilla.prcss(APIADDR, "Set Response")
|
||||
response["status" ] = "failed"
|
||||
response["desc" ] = "Internal Server Error. Please contact us if you still have an error."
|
||||
finally:
|
||||
self.cursor.execute("COMMIT;")
|
||||
self.cursor.close()
|
||||
self.db_main.close()
|
||||
return response
|
||||
|
||||
def remove(self, params):
|
||||
APIADDR = "/api/metaprofile/remove"
|
||||
response = {}
|
||||
loggorilla.prcss(APIADDR, "Define Models")
|
||||
key = params["key" ]
|
||||
self.cursor.execute("BEGIN;")
|
||||
try:
|
||||
loggorilla.prcss(APIADDR, "Activity: Remove")
|
||||
self.cursor.execute("DELETE FROM `metaprofile` WHERE `id` = %s ;", (key,) )
|
||||
loggorilla.prcss(APIADDR, "Set Response")
|
||||
response["status" ] = "success"
|
||||
response["desc" ] = "data updated"
|
||||
except Exception as e:
|
||||
self.cursor.execute("ROLLBACK;")
|
||||
loggorilla.error(APIADDR, str(e) )
|
||||
loggorilla.prcss(APIADDR, "Set Response")
|
||||
response["status" ] = "failed"
|
||||
response["desc" ] = "Internal Server Error. Please contact us if you still have an error."
|
||||
finally:
|
||||
self.cursor.execute("COMMIT;")
|
||||
self.cursor.close()
|
||||
self.db_main.close()
|
||||
return response
|
||||
|
||||
@ -1,12 +1,17 @@
|
||||
from mako.template import Template
|
||||
from config import globalvar, navigation
|
||||
import mysql.connector as mariadb
|
||||
|
||||
from config import database, globalvar, navigation
|
||||
from mako.template import Template
|
||||
|
||||
class main:
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
self.db_main = mariadb.connect(**database.db_main)
|
||||
self.cursor = self.db_main.cursor(dictionary=True)
|
||||
|
||||
def html(self, params):
|
||||
self.cursor.execute("SELECT `favicon`, `copyright` FROM `metaprofile` WHERE id = 1 ;")
|
||||
metaprofile = self.cursor.fetchone()
|
||||
return Template(params["mako"]["website"]['index']).render(
|
||||
title = globalvar.title,
|
||||
header = "Welcome to CostaPy",
|
||||
@ -16,7 +21,7 @@ class main:
|
||||
active_page = "Home"
|
||||
),
|
||||
footer = Template(params["mako"]["website"]['footer']).render(
|
||||
copyright = globalvar.copyright,
|
||||
copyright = metaprofile["copyright"],
|
||||
),
|
||||
container = Template(params["mako"]["website"]['container']).render(
|
||||
greeting = f"Welcome to your new web application! This placeholder page is here to let you know that your web framework is successfully set up and ready to go. Now, it's time to start building your project. Dive into the documentation to explore the features and capabilities at your disposal."
|
||||
|
||||
13
scripts/loggorilla.py
Normal file
13
scripts/loggorilla.py
Normal file
@ -0,0 +1,13 @@
|
||||
import datetime
|
||||
|
||||
def prcss(loc, msg):
|
||||
print(f"[loggorilla][{datetime.datetime.now()}][\033[32mprcss\033[39m][\033[95m{loc}\033[39m] {msg}", flush=True)
|
||||
|
||||
def accss(loc, msg):
|
||||
print(f"[loggorilla][{datetime.datetime.now()}][\033[36maccss\033[39m][\033[95m{loc}\033[39m] {msg}", flush=True)
|
||||
|
||||
def fyinf(loc, msg):
|
||||
print(f"[loggorilla][{datetime.datetime.now()}][\033[93mfyinf\033[39m][\033[95m{loc}\033[39m] {msg}", flush=True)
|
||||
|
||||
def error(loc, msg):
|
||||
print(f"[loggorilla][{datetime.datetime.now()}][\033[31merror\033[39m][\033[95m{loc}\033[39m] {msg}", flush=True)
|
||||
60
sql/metaprofile.sql
Normal file
60
sql/metaprofile.sql
Normal file
@ -0,0 +1,60 @@
|
||||
-- README
|
||||
-- Prefix idx_ = index
|
||||
-- Prefix fk_ = foreign
|
||||
-- Create an index for fast lookups
|
||||
-- Defining constraints separately for better readability & maintainability
|
||||
-- Prefix p_ = Procedure
|
||||
-- Prefix i_ = Input(s)
|
||||
-- Prefix v_ = Variable(s)
|
||||
-- Prefix o_ = Output(s)
|
||||
|
||||
-- Main table
|
||||
|
||||
create table if not exists `metaprofile` (
|
||||
`id` int(11) not null auto_increment primary key,
|
||||
`favicon` longtext default null,
|
||||
`copyright` longtext default null
|
||||
) engine=InnoDB default charset=utf8mb4;
|
||||
|
||||
create table if not exists `metaprofile_baseurl` (
|
||||
`id` int(11) not null auto_increment primary key,
|
||||
`metaprofile` int(11) not null,
|
||||
`name` longtext not null,
|
||||
`url` longtext not null,
|
||||
key `idx_metaprofile` (`metaprofile`),
|
||||
constraint `metaprofile_baseurl_fk_metaprofile`
|
||||
foreign key (`metaprofile`) references `metaprofile` (`id`)
|
||||
on update cascade
|
||||
on delete cascade
|
||||
) engine=InnoDB default charset=utf8mb4;
|
||||
|
||||
create table if not exists `metaprofile_brand` (
|
||||
`id` int(11) not null auto_increment primary key,
|
||||
`metaprofile` int(11) not null,
|
||||
`name` longtext not null,
|
||||
`tagline` longtext default null,
|
||||
`description` longtext default null,
|
||||
key `idx_metaprofile` (`metaprofile`),
|
||||
constraint `metaprofile_brand_fk_metaprofile`
|
||||
foreign key (`metaprofile`) references `metaprofile` (`id`)
|
||||
on update cascade
|
||||
on delete cascade
|
||||
) engine=InnoDB default charset=utf8mb4;
|
||||
|
||||
create table if not exists `metaprofile_brand_logo` (
|
||||
`id` int(11) not null auto_increment primary key,
|
||||
`brand` int(11) not null,
|
||||
`name` longtext not null,
|
||||
`image` longtext not null,
|
||||
key `idx_brand` (`brand`),
|
||||
constraint `metaprofile_brand_logo_fk_brand`
|
||||
foreign key (`brand`) references `metaprofile_brand` (`id`)
|
||||
on update cascade
|
||||
on delete cascade
|
||||
) engine=InnoDB default charset=utf8mb4;
|
||||
|
||||
-- Default Data
|
||||
|
||||
INSERT INTO metaprofile VALUES (1, 'img/favicon.png', 'Copyright (C) 2022 Dita Aji Pratama');
|
||||
INSERT INTO metaprofile_baseurl VALUES (1, 1, 'local', 'http://localhost:11000');
|
||||
|
||||
BIN
static/img/favicon.png
Normal file
BIN
static/img/favicon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 127 KiB |
19
static/js/carrack.js
Normal file
19
static/js/carrack.js
Normal file
@ -0,0 +1,19 @@
|
||||
function sendHttpRequest(url, method, data, callback, contentType = "multipart/form-data", authorization = "") {
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open(method, url, true);
|
||||
xhr.setRequestHeader("Content-Type", contentType);
|
||||
xhr.setRequestHeader("Authorization", authorization);
|
||||
xhr.onreadystatechange = function () {
|
||||
if (xhr.readyState === 4) {
|
||||
if (xhr.status === 200) {
|
||||
var response = xhr.responseText;
|
||||
callback(null, response);
|
||||
}
|
||||
else callback(xhr.status, null);
|
||||
}
|
||||
};
|
||||
var requestData;
|
||||
if (contentType === "application/json") requestData = JSON.stringify(data);
|
||||
else requestData = data;
|
||||
xhr.send(requestData);
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user