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 336c590b
authored
Jun 15, 2022
by
aagusti
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
perbaikan base_view
1 parent
f08d1cd8
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
139 additions
and
32 deletions
opensipkd/base/models/users.py
opensipkd/base/views/base_views.py
opensipkd/base/views/register.py
opensipkd/base/views/templates/base3.1.pt
opensipkd/base/views/user_login.py
opensipkd/base/views/widget_os.py
opensipkd/base/views/widgets/captcha.pt
opensipkd/base/models/users.py
View file @
336c590
...
@@ -152,7 +152,7 @@ class User(UserMixin, BaseModel, CommonModel, Base):
...
@@ -152,7 +152,7 @@ class User(UserMixin, BaseModel, CommonModel, Base):
class
ExternalIdentity
(
ExternalIdentityMixin
,
CommonModel
,
Base
):
class
ExternalIdentity
(
ExternalIdentityMixin
,
CommonModel
,
Base
):
pass
user
=
relationship
(
User
,
backref
=
backref
(
"external"
))
# class GroupRoutePermission(Base, CommonModel):
# class GroupRoutePermission(Base, CommonModel):
...
...
opensipkd/base/views/base_views.py
View file @
336c590
...
@@ -112,11 +112,9 @@ class BaseView(object):
...
@@ -112,11 +112,9 @@ class BaseView(object):
self
.
add_schema
=
""
self
.
add_schema
=
""
self
.
table
=
""
self
.
table
=
""
self
.
home
=
self
.
req
.
route_url
(
'home'
)[:
-
1
]
self
.
home
=
self
.
req
.
route_url
(
'home'
)[:
-
1
]
self
.
form_validator
=
None
self
.
buttons
=
None
self
.
buttons
=
None
self
.
headers
=
None
self
.
headers
=
None
self
.
bindings
=
None
def
route_list
(
self
,
msg
=
None
,
error
=
""
):
def
route_list
(
self
,
msg
=
None
,
error
=
""
):
if
msg
:
if
msg
:
...
@@ -126,7 +124,6 @@ class BaseView(object):
...
@@ -126,7 +124,6 @@ class BaseView(object):
else
:
else
:
return
HTTPFound
(
location
=
self
.
req
.
route_url
(
self
.
list_route
))
return
HTTPFound
(
location
=
self
.
req
.
route_url
(
self
.
list_route
))
def
form_validator
(
self
,
form
,
value
):
def
form_validator
(
self
,
form
,
value
):
pass
pass
...
@@ -134,15 +131,13 @@ class BaseView(object):
...
@@ -134,15 +131,13 @@ class BaseView(object):
return
get_params
(
params
)
return
get_params
(
params
)
def
get_form
(
self
,
class_form
,
row
=
None
,
buttons
=
(
btn_save
,
btn_cancel
),
**
bindings
):
def
get_form
(
self
,
class_form
,
row
=
None
,
buttons
=
(
btn_save
,
btn_cancel
),
**
bindings
):
if
self
.
buttons
:
buttons
=
self
.
buttons
and
self
.
buttons
or
buttons
buttons
=
self
.
button
s
bindings
=
self
.
bindings
and
self
.
bindings
or
binding
s
schema
=
class_form
(
validator
=
self
.
form_validator
)
schema
=
class_form
(
validator
=
self
.
form_validator
)
schema
=
schema
.
bind
(
request
=
self
.
req
,
schema
=
schema
.
bind
(
request
=
self
.
req
,
**
bindings
)
row
=
row
,
**
bindings
)
schema
.
request
=
self
.
req
schema
.
request
=
self
.
req
#
if row:
if
row
:
#
schema.deserialize(row)
schema
.
deserialize
(
row
)
return
Form
(
schema
,
buttons
=
buttons
)
return
Form
(
schema
,
buttons
=
buttons
)
def
session_failed
(
self
,
session_name
):
def
session_failed
(
self
,
session_name
):
...
@@ -150,7 +145,8 @@ class BaseView(object):
...
@@ -150,7 +145,8 @@ class BaseView(object):
del
self
.
req
.
session
[
session_name
]
del
self
.
req
.
session
[
session_name
]
return
r
return
r
def
view_list
(
self
,
arg
=
dict
()):
def
view_list
(
self
,
arg
=
None
):
arg
=
not
arg
and
{}
or
arg
arg
.
update
(
url
=
self
.
list_url
,
col_defs
=
self
.
list_col_defs
,
arg
.
update
(
url
=
self
.
list_url
,
col_defs
=
self
.
list_col_defs
,
cols
=
self
.
list_cols
,
buttons
=
self
.
list_buttons
)
cols
=
self
.
list_cols
,
buttons
=
self
.
list_buttons
)
return
arg
return
arg
...
@@ -160,28 +156,32 @@ class BaseView(object):
...
@@ -160,28 +156,32 @@ class BaseView(object):
row
=
self
.
query_id
()
.
first
()
row
=
self
.
query_id
()
.
first
()
if
not
row
:
if
not
row
:
return
self
.
id_not_found
()
return
self
.
id_not_found
()
bindings
=
self
.
get_bindings
()
bindings
=
hasattr
(
self
,
"get_bindings"
)
and
self
.
get_bindings
()
or
None
form
=
self
.
get_form
(
self
.
edit_schema
,
buttons
=
(
btn_close
,),
**
bindings
)
form
=
self
.
get_form
(
self
.
edit_schema
,
buttons
=
(
btn_close
,),
bindings
=
bindings
)
if
request
.
POST
:
if
request
.
POST
:
return
self
.
route_list
()
return
self
.
route_list
()
form
.
set_appstruct
(
self
.
get_values
(
row
))
form
.
set_appstruct
(
self
.
get_values
(
row
))
table
=
self
.
get_item_table
(
row
)
table
=
self
.
get_item_table
(
row
)
return
dict
(
form
=
form
.
render
(
readonly
=
True
),
table
=
table
and
table
.
render
()
or
None
,
scripts
=
self
.
form_scripts
)
return
dict
(
form
=
form
.
render
(
readonly
=
True
),
table
=
table
and
table
.
render
()
or
None
,
scripts
=
self
.
form_scripts
)
def
before_add
(
self
,
form
):
def
before_add
(
self
,
form
):
return
form
return
form
def
validation_failure
(
self
,
value
):
return
value
def
view_add
(
self
):
def
view_add
(
self
):
bindings
=
self
.
get_bindings
()
form
=
self
.
get_form
(
self
.
add_schema
)
form
=
self
.
get_form
(
self
.
add_schema
,
**
bindings
)
if
self
.
req
.
POST
:
if
self
.
req
.
POST
:
if
'save'
in
self
.
req
.
POST
:
if
'save'
in
self
.
req
.
POST
:
controls
=
self
.
req
.
POST
.
items
()
controls
=
self
.
req
.
POST
.
items
()
try
:
try
:
controls
=
form
.
validate
(
controls
)
controls
=
form
.
validate
(
controls
)
except
ValidationFailure
as
e
:
except
ValidationFailure
as
e
:
form
.
render
(
appstruct
=
e
.
cstruct
)
value
=
self
.
validation_failure
(
e
.
cstruct
)
form
.
render
(
appstruct
=
value
)
return
dict
(
form
=
form
.
render
(),
scripts
=
self
.
form_scripts
)
return
dict
(
form
=
form
.
render
(),
scripts
=
self
.
form_scripts
)
self
.
save_request
(
dict
(
controls
))
self
.
save_request
(
dict
(
controls
))
return
self
.
route_list
()
return
self
.
route_list
()
...
@@ -235,11 +235,9 @@ class BaseView(object):
...
@@ -235,11 +235,9 @@ class BaseView(object):
return
d
return
d
def
get_bindings
(
self
):
return
{}
def
get_item_table
(
self
,
row
=
None
):
def
get_item_table
(
self
,
row
=
None
):
return
None
return
def
before_edit
(
self
,
form
):
def
before_edit
(
self
,
form
):
return
form
return
form
...
@@ -248,8 +246,8 @@ class BaseView(object):
...
@@ -248,8 +246,8 @@ class BaseView(object):
row
=
self
.
query_id
()
.
first
()
row
=
self
.
query_id
()
.
first
()
if
not
row
:
if
not
row
:
return
self
.
id_not_found
()
return
self
.
id_not_found
()
bindings
=
self
.
get_bindings
()
form
=
self
.
get_form
(
self
.
edit_schema
,
**
bindings
)
form
=
self
.
get_form
(
self
.
edit_schema
)
if
request
.
POST
:
if
request
.
POST
:
if
'save'
in
request
.
POST
:
if
'save'
in
request
.
POST
:
controls
=
request
.
POST
.
items
()
controls
=
request
.
POST
.
items
()
...
@@ -271,7 +269,6 @@ class BaseView(object):
...
@@ -271,7 +269,6 @@ class BaseView(object):
request
=
self
.
req
request
=
self
.
req
q
=
self
.
query_id
()
q
=
self
.
query_id
()
row
=
q
.
first
()
row
=
q
.
first
()
if
not
row
:
if
not
row
:
return
self
.
id_not_found
()
return
self
.
id_not_found
()
if
request
.
POST
:
if
request
.
POST
:
...
@@ -281,8 +278,7 @@ class BaseView(object):
...
@@ -281,8 +278,7 @@ class BaseView(object):
DBSession
.
flush
()
DBSession
.
flush
()
request
.
session
.
flash
(
msg
)
request
.
session
.
flash
(
msg
)
return
self
.
route_list
()
return
self
.
route_list
()
bindings
=
self
.
get_bindings
()
form
=
self
.
get_form
(
self
.
edit_schema
,
buttons
=
(
btn_delete
,
btn_cancel
))
form
=
self
.
get_form
(
self
.
edit_schema
,
buttons
=
(
btn_delete
,
btn_cancel
),
**
bindings
)
form
.
set_appstruct
(
self
.
get_values
(
row
))
form
.
set_appstruct
(
self
.
get_values
(
row
))
table
=
self
.
get_item_table
(
row
)
table
=
self
.
get_item_table
(
row
)
return
dict
(
form
=
form
.
render
(),
table
=
table
and
table
.
render
()
or
None
,
scripts
=
self
.
form_scripts
)
return
dict
(
form
=
form
.
render
(),
table
=
table
and
table
.
render
()
or
None
,
scripts
=
self
.
form_scripts
)
...
...
opensipkd/base/views/register.py
View file @
336c590
...
@@ -446,6 +446,10 @@ class RegistrasiAdd(BaseView):
...
@@ -446,6 +446,10 @@ class RegistrasiAdd(BaseView):
permission
=
'view'
)
permission
=
'view'
)
def
es_reg_edt
(
self
):
def
es_reg_edt
(
self
):
request
=
self
.
req
request
=
self
.
req
register_form
=
get_params
(
"register_form"
)
if
register_form
:
return
HTTPFound
(
location
=
request
.
route_url
(
register_form
))
ses
=
request
.
session
ses
=
request
.
session
query
=
query_id
(
request
)
query
=
query_id
(
request
)
row
=
query
.
first
()
row
=
query
.
first
()
...
...
opensipkd/base/views/templates/base3.1.pt
View file @
336c590
...
@@ -145,9 +145,11 @@
...
@@ -145,9 +145,11 @@
<i
<i
class=
"fa fa-angle-down"
></i>
</a>
class=
"fa fa-angle-down"
></i>
</a>
<ul
class=
"dropdown-menu pull-right"
>
<ul
class=
"dropdown-menu pull-right"
>
<li><a
style=
"text-transform:capitalize"
href=
"${request.route_url('logout')}"
>
Logout
</a></li>
<li><a
style=
"text-transform:capitalize"
href=
"${request.route_url('profile')}"
>
Profile
</a></li>
<li><a
style=
"text-transform:capitalize"
href=
"${request.route_url('password')}"
>
Ubah password
</a>
<li
tal:condition=
"not request.user.external"
>
<a
style=
"text-transform:capitalize"
href=
"${request.route_url('password')}"
>
Ubah password
</a>
</li>
</li>
<li><a
style=
"text-transform:capitalize"
href=
"${request.route_url('logout')}"
>
Logout
</a></li>
<li
tal:condition=
"request.user.api_key"
><a
<li
tal:condition=
"request.user.api_key"
><a
style=
"text-transform:capitalize"
style=
"text-transform:capitalize"
href=
"${home}/recreate-api-key"
>
API Key
</a></li>
href=
"${home}/recreate-api-key"
>
API Key
</a></li>
...
...
opensipkd/base/views/user_login.py
View file @
336c590
...
@@ -143,7 +143,6 @@ def view_login(request):
...
@@ -143,7 +143,6 @@ def view_login(request):
if
id_info
and
not
user
:
if
id_info
and
not
user
:
request
.
session
.
flash
(
'Silahkan Melakukan Registrasi'
)
request
.
session
.
flash
(
'Silahkan Melakukan Registrasi'
)
register_form
=
get_params
(
"register_form"
,
'register-external'
)
register_form
=
get_params
(
"register_form"
,
'register-external'
)
headers
=
[(
"id_info"
,
str
(
id_info
))]
return
HTTPFound
(
location
=
request
.
route_url
(
register_form
,
_query
=
id_info
),
detail
=
id_info
)
return
HTTPFound
(
location
=
request
.
route_url
(
register_form
,
_query
=
id_info
),
detail
=
id_info
)
if
user
:
if
user
:
...
...
opensipkd/base/views/widget_os.py
View file @
336c590
from
colander
import
SchemaNode
,
null
,
Mapping
,
Invalid
,
text_
from
colander
import
SchemaNode
,
null
,
Mapping
,
Invalid
,
text_
,
string_types
from
deform.widget
import
Widget
,
_StrippedString
,
Select2Widget
from
deform.widget
import
Widget
,
_StrippedString
,
Select2Widget
...
@@ -228,3 +228,82 @@ class QtyWidget(Widget):
...
@@ -228,3 +228,82 @@ class QtyWidget(Widget):
raise
Invalid
(
field
.
schema
,
"Data tidak lengkap"
,
result
)
raise
Invalid
(
field
.
schema
,
"Data tidak lengkap"
,
result
)
return
result
return
result
class
CaptchaWidget
(
Widget
):
"""
Renders an ``<input type="text"/>`` widget.
**Attributes/Arguments**
template
The template name used to render the widget. Default:
``textinput``.
readonly_template
The template name used to render the widget in read-only mode.
Default: ``readonly/textinput``.
strip
If true, during deserialization, strip the value of leading
and trailing whitespace (default ``True``).
mask
A :term:`jquery.maskedinput` input mask, as a string.
a - Represents an alpha character (A-Z,a-z)
9 - Represents a numeric character (0-9)
* - Represents an alphanumeric character (A-Z,a-z,0-9)
All other characters in the mask will be considered mask
literals.
Example masks:
Date: 99/99/9999
US Phone: (999) 999-9999
US SSN: 999-99-9999
When this option is used, the :term:`jquery.maskedinput`
library must be loaded into the page serving the form for the
mask argument to have any effect. See :ref:`masked_input`.
mask_placeholder
The placeholder for required nonliteral elements when a mask
is used. Default: ``_`` (underscore).
"""
template
=
"opensipkd.base:views/widgets/captcha"
readonly_template
=
"opensipkd.base:views/widgets/captcha"
strip
=
True
# mask = None
# mask_placeholder = "_"
requirements
=
()
# def __init__(self, **kw):
# super(CaptchaWidget, self).__init__(**kw)
# if getattr(self, "mask", False):
# self.requirements = tuple(
# list(self.requirements) + [("jquery.maskedinput", None)]
# )
def
serialize
(
self
,
field
,
cstruct
,
**
kw
):
if
cstruct
in
(
null
,
None
):
cstruct
=
""
readonly
=
kw
.
get
(
"readonly"
,
self
.
readonly
)
template
=
readonly
and
self
.
readonly_template
or
self
.
template
# values = self.get_template_values(field, cstruct, kw)
return
field
.
renderer
(
template
,
None
)
def
deserialize
(
self
,
field
,
pstruct
):
if
pstruct
is
null
:
return
null
elif
not
isinstance
(
pstruct
,
string_types
):
raise
Invalid
(
field
.
schema
,
"Pstruct is not a string"
)
if
self
.
strip
:
pstruct
=
pstruct
.
strip
()
if
not
pstruct
:
return
null
return
pstruct
opensipkd/base/views/widgets/captcha.pt
0 → 100644
View file @
336c590
<span tal:define="name name|field.name;
css_class css_class|field.widget.css_class;
oid oid|field.oid;
captcha captcha|field.widget.captcha;
style style|field.widget.style;
"
tal:omit-tag="">
<input type="text" name="${name}" value="${cstruct}"
tal:attributes="class string: form-control ${css_class or ''};
style style;
attributes|field.widget.attributes|{};"
id="${oid}"/>
<script type="text/javascript">
deform.addCallback(
'${oid}',
function (oid) {
$("#" + oid).parent().prepend('<img style="height:30px; width:auto; margin-bottom:5px;' +
'" src="${home}/captcha/${captcha}.png">')
$('#'+oid).on('input', function (evt) {
$(this).val(function (_, val) {
return val.toUpperCase();
});
});
});
</script>
</span>
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