Commit 37c7afb0 by aa.gusti

Merge branch 'beta-4.2-training' into 'beta-4.2'

Beta 4.2 training

See merge request !7
2 parents 080a93d9 0a264995
import csv
import importlib import importlib
import inspect import inspect
import locale import locale
import logging import logging
import re import re
import urllib
from .routes import routes from .routes import routes
# from opensipkd.tools.captcha import get_captcha_url # from opensipkd.tools.captcha import get_captcha_url
...@@ -26,7 +29,8 @@ from .security import ( ...@@ -26,7 +29,8 @@ from .security import (
group_finder, get_user, MySecurityPolicy,) group_finder, get_user, MySecurityPolicy,)
from pyramid.csrf import get_csrf_token from pyramid.csrf import get_csrf_token
from opensipkd.models import ( from opensipkd.models import (
DBSession, Base, Route, Parameter, init_model,) DBSession, Base, Parameter, init_model,)
# Route,
from opensipkd.tools import ( from opensipkd.tools import (
DefaultTimeZone, money, should_int, thousand, as_timezone, split, DefaultTimeZone, money, should_int, thousand, as_timezone, split,
get_settings, dmy, dmyhms,) get_settings, dmy, dmyhms,)
...@@ -134,6 +138,9 @@ def _get_params(request, params, default=None, settings=None, context=None): ...@@ -134,6 +138,9 @@ def _get_params(request, params, default=None, settings=None, context=None):
return get_params(params, default, settings) return get_params(params, default, settings)
BASE_MENUS = []
@subscriber(BeforeRender) @subscriber(BeforeRender)
def add_global(event): def add_global(event):
event['has_permission'] = has_permission_ event['has_permission'] = has_permission_
...@@ -152,8 +159,9 @@ def add_global(event): ...@@ -152,8 +159,9 @@ def add_global(event):
event['get_urls'] = get_urls event['get_urls'] = get_urls
event['get_csrf_token'] = get_csrf_token event['get_csrf_token'] = get_csrf_token
# event['get_params'] = get_params # event['get_params'] = get_params
event['get_module_menus'] = get_module_menus # event['get_module_menus'] = get_module_menus
event['get_module_submenus'] = get_module_submenus # event['get_module_submenus'] = get_module_submenus
event['get_base_menus'] = BASE_CLASS.get_menus()
# def get_params(request, params, alternate=None, settings=None): # def get_params(request, params, alternate=None, settings=None):
...@@ -436,49 +444,55 @@ def get_home(request): ...@@ -436,49 +444,55 @@ def get_home(request):
return request.route_url('home')[:-1] return request.route_url('home')[:-1]
def _set_routes1(config, app_id): # def _set_routes1(config, app_id):
q = DBSession.query(Route).filter(Route.path != None, # q = DBSession.query(Route).filter(Route.path != None,
Route.module == None, Route.status == 1) # Route.module == None, Route.status == 1)
if not app_id: # if not app_id:
q.filter(or_(Route.app_id == 0, None == Route.app_id)) # q.filter(or_(Route.app_id == 0, None == Route.app_id))
else: # else:
q.filter(Route.app_id == app_id) # q.filter(Route.app_id == app_id)
for route in q: # for route in q:
if route.type == 0: # if route.type == 0:
config.add_route(route.kode, route.path) # config.add_route(route.kode, route.path)
if route.nama: # if route.nama:
titles[route.kode] = route.nama # titles[route.kode] = route.nama
elif route.type == 1: # elif route.type == 1:
config.add_jsonrpc_endpoint(route.kode, route.path, # config.add_jsonrpc_endpoint(route.kode, route.path,
# default_renderer="json_rpc")
# def _set_routes2(config, module="base"):
# q = DBSession.query(Route).filter(
# Route.module == module, Route.status == 1)
# for route in q:
# if route.type == 0:
# config.add_route(route.kode, route.path)
# if route.nama:
# titles[route.kode] = route.nama
# elif route.type == 1:
# config.add_jsonrpc_endpoint(
# route.kode, route.path, default_renderer="json_rpc")
# return q
def _add_route(config, route):
if int(route.get("type", 0)) == 0:
config.add_route(route.get("kode"), route.get("path"))
elif int(route.get("type")) == 1:
config.add_jsonrpc_endpoint(route.get("kode"), route.get("path"),
default_renderer="json_rpc") default_renderer="json_rpc")
if route.get("nama"):
titles[route.get("kode")] = route.get("nama")
def _set_routes2(config, module="base"):
q = DBSession.query(Route).filter(
Route.module == module, Route.status == 1)
for route in q:
if route.type == 0:
config.add_route(route.kode, route.path)
if route.nama:
titles[route.kode] = route.nama
elif route.type == 1:
config.add_jsonrpc_endpoint(
route.kode, route.path, default_renderer="json_rpc")
return q
def _add_view_config(config, view_name, route): def _add_view_config(config, view_name, route):
if route.get("type") == 0: _add_route(config, route)
config.add_route(route.get("kode"), route.get("path"))
if route.get("nama"):
titles[route.get("kode")] = route.get("nama")
elif route.get("type") == 1:
config.add_jsonrpc_endpoint(route.get("kode"), route.get("path"),
default_renderer="json_rpc")
if not route.get("def_func"): if not route.get("def_func"):
return return
class_view = route.get("class_view") and f".{route.get('class_view')}" or "" class_view = route.get(
"class_view") and f".{route.get('class_view')}" or ""
class_name = f"{view_name}{class_view}" class_name = f"{view_name}{class_view}"
attr = f"view_{route.get('def_func')}" attr = f"view_{route.get('def_func')}"
try: try:
...@@ -497,55 +511,53 @@ def _add_view_config(config, view_name, route): ...@@ -497,55 +511,53 @@ def _add_view_config(config, view_name, route):
_logging.error(str(e)) _logging.error(str(e))
_logging.error(route) _logging.error(route)
# def add_view_config(config, module, view_name):
# """
def add_view_config(config, module, view_name): # Digunakan untuk mengenerate view_config berdasarkan tabel Routes
""" # config: config
Digunakan untuk mengenerate view_config berdasarkan tabel Routes # module: application module
config: config # views: class or file tobe imported
module: application module # """
views: class or file tobe imported # q = DBSession.query(Route).filter(
""" # Route.module == module, Route.status == 1)
q = DBSession.query(Route).filter( # for row in q.all():
Route.module == module, Route.status == 1) # if row.type == 0:
for row in q.all(): # config.add_route(row.kode, row.path)
if row.type == 0: # if row.nama:
config.add_route(row.kode, row.path) # titles[row.kode] = row.nama
if row.nama: # elif row.type == 1:
titles[row.kode] = row.nama # config.add_jsonrpc_endpoint(row.kode, row.path,
elif row.type == 1: # default_renderer="json_rpc")
config.add_jsonrpc_endpoint(row.kode, row.path, # if not row.def_func:
default_renderer="json_rpc") # continue
if not row.def_func:
continue # class_view = row.class_view and f".{row.class_view}" or ""
# class_name = f"{view_name}{class_view}"
class_view = row.class_view and f".{row.class_view}" or "" # attr = f"view_{row.def_func}"
class_name = f"{view_name}{class_view}" # try:
attr = f"view_{row.def_func}" # _views = importlib.import_module(class_name)
try: # views = _views
_views = importlib.import_module(class_name) # if row.template == "json":
views = _views # renderers = row.template
if row.template == "json": # else:
renderers = row.template # renderers = "views/templates/" + row.template
else: # params = dict(attr=f"{attr}", route_name=row.kode,
renderers = "views/templates/" + row.template # renderer=renderers)
params = dict(attr=f"{attr}", route_name=row.kode, # if row.permission:
renderer=renderers) # params["permission"] = row.permission
if row.permission: # config.add_view(views.Views, **params)
params["permission"] = row.permission # except Exception as e:
config.add_view(views.Views, **params) # _logging.error(str(e))
except Exception as e: # _logging.error(dict(row.__dict__))
_logging.error(str(e))
_logging.error(dict(row.__dict__)) # config.scan('.')
config.scan('.')
# def set_routes(config, app_id=None):
# if app_id and type(app_id) == str:
def set_routes(config, app_id=None): # return _set_routes2(config, app_id)
if app_id and type(app_id) == str: # else:
return _set_routes2(config, app_id) # return _set_routes1(config, app_id)
else:
return _set_routes1(config, app_id)
def get_route_names(rows): def get_route_names(rows):
...@@ -566,22 +578,22 @@ def get_children(rows): ...@@ -566,22 +578,22 @@ def get_children(rows):
) for r in rows if r.is_menu and r.status == 1] ) for r in rows if r.is_menu and r.status == 1]
def get_module_menus(module): # def get_module_menus(module):
query = DBSession.query(Route) \ # query = DBSession.query(Route) \
.filter(Route.module == module, # .filter(Route.module == module,
Route.is_menu == 1, # Route.is_menu == 1,
Route.parent_id == None) # Route.parent_id == None)
result = get_children(query.order_by(Route.order_id)) # result = get_children(query.order_by(Route.order_id))
# _logging.debug(result) # # _logging.debug(result)
return result # return result
def get_module_submenus(parent_id): # def get_module_submenus(parent_id):
q = DBSession.query(Route) \ # q = DBSession.query(Route) \
.filter(Route.parent_id == parent_id) \ # .filter(Route.parent_id == parent_id) \
.order_bY(Route.order_id) # .order_bY(Route.order_id)
return [r.kode for r in q.all()] # return [r.kode for r in q.all()]
partner_idcard_url = 'partner/idcard' partner_idcard_url = 'partner/idcard'
...@@ -611,8 +623,6 @@ def get_config(settings): ...@@ -611,8 +623,6 @@ def get_config(settings):
config.add_request_method(is_devel, 'devel', reify=True) config.add_request_method(is_devel, 'devel', reify=True)
config.add_request_method(get_host, '_host', reify=True) config.add_request_method(get_host, '_host', reify=True)
config.add_request_method(get_host, 'home', reify=True) config.add_request_method(get_host, 'home', reify=True)
# config.add_request_method(get_captcha_url, 'captcha', reify=True)
# config.add_request_method(get_urls, 'route_urls', reify=True)
config.add_request_method(google_signin_client_id, config.add_request_method(google_signin_client_id,
'google_signin_client_id', reify=True) 'google_signin_client_id', reify=True)
config.add_request_method(google_signin_client_ids, config.add_request_method(google_signin_client_ids,
...@@ -662,8 +672,10 @@ def get_config(settings): ...@@ -662,8 +672,10 @@ def get_config(settings):
config.add_renderer('json', json_renderer()) config.add_renderer('json', json_renderer())
config.add_renderer('json_rpc', json_rpc()) config.add_renderer('json_rpc', json_rpc())
config.registry['mailer'] = mailer_factory_from_settings(settings) config.registry['mailer'] = mailer_factory_from_settings(settings)
set_routes(config) # set_routes(config)
routes_by_array(config) BASE_CLASS.route_from_csv(config)
BASE_CLASS.route_from_list(config)
# routes_by_array(config)
config.scan() config.scan()
_logging.debug(config) _logging.debug(config)
return config return config
...@@ -706,12 +718,81 @@ def main(global_config, **settings): ...@@ -706,12 +718,81 @@ def main(global_config, **settings):
return get_config(settings=settings).make_wsgi_app() return get_config(settings=settings).make_wsgi_app()
def routes_by_array(config, routs=routes): def get_route_file(filename):
# New Routes By Array base_dir = os.path.split(__file__)[0]
fullpath = os.path.join(base_dir, 'scripts', 'data', filename)
return open(fullpath)
class BaseApp():
def __init__(self):
self.menus = []
def route_from_csv(self, config, get_file=get_route_file, paket="opensipkd.base.views"):
with get_file("routes.csv") as f:
rows = csv.DictReader(f)
new_routes = []
for row in rows:
if row.get("parent_id") or row.get("parent_id/routes.kode"):
new_routes[len(new_routes)-1]["children"].append(row)
else:
row["children"] = []
new_routes.append(row)
self.add_menu(config, new_routes, paket)
def route_from_list(self, config, routs=routes, paket="opensipkd.base.views"):
new_routes = []
for route in routs: for route in routs:
if len(route) > 4 and str(route[4]) == '1': d = {"kode": route[0],
config.add_jsonrpc_endpoint( "path": route[1],
route[0], route[1], default_renderer="json_rpc") "nama": route[2],
"type": len(route) > 4 and route[4] or 0
}
new_routes.append(d)
self.add_menu(config, new_routes, paket)
def add_menu(self, config, route_menus, parent=None, paket="opensipkd.base.views"):
route_names = []
for route in route_menus:
route["route_names"] = [route["kode"]]
route["permission"] = route.get("permission", "")
route["icon"] = route.get("icon", None)
route_type = route.get("type", 0)
if route_type == "" or route_type == None:
route_type = 0
else:
route_type = int(route_type)
route["type"] = route_type
route["is_menu"] = route.get("is_menu", 0)
url_path = route.get("path", None)
if not url_path:
# pjdl /pjdl pjdl-add /pjdl/add
url_path = "/"+route["kode"].replace("-", "/")
route["path"] = url_path
children = route.get("children", [])
route["children"] = []
if route.get("class_view"):
_add_view_config(config, paket, route)
elif route["path"] != "#":
_add_route(config, route)
if route.get("is_menu", None):
if not parent:
self.menus.append(route)
else: else:
config.add_route(route[0], route[1]) parent["children"].append(route)
titles[route[0]] = route[2] if children:
route["route_names"].extend(
self.add_menu(config, children, route, paket)
)
route_names.append(route["kode"])
return route_names
def get_menus(self):
return self.menus
BASE_CLASS = BaseApp()
\ No newline at end of file \ No newline at end of file
...@@ -4,6 +4,7 @@ home-auth,/home,Home Auth,1, ...@@ -4,6 +4,7 @@ home-auth,/home,Home Auth,1,
home-about,/home/{id}/about,Home About,1 home-about,/home/{id}/about,Home About,1
login,/login,Login,1,0, login,/login,Login,1,0,
logout,/logout,Logout,1,0, logout,/logout,Logout,1,0,
recreate-api-key,/recreate-api-key,Buat ulang API Key,1
rpc,/rpc,RPC,1,1, rpc,/rpc,RPC,1,1,
change-password,/password/{code},Ubah password,1, change-password,/password/{code},Ubah password,1,
password,/password,Ubah password,1, password,/password,Ubah password,1,
...@@ -69,7 +70,6 @@ parameter-act,/parameter/{act}/act,Act parameter, ...@@ -69,7 +70,6 @@ parameter-act,/parameter/{act}/act,Act parameter,
upload-logo,/upload/logo,Unggah Logo, upload-logo,/upload/logo,Unggah Logo,
upload-background,/upload/background,Unggah Background, upload-background,/upload/background,Unggah Background,
user-rpt,/user/{rpt}/rpt,Urser Report, user-rpt,/user/{rpt}/rpt,Urser Report,
group-rpt,/group/{rpt}/rpt,Group Report,
routes-rpt,/routes/{rpt}/rpt,Routes Report, routes-rpt,/routes/{rpt}/rpt,Routes Report,
partner,/partner,Partner, partner,/partner,Partner,
partner-add,/partner/add,Partner Add, partner-add,/partner/add,Partner Add,
...@@ -95,8 +95,6 @@ departemen-user-view,/departemen/user/{id}/view,User Organisasi view,1,0, ...@@ -95,8 +95,6 @@ departemen-user-view,/departemen/user/{id}/view,User Organisasi view,1,0,
departemen-user-del,/departemen/user/{id}/del,User Organisasi Hapus,1,0, departemen-user-del,/departemen/user/{id}/del,User Organisasi Hapus,1,0,
departemen-user-rpt,/departemen/user/{rpt}/rpt,User Organisasi Report,1,0, departemen-user-rpt,/departemen/user/{rpt}/rpt,User Organisasi Report,1,0,
rpc-user,/rpc/user,WebService User Management,1,1, rpc-user,/rpc/user,WebService User Management,1,1,
recreate-api-key,/recreate-api-key,Buat ulang API Key,1,
googleOauth2,/googleOauth2,'Google OAuth2',1
googleOauth2,/googleOauth2,'Google OAuth2',1 googleOauth2,/googleOauth2,'Google OAuth2',1
googlesignin,/googlesignin, "Google SignIn",1 googlesignin,/googlesignin, "Google SignIn",1
permission,/permission,Daftar Permission,1 permission,/permission,Daftar Permission,1
......
...@@ -429,7 +429,7 @@ def main(argv=sys.argv): ...@@ -429,7 +429,7 @@ def main(argv=sys.argv):
append_csv(Permission, 'permissions.csv', ['perm_name']) append_csv(Permission, 'permissions.csv', ['perm_name'])
append_csv(GroupPermission, 'group_permission.csv', append_csv(GroupPermission, 'group_permission.csv',
['group_id', 'perm_name']) ['group_id', 'perm_name'])
append_csv(Route, 'routes.csv', ['kode']) # append_csv(Route, 'routes.csv', ['kode'])
append_csv(Menus, 'menus.csv', ['kode']) append_csv(Menus, 'menus.csv', ['kode'])
append_csv(Eselon, 'eselon.csv', ['kode']) append_csv(Eselon, 'eselon.csv', ['kode'])
append_csv(Jabatan, 'jabatan.csv', ['kode']) append_csv(Jabatan, 'jabatan.csv', ['kode'])
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!