Commit cc51e762 by Hamsyah

pembaruan inputan validator dan group by hmzh

2 parents eedc48e4 4c2cb197
...@@ -5,6 +5,7 @@ __pycache__/ ...@@ -5,6 +5,7 @@ __pycache__/
.vs/ .vs/
.vscode/ .vscode/
base.ini base.ini
# C extensions # C extensions
*.so *.so
......
...@@ -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
......
...@@ -35,12 +35,14 @@ class AddSchema(colander.Schema): ...@@ -35,12 +35,14 @@ class AddSchema(colander.Schema):
kode = colander.SchemaNode(colander.String(), kode = colander.SchemaNode(colander.String(),
validator=colander.Length(max=32), oid="kode") validator=colander.Length(max=32), oid="kode")
kategori = colander.SchemaNode(colander.String(), kategori = colander.SchemaNode(colander.String(),
widget=widget.SelectWidget( widget=widget.RadioChoiceWidget(
values=kategori_dati2), values=kategori_dati2),
validator=colander.Length(max=32), validator=colander.Length(max=32),
oid="kode") oid="kode")
nama = colander.SchemaNode(colander.String(), oid="nama") nama = colander.SchemaNode(colander.String(),
validator=colander.Length(max=64),
oid="nama")
class EditSchema(AddSchema): class EditSchema(AddSchema):
......
...@@ -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
...@@ -27,8 +27,12 @@ def permissions_widget(node, kw): ...@@ -27,8 +27,12 @@ def permissions_widget(node, kw):
class AddSchema(colander.Schema): class AddSchema(colander.Schema):
group_name = colander.SchemaNode( group_name = colander.SchemaNode(
colander.String(), validator=name_validator) colander.String(),
description = colander.SchemaNode(colander.String(), missing=colander.drop) validator=colander.Length(max=32))
description = colander.SchemaNode(
colander.String(),
validator=colander.Length(max=32),
missing=colander.drop)
permissions = colander.SchemaNode( permissions = colander.SchemaNode(
colander.Set(), widget=permissions_widget, title='Hak akses') colander.Set(), widget=permissions_widget, title='Hak akses')
......
...@@ -71,7 +71,7 @@ def partner_kode_validator(node, kw): ...@@ -71,7 +71,7 @@ def partner_kode_validator(node, kw):
class NamaSchema(colander.Schema): class NamaSchema(colander.Schema):
kode = colander.SchemaNode( kode = colander.SchemaNode(
colander.String(), colander.String(),
validator=partner_kode_validator, validator=colander.Length(max=32),
oid="kode", oid="kode",
title="Kode", title="Kode",
width="100pt") width="100pt")
...@@ -86,7 +86,7 @@ class NamaSchema(colander.Schema): ...@@ -86,7 +86,7 @@ class NamaSchema(colander.Schema):
email = colander.SchemaNode( email = colander.SchemaNode(
colander.String(), colander.String(),
validator=partner_email_validator, validator=colander.Length(max=32),
oid="email") oid="email")
......
...@@ -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']
......
...@@ -276,6 +276,13 @@ class EmailValidator(colander.Email, Validator): ...@@ -276,6 +276,13 @@ class EmailValidator(colander.Email, Validator):
raise colander.Invalid(node, _('Email tidak boleh lebih dari 100 karakter.')) raise colander.Invalid(node, _('Email tidak boleh lebih dari 100 karakter.'))
# 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]+)*$')
...@@ -286,10 +293,9 @@ class UsernameValidator(Validator): ...@@ -286,10 +293,9 @@ class UsernameValidator(Validator):
username = value username = value
def username_max(): def username_max():
raise colander.Invalid(node, _('Maksimal 28 Karakter')) raise colander.Invalid(node, _('Maksimal 20 Karakter'))
if (len(username) > 128): if (len(username) > 20):
username_max() 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)
...@@ -342,20 +348,34 @@ def save_user(values, user, row=None): ...@@ -342,20 +348,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)
......
...@@ -27,7 +27,7 @@ class ListSchema(colander.Schema): ...@@ -27,7 +27,7 @@ class ListSchema(colander.Schema):
class AddSchema(colander.Schema): class AddSchema(colander.Schema):
user_id = colander.SchemaNode( user_id = colander.SchemaNode(
colander.Integer(), colander.Integer(),
widget=widget.SelectWidget(values=User.get_list()), widget=widget.RadioChoiceWidget(values=User.get_list()),
oid="user_id", oid="user_id",
title="User", title="User",
) )
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!