Update database URL in development.ini, add search methods enum in base_views.py…

…, and include pdfkit dependency in pyproject.toml
1 parent 712624f7
......@@ -14,7 +14,7 @@ pyramid.debug_notfound = true
pyramid.debug_routematch = true
pyramid.debug_templates = true
default_locale_name = id
sqlalchemy.url = postgresql://aagusti:a@localhost:5432/demos
sqlalchemy.url = postgresql://aagusti:a@localhost:5432/webrs
pyramid.includes =
pyramid_tm
pyramid_beaker
......@@ -64,13 +64,13 @@ reg_captcha = 1
reg_verify = 1
# MAIL
mail.host = smtp.gmail.com
mail.port = 465
mail.ssl = True
mail.tls = True
mail.username = opensipkd@gmail.com
mail.password = ajmyoksxeiprmtyc
mail.sender_name = "openSIPKD"
; mail.host = smtp.gmail.com
; mail.port = 465
; mail.ssl = True
; mail.tls = True
; mail.username = opensipkd@gmail.com
; mail.password = ajmyoksxeiprmtyc
; mail.sender_name = "openSIPKD"
;PBB
pbb.url = oracle://PBB:A@10.8.50.62/simpbb
......
......@@ -30,9 +30,25 @@ from ..widgets import widget_os
from ..scripts.initializedb import append_csv
from ..tools import obj2json
from ...detable import DeTable
import enum
log = logging.getLogger(__name__)
class SearchMethods(enum.Enum):
none = 0
string_contains = 1
ilike = 2
like = 3
numeric = 4
date = 5
yadcf_text = 6
yadcf_autocomplete = 7
yadcf_select = 8
yadcf_multi_select = 9
yadcf_range_number = 10
yadcf_range_number_slider = 11
yadcf_range_date = 12
# SEARCH_METHODS = {
# 'none': lambda expr, value: None,
# 'string_contains': lambda expr, value: expr.ilike('%' + value + '%'),
......@@ -142,6 +158,17 @@ class BaseView(object):
self.action_suffix = "/grid/act"
self.html_buttons = {}
self.new_buttons = {}
"""
Additional button for list
{
"name":{
"obj": BtObject,
"js": JavaScript},
"name..."{
}
}
"""
self.list_form = None # List dam Form
self.form_list = None # Form kemudian detail list
......@@ -725,23 +752,62 @@ class BaseView(object):
if not data:
raise HTTPNotFound("No data to export")
header = list(data[0].keys())
selects = {}
list_schema = self.list_schema()
for i, h in enumerate(header):
# schema = self.list_schema()
if "bindings" in kwargs and kwargs["bindings"]:
bindings = kwargs["bindings"]
elif self.bindings:
bindings = self.bindings
else:
bindings = self.get_bindings()
list_schema = list_schema.bind(request=self.req, **bindings)
for d in list_schema:
if d.name == h and hasattr(d, "title"):
header[i] = d.title
rows = [list(item.values()) for item in data]
for row in rows:
for i, value in enumerate(row):
if isinstance(value, str):
row[i] = self.remove_tags(value)
elif isinstance(value, datetime):
is_aware_utc = value.tzinfo is not None \
and value.tzinfo.utcoffset(value) is not None
if is_aware_utc:
value = value.astimezone().replace(tzinfo=None)
row[i] = value
title = hasattr(d, "title") and d.title or d.name
values = hasattr(d, "widget") \
and isinstance(d.widget , (widget.SelectWidget, widget.Select2Widget)) \
and d.widget.values or None
selects[d.name] = {"title": title,
"values": values,
"visible": hasattr(d, "visible") and d.visible or None}
header = list(data[0].keys())
for i, h in enumerate(header):
header[i] = selects[h]["title"]
rows = []
for d in data:
for k, v in d.items():
if selects[k]["values"]:
select = isinstance(selects[k]["values"], dict) \
and selects[k]["values"].items() or dict(selects[k]["values"])
d[k] = select.get(v,v)
row = list(d.values())
rows.append(row)
# for i, h in enumerate(header):
# for d in list_schema:
# if d.name == h and hasattr(d, "title"):
# header[i] = d.title
# if hasattr(d, "widget") and isinstance(d.widget , (widget.SelectWidget, widget.Select2Widget)):
# selects[d.name] = d.widget.values
# rows = [list(item.values()) for item in data]
# for row in rows:
# for i, value in enumerate(row):
# if isinstance(value, str):
# row[i] = self.remove_tags(value)
# elif isinstance(value, datetime):
# is_aware_utc = value.tzinfo is not None \
# and value.tzinfo.utcoffset(value) is not None
# if is_aware_utc:
# value = value.astimezone().replace(tzinfo=None)
# row[i] = value
value = {
'header': header,
......
......@@ -40,6 +40,7 @@ dependencies = [
'zope.sqlalchemy',
'websockets',
"asyncio",
"pdfkit",
]
requires-python = '>= 3.8'
authors = [
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!