Perbaikan route from csv

1 parent c73f8e66
...@@ -439,6 +439,8 @@ def get_home(request): ...@@ -439,6 +439,8 @@ def get_home(request):
def _set_routes1(config, app_id): def _set_routes1(config, app_id):
"""Compatibility
"""
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:
...@@ -457,6 +459,8 @@ def _set_routes1(config, app_id): ...@@ -457,6 +459,8 @@ def _set_routes1(config, app_id):
def _set_routes2(config, module="base"): def _set_routes2(config, module="base"):
"""Compatibility
"""
q = DBSession.query(Route).filter( q = DBSession.query(Route).filter(
Route.module == module, Route.status == 1) Route.module == module, Route.status == 1)
for route in q: for route in q:
...@@ -471,6 +475,8 @@ def _set_routes2(config, module="base"): ...@@ -471,6 +475,8 @@ def _set_routes2(config, module="base"):
def set_routes(config, app_id=None): def set_routes(config, app_id=None):
"""Compatibility
"""
if app_id and type(app_id) == str: if app_id and type(app_id) == str:
return _set_routes2(config, app_id) return _set_routes2(config, app_id)
else: else:
...@@ -478,40 +484,51 @@ def set_routes(config, app_id=None): ...@@ -478,40 +484,51 @@ def set_routes(config, app_id=None):
def _add_route(config, route): def _add_route(config, route):
if int(route.get("type", 0)) == 0: if int(route.get("typ", 0)) == 0:
config.add_route(route.get("kode"), route.get("path")) config.add_route(route.get("kode"), route.get("path"))
elif int(route.get("type")) == 1: elif int(route.get("typ")) == 1:
config.add_jsonrpc_endpoint(route.get("kode"), route.get("path"), config.add_jsonrpc_endpoint(route.get("kode"), route.get("path"),
default_renderer="json_rpc") default_renderer="json_rpc")
if route.get("nama"): if route.get("nama"):
titles[route.get("kode")] = route.get("nama") titles[route.get("kode")] = route.get("nama")
def _add_view_config(config, view_name, route): def _add_view_config(config, paket, route):
_add_route(config, route) _add_route(config, route)
if not route.get("def_func"): if not route.get("func_name"):
return func_name = "".join(route.get("kode").split('-')[-1:])
route["func_name"] = "_".join(["view", func_name])
class_view = route.get( file_name = f"{paket}.{route.get("file_name")}"
"class_view") and f".{route.get('class_view')}" or "" _logging.debug(f"File Name: {file_name}")
class_name = f"{view_name}{class_view}" attr = f"{route.get('func_name')}"
attr = f"view_{route.get('def_func')}"
try: try:
_views = importlib.import_module(class_name) _views = importlib.import_module(file_name)
views = _views class_name = route.get("class_name", None)
if route.get("template") == "json": if not class_name:
renderers = route.get("template") class_name="Views"
else:
renderers = "views/templates/" + route.get("template") views = getattr(_views, class_name)
params = dict(attr=f"{attr}", route_name=route.get("kode"), template = route.get("template", "form.pt")
renderer=renderers) if not template:
template = "form.pt"
if template != "json":
template = "views/templates/" + template
params = dict(attr=f"{attr}",
route_name=route.get("kode"),
renderer=template)
if route.get("permission"): if route.get("permission"):
params["permission"] = route.get("permission") params["permission"] = route.get("permission")
config.add_view(views.Views, **params)
config.add_view(views, **params)
except Exception as e: except Exception as e:
raise e
_logging.error(f"Add View Config :" )
_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 # Digunakan untuk mengenerate view_config berdasarkan tabel Routes
...@@ -666,12 +683,7 @@ def get_config(settings): ...@@ -666,12 +683,7 @@ 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)
BASE_CLASS.route_from_csv(config)
BASE_CLASS.route_from_list(config)
# routes_by_array(config)
config.scan()
_logging.debug(config)
return config return config
...@@ -709,7 +721,12 @@ def main(global_config, **settings): ...@@ -709,7 +721,12 @@ def main(global_config, **settings):
# if cfg: # if cfg:
# config = cfg # config = cfg
return get_config(settings=settings).make_wsgi_app() config = get_config(settings=settings)
BASE_CLASS.route_from_csv(config)
BASE_CLASS.route_from_list(config)
config.scan()
_logging.debug(config)
return config.make_wsgi_app()
def get_route_file(filename): def get_route_file(filename):
...@@ -726,30 +743,6 @@ class BaseApp(): ...@@ -726,30 +743,6 @@ class BaseApp():
def __init__(self): def __init__(self):
self.menus = [] 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:
d = {"kode": route[0],
"path": route[1],
"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"): def add_menu(self, config, route_menus, parent=None, paket="opensipkd.base.views"):
route_names = [] route_names = []
...@@ -757,22 +750,22 @@ class BaseApp(): ...@@ -757,22 +750,22 @@ class BaseApp():
route["route_names"] = [route["kode"]] route["route_names"] = [route["kode"]]
route["permission"] = route.get("permission", "") route["permission"] = route.get("permission", "")
route["icon"] = route.get("icon", None) route["icon"] = route.get("icon", None)
route_type = route.get("type", 0) route_typ = route.get("typ", 0)
if route_type == "" or route_type == None: if route_typ == "" or route_typ == None:
route_type = 0 route_typ = 0
else: else:
route_type = int(route_type) route_typ = int(route_typ)
route["type"] = route_type route["typ"] = route_typ
route["is_menu"] = route.get("is_menu", 0) route["is_menu"] = route.get("is_menu", 0)
url_path = route.get("path", None) url_path = route.get("path", None)
if not url_path: if not url_path:
url_path = "/"+route["kode"].replace("-", "/") url_path = "/"+route["kode"].replace("-", "/")
route["path"] = url_path route["path"] = url_path
children = route.get("children", []) children = route.get("children", [])
route["children"] = [] route["children"] = []
if route.get("class_view"): if route.get("file_name"):
_add_view_config(config, paket, route) _add_view_config(config, paket, route)
elif route["path"] != "#": elif route["path"] != "#":
_add_route(config, route) _add_route(config, route)
...@@ -789,6 +782,33 @@ class BaseApp(): ...@@ -789,6 +782,33 @@ class BaseApp():
route_names.append(route["kode"]) route_names.append(route["kode"])
return route_names return route_names
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:
row["children"] = []
if row.get("parent_id") or row.get("parent_id/routes.kode"):
new_routes[len(new_routes)-1]["children"].append(row)
else:
new_routes.append(row)
self.add_menu(config, new_routes, None, paket)
def route_from_list(self, config, routs=routes, paket="opensipkd.base.views"):
new_routes = []
for route in routs:
d = {"kode": route[0],
"path": route[1],
"nama": route[2],
"typ": len(route) > 4 and route[4] or 0
}
new_routes.append(d)
self.add_menu(config, new_routes, paket)
def get_menus(self): def get_menus(self):
return self.menus return self.menus
......
from datetime import datetime from datetime import datetime
from email.policy import default
import colander import colander
from deform import (widget, ) from deform import (widget, )
...@@ -58,7 +59,7 @@ class ListSchema(colander.Schema): ...@@ -58,7 +59,7 @@ class ListSchema(colander.Schema):
status = colander.SchemaNode( status = colander.SchemaNode(
colander.Boolean(), colander.Boolean(),
title="Status", width='50pt', title="Status", width='50pt',
widget=widget.CheckboxWidget()) widget=widget.CheckboxWidget(true_val='1', false_val='0'))
level_id = colander.SchemaNode( level_id = colander.SchemaNode(
colander.Integer(), colander.Integer(),
title="Level", title="Level",
...@@ -110,17 +111,20 @@ class AddSchema(colander.Schema): ...@@ -110,17 +111,20 @@ class AddSchema(colander.Schema):
singkat = colander.SchemaNode( singkat = colander.SchemaNode(
colander.String(), colander.String(),
missing=colander.drop, missing=colander.drop,
oid="singkat") oid="singkat",
default="")
kategori = colander.SchemaNode( kategori = colander.SchemaNode(
colander.String(), colander.String(),
missing=colander.drop, missing=colander.drop,
oid="kategori") oid="kategori",
default="")
alamat = colander.SchemaNode( alamat = colander.SchemaNode(
colander.String(), colander.String(),
missing=colander.drop, missing=colander.drop,
oid="alamat") oid="alamat",
default="")
company_id = colander.SchemaNode( company_id = colander.SchemaNode(
colander.Integer(), colander.Integer(),
widget=company_widget, widget=company_widget,
...@@ -130,6 +134,7 @@ class AddSchema(colander.Schema): ...@@ -130,6 +134,7 @@ class AddSchema(colander.Schema):
status = colander.SchemaNode( status = colander.SchemaNode(
colander.Integer(), colander.Integer(),
widget=widget.CheckboxWidget(true_val='1', false_val='0'), widget=widget.CheckboxWidget(true_val='1', false_val='0'),
default = 0,
oid="status") oid="status")
def after_bind(self, schema, kwargs): def after_bind(self, schema, kwargs):
...@@ -178,8 +183,8 @@ class Views(BaseView): ...@@ -178,8 +183,8 @@ class Views(BaseView):
raise exc raise exc
def err_nama(): def err_nama():
raise colander.Invalid(form, raise colander.Invalid(
'Uraian %s sudah digunakan oleh kode %s' % ( form, 'Uraian %s sudah digunakan oleh kode %s' % (
value['nama'], found.kode)) value['nama'], found.kode))
if 'id' in form.request.matchdict: if 'id' in form.request.matchdict:
...@@ -220,9 +225,9 @@ class Views(BaseView): ...@@ -220,9 +225,9 @@ class Views(BaseView):
self.update_children(child.children) self.update_children(child.children)
def save_request(self, values, row=None): # save(self, row, values): def save_request(self, values, row=None): # save(self, row, values):
for k, v in values.items(): # for k, v in values.items():
if not v: # if not v:
setattr(row, k, None) # setattr(row, k, None)
values["level_id"] = 1 values["level_id"] = 1
if "parent_id" in values and values["parent_id"]: if "parent_id" in values and values["parent_id"]:
...@@ -237,17 +242,17 @@ class Views(BaseView): ...@@ -237,17 +242,17 @@ class Views(BaseView):
row = super().save_request(values, row) row = super().save_request(values, row)
return row return row
@view_config(route_name='departemen-view', # @view_config(route_name='departemen-view',
renderer='templates/form.pt', # renderer='templates/form.pt',
permission='departemen') # permission='departemen')
def view_view(self): # def view_view(self):
return super().view_view() # return super().view_view()
@view_config(route_name='departemen', # @view_config(route_name='departemen',
renderer='templates/table.pt', # renderer='templates/table.pt',
permission='departemen') # permission='departemen')
def view_list(self): # def view_list(self):
return super().view_list() # return super().view_list()
def list_join(self, query): def list_join(self, query):
query = query.outerjoin( query = query.outerjoin(
...@@ -257,8 +262,8 @@ class Views(BaseView): ...@@ -257,8 +262,8 @@ class Views(BaseView):
) )
return query return query
@view_config(route_name='departemen-act', renderer='json', # @view_config(route_name='departemen-act', renderer='json',
permission='view') # permission='view')
def view_act(self): def view_act(self):
request = self.req request = self.req
# ses = request.session # ses = request.session
...@@ -381,24 +386,24 @@ class Views(BaseView): ...@@ -381,24 +386,24 @@ class Views(BaseView):
def get_bindings(self, row=None): def get_bindings(self, row=None):
return {"company_list": ResCompany.get_list()} return {"company_list": ResCompany.get_list()}
@view_config(route_name='departemen-add', renderer='templates/form.pt', # @view_config(route_name='departemen-add', renderer='templates/form.pt',
permission='departemen') # permission='departemen')
def view_add(self): # def view_add(self):
return super().view_add() # return super().view_add()
@view_config(route_name='departemen-edit', # @view_config(route_name='departemen-edit',
renderer='templates/form.pt', permission='departemen') # renderer='templates/form.pt', permission='departemen')
def view_edit(self): # def view_edit(self):
return super().view_edit() # return super().view_edit()
@view_config(route_name='departemen-delete', # @view_config(route_name='departemen-delete',
renderer='templates/form.pt', permission='departemen') # renderer='templates/form.pt', permission='departemen')
def view_delete(self): # def view_delete(self):
return super().view_delete() # return super().view_delete()
@view_config(route_name='departemen-upload', # @view_config(route_name='departemen-upload',
renderer='templates/form.pt', # renderer='templates/form.pt',
permission='departemen') # permission='departemen')
def view_upload(self): def view_upload(self):
return super().view_upload(exts=('.csv', '.tsv'), delimiter="\t") return super().view_upload(exts=('.csv', '.tsv'), delimiter="\t")
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!