Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
aa.gusti
/
opensipkd-base
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 5bdff039
authored
Feb 25, 2025
by
aa.gusti
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
perubahan loading routes and menus
1 parent
5a28fb38
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
178 additions
and
113 deletions
opensipkd/base/__init__.py
opensipkd/base/scripts/data/routes.csv
opensipkd/base/__init__.py
View file @
5bdff03
import
csv
import
importlib
import
importlib
import
inspect
import
inspect
import
locale
import
locale
...
@@ -26,7 +27,8 @@ from .security import (
...
@@ -26,7 +27,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
,)
...
@@ -133,6 +135,7 @@ def _get_params(request, params, default=None, settings=None, context=None):
...
@@ -133,6 +135,7 @@ 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
):
...
@@ -152,8 +155,9 @@ def add_global(event):
...
@@ -152,8 +155,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,46 +440,50 @@ def get_home(request):
...
@@ -436,46 +440,50 @@ 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"
)
#
default_renderer="json_rpc")
def
_set_routes2
(
config
,
module
=
"base"
):
#
def _set_routes2(config, module="base"):
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:
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
(
#
config.add_jsonrpc_endpoint(
route
.
kode
,
route
.
path
,
default_renderer
=
"json_rpc"
)
#
route.kode, route.path, default_renderer="json_rpc")
return
q
#
return q
def
_add_
view_config
(
config
,
view_name
,
route
):
def
_add_
route
(
config
,
route
):
if
route
.
get
(
"type"
)
==
0
:
if
int
(
route
.
get
(
"type"
,
0
)
)
==
0
:
config
.
add_route
(
route
.
get
(
"kode"
),
route
.
get
(
"path"
))
config
.
add_route
(
route
.
get
(
"kode"
),
route
.
get
(
"path"
))
if
route
.
get
(
"nama"
):
elif
int
(
route
.
get
(
"type"
))
==
1
:
titles
[
route
.
get
(
"kode"
)]
=
route
.
get
(
"nama"
)
elif
route
.
get
(
"type"
)
==
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"
):
titles
[
route
.
get
(
"kode"
)]
=
route
.
get
(
"nama"
)
def
_add_view_config
(
config
,
view_name
,
route
):
_add_route
(
config
,
route
)
if
not
route
.
get
(
"def_func"
):
if
not
route
.
get
(
"def_func"
):
return
return
...
@@ -498,53 +506,53 @@ def _add_view_config(config, view_name, route):
...
@@ -498,53 +506,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
#
Digunakan untuk mengenerate view_config berdasarkan tabel Routes
config: config
#
config: config
module: application module
#
module: application module
views: class or file tobe imported
#
views: class or file tobe imported
"""
#
"""
q
=
DBSession
.
query
(
Route
)
.
filter
(
#
q = DBSession.query(Route).filter(
Route
.
module
==
module
,
Route
.
status
==
1
)
#
Route.module == module, Route.status == 1)
for
row
in
q
.
all
():
#
for row in q.all():
if
row
.
type
==
0
:
#
if row.type == 0:
config
.
add_route
(
row
.
kode
,
row
.
path
)
#
config.add_route(row.kode, row.path)
if
row
.
nama
:
#
if row.nama:
titles
[
row
.
kode
]
=
row
.
nama
#
titles[row.kode] = row.nama
elif
row
.
type
==
1
:
#
elif row.type == 1:
config
.
add_jsonrpc_endpoint
(
row
.
kode
,
row
.
path
,
#
config.add_jsonrpc_endpoint(row.kode, row.path,
default_renderer
=
"json_rpc"
)
#
default_renderer="json_rpc")
if
not
row
.
def_func
:
#
if not row.def_func:
continue
#
continue
class_view
=
row
.
class_view
and
f
".{row.class_view}"
or
""
#
class_view = row.class_view and f".{row.class_view}" or ""
class_name
=
f
"{view_name}{class_view}"
#
class_name = f"{view_name}{class_view}"
attr
=
f
"view_{row.def_func}"
#
attr = f"view_{row.def_func}"
try
:
#
try:
_views
=
importlib
.
import_module
(
class_name
)
#
_views = importlib.import_module(class_name)
views
=
_views
#
views = _views
if
row
.
template
==
"json"
:
#
if row.template == "json":
renderers
=
row
.
template
#
renderers = row.template
else
:
#
else:
renderers
=
"views/templates/"
+
row
.
template
#
renderers = "views/templates/" + row.template
params
=
dict
(
attr
=
f
"{attr}"
,
route_name
=
row
.
kode
,
#
params = dict(attr=f"{attr}", route_name=row.kode,
renderer
=
renderers
)
#
renderer=renderers)
if
row
.
permission
:
#
if row.permission:
params
[
"permission"
]
=
row
.
permission
#
params["permission"] = row.permission
config
.
add_view
(
views
.
Views
,
**
params
)
#
config.add_view(views.Views, **params)
except
Exception
as
e
:
#
except Exception as e:
_logging
.
error
(
str
(
e
))
#
_logging.error(str(e))
_logging
.
error
(
dict
(
row
.
__dict__
))
#
_logging.error(dict(row.__dict__))
config
.
scan
(
'.'
)
#
config.scan('.')
def
set_routes
(
config
,
app_id
=
None
):
#
def set_routes(config, app_id=None):
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:
return
_set_routes1
(
config
,
app_id
)
#
return _set_routes1(config, app_id)
def
get_route_names
(
rows
):
def
get_route_names
(
rows
):
...
@@ -565,22 +573,22 @@ def get_children(rows):
...
@@ -565,22 +573,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'
...
@@ -610,8 +618,6 @@ def get_config(settings):
...
@@ -610,8 +618,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
,
...
@@ -661,8 +667,10 @@ def get_config(settings):
...
@@ -661,8 +667,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
...
@@ -705,12 +713,71 @@ def main(global_config, **settings):
...
@@ -705,12 +713,71 @@ 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
):
# New Routes By Array
def
get_route_file
(
filename
):
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
):
with
get_file
(
"routes.csv"
)
as
f
:
rows
=
csv
.
DictReader
(
f
)
self
.
add_menu
(
config
,
rows
)
def
route_from_list
(
self
,
config
,
routs
=
routes
):
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
)
def
add_menu
(
self
,
config
,
route_menus
,
parent
=
None
):
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
)
route
[
"path"
]
=
route
.
get
(
"path"
,
"#"
)
children
=
route
.
get
(
"children"
,
[])
route
[
"children"
]
=
[]
if
route
.
get
(
"class_view"
):
_add_view_config
(
config
,
"opensipkd.coba.views"
,
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
)
)
route_names
.
append
(
route
[
"kode"
])
return
route_names
def
get_menus
(
self
):
return
self
.
menus
BASE_CLASS
=
BaseApp
()
opensipkd/base/scripts/data/routes.csv
View file @
5bdff03
...
@@ -69,7 +69,6 @@ parameter-act,/parameter/{act}/act,Act parameter,
...
@@ -69,7 +69,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,
...
@@ -97,7 +96,6 @@ departemen-user-rpt,/departemen/user/{rpt}/rpt,User Organisasi Report,1,0,
...
@@ -97,7 +96,6 @@ 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,
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
permission-add,/permission/add,Tambah Permission,1
permission-add,/permission/add,Tambah Permission,1
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment