Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
irul
/
opensipkd-base
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 37c7afb0
authored
Feb 25, 2025
by
aa.gusti
Browse Files
Options
Browse Files
Tag
Download
Plain Diff
Merge branch 'beta-4.2-training' into 'beta-4.2'
Beta 4.2 training See merge request !7
2 parents
080a93d9
0a264995
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
195 additions
and
116 deletions
opensipkd/base/__init__.py
opensipkd/base/scripts/data/routes.csv
opensipkd/base/scripts/initializedb.py
opensipkd/base/__init__.py
View file @
37c7afb
import
csv
import
importlib
import
inspect
import
locale
import
logging
import
re
import
urllib
from
.routes
import
routes
# from opensipkd.tools.captcha import get_captcha_url
...
...
@@ -26,7 +29,8 @@ from .security import (
group_finder
,
get_user
,
MySecurityPolicy
,)
from
pyramid.csrf
import
get_csrf_token
from
opensipkd.models
import
(
DBSession
,
Base
,
Route
,
Parameter
,
init_model
,)
DBSession
,
Base
,
Parameter
,
init_model
,)
# Route,
from
opensipkd.tools
import
(
DefaultTimeZone
,
money
,
should_int
,
thousand
,
as_timezone
,
split
,
get_settings
,
dmy
,
dmyhms
,)
...
...
@@ -134,6 +138,9 @@ def _get_params(request, params, default=None, settings=None, context=None):
return
get_params
(
params
,
default
,
settings
)
BASE_MENUS
=
[]
@subscriber
(
BeforeRender
)
def
add_global
(
event
):
event
[
'has_permission'
]
=
has_permission_
...
...
@@ -152,8 +159,9 @@ def add_global(event):
event
[
'get_urls'
]
=
get_urls
event
[
'get_csrf_token'
]
=
get_csrf_token
# event['get_params'] = get_params
event
[
'get_module_menus'
]
=
get_module_menus
event
[
'get_module_submenus'
]
=
get_module_submenus
# event['get_module_menus'] = get_module_menus
# event['get_module_submenus'] = get_module_submenus
event
[
'get_base_menus'
]
=
BASE_CLASS
.
get_menus
()
# def get_params(request, params, alternate=None, settings=None):
...
...
@@ -436,49 +444,55 @@ def get_home(request):
return
request
.
route_url
(
'home'
)[:
-
1
]
def
_set_routes1
(
config
,
app_id
):
q
=
DBSession
.
query
(
Route
)
.
filter
(
Route
.
path
!=
None
,
Route
.
module
==
None
,
Route
.
status
==
1
)
if
not
app_id
:
q
.
filter
(
or_
(
Route
.
app_id
==
0
,
None
==
Route
.
app_id
))
else
:
q
.
filter
(
Route
.
app_id
==
app_id
)
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
,
# def _set_routes1(config, app_id):
# q = DBSession.query(Route).filter(Route.path != None,
# Route.module == None, Route.status == 1)
# if not app_id:
# q.filter(or_(Route.app_id == 0, None == Route.app_id))
# else:
# q.filter(Route.app_id == app_id)
# 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")
# 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"
)
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
):
if
route
.
get
(
"type"
)
==
0
:
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"
)
_add_route
(
config
,
route
)
if
not
route
.
get
(
"def_func"
):
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}"
attr
=
f
"view_{route.get('def_func')}"
try
:
...
...
@@ -497,55 +511,53 @@ def _add_view_config(config, view_name, route):
_logging
.
error
(
str
(
e
))
_logging
.
error
(
route
)
def
add_view_config
(
config
,
module
,
view_name
):
"""
Digunakan untuk mengenerate view_config berdasarkan tabel Routes
config: config
module: application module
views: class or file tobe imported
"""
q
=
DBSession
.
query
(
Route
)
.
filter
(
Route
.
module
==
module
,
Route
.
status
==
1
)
for
row
in
q
.
all
():
if
row
.
type
==
0
:
config
.
add_route
(
row
.
kode
,
row
.
path
)
if
row
.
nama
:
titles
[
row
.
kode
]
=
row
.
nama
elif
row
.
type
==
1
:
config
.
add_jsonrpc_endpoint
(
row
.
kode
,
row
.
path
,
default_renderer
=
"json_rpc"
)
if
not
row
.
def_func
:
continue
class_view
=
row
.
class_view
and
f
".{row.class_view}"
or
""
class_name
=
f
"{view_name}{class_view}"
attr
=
f
"view_{row.def_func}"
try
:
_views
=
importlib
.
import_module
(
class_name
)
views
=
_views
if
row
.
template
==
"json"
:
renderers
=
row
.
template
else
:
renderers
=
"views/templates/"
+
row
.
template
params
=
dict
(
attr
=
f
"{attr}"
,
route_name
=
row
.
kode
,
renderer
=
renderers
)
if
row
.
permission
:
params
[
"permission"
]
=
row
.
permission
config
.
add_view
(
views
.
Views
,
**
params
)
except
Exception
as
e
:
_logging
.
error
(
str
(
e
))
_logging
.
error
(
dict
(
row
.
__dict__
))
config
.
scan
(
'.'
)
def
set_routes
(
config
,
app_id
=
None
):
if
app_id
and
type
(
app_id
)
==
str
:
return
_set_routes2
(
config
,
app_id
)
else
:
return
_set_routes1
(
config
,
app_id
)
# def add_view_config(config, module, view_name):
# """
# Digunakan untuk mengenerate view_config berdasarkan tabel Routes
# config: config
# module: application module
# views: class or file tobe imported
# """
# q = DBSession.query(Route).filter(
# Route.module == module, Route.status == 1)
# for row in q.all():
# if row.type == 0:
# config.add_route(row.kode, row.path)
# if row.nama:
# titles[row.kode] = row.nama
# elif row.type == 1:
# config.add_jsonrpc_endpoint(row.kode, row.path,
# default_renderer="json_rpc")
# if not row.def_func:
# continue
# class_view = row.class_view and f".{row.class_view}" or ""
# class_name = f"{view_name}{class_view}"
# attr = f"view_{row.def_func}"
# try:
# _views = importlib.import_module(class_name)
# views = _views
# if row.template == "json":
# renderers = row.template
# else:
# renderers = "views/templates/" + row.template
# params = dict(attr=f"{attr}", route_name=row.kode,
# renderer=renderers)
# if row.permission:
# params["permission"] = row.permission
# config.add_view(views.Views, **params)
# except Exception as e:
# _logging.error(str(e))
# _logging.error(dict(row.__dict__))
# config.scan('.')
# def set_routes(config, app_id=None):
# if app_id and type(app_id) == str:
# return _set_routes2(config, app_id)
# else:
# return _set_routes1(config, app_id)
def
get_route_names
(
rows
):
...
...
@@ -566,22 +578,22 @@ def get_children(rows):
)
for
r
in
rows
if
r
.
is_menu
and
r
.
status
==
1
]
def
get_module_menus
(
module
):
query
=
DBSession
.
query
(
Route
)
\
.
filter
(
Route
.
module
==
module
,
Route
.
is_menu
==
1
,
Route
.
parent_id
==
None
)
#
def get_module_menus(module):
#
query = DBSession.query(Route) \
#
.filter(Route.module == module,
#
Route.is_menu == 1,
#
Route.parent_id == None)
result
=
get_children
(
query
.
order_by
(
Route
.
order_id
))
# _logging.debug(result)
return
result
#
result = get_children(query.order_by(Route.order_id))
#
# _logging.debug(result)
#
return result
def
get_module_submenus
(
parent_id
):
q
=
DBSession
.
query
(
Route
)
\
.
filter
(
Route
.
parent_id
==
parent_id
)
\
.
order_bY
(
Route
.
order_id
)
return
[
r
.
kode
for
r
in
q
.
all
()]
#
def get_module_submenus(parent_id):
#
q = DBSession.query(Route) \
#
.filter(Route.parent_id == parent_id) \
#
.order_bY(Route.order_id)
#
return [r.kode for r in q.all()]
partner_idcard_url
=
'partner/idcard'
...
...
@@ -611,8 +623,6 @@ def get_config(settings):
config
.
add_request_method
(
is_devel
,
'devel'
,
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_captcha_url, 'captcha', reify=True)
# config.add_request_method(get_urls, 'route_urls', reify=True)
config
.
add_request_method
(
google_signin_client_id
,
'google_signin_client_id'
,
reify
=
True
)
config
.
add_request_method
(
google_signin_client_ids
,
...
...
@@ -662,8 +672,10 @@ def get_config(settings):
config
.
add_renderer
(
'json'
,
json_renderer
())
config
.
add_renderer
(
'json_rpc'
,
json_rpc
())
config
.
registry
[
'mailer'
]
=
mailer_factory_from_settings
(
settings
)
set_routes
(
config
)
routes_by_array
(
config
)
# 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
...
...
@@ -706,12 +718,81 @@ def main(global_config, **settings):
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
,
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
:
if
len
(
route
)
>
4
and
str
(
route
[
4
])
==
'1'
:
config
.
add_jsonrpc_endpoint
(
route
[
0
],
route
[
1
],
default_renderer
=
"json_rpc"
)
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"
):
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
:
config
.
add_route
(
route
[
0
],
route
[
1
])
titles
[
route
[
0
]]
=
route
[
2
]
parent
[
"children"
]
.
append
(
route
)
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
opensipkd/base/scripts/data/routes.csv
View file @
37c7afb
...
...
@@ -4,6 +4,7 @@ home-auth,/home,Home Auth,1,
home-about,/home/{id}/about,Home About,1
login,/login,Login,1,0,
logout,/logout,Logout,1,0,
recreate-api-key,/recreate-api-key,Buat ulang API Key,1
rpc,/rpc,RPC,1,1,
change-password,/password/{code},Ubah password,1,
password,/password,Ubah password,1,
...
...
@@ -69,7 +70,6 @@ parameter-act,/parameter/{act}/act,Act parameter,
upload-logo,/upload/logo,Unggah Logo,
upload-background,/upload/background,Unggah Background,
user-rpt,/user/{rpt}/rpt,Urser Report,
group-rpt,/group/{rpt}/rpt,Group Report,
routes-rpt,/routes/{rpt}/rpt,Routes Report,
partner,/partner,Partner,
partner-add,/partner/add,Partner Add,
...
...
@@ -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-rpt,/departemen/user/{rpt}/rpt,User Organisasi Report,1,0,
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
googlesignin,/googlesignin, "Google SignIn",1
permission,/permission,Daftar Permission,1
...
...
opensipkd/base/scripts/initializedb.py
View file @
37c7afb
...
...
@@ -429,7 +429,7 @@ def main(argv=sys.argv):
append_csv
(
Permission
,
'permissions.csv'
,
[
'perm_name'
])
append_csv
(
GroupPermission
,
'group_permission.csv'
,
[
'group_id'
,
'perm_name'
])
append_csv
(
Route
,
'routes.csv'
,
[
'kode'
])
#
append_csv(Route, 'routes.csv', ['kode'])
append_csv
(
Menus
,
'menus.csv'
,
[
'kode'
])
append_csv
(
Eselon
,
'eselon.csv'
,
[
'kode'
])
append_csv
(
Jabatan
,
'jabatan.csv'
,
[
'kode'
])
...
...
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