Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
aa.gusti
/
opensipkd-base
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 05cbbc00
authored
Jul 23, 2026
by
aa.gustiana@gmail.com
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
feat: implement SearchMethods enum and enhance data export functionality
1 parent
dc7ed464
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
67 additions
and
15 deletions
opensipkd/base/views/base_views.py
opensipkd/base/views/base_views.py
View file @
05cbbc0
...
...
@@ -30,9 +30,24 @@ 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 + '%'),
...
...
@@ -725,23 +740,60 @@ 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
,
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment