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
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
203 additions
and
124 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
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"
)
# 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
):
if
route
.
get
(
"type"
)
==
0
:
def
_add_route
(
config
,
route
):
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
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
:
...
@@ -489,63 +503,61 @@ def _add_view_config(config, view_name, route):
...
@@ -489,63 +503,61 @@ def _add_view_config(config, view_name, route):
else
:
else
:
renderers
=
"views/templates/"
+
route
.
get
(
"template"
)
renderers
=
"views/templates/"
+
route
.
get
(
"template"
)
params
=
dict
(
attr
=
f
"{attr}"
,
route_name
=
route
.
get
(
"kode"
),
params
=
dict
(
attr
=
f
"{attr}"
,
route_name
=
route
.
get
(
"kode"
),
renderer
=
renderers
)
renderer
=
renderers
)
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
.
Views
,
**
params
)
except
Exception
as
e
:
except
Exception
as
e
:
_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
]
for
route
in
routs
:
fullpath
=
os
.
path
.
join
(
base_dir
,
'scripts'
,
'data'
,
filename
)
if
len
(
route
)
>
4
and
str
(
route
[
4
])
==
'1'
:
return
open
(
fullpath
)
config
.
add_jsonrpc_endpoint
(
route
[
0
],
route
[
1
],
default_renderer
=
"json_rpc"
)
else
:
class
BaseApp
():
config
.
add_route
(
route
[
0
],
route
[
1
])
def
__init__
(
self
):
titles
[
route
[
0
]]
=
route
[
2
]
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"
):
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
:
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
\ 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,
...
@@ -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
...
...
opensipkd/base/scripts/initializedb.py
View file @
37c7afb
...
@@ -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'
])
...
...
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