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 ac47be27
authored
Jan 22, 2026
by
aa.gustiana@gmail.com
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
feat: Implement form validation in ApiViews and add custom exception classes
1 parent
b99f9d3a
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
45 additions
and
2 deletions
opensipkd/base/tools/exceptions.py
opensipkd/base/views/api_base.py
opensipkd/base/tools/exceptions.py
0 → 100644
View file @
ac47be2
class
OpensipkdException
(
Exception
):
code
=
"-9999"
message
=
"Error Aplikasi"
class
DataException
(
OpensipkdException
):
code
=
"-1000"
message
=
"Kesalahan pada data"
class
DataValidation
(
DataException
):
code
=
"-1001"
message
=
"Data tidak valid"
class
DataNotFound
(
DataException
):
code
=
"-1002"
message
=
"Record Not Found"
class
DataFound
(
DataException
):
code
=
"-1003"
message
=
"Data sudah ada"
class
UserException
(
OpensipkdException
):
code
=
"-2000"
mesasge
=
"Kesalahan pada"
class
UserNotFound
(
DataNotFound
):
message
=
"User Not Found"
opensipkd/base/views/api_base.py
View file @
ac47be2
...
@@ -2,7 +2,8 @@ from datetime import datetime, date
...
@@ -2,7 +2,8 @@ from datetime import datetime, date
import
logging
import
logging
from
decimal
import
Decimal
from
decimal
import
Decimal
from
math
import
log
from
math
import
log
from
deform
import
Form
,
ValidationFailure
from
deform
import
Form
,
ValidationFailure
,
form
from
opensipkd.webr.models.users
import
User
from
pyramid.response
import
Response
from
pyramid.response
import
Response
from
opensipkd.base.models
import
DBSession
from
opensipkd.base.models
import
DBSession
from
opensipkd.tools.buttons
import
btn_save
,
btn_cancel
from
opensipkd.tools.buttons
import
btn_save
,
btn_cancel
...
@@ -240,9 +241,26 @@ class ApiViews(APIView):
...
@@ -240,9 +241,26 @@ class ApiViews(APIView):
d
=
self
.
get_custom_render
(
d
)
d
=
self
.
get_custom_render
(
d
)
return
Response
(
json
=
json
.
loads
(
json
.
dumps
(
d
,
default
=
self
.
json_adapter
)))
return
Response
(
json
=
json
.
loads
(
json
.
dumps
(
d
,
default
=
self
.
json_adapter
)))
def
form_validator
(
self
,
form
,
controls
):
"""Get Validator Form"""
def
post
(
self
,
request
,
*
args
,
**
kwargs
):
def
post
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
req
=
request
self
.
req
=
request
return
self
.
req
form
=
self
.
get_form
(
self
.
add_schema
,
validator
=
self
.
form_validator
)
controls
=
self
.
req
.
POST
.
items
()
try
:
data
=
self
.
form_validate
(
form
,
controls
)
except
ValidationFailure
as
e
:
return
Response
(
json
=
{
"errors"
:
e
.
error
.
asdict
()},
status
=
400
)
if
data
.
get
(
"id"
,
None
):
row
=
self
.
table
.
query
.
get
(
data
.
get
(
"id"
))
else
:
row
=
None
user
=
User
.
get_by_request
(
self
.
request
.
user
)
row
=
self
.
table
.
save
(
data
,
row
,
user
=
user
)
d
=
row
.
__dict__
d
.
pop
(
"_sa_instance_state"
,
None
)
return
Response
(
json
=
self
.
success
(
d
))
def
delete
(
self
):
def
delete
(
self
):
query
=
self
.
db_session
.
query
(
self
.
table
)
query
=
self
.
db_session
.
query
(
self
.
table
)
...
...
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