Commit 617962d2 by aa.gusti

Merge branch 'beta-4.2' of https://git.opensipkd.com/aa.gusti/coba into beta-4.2

2 parents 12632eff 665b4d40
......@@ -91,7 +91,6 @@ class CobaModules():
MODULE_CLASS = CobaModules()
def includeme(config):
# for route in routes:
# config.add_route(route[0], route[1])
......
......@@ -42,6 +42,7 @@ def main(argv=sys.argv):
DBSession.configure(bind=engine)
Base.metadata.bind = engine
Base.metadata.create_all(bind=engine)
Base.metadata.create_all(engine)
# ModuleBase.metadata.create_all()
print('>>Append Table')
......
("coba-home", "/coba/home", "Home Coba", "view_form", "home", home.pt,"",)
("coba-form", "/coba/form", "Daftar", "view_form", "list", list.pt,"",)
("coba-form-add", "/coba/form/add", "Tambah", "view_form", "add", form.pt,"",)
("coba-form-edit", "/coba/form/{id}/edit", "Koreksi", "view_form", "edit", form.pt,"",)
("coba-form-view", "/coba/form/{id}/view", "Lihat", "view_form", "view", form.pt,"",)
("coba-form-delete", "/coba/form/{id}/delete", "Hapus", "view_form", "delete", form.pt,"",)
("coba-form-act", "/coba/form/{act}/act", "Koreksi", "view_form", "act", json,"",)
("coba-upload", "/coba/upload", "Daftar", "view_upload", "list", list.pt,"",)
("coba-upload-add", "/coba/upload/add", "Tambah", "view_upload", "add", form.pt,"",)
("coba-upload-edit", "/coba/upload/{id}/edit", "Koreksi", "view_upload", "edit", form.pt,"",)
("coba-upload-view", "/coba/upload/{id}/view", "Lihat", "view_upload", "view", form.pt,"",)
("coba-upload-delete", "/coba/upload/{id}/delete", "Hapus", "view_upload", "delete", form.pt,"",)
("coba-upload-act", "/coba/upload/{act}/act", "Koreksi", "view_upload", "act", json,"",)
("coba-filters", "/coba/filter", "Filter", "view_filter", "add", form.pt,"",)
\ No newline at end of file
......@@ -78,8 +78,8 @@ class Views(BaseView):
# else:
# raise Exception(f"Belum ada fungsi {pars[2]}")
# # if pars[1]!="tgl_cetak":
# def jasper_response(self, **kwargs):
# from opensipkd.base.tools.report import jasper_export
# output_formats = kwargs.get("output_formats", ["pdf"])
......@@ -119,7 +119,7 @@ class Views(BaseView):
# bphtbReportItems.params["output_formats"], String) == f'"{output_formats}"')
# items = self.qry.first()
# force = kwargs.get("force", False)
# if items and not force:
......@@ -145,4 +145,4 @@ class Views(BaseView):
# return file_response(self.req, filename=file_name)
# from opensipkd.bphtb.apps.views.kelurahan import kelurahan_widget, KelurahanFilterSchema
# from opensipkd.bphtb.apps.views.kecamatan import kecamatan_widget, KecamatanFilterSchema
# from opensipkd.bphtb.apps.views.kecamatan import kecamatan_widget, KecamatanFilterSchema
\ No newline at end of file
"""
A. Struktur Data dalam python
1. String
2. Integer
3. Float
4. Date
5. DateTime
menggunakan module datetime
import datetime
dt = datetme.date(year, month, day)
dt_time = datetme.datetime(year, month, day, hour, minutes, seconds.miliseconds)
Import Fungsi
>>> import datetime
>>> datetime.datetime.now()
>>> dt = datetime.date(2025,10,2)
>>> print(dt)
2025-10-02
>>> from datetime import date
>>> dt = date(2025,10,2)
>>> print(dt)
2025-10-02
Fungsi yang berhubungan dengan Date
strftime(format) konversi menjadi string yang terformat %d, %m, %Y %H %M %S
strptime("date string", format) konversi dari string ke datetime
dt_from_str = datetime.datetime.strptime('2025-08-05',"%Y-%m-%d")
6. List/Array
alist = [1,2,3,4,5,6]
blist = [5,6,7]
index list dimulai 0
Operasi
a. Append alist.append(7)
b. Insert alist.insert(0, 0)
c. Delete del alist[index]
alist.pop(index) menghapus dan menyimpan ke variable lain
7. Tuple
atuple = (1,2,3,4,5,6)
btuple = (5,6,7)
index tuple dimulai 0
8. Dictionary terdiri dari key dan value
dictionary = {"a": 1, "b": 2, "c": 3}
dictionary = dict(a=1,
b=2,
c=3}
Campuran:
dictionary = {"a": 1, "b": [1,2,3,4,5,6], "c": (1,2,3,4,5,6), "d":{"d1":"D1", "d2":1}}
B. Variable
C. def -> function
def kali(a, b):
return a*b
def kali1(a=1, b=2):
return a*b
def kali2(*arg):
c = 1
for i in arg:
c = c * i
return c
def kali3(a=1, b=2):
c = a*b
return c
def kali4(**kwarg):
c = 1
for kw in kwarg:
c = c * kwarg[kw]
return c
D. class -> Object
E. Framework
F. Perintah standard
type(obj) Mendafatkan type variable/object
print(obj,)
str(obj) merubah menjadi type string
int(obj) meribah menjadi type obj
float(obj) merubah type menjadi Float
dir(obj) melihat daftar fungsi/attribut dalam suatu object
hasattr(obj, name) cek object mempunyai attribute
getattr(obj, name) mengambil attribute biasanya kedalam suatu variable
"""
class Hitung():
def __init__(self, a,b):
self.a = a
self.b = b
self.kali()
def kali(self):
c = self.a*self.b
print(f"Kali: {self.a} * {self.b}={c}")
return c
def bagi(self):
c = self.a/self.b
print(f"Bagi: {self.a} / {self.b}={c}")
return c
def sisa(self):
c = self.a % self.b
print(f"Sisa: {self.a} % {self.b}={c}")
return c
class Hitung2(Hitung):
def tambah(self):
c = self.a + self.b
print(f"Tambah: {self.a} + {self.b} = {c}")
return c
# Contoh Procedure
def kali(a, b):
return a*b
def kali1(a=1, b=2):
return a*b
def kali2(*arg):
c = 1
for i in arg:
c = c * i
return c
def kali4(**kwarg):
c = 1
for kw in kwarg:
c = c * kwarg[kw]
return c
def kali5(**kwarg):
c = 1
if "b" in kwarg:
c = c * kwarg["b"]
return c
"""
>>> kali(2, 2)
4
>>> kali2(2, 2)
4
>>> kali2(2, 2, 3, 4, 5)
240
>>> kali3()
2
>>> kali3(3, 4)
12
>>> kali3(b=3, a=5)
15
>>> kali3(3, 5, d=10, e=12)
1800
"""
def main():
hitung = Hitung2(5,5)
print(hitung.a, hitung.b)
if __name__ == "__main__":
main()
<html metal:use-macro="load: ./base.pt" tal:omit-tag="">
<div metal:fill-slot="content" tal:omit-tag="">
<h1>Home BPHTB</h1>
<a href="/test/filters">Filter Form</a>
</div>
</html>
\ No newline at end of file
import colander
from deform import Form, ValidationFailure
from opensipkd.base.views import widget_os, BaseView
class FilterSchema(colander.SequenceSchema):
test = colander.SchemaNode(
colander.String(),
widget=widget_os.FilterWidget(values=(("nama", "Nama"), ("alamat", "Alamat")))
)
class AddSchema(colander.Schema):
ada = FilterSchema()
class Views(BaseView):
def __init__(self, request):
super().__init__(request)
self.add_schema = AddSchema
self.list_route = "coba-form"
self.is_object = True
def view_add(self):
# if self.req.POST:
# c = self.req.POST.items()
# form = Form(self.add_schema())
# try:
# c = form.validate(c)
# except ValidationFailure as e:
# print(str(e))
# print(dict(c))
result = super().view_add()
form = result["form"]
values1 = {"test": "alamat.gt.Jakarta.OR"}
values2 = {"test": "alamat.lt.Bandung."}
values = {"ada": [values1["test"], values2["test"]]}
# values = {}
form.set_appstruct(values)
return {"form": form.render(), "scripts": {}, "js": result["js"],
"css": result["css"]}
\ No newline at end of file
from datetime import datetime
import colander
from deform import widget, FileData
from pyramid.view import view_config
......@@ -12,9 +14,12 @@ items = (("1", "Satu"),('2','Dua'),('3','Tiga'),('4','Empat'),('5','Lima'),
('10','Sepuluh'),("11", "Sebelas"),('12','Dua Belas'),
('13','Tiga Belas'),('14','Empat Belas'),('15','Lima Belas'))
from opensipkd.base import get_urls
class AddSchema(colander.Schema):
kode = colander.SchemaNode(
colander.String(),
widget=widget.TextInputWidget(mask="9999.9999.9999"),
validator=colander.Length(min=3, max=10),
)
nama = colander.SchemaNode(
......@@ -29,66 +34,65 @@ class AddSchema(colander.Schema):
date_os = colander.SchemaNode(
colander.String(),
widget = widget_os.BootStrapDateInputWidget(type_name="text")
widget=widget_os.BootStrapDateInputWidget(type_name="text")
)
date_ori = colander.SchemaNode(
colander.String(),
widget = widget.DateInputWidget(type_name="text")
widget=widget.DateInputWidget(type_name="text")
)
date_part = colander.SchemaNode(
colander.String(),
widget = widget.DatePartsWidget()
widget=widget.DatePartsWidget()
)
time_ori = colander.SchemaNode(
colander.String(),
widget = widget.TimeInputWidget()
widget=widget.TimeInputWidget()
)
date_time = colander.SchemaNode(
colander.String(),
widget = widget.DateTimeInputWidget()
widget=widget.DateTimeInputWidget()
)
check_box = colander.SchemaNode(
colander.Integer(),
widget = widget.CheckboxWidget(true_val="1", false_val="0")
widget=widget.CheckboxWidget(true_val="1", false_val="0")
)
select_combo = colander.SchemaNode(
colander.Integer(),
widget = widget.SelectWidget(values=items)
widget=widget.SelectWidget(values=items)
)
select_combo2 = colander.SchemaNode(
colander.Integer(),
widget = widget.Select2Widget(values=items)
widget=widget.Select2Widget(values=items)
)
file_upload = colander.SchemaNode(
FileData(),
widget = widget.FileUploadWidget(tmpstore=mem_tmp_store,
template='opensipkd.coba:views/templates/file_upload.pt',
readonly_template='opensipkd.coba:views/templates/readonly/file_upload.pt')
widget=widget.FileUploadWidget(tmpstore=mem_tmp_store,
template='opensipkd.coba:views/templates/file_upload.pt',
readonly_template='opensipkd.coba:views/templates/readonly/file_upload.pt')
)
img_upload = colander.SchemaNode(
FileData(),
widget = widget.FileUploadWidget(tmpstore=mem_tmp_store,
template='opensipkd.coba:views/templates/img_upload.pt',
readonly_template='opensipkd.coba:views/templates/readonly/img_upload.pt')
widget=widget.FileUploadWidget(tmpstore=mem_tmp_store,
template='opensipkd.coba:views/templates/img_upload.pt',
readonly_template='opensipkd.coba:views/templates/readonly/img_upload.pt')
)
option_list = colander.SchemaNode(
colander.Integer(),
widget = widget.RadioChoiceWidget(values=items)
widget=widget.RadioChoiceWidget(values=items)
)
option_box = colander.SchemaNode(
colander.Set(),
widget = widget.CheckboxChoiceWidget(values=items)
widget=widget.CheckboxChoiceWidget(values=items)
)
......@@ -128,6 +132,7 @@ class Views(BaseView):
def form_validator(self, form, value):
exc = colander.Invalid(form, '')
def err_kode():
exc['kode'] = 'Kode %s sudah digunakan oleh %s' % (
value['kode'], found.nama)
......@@ -140,19 +145,19 @@ class Views(BaseView):
if 'id' in form.request.matchdict:
uid = form.request.matchdict['id']
q =Coba.query_id(uid)
q = Coba.query_id(uid)
current = q.first()
else:
current = None
found =Coba.query_kode(value['kode']).first()
found = Coba.query_kode(value['kode']).first()
if current:
if found and found.id != current.id:
err_kode()
elif found:
err_kode()
found =Coba.query_nama(value['nama']).first()
found = Coba.query_nama(value['nama']).first()
if current:
if found and found.id != current.id:
err_nama()
......@@ -160,15 +165,15 @@ class Views(BaseView):
err_nama()
# Set to String
if "option_box" in value:
value["option_box"]=str(value["option_box"])
value["option_box"] = str(value["option_box"])
if "time_ori" in value:
value["time_ori"]=datetime.strptime(value["time_ori"], "%H:%M:%S")
value["time_ori"] = datetime.strptime(value["time_ori"], "%H:%M:%S")
if "check_box" in value:
value["check_box"]=value["check_box"] and 1 or 0
value["check_box"] = value["check_box"] and 1 or 0
# Save File Upload to Folder
# Save File Upload to Folder
if "file_upload" in value:
upload = Upload(MODULE_CLASS.uploads)
value["file_upload"]=upload.save_fp(value["file_upload"])
......@@ -184,24 +189,24 @@ class Views(BaseView):
filename = row.file_upload
preview_url = "/".join([url, filename])
d["file_upload"] = {"uid": filename.split(".")[0],
"filename": filename,
"preview_url": preview_url
}
"filename": filename,
"preview_url": preview_url
}
if "img_upload" in d:
filename = row.img_upload
preview_url = "/".join([url, filename])
d["img_upload"] = {"uid": filename.split(".")[0],
"filename": filename,
"preview_url": preview_url
}
d["date_ori"]=ymd(row.date_ori)
d["date_os"]=ymd(row.date_os)
d["date_part"]=ymd(row.date_part)
d["date_time"]=ymd(row.date_time)+'T'+hms(row.date_time)+'Z'
d["time_ori"]=hms(row.time_ori)
d["option_box"]=set(row.option_box)
d["check_box"]=row.check_box and "1" or "0"
"filename": filename,
"preview_url": preview_url
}
d["date_ori"] = ymd(row.date_ori)
d["date_os"] = ymd(row.date_os)
d["date_part"] = ymd(row.date_part)
d["date_time"] = ymd(row.date_time) + 'T' + hms(row.date_time) + 'Z'
d["time_ori"] = hms(row.time_ori)
d["option_box"] = set(row.option_box)
d["check_box"] = row.check_box and "1" or "0"
return d
# @view_config(route_name='coba-form', renderer='templates/list.pt',
......@@ -236,7 +241,7 @@ class Views(BaseView):
def _coba_list():
qry =Coba.query().order_by(Coba.nama)
qry = Coba.query().order_by(Coba.nama)
return qry
......@@ -262,6 +267,7 @@ def coba_widget(node, kw):
placeholder="Pilih Coba",
style="width:200px;")
class CobaFilterSchema():
coba_id = colander.SchemaNode(
colander.Integer(),
......@@ -269,4 +275,4 @@ class CobaFilterSchema():
title="Coba",
oid="coba_id",
missing=colander.drop,
)
)
\ No newline at end of file
import colander
from deform import Form
class Schema(colander.Schema):
a = colander.SchemaNode(colander.String())
schema = Schema()
form = Form(schema)
# print (dir(form.oid))
print (form.oid)
print (form.schema.a.id)
# print(form.render())
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!