log_app.py
3.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import json
import colander
from datatables import ColumnDT
from deform import Form, widget
from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config
from opensipkd.base import DBSession
from opensipkd.base.models.handlers import Log
from opensipkd.base.views import BaseView, DataTables
class AddSchema(colander.Schema):
created_at = colander.SchemaNode(
colander.DateTime())
logger = colander.SchemaNode(
colander.String())
level = colander.SchemaNode(
colander.String())
trace = colander.SchemaNode(
colander.String(),
missing=colander.drop)
msg = colander.SchemaNode(
colander.String(),
widget=widget.TextAreaWidget(rows=10,),
missing=colander.drop)
class EditSchema(AddSchema):
id = colander.SchemaNode(colander.String(),
missing=colander.drop,
widget=widget.HiddenWidget(),
)
class Views(BaseView):
@view_config(route_name='log', renderer='templates/list.pt',
permission='log')
def view_list(self):
url = "log"
cols = [
{'title': "ID", 'data': "id"},
{'title': "Date/Time", 'data': "created_at", 'width': "150"},
{'title': "Logger", 'data': "logger", 'width': "50"},
# {'title': "Trace", 'data': "trace", 'width': "50"},
{'title': "Level", 'data': "level", 'width': "50"},
{'title': "Message", 'data': "msg"},
]
col_defs = [{
"searchable": False,
"visible": False,
"targets": [0]
}]
buttons = "btn_view"
return dict(cols=cols, url=url, col_defs=json.dumps(col_defs),
buttons=buttons)
##########
# Action #
##########
@view_config(route_name='log-act', renderer='json_rpc',
permission='log')
def view_act(self):
request = self.req
url_dict = request.matchdict
if url_dict['act'] == 'grid':
columns = [
ColumnDT(Log.id, mData='id'),
ColumnDT(Log.logger, mData='logger'),
ColumnDT(Log.level, mData='level'),
# ColumnDT(Log.trace, mData='trace'),
ColumnDT(Log.msg, mData='msg'),
ColumnDT(Log.created_at, mData='created_at', search_method='date'),
]
query = DBSession.query().select_from(Log)
rowTable = DataTables(request.GET, query, columns)
return rowTable.output_result()
@view_config(route_name='log-view', renderer='templates/form_input.pt',
permission='log')
def view_view(self):
request = self.req
q = self.query_id()
row = q.first()
if not row:
return self.id_not_found()
form = self.get_form(EditSchema, buttons=("Tutup",))
if request.POST:
return self.route_list()
values = row.to_dict()
form.set_appstruct(values)
return dict(form=form.render(readonly=True), scripts="")
def query_id(self):
request = self.req
return DBSession.query(Log).filter_by(id=request.matchdict['id'])
def id_not_found(self):
request = self.req
msg = 'BillerModel ID %s Tidak Ditemukan.' % request.matchdict['id']
request.session.flash(msg, 'error')
return self.route_list()
def route_list(self):
request = self.req
return HTTPFound(location=request.route_url('log'))
def get_form(self, class_form, row=None, buttons=('simpan', 'batal')):
request = self.req
schema = class_form(validator=self.form_validator)
schema = schema.bind()
schema.request = request
if row:
schema.deserialize(row)
return Form(schema, buttons=buttons)
def form_validator(self, form, value):
pass