Commit db87b664 by Prismana

pembaruan validator pada user, departemen dan provinsi

1 parent db49460f
...@@ -4,6 +4,8 @@ __pycache__/ ...@@ -4,6 +4,8 @@ __pycache__/
*$py.class *$py.class
.vs/ .vs/
.vscode/ .vscode/
base.ini
# C extensions # C extensions
*.so *.so
......
File mode changed
...@@ -698,9 +698,9 @@ def main(global_config, **settings): ...@@ -698,9 +698,9 @@ def main(global_config, **settings):
if 'localization' not in settings: if 'localization' not in settings:
settings['localization'] = 'id_ID.UTF-8' settings['localization'] = 'id_ID.UTF-8'
locale.setlocale(locale.LC_ALL, settings['localization']) # locale.setlocale(locale.LC_ALL, settings['localization'])
if 'timezone' not in settings: # if 'timezone' not in settings:
settings['timezone'] = DefaultTimeZone # settings['timezone'] = DefaultTimeZone
# modules = get_modules(settings) # modules = get_modules(settings)
# from importlib import import_module # from importlib import import_module
......
...@@ -39,44 +39,82 @@ def departemen_widget_form(): ...@@ -39,44 +39,82 @@ def departemen_widget_form():
{"js": "opensipkd.base:static/js/form/departemen_form.js"}), {"js": "opensipkd.base:static/js/form/departemen_form.js"}),
) )
# Mencoba membuat validator sendiri
class Validator:
def __init__(self, user):
self.user = user
# Validator nama
class NameValidator(Validator):
def __call__(self, node, value):
name = value
if (len(name) > 128):
raise colander.Invalid(node, _('Maksimal 128 karakter'))
@colander.deferred
def name_validator(node, kw):
return NameValidator(kw['user'])
class AddSchema(colander.Schema): class AddSchema(colander.Schema):
parent_id = colander.SchemaNode( parent_id = colander.SchemaNode(
colander.Integer(), colander.Integer(),
widget=widget.HiddenWidget(), oid="parent_id", missing=colander.drop, widget=widget.HiddenWidget(),
) oid="parent_id",
missing=colander.drop,)
parent_nm = colander.SchemaNode( parent_nm = colander.SchemaNode(
colander.String(), missing=colander.drop, colander.String(),
missing=colander.drop,
widget=widget.AutocompleteInputWidget( widget=widget.AutocompleteInputWidget(
size=60, min_length=3, size=60, min_length=3,
requirements=(("typeahead", None), ("deform", None), requirements=(("typeahead", None),
{"js": "opensipkd.base:static/js/form/departemen.js"}), ("deform", None),
{"js": "opensipkd.base:static/js/form/departemen.js"}),
# options={"allowClear": True} # options={"allowClear": True}
), ),
oid="parent_nm", title="Induk") oid="parent_nm",
title="Induk")
parent_kd = colander.SchemaNode(colander.String(),
widget=widget.TextInputWidget(css_class="readonly"), parent_kd = colander.SchemaNode(
missing=colander.drop, oid="parent_kd", title="Kode Induk") colander.String(),
widget=widget.TextInputWidget(css_class="readonly"),
kode = colander.SchemaNode(colander.String(), missing=colander.drop,
validator=colander.Length(max=32), oid="kode") oid="parent_kd",
title="Kode Induk")
nama = colander.SchemaNode(colander.String(), oid="nama")
kode = colander.SchemaNode(
singkat = colander.SchemaNode(colander.String(), missing=colander.drop, colander.String(),
oid="singkat") validator=colander.Length(max=32, max_err='Maksimal 32 karakter'),
oid="kode")
kategori = colander.SchemaNode(colander.String(), missing=colander.drop,
oid="kategori") nama = colander.SchemaNode(
colander.String(),
alamat = colander.SchemaNode(colander.String(), missing=colander.drop, oid="nama",
oid="alamat") validator=colander.Length(min=1, max=128, max_err="Maksimal 128 karakter", min_err='Minimal 1 karakter'))
company_id = colander.SchemaNode(colander.Integer(),
widget=company_widget, singkat = colander.SchemaNode(
missing=colander.drop, colander.String(),
oid="company_id") missing=colander.drop,
oid="singkat",
validator=colander.Length(max=32, max_err='Maksimal 32 karakter'))
kategori = colander.SchemaNode(
colander.String(),
missing=colander.drop,
oid="kategori",
validator=colander.Length(max=32, max_err='Maksimal 32 karakter'))
alamat = colander.SchemaNode(
colander.String(),
missing=colander.drop,
oid="alamat",
validator=colander.Length(max=255, max_err='Maksimal 255 karakter'))
company_id = colander.SchemaNode(
colander.Integer(),
widget=company_widget,
missing=colander.drop,
oid="company_id")
status = colander.SchemaNode( status = colander.SchemaNode(
colander.Integer(), colander.Integer(),
...@@ -407,4 +445,4 @@ class ViewDepartemen(BaseView): ...@@ -407,4 +445,4 @@ class ViewDepartemen(BaseView):
# row.kode = kode # row.kode = kode
# row.nama = csv_row['nama'] # row.nama = csv_row['nama']
# DBSession.add(row) # DBSession.add(row)
# return row # return row
\ No newline at end of file \ No newline at end of file
...@@ -6,6 +6,7 @@ from pyramid.view import (view_config, ) ...@@ -6,6 +6,7 @@ from pyramid.view import (view_config, )
from . import widget_os from . import widget_os
from opensipkd.models import DBSession, ResProvinsi, kategori_provinsi from opensipkd.models import DBSession, ResProvinsi, kategori_provinsi
from ..views import BaseView from ..views import BaseView
_ = TranslationStringFactory("opensipkd") _ = TranslationStringFactory("opensipkd")
SESS_ADD_FAILED = 'Tambah provinsi gagal' SESS_ADD_FAILED = 'Tambah provinsi gagal'
...@@ -19,34 +20,51 @@ def provinsi_widget(node, kw): ...@@ -19,34 +20,51 @@ def provinsi_widget(node, kw):
slave = node and hasattr(node, 'slave') and node.slave or "" slave = node and hasattr(node, 'slave') and node.slave or ""
values.insert(0, ("", "Pilih Propinsi...")) values.insert(0, ("", "Pilih Propinsi..."))
readonly = kw.get("readonly", False) readonly = kw.get("readonly", False)
return widget_os.Select2MsWidget(values=values, return widget_os.Select2MsWidget(
readonly=readonly, values=values,
url=url, readonly=readonly,
slave=slave, url=url,
placeholder="Pilih Provinsi") slave=slave,
placeholder="Pilih Provinsi")
class AddSchema(colander.Schema): class AddSchema(colander.Schema):
kode = colander.SchemaNode(colander.String(), kode = colander.SchemaNode(
oid="kode", colander.String(),
validator=colander.Length(max=32), ) oid="kode",
kategori = colander.SchemaNode(colander.String(), validator=colander.Length(max=32, max_err='Maksimal 32 karakter'))
widget=widget.SelectWidget(values=kategori_provinsi),
validator=colander.Length(max=32), oid="kode") kategori = colander.SchemaNode(
colander.String(),
widget=widget.SelectWidget(values=kategori_provinsi),
validator=colander.Length(max=32, max_err='Maksimal 32 karakter'),
oid="kode")
nama = colander.SchemaNode(
colander.String(),
oid="nama",
validator=colander.Length(max=128, max_err='Maksimal 128 karakter'))
nama = colander.SchemaNode(colander.String(), oid="nama") ibu_kota = colander.SchemaNode(
ibu_kota = colander.SchemaNode(colander.String(), oid="nama", missing=colander.drop) colander.String(),
oid="nama",
missing=colander.drop,
validator=colander.Length(max=64, max_err='Maksimal 64 karakter'))
class EditSchema(AddSchema): class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(), missing=colander.drop, id = colander.SchemaNode(
widget=widget.HiddenWidget(readonly=True), colander.String(),
visible=False) missing=colander.drop,
widget=widget.HiddenWidget(readonly=True),
visible=False)
class ListSchema(colander.Schema): class ListSchema(colander.Schema):
id = colander.SchemaNode(colander.Integer(), id = colander.SchemaNode(
title=_("action", default="Action")) colander.Integer(),
title=_("action",
default="Action"))
kode = colander.SchemaNode(colander.String(), width=100) kode = colander.SchemaNode(colander.String(), width=100)
nama = colander.SchemaNode(colander.String()) nama = colander.SchemaNode(colander.String())
ibu_kota=colander.SchemaNode(colander.String()) ibu_kota=colander.SchemaNode(colander.String())
...@@ -69,13 +87,14 @@ class ViewProvinsi(BaseView): ...@@ -69,13 +87,14 @@ class ViewProvinsi(BaseView):
def form_validator(self, form, value): def form_validator(self, form, value):
def err_kode(): def err_kode():
raise colander.Invalid(form, 'Kode %s sudah digunakan oleh %s' % ( raise colander.Invalid(
value['kode'], found.nama)) form,
'Kode %s sudah digunakan oleh %s' % (value['kode'], found.nama))
def err_nama(): def err_nama():
raise colander.Invalid(form, raise colander.Invalid(
'Uraian %s sudah digunakan oleh kode %s' % ( form,
value['nama'], found.kode)) 'Uraian %s sudah digunakan oleh kode %s' % (value['nama'], found.kode))
if 'id' in form.request.matchdict: if 'id' in form.request.matchdict:
uid = form.request.matchdict['id'] uid = form.request.matchdict['id']
......
...@@ -273,6 +273,13 @@ class EmailValidator(colander.Email, Validator): ...@@ -273,6 +273,13 @@ class EmailValidator(colander.Email, Validator):
if found and (not self.user or self.user.email != found.email): if found and (not self.user or self.user.email != found.email):
email_found() email_found()
# Cek karakter
def email_max():
raise colander.Invalid(node, _('Maksimal 100 karakter'))
if (len(email) > 100):
email_max()
REGEX_ONLY_CONTAIN = re.compile('([A-Za-z0-9-]*)') REGEX_ONLY_CONTAIN = re.compile('([A-Za-z0-9-]*)')
REGEX_BEGIN_END_ALPHANUMERIC = re.compile('^[A-Za-z0-9]+(?:[-][A-Za-z0-9]+)*$') REGEX_BEGIN_END_ALPHANUMERIC = re.compile('^[A-Za-z0-9]+(?:[-][A-Za-z0-9]+)*$')
...@@ -281,6 +288,15 @@ REGEX_BEGIN_END_ALPHANUMERIC = re.compile('^[A-Za-z0-9]+(?:[-][A-Za-z0-9]+)*$') ...@@ -281,6 +288,15 @@ REGEX_BEGIN_END_ALPHANUMERIC = re.compile('^[A-Za-z0-9]+(?:[-][A-Za-z0-9]+)*$')
class UsernameValidator(Validator): class UsernameValidator(Validator):
def __call__(self, node, value): def __call__(self, node, value):
username = value username = value
# Fungsi menampilkan error pada field form
def username_max():
raise colander.Invalid(node, _('Maksimal 128 karakter'))
# Jika karakter melebihi 128 karakter maka, panggil fungsi
if (len(username) > 128):
username_max()
if self.user and self.user.user_name == username: if self.user and self.user.user_name == username:
return return
match = REGEX_ONLY_CONTAIN.search(username) match = REGEX_ONLY_CONTAIN.search(username)
...@@ -333,20 +349,34 @@ def save_user(values, user, row=None): ...@@ -333,20 +349,34 @@ def save_user(values, user, row=None):
class AddSchema(colander.Schema): class AddSchema(colander.Schema):
email = colander.SchemaNode( email = colander.SchemaNode(
colander.String(), title=_('Email'), colander.String(),
title=_('Email'),
validator=email_validator) validator=email_validator)
user_name = colander.SchemaNode(colander.String(), title=_('Username'),
validator=username_validator) user_name = colander.SchemaNode(
colander.String(),
title=_('Username tetst'),
validator=username_validator)
groups = colander.SchemaNode( groups = colander.SchemaNode(
colander.Set(), widget=group_widget, title=_('Group')) colander.Set(),
widget=group_widget,
title=_('Group'))
is_api_key = colander.SchemaNode( is_api_key = colander.SchemaNode(
colander.String(), widget=api_key_widget, title=_('API Key'), colander.String(),
widget=api_key_widget,
title=_('API Key'),
missing=colander.drop) missing=colander.drop)
password = colander.SchemaNode( password = colander.SchemaNode(
colander.String(), widget=widget.CheckedPasswordWidget(), colander.String(),
widget=widget.CheckedPasswordWidget(),
missing=colander.drop) missing=colander.drop)
company_id = colander.SchemaNode( company_id = colander.SchemaNode(
colander.Integer(), widget=company_widget, colander.Integer(),
widget=company_widget,
title="Company", title="Company",
missing=colander.drop) missing=colander.drop)
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!