Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
flask-admin
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Python-Dev
flask-admin
Commits
2f272f28
Commit
2f272f28
authored
Dec 16, 2014
by
Serge S. Koval
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Made all type filters case-insensitive for all backends
parent
8d539f81
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
189 additions
and
182 deletions
+189
-182
filters.py
flask_admin/contrib/mongoengine/filters.py
+39
-37
filters.py
flask_admin/contrib/peewee/filters.py
+62
-60
filters.py
flask_admin/contrib/sqla/filters.py
+63
-60
filters.py
flask_admin/model/filters.py
+25
-25
No files found.
flask_admin/contrib/mongoengine/filters.py
View file @
2f272f28
...
@@ -92,10 +92,10 @@ class FilterEmpty(BaseMongoEngineFilter, filters.BaseBooleanFilter):
...
@@ -92,10 +92,10 @@ class FilterEmpty(BaseMongoEngineFilter, filters.BaseBooleanFilter):
else
:
else
:
flt
=
{
'
%
s__ne'
%
self
.
column
.
name
:
None
}
flt
=
{
'
%
s__ne'
%
self
.
column
.
name
:
None
}
return
query
.
filter
(
**
flt
)
return
query
.
filter
(
**
flt
)
def
operation
(
self
):
def
operation
(
self
):
return
lazy_gettext
(
'empty'
)
return
lazy_gettext
(
'empty'
)
class
FilterInList
(
BaseMongoEngineFilter
):
class
FilterInList
(
BaseMongoEngineFilter
):
def
__init__
(
self
,
column
,
name
,
options
=
None
,
data_type
=
None
):
def
__init__
(
self
,
column
,
name
,
options
=
None
,
data_type
=
None
):
...
@@ -103,23 +103,23 @@ class FilterInList(BaseMongoEngineFilter):
...
@@ -103,23 +103,23 @@ class FilterInList(BaseMongoEngineFilter):
def
clean
(
self
,
value
):
def
clean
(
self
,
value
):
return
[
v
.
strip
()
for
v
in
value
.
split
(
','
)
if
v
.
strip
()]
return
[
v
.
strip
()
for
v
in
value
.
split
(
','
)
if
v
.
strip
()]
def
apply
(
self
,
query
,
value
):
def
apply
(
self
,
query
,
value
):
flt
=
{
'
%
s__in'
%
self
.
column
.
name
:
value
}
flt
=
{
'
%
s__in'
%
self
.
column
.
name
:
value
}
return
query
.
filter
(
**
flt
)
return
query
.
filter
(
**
flt
)
def
operation
(
self
):
def
operation
(
self
):
return
lazy_gettext
(
'in list'
)
return
lazy_gettext
(
'in list'
)
class
FilterNotInList
(
FilterInList
):
class
FilterNotInList
(
FilterInList
):
def
apply
(
self
,
query
,
value
):
def
apply
(
self
,
query
,
value
):
flt
=
{
'
%
s__nin'
%
self
.
column
.
name
:
value
}
flt
=
{
'
%
s__nin'
%
self
.
column
.
name
:
value
}
return
query
.
filter
(
**
flt
)
return
query
.
filter
(
**
flt
)
def
operation
(
self
):
def
operation
(
self
):
return
lazy_gettext
(
'not in list'
)
return
lazy_gettext
(
'not in list'
)
# Customized type filters
# Customized type filters
class
BooleanEqualFilter
(
FilterEqual
,
filters
.
BaseBooleanFilter
):
class
BooleanEqualFilter
(
FilterEqual
,
filters
.
BaseBooleanFilter
):
...
@@ -132,95 +132,95 @@ class BooleanNotEqualFilter(FilterNotEqual, filters.BaseBooleanFilter):
...
@@ -132,95 +132,95 @@ class BooleanNotEqualFilter(FilterNotEqual, filters.BaseBooleanFilter):
def
apply
(
self
,
query
,
value
):
def
apply
(
self
,
query
,
value
):
flt
=
{
'
%
s'
%
self
.
column
.
name
:
value
!=
'1'
}
flt
=
{
'
%
s'
%
self
.
column
.
name
:
value
!=
'1'
}
return
query
.
filter
(
**
flt
)
return
query
.
filter
(
**
flt
)
class
IntEqualFilter
(
FilterEqual
,
filters
.
BaseIntFilter
):
class
IntEqualFilter
(
FilterEqual
,
filters
.
BaseIntFilter
):
pass
pass
class
IntNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseIntFilter
):
class
IntNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseIntFilter
):
pass
pass
class
IntGreaterFilter
(
FilterGreater
,
filters
.
BaseIntFilter
):
class
IntGreaterFilter
(
FilterGreater
,
filters
.
BaseIntFilter
):
pass
pass
class
IntSmallerFilter
(
FilterSmaller
,
filters
.
BaseIntFilter
):
class
IntSmallerFilter
(
FilterSmaller
,
filters
.
BaseIntFilter
):
pass
pass
class
IntInListFilter
(
filters
.
BaseIntListFilter
,
FilterInList
):
class
IntInListFilter
(
filters
.
BaseIntListFilter
,
FilterInList
):
pass
pass
class
IntNotInListFilter
(
filters
.
BaseIntListFilter
,
FilterNotInList
):
class
IntNotInListFilter
(
filters
.
BaseIntListFilter
,
FilterNotInList
):
pass
pass
class
FloatEqualFilter
(
FilterEqual
,
filters
.
BaseFloatFilter
):
class
FloatEqualFilter
(
FilterEqual
,
filters
.
BaseFloatFilter
):
pass
pass
class
FloatNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseFloatFilter
):
class
FloatNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseFloatFilter
):
pass
pass
class
FloatGreaterFilter
(
FilterGreater
,
filters
.
BaseFloatFilter
):
class
FloatGreaterFilter
(
FilterGreater
,
filters
.
BaseFloatFilter
):
pass
pass
class
FloatSmallerFilter
(
FilterSmaller
,
filters
.
BaseFloatFilter
):
class
FloatSmallerFilter
(
FilterSmaller
,
filters
.
BaseFloatFilter
):
pass
pass
class
FloatInListFilter
(
filters
.
BaseFloatListFilter
,
FilterInList
):
class
FloatInListFilter
(
filters
.
BaseFloatListFilter
,
FilterInList
):
pass
pass
class
FloatNotInListFilter
(
filters
.
BaseFloatListFilter
,
FilterNotInList
):
class
FloatNotInListFilter
(
filters
.
BaseFloatListFilter
,
FilterNotInList
):
pass
pass
class
DateTimeEqualFilter
(
FilterEqual
,
filters
.
BaseDateTimeFilter
):
class
DateTimeEqualFilter
(
FilterEqual
,
filters
.
BaseDateTimeFilter
):
pass
pass
class
DateTimeNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseDateTimeFilter
):
class
DateTimeNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseDateTimeFilter
):
pass
pass
class
DateTimeGreaterFilter
(
FilterGreater
,
filters
.
BaseDateTimeFilter
):
class
DateTimeGreaterFilter
(
FilterGreater
,
filters
.
BaseDateTimeFilter
):
pass
pass
class
DateTimeSmallerFilter
(
FilterSmaller
,
filters
.
BaseDateTimeFilter
):
class
DateTimeSmallerFilter
(
FilterSmaller
,
filters
.
BaseDateTimeFilter
):
pass
pass
class
DateTimeBetweenFilter
(
BaseMongoEngineFilter
,
filters
.
BaseDateTimeBetweenFilter
):
class
DateTimeBetweenFilter
(
BaseMongoEngineFilter
,
filters
.
BaseDateTimeBetweenFilter
):
def
__init__
(
self
,
column
,
name
,
options
=
None
,
data_type
=
None
):
def
__init__
(
self
,
column
,
name
,
options
=
None
,
data_type
=
None
):
super
(
DateTimeBetweenFilter
,
self
)
.
__init__
(
column
,
super
(
DateTimeBetweenFilter
,
self
)
.
__init__
(
column
,
name
,
name
,
options
,
options
,
data_type
=
'datetimerangepicker'
)
data_type
=
'datetimerangepicker'
)
def
apply
(
self
,
query
,
value
):
def
apply
(
self
,
query
,
value
):
start
,
end
=
value
start
,
end
=
value
flt
=
{
'
%
s__gte'
%
self
.
column
.
name
:
start
,
'
%
s__lte'
%
self
.
column
.
name
:
end
}
flt
=
{
'
%
s__gte'
%
self
.
column
.
name
:
start
,
'
%
s__lte'
%
self
.
column
.
name
:
end
}
return
query
.
filter
(
**
flt
)
return
query
.
filter
(
**
flt
)
class
DateTimeNotBetweenFilter
(
DateTimeBetweenFilter
):
class
DateTimeNotBetweenFilter
(
DateTimeBetweenFilter
):
def
apply
(
self
,
query
,
value
):
def
apply
(
self
,
query
,
value
):
start
,
end
=
value
start
,
end
=
value
return
query
.
filter
(
Q
(
**
{
'
%
s__not__gte'
%
self
.
column
.
name
:
start
})
|
return
query
.
filter
(
Q
(
**
{
'
%
s__not__gte'
%
self
.
column
.
name
:
start
})
|
Q
(
**
{
'
%
s__not__lte'
%
self
.
column
.
name
:
end
}))
Q
(
**
{
'
%
s__not__lte'
%
self
.
column
.
name
:
end
}))
def
operation
(
self
):
def
operation
(
self
):
return
lazy_gettext
(
'not between'
)
return
lazy_gettext
(
'not between'
)
# Base peewee filter field converter
# Base peewee filter field converter
class
FilterConverter
(
filters
.
BaseFilterConverter
):
class
FilterConverter
(
filters
.
BaseFilterConverter
):
strings
=
(
FilterEqual
,
FilterNotEqual
,
FilterLike
,
FilterNotLike
,
strings
=
(
FilterEqual
,
FilterNotEqual
,
FilterLike
,
FilterNotLike
,
...
@@ -229,17 +229,19 @@ class FilterConverter(filters.BaseFilterConverter):
...
@@ -229,17 +229,19 @@ class FilterConverter(filters.BaseFilterConverter):
IntSmallerFilter
,
FilterEmpty
,
IntInListFilter
,
IntSmallerFilter
,
FilterEmpty
,
IntInListFilter
,
IntNotInListFilter
)
IntNotInListFilter
)
float_filters
=
(
FloatEqualFilter
,
FloatNotEqualFilter
,
FloatGreaterFilter
,
float_filters
=
(
FloatEqualFilter
,
FloatNotEqualFilter
,
FloatGreaterFilter
,
FloatSmallerFilter
,
FilterEmpty
,
FloatInListFilter
,
FloatSmallerFilter
,
FilterEmpty
,
FloatInListFilter
,
FloatNotInListFilter
)
FloatNotInListFilter
)
bool_filters
=
(
BooleanEqualFilter
,
BooleanNotEqualFilter
)
bool_filters
=
(
BooleanEqualFilter
,
BooleanNotEqualFilter
)
datetime_filters
=
(
DateTimeEqualFilter
,
DateTimeNotEqualFilter
,
datetime_filters
=
(
DateTimeEqualFilter
,
DateTimeNotEqualFilter
,
DateTimeGreaterFilter
,
DateTimeSmallerFilter
,
DateTimeGreaterFilter
,
DateTimeSmallerFilter
,
DateTimeBetweenFilter
,
DateTimeNotBetweenFilter
,
DateTimeBetweenFilter
,
DateTimeNotBetweenFilter
,
FilterEmpty
)
FilterEmpty
)
def
convert
(
self
,
type_name
,
column
,
name
):
def
convert
(
self
,
type_name
,
column
,
name
):
if
type_name
in
self
.
converters
:
filter_name
=
type_name
.
lower
()
return
self
.
converters
[
type_name
](
column
,
name
)
if
filter_name
in
self
.
converters
:
return
self
.
converters
[
filter_name
](
column
,
name
)
return
None
return
None
...
@@ -254,11 +256,11 @@ class FilterConverter(filters.BaseFilterConverter):
...
@@ -254,11 +256,11 @@ class FilterConverter(filters.BaseFilterConverter):
@
filters
.
convert
(
'IntField'
,
'LongField'
)
@
filters
.
convert
(
'IntField'
,
'LongField'
)
def
conv_int
(
self
,
column
,
name
):
def
conv_int
(
self
,
column
,
name
):
return
[
f
(
column
,
name
)
for
f
in
self
.
int_filters
]
return
[
f
(
column
,
name
)
for
f
in
self
.
int_filters
]
@
filters
.
convert
(
'DecimalField'
,
'FloatField'
)
@
filters
.
convert
(
'DecimalField'
,
'FloatField'
)
def
conv_float
(
self
,
column
,
name
):
def
conv_float
(
self
,
column
,
name
):
return
[
f
(
column
,
name
)
for
f
in
self
.
float_filters
]
return
[
f
(
column
,
name
)
for
f
in
self
.
float_filters
]
@
filters
.
convert
(
'DateTimeField'
,
'ComplexDateTimeField'
)
@
filters
.
convert
(
'DateTimeField'
,
'ComplexDateTimeField'
)
def
conv_datetime
(
self
,
column
,
name
):
def
conv_datetime
(
self
,
column
,
name
):
return
[
f
(
column
,
name
)
for
f
in
self
.
datetime_filters
]
return
[
f
(
column
,
name
)
for
f
in
self
.
datetime_filters
]
flask_admin/contrib/peewee/filters.py
View file @
2f272f28
...
@@ -89,7 +89,7 @@ class FilterEmpty(BasePeeweeFilter, filters.BaseBooleanFilter):
...
@@ -89,7 +89,7 @@ class FilterEmpty(BasePeeweeFilter, filters.BaseBooleanFilter):
def
operation
(
self
):
def
operation
(
self
):
return
lazy_gettext
(
'empty'
)
return
lazy_gettext
(
'empty'
)
class
FilterInList
(
BasePeeweeFilter
):
class
FilterInList
(
BasePeeweeFilter
):
def
__init__
(
self
,
column
,
name
,
options
=
None
,
data_type
=
None
):
def
__init__
(
self
,
column
,
name
,
options
=
None
,
data_type
=
None
):
...
@@ -97,144 +97,144 @@ class FilterInList(BasePeeweeFilter):
...
@@ -97,144 +97,144 @@ class FilterInList(BasePeeweeFilter):
def
clean
(
self
,
value
):
def
clean
(
self
,
value
):
return
[
v
.
strip
()
for
v
in
value
.
split
(
','
)
if
v
.
strip
()]
return
[
v
.
strip
()
for
v
in
value
.
split
(
','
)
if
v
.
strip
()]
def
apply
(
self
,
query
,
value
):
def
apply
(
self
,
query
,
value
):
return
query
.
filter
(
self
.
column
<<
value
)
return
query
.
filter
(
self
.
column
<<
value
)
def
operation
(
self
):
def
operation
(
self
):
return
lazy_gettext
(
'in list'
)
return
lazy_gettext
(
'in list'
)
class
FilterNotInList
(
FilterInList
):
class
FilterNotInList
(
FilterInList
):
def
apply
(
self
,
query
,
value
):
def
apply
(
self
,
query
,
value
):
# NOT IN can exclude NULL values, so "or_ == None" needed to be added
# NOT IN can exclude NULL values, so "or_ == None" needed to be added
return
query
.
filter
(
~
(
self
.
column
<<
value
)
|
(
self
.
column
>>
None
))
return
query
.
filter
(
~
(
self
.
column
<<
value
)
|
(
self
.
column
>>
None
))
def
operation
(
self
):
def
operation
(
self
):
return
lazy_gettext
(
'not in list'
)
return
lazy_gettext
(
'not in list'
)
# Customized type filters
# Customized type filters
class
BooleanEqualFilter
(
FilterEqual
,
filters
.
BaseBooleanFilter
):
class
BooleanEqualFilter
(
FilterEqual
,
filters
.
BaseBooleanFilter
):
pass
pass
class
BooleanNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseBooleanFilter
):
class
BooleanNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseBooleanFilter
):
pass
pass
class
IntEqualFilter
(
FilterEqual
,
filters
.
BaseIntFilter
):
class
IntEqualFilter
(
FilterEqual
,
filters
.
BaseIntFilter
):
pass
pass
class
IntNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseIntFilter
):
class
IntNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseIntFilter
):
pass
pass
class
IntGreaterFilter
(
FilterGreater
,
filters
.
BaseIntFilter
):
class
IntGreaterFilter
(
FilterGreater
,
filters
.
BaseIntFilter
):
pass
pass
class
IntSmallerFilter
(
FilterSmaller
,
filters
.
BaseIntFilter
):
class
IntSmallerFilter
(
FilterSmaller
,
filters
.
BaseIntFilter
):
pass
pass
class
IntInListFilter
(
filters
.
BaseIntListFilter
,
FilterInList
):
class
IntInListFilter
(
filters
.
BaseIntListFilter
,
FilterInList
):
pass
pass
class
IntNotInListFilter
(
filters
.
BaseIntListFilter
,
FilterNotInList
):
class
IntNotInListFilter
(
filters
.
BaseIntListFilter
,
FilterNotInList
):
pass
pass
class
FloatEqualFilter
(
FilterEqual
,
filters
.
BaseFloatFilter
):
class
FloatEqualFilter
(
FilterEqual
,
filters
.
BaseFloatFilter
):
pass
pass
class
FloatNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseFloatFilter
):
class
FloatNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseFloatFilter
):
pass
pass
class
FloatGreaterFilter
(
FilterGreater
,
filters
.
BaseFloatFilter
):
class
FloatGreaterFilter
(
FilterGreater
,
filters
.
BaseFloatFilter
):
pass
pass
class
FloatSmallerFilter
(
FilterSmaller
,
filters
.
BaseFloatFilter
):
class
FloatSmallerFilter
(
FilterSmaller
,
filters
.
BaseFloatFilter
):
pass
pass
class
FloatInListFilter
(
filters
.
BaseFloatListFilter
,
FilterInList
):
class
FloatInListFilter
(
filters
.
BaseFloatListFilter
,
FilterInList
):
pass
pass
class
FloatNotInListFilter
(
filters
.
BaseFloatListFilter
,
FilterNotInList
):
class
FloatNotInListFilter
(
filters
.
BaseFloatListFilter
,
FilterNotInList
):
pass
pass
class
DateEqualFilter
(
FilterEqual
,
filters
.
BaseDateFilter
):
class
DateEqualFilter
(
FilterEqual
,
filters
.
BaseDateFilter
):
pass
pass
class
DateNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseDateFilter
):
class
DateNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseDateFilter
):
pass
pass
class
DateGreaterFilter
(
FilterGreater
,
filters
.
BaseDateFilter
):
class
DateGreaterFilter
(
FilterGreater
,
filters
.
BaseDateFilter
):
pass
pass
class
DateSmallerFilter
(
FilterSmaller
,
filters
.
BaseDateFilter
):
class
DateSmallerFilter
(
FilterSmaller
,
filters
.
BaseDateFilter
):
pass
pass
class
DateBetweenFilter
(
BasePeeweeFilter
,
filters
.
BaseDateBetweenFilter
):
class
DateBetweenFilter
(
BasePeeweeFilter
,
filters
.
BaseDateBetweenFilter
):
def
__init__
(
self
,
column
,
name
,
options
=
None
,
data_type
=
None
):
def
__init__
(
self
,
column
,
name
,
options
=
None
,
data_type
=
None
):
super
(
DateBetweenFilter
,
self
)
.
__init__
(
column
,
super
(
DateBetweenFilter
,
self
)
.
__init__
(
column
,
name
,
name
,
options
,
options
,
data_type
=
'daterangepicker'
)
data_type
=
'daterangepicker'
)
def
apply
(
self
,
query
,
value
):
def
apply
(
self
,
query
,
value
):
start
,
end
=
value
start
,
end
=
value
return
query
.
filter
(
self
.
column
.
between
(
start
,
end
))
return
query
.
filter
(
self
.
column
.
between
(
start
,
end
))
class
DateNotBetweenFilter
(
DateBetweenFilter
):
class
DateNotBetweenFilter
(
DateBetweenFilter
):
def
apply
(
self
,
query
,
value
):
def
apply
(
self
,
query
,
value
):
start
,
end
=
value
start
,
end
=
value
return
query
.
filter
(
~
(
self
.
column
.
between
(
start
,
end
)))
return
query
.
filter
(
~
(
self
.
column
.
between
(
start
,
end
)))
def
operation
(
self
):
def
operation
(
self
):
return
lazy_gettext
(
'not between'
)
return
lazy_gettext
(
'not between'
)
class
DateTimeEqualFilter
(
FilterEqual
,
filters
.
BaseDateTimeFilter
):
class
DateTimeEqualFilter
(
FilterEqual
,
filters
.
BaseDateTimeFilter
):
pass
pass
class
DateTimeNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseDateTimeFilter
):
class
DateTimeNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseDateTimeFilter
):
pass
pass
class
DateTimeGreaterFilter
(
FilterGreater
,
filters
.
BaseDateTimeFilter
):
class
DateTimeGreaterFilter
(
FilterGreater
,
filters
.
BaseDateTimeFilter
):
pass
pass
class
DateTimeSmallerFilter
(
FilterSmaller
,
filters
.
BaseDateTimeFilter
):
class
DateTimeSmallerFilter
(
FilterSmaller
,
filters
.
BaseDateTimeFilter
):
pass
pass
class
DateTimeBetweenFilter
(
BasePeeweeFilter
,
filters
.
BaseDateTimeBetweenFilter
):
class
DateTimeBetweenFilter
(
BasePeeweeFilter
,
filters
.
BaseDateTimeBetweenFilter
):
def
__init__
(
self
,
column
,
name
,
options
=
None
,
data_type
=
None
):
def
__init__
(
self
,
column
,
name
,
options
=
None
,
data_type
=
None
):
super
(
DateTimeBetweenFilter
,
self
)
.
__init__
(
column
,
super
(
DateTimeBetweenFilter
,
self
)
.
__init__
(
column
,
name
,
name
,
options
,
options
,
data_type
=
'datetimerangepicker'
)
data_type
=
'datetimerangepicker'
)
def
apply
(
self
,
query
,
value
):
def
apply
(
self
,
query
,
value
):
start
,
end
=
value
start
,
end
=
value
return
query
.
filter
(
self
.
column
.
between
(
start
,
end
))
return
query
.
filter
(
self
.
column
.
between
(
start
,
end
))
class
DateTimeNotBetweenFilter
(
DateTimeBetweenFilter
):
class
DateTimeNotBetweenFilter
(
DateTimeBetweenFilter
):
def
apply
(
self
,
query
,
value
):
def
apply
(
self
,
query
,
value
):
...
@@ -243,45 +243,45 @@ class DateTimeNotBetweenFilter(DateTimeBetweenFilter):
...
@@ -243,45 +243,45 @@ class DateTimeNotBetweenFilter(DateTimeBetweenFilter):
def
operation
(
self
):
def
operation
(
self
):
return
lazy_gettext
(
'not between'
)
return
lazy_gettext
(
'not between'
)
class
TimeEqualFilter
(
FilterEqual
,
filters
.
BaseTimeFilter
):
class
TimeEqualFilter
(
FilterEqual
,
filters
.
BaseTimeFilter
):
pass
pass
class
TimeNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseTimeFilter
):
class
TimeNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseTimeFilter
):
pass
pass
class
TimeGreaterFilter
(
FilterGreater
,
filters
.
BaseTimeFilter
):
class
TimeGreaterFilter
(
FilterGreater
,
filters
.
BaseTimeFilter
):
pass
pass
class
TimeSmallerFilter
(
FilterSmaller
,
filters
.
BaseTimeFilter
):
class
TimeSmallerFilter
(
FilterSmaller
,
filters
.
BaseTimeFilter
):
pass
pass
class
TimeBetweenFilter
(
BasePeeweeFilter
,
filters
.
BaseTimeBetweenFilter
):
class
TimeBetweenFilter
(
BasePeeweeFilter
,
filters
.
BaseTimeBetweenFilter
):
def
__init__
(
self
,
column
,
name
,
options
=
None
,
data_type
=
None
):
def
__init__
(
self
,
column
,
name
,
options
=
None
,
data_type
=
None
):
super
(
TimeBetweenFilter
,
self
)
.
__init__
(
column
,
super
(
TimeBetweenFilter
,
self
)
.
__init__
(
column
,
name
,
name
,
options
,
options
,
data_type
=
'timerangepicker'
)
data_type
=
'timerangepicker'
)
def
apply
(
self
,
query
,
value
):
def
apply
(
self
,
query
,
value
):
start
,
end
=
value
start
,
end
=
value
return
query
.
filter
(
self
.
column
.
between
(
start
,
end
))
return
query
.
filter
(
self
.
column
.
between
(
start
,
end
))
class
TimeNotBetweenFilter
(
TimeBetweenFilter
):
class
TimeNotBetweenFilter
(
TimeBetweenFilter
):
def
apply
(
self
,
query
,
value
):
def
apply
(
self
,
query
,
value
):
start
,
end
=
value
start
,
end
=
value
return
query
.
filter
(
~
(
self
.
column
.
between
(
start
,
end
)))
return
query
.
filter
(
~
(
self
.
column
.
between
(
start
,
end
)))
def
operation
(
self
):
def
operation
(
self
):
return
lazy_gettext
(
'not between'
)
return
lazy_gettext
(
'not between'
)
# Base peewee filter field converter
# Base peewee filter field converter
class
FilterConverter
(
filters
.
BaseFilterConverter
):
class
FilterConverter
(
filters
.
BaseFilterConverter
):
strings
=
(
FilterEqual
,
FilterNotEqual
,
FilterLike
,
FilterNotLike
,
strings
=
(
FilterEqual
,
FilterNotEqual
,
FilterLike
,
FilterNotLike
,
...
@@ -290,23 +290,25 @@ class FilterConverter(filters.BaseFilterConverter):
...
@@ -290,23 +290,25 @@ class FilterConverter(filters.BaseFilterConverter):
IntSmallerFilter
,
FilterEmpty
,
IntInListFilter
,
IntSmallerFilter
,
FilterEmpty
,
IntInListFilter
,
IntNotInListFilter
)
IntNotInListFilter
)
float_filters
=
(
FloatEqualFilter
,
FloatNotEqualFilter
,
FloatGreaterFilter
,
float_filters
=
(
FloatEqualFilter
,
FloatNotEqualFilter
,
FloatGreaterFilter
,
FloatSmallerFilter
,
FilterEmpty
,
FloatInListFilter
,
FloatSmallerFilter
,
FilterEmpty
,
FloatInListFilter
,
FloatNotInListFilter
)
FloatNotInListFilter
)
bool_filters
=
(
BooleanEqualFilter
,
BooleanNotEqualFilter
)
bool_filters
=
(
BooleanEqualFilter
,
BooleanNotEqualFilter
)
date_filters
=
(
DateEqualFilter
,
DateNotEqualFilter
,
DateGreaterFilter
,
date_filters
=
(
DateEqualFilter
,
DateNotEqualFilter
,
DateGreaterFilter
,
DateSmallerFilter
,
DateBetweenFilter
,
DateNotBetweenFilter
,
DateSmallerFilter
,
DateBetweenFilter
,
DateNotBetweenFilter
,
FilterEmpty
)
FilterEmpty
)
datetime_filters
=
(
DateTimeEqualFilter
,
DateTimeNotEqualFilter
,
datetime_filters
=
(
DateTimeEqualFilter
,
DateTimeNotEqualFilter
,
DateTimeGreaterFilter
,
DateTimeSmallerFilter
,
DateTimeGreaterFilter
,
DateTimeSmallerFilter
,
DateTimeBetweenFilter
,
DateTimeNotBetweenFilter
,
DateTimeBetweenFilter
,
DateTimeNotBetweenFilter
,
FilterEmpty
)
FilterEmpty
)
time_filters
=
(
TimeEqualFilter
,
TimeNotEqualFilter
,
TimeGreaterFilter
,
time_filters
=
(
TimeEqualFilter
,
TimeNotEqualFilter
,
TimeGreaterFilter
,
TimeSmallerFilter
,
TimeBetweenFilter
,
TimeNotBetweenFilter
,
TimeSmallerFilter
,
TimeBetweenFilter
,
TimeNotBetweenFilter
,
FilterEmpty
)
FilterEmpty
)
def
convert
(
self
,
type_name
,
column
,
name
):
def
convert
(
self
,
type_name
,
column
,
name
):
if
type_name
in
self
.
converters
:
filter_name
=
type_name
.
lower
()
return
self
.
converters
[
type_name
](
column
,
name
)
if
filter_name
in
self
.
converters
:
return
self
.
converters
[
filter_name
](
column
,
name
)
return
None
return
None
...
@@ -321,11 +323,11 @@ class FilterConverter(filters.BaseFilterConverter):
...
@@ -321,11 +323,11 @@ class FilterConverter(filters.BaseFilterConverter):
@
filters
.
convert
(
'IntegerField'
,
'BigIntegerField'
)
@
filters
.
convert
(
'IntegerField'
,
'BigIntegerField'
)
def
conv_int
(
self
,
column
,
name
):
def
conv_int
(
self
,
column
,
name
):
return
[
f
(
column
,
name
)
for
f
in
self
.
int_filters
]
return
[
f
(
column
,
name
)
for
f
in
self
.
int_filters
]
@
filters
.
convert
(
'DecimalField'
,
'FloatField'
,
'DoubleField'
)
@
filters
.
convert
(
'DecimalField'
,
'FloatField'
,
'DoubleField'
)
def
conv_float
(
self
,
column
,
name
):
def
conv_float
(
self
,
column
,
name
):
return
[
f
(
column
,
name
)
for
f
in
self
.
float_filters
]
return
[
f
(
column
,
name
)
for
f
in
self
.
float_filters
]
@
filters
.
convert
(
'DateField'
)
@
filters
.
convert
(
'DateField'
)
def
conv_date
(
self
,
column
,
name
):
def
conv_date
(
self
,
column
,
name
):
return
[
f
(
column
,
name
)
for
f
in
self
.
date_filters
]
return
[
f
(
column
,
name
)
for
f
in
self
.
date_filters
]
...
@@ -333,7 +335,7 @@ class FilterConverter(filters.BaseFilterConverter):
...
@@ -333,7 +335,7 @@ class FilterConverter(filters.BaseFilterConverter):
@
filters
.
convert
(
'DateTimeField'
)
@
filters
.
convert
(
'DateTimeField'
)
def
conv_datetime
(
self
,
column
,
name
):
def
conv_datetime
(
self
,
column
,
name
):
return
[
f
(
column
,
name
)
for
f
in
self
.
datetime_filters
]
return
[
f
(
column
,
name
)
for
f
in
self
.
datetime_filters
]
@
filters
.
convert
(
'TimeField'
)
@
filters
.
convert
(
'TimeField'
)
def
conv_time
(
self
,
column
,
name
):
def
conv_time
(
self
,
column
,
name
):
return
[
f
(
column
,
name
)
for
f
in
self
.
time_filters
]
return
[
f
(
column
,
name
)
for
f
in
self
.
time_filters
]
\ No newline at end of file
flask_admin/contrib/sqla/filters.py
View file @
2f272f28
...
@@ -89,7 +89,7 @@ class FilterEmpty(BaseSQLAFilter, filters.BaseBooleanFilter):
...
@@ -89,7 +89,7 @@ class FilterEmpty(BaseSQLAFilter, filters.BaseBooleanFilter):
def
operation
(
self
):
def
operation
(
self
):
return
lazy_gettext
(
'empty'
)
return
lazy_gettext
(
'empty'
)
class
FilterInList
(
BaseSQLAFilter
):
class
FilterInList
(
BaseSQLAFilter
):
def
__init__
(
self
,
column
,
name
,
options
=
None
,
data_type
=
None
):
def
__init__
(
self
,
column
,
name
,
options
=
None
,
data_type
=
None
):
...
@@ -97,145 +97,145 @@ class FilterInList(BaseSQLAFilter):
...
@@ -97,145 +97,145 @@ class FilterInList(BaseSQLAFilter):
def
clean
(
self
,
value
):
def
clean
(
self
,
value
):
return
[
v
.
strip
()
for
v
in
value
.
split
(
','
)
if
v
.
strip
()]
return
[
v
.
strip
()
for
v
in
value
.
split
(
','
)
if
v
.
strip
()]
def
apply
(
self
,
query
,
value
):
def
apply
(
self
,
query
,
value
):
return
query
.
filter
(
self
.
column
.
in_
(
value
))
return
query
.
filter
(
self
.
column
.
in_
(
value
))
def
operation
(
self
):
def
operation
(
self
):
return
lazy_gettext
(
'in list'
)
return
lazy_gettext
(
'in list'
)
class
FilterNotInList
(
FilterInList
):
class
FilterNotInList
(
FilterInList
):
def
apply
(
self
,
query
,
value
):
def
apply
(
self
,
query
,
value
):
# NOT IN can exclude NULL values, so "or_ == None" needed to be added
# NOT IN can exclude NULL values, so "or_ == None" needed to be added
return
query
.
filter
(
or_
(
~
self
.
column
.
in_
(
value
),
self
.
column
==
None
))
return
query
.
filter
(
or_
(
~
self
.
column
.
in_
(
value
),
self
.
column
==
None
))
def
operation
(
self
):
def
operation
(
self
):
return
lazy_gettext
(
'not in list'
)
return
lazy_gettext
(
'not in list'
)
# Customized type filters
# Customized type filters
class
BooleanEqualFilter
(
FilterEqual
,
filters
.
BaseBooleanFilter
):
class
BooleanEqualFilter
(
FilterEqual
,
filters
.
BaseBooleanFilter
):
pass
pass
class
BooleanNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseBooleanFilter
):
class
BooleanNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseBooleanFilter
):
pass
pass
class
IntEqualFilter
(
FilterEqual
,
filters
.
BaseIntFilter
):
class
IntEqualFilter
(
FilterEqual
,
filters
.
BaseIntFilter
):
pass
pass
class
IntNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseIntFilter
):
class
IntNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseIntFilter
):
pass
pass
class
IntGreaterFilter
(
FilterGreater
,
filters
.
BaseIntFilter
):
class
IntGreaterFilter
(
FilterGreater
,
filters
.
BaseIntFilter
):
pass
pass
class
IntSmallerFilter
(
FilterSmaller
,
filters
.
BaseIntFilter
):
class
IntSmallerFilter
(
FilterSmaller
,
filters
.
BaseIntFilter
):
pass
pass
class
IntInListFilter
(
filters
.
BaseIntListFilter
,
FilterInList
):
class
IntInListFilter
(
filters
.
BaseIntListFilter
,
FilterInList
):
pass
pass
class
IntNotInListFilter
(
filters
.
BaseIntListFilter
,
FilterNotInList
):
class
IntNotInListFilter
(
filters
.
BaseIntListFilter
,
FilterNotInList
):
pass
pass
class
FloatEqualFilter
(
FilterEqual
,
filters
.
BaseFloatFilter
):
class
FloatEqualFilter
(
FilterEqual
,
filters
.
BaseFloatFilter
):
pass
pass
class
FloatNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseFloatFilter
):
class
FloatNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseFloatFilter
):
pass
pass
class
FloatGreaterFilter
(
FilterGreater
,
filters
.
BaseFloatFilter
):
class
FloatGreaterFilter
(
FilterGreater
,
filters
.
BaseFloatFilter
):
pass
pass
class
FloatSmallerFilter
(
FilterSmaller
,
filters
.
BaseFloatFilter
):
class
FloatSmallerFilter
(
FilterSmaller
,
filters
.
BaseFloatFilter
):
pass
pass
class
FloatInListFilter
(
filters
.
BaseFloatListFilter
,
FilterInList
):
class
FloatInListFilter
(
filters
.
BaseFloatListFilter
,
FilterInList
):
pass
pass
class
FloatNotInListFilter
(
filters
.
BaseFloatListFilter
,
FilterNotInList
):
class
FloatNotInListFilter
(
filters
.
BaseFloatListFilter
,
FilterNotInList
):
pass
pass
class
DateEqualFilter
(
FilterEqual
,
filters
.
BaseDateFilter
):
class
DateEqualFilter
(
FilterEqual
,
filters
.
BaseDateFilter
):
pass
pass
class
DateNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseDateFilter
):
class
DateNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseDateFilter
):
pass
pass
class
DateGreaterFilter
(
FilterGreater
,
filters
.
BaseDateFilter
):
class
DateGreaterFilter
(
FilterGreater
,
filters
.
BaseDateFilter
):
pass
pass
class
DateSmallerFilter
(
FilterSmaller
,
filters
.
BaseDateFilter
):
class
DateSmallerFilter
(
FilterSmaller
,
filters
.
BaseDateFilter
):
pass
pass
class
DateBetweenFilter
(
BaseSQLAFilter
,
filters
.
BaseDateBetweenFilter
):
class
DateBetweenFilter
(
BaseSQLAFilter
,
filters
.
BaseDateBetweenFilter
):
def
__init__
(
self
,
column
,
name
,
options
=
None
,
data_type
=
None
):
def
__init__
(
self
,
column
,
name
,
options
=
None
,
data_type
=
None
):
super
(
DateBetweenFilter
,
self
)
.
__init__
(
column
,
super
(
DateBetweenFilter
,
self
)
.
__init__
(
column
,
name
,
name
,
options
,
options
,
data_type
=
'daterangepicker'
)
data_type
=
'daterangepicker'
)
def
apply
(
self
,
query
,
value
):
def
apply
(
self
,
query
,
value
):
start
,
end
=
value
start
,
end
=
value
return
query
.
filter
(
self
.
column
.
between
(
start
,
end
))
return
query
.
filter
(
self
.
column
.
between
(
start
,
end
))
class
DateNotBetweenFilter
(
DateBetweenFilter
):
class
DateNotBetweenFilter
(
DateBetweenFilter
):
def
apply
(
self
,
query
,
value
):
def
apply
(
self
,
query
,
value
):
start
,
end
=
value
start
,
end
=
value
# ~between() isn't possible until sqlalchemy 1.0.0
# ~between() isn't possible until sqlalchemy 1.0.0
return
query
.
filter
(
not_
(
self
.
column
.
between
(
start
,
end
)))
return
query
.
filter
(
not_
(
self
.
column
.
between
(
start
,
end
)))
def
operation
(
self
):
def
operation
(
self
):
return
lazy_gettext
(
'not between'
)
return
lazy_gettext
(
'not between'
)
class
DateTimeEqualFilter
(
FilterEqual
,
filters
.
BaseDateTimeFilter
):
class
DateTimeEqualFilter
(
FilterEqual
,
filters
.
BaseDateTimeFilter
):
pass
pass
class
DateTimeNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseDateTimeFilter
):
class
DateTimeNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseDateTimeFilter
):
pass
pass
class
DateTimeGreaterFilter
(
FilterGreater
,
filters
.
BaseDateTimeFilter
):
class
DateTimeGreaterFilter
(
FilterGreater
,
filters
.
BaseDateTimeFilter
):
pass
pass
class
DateTimeSmallerFilter
(
FilterSmaller
,
filters
.
BaseDateTimeFilter
):
class
DateTimeSmallerFilter
(
FilterSmaller
,
filters
.
BaseDateTimeFilter
):
pass
pass
class
DateTimeBetweenFilter
(
BaseSQLAFilter
,
filters
.
BaseDateTimeBetweenFilter
):
class
DateTimeBetweenFilter
(
BaseSQLAFilter
,
filters
.
BaseDateTimeBetweenFilter
):
def
__init__
(
self
,
column
,
name
,
options
=
None
,
data_type
=
None
):
def
__init__
(
self
,
column
,
name
,
options
=
None
,
data_type
=
None
):
super
(
DateTimeBetweenFilter
,
self
)
.
__init__
(
column
,
super
(
DateTimeBetweenFilter
,
self
)
.
__init__
(
column
,
name
,
name
,
options
,
options
,
data_type
=
'datetimerangepicker'
)
data_type
=
'datetimerangepicker'
)
def
apply
(
self
,
query
,
value
):
def
apply
(
self
,
query
,
value
):
start
,
end
=
value
start
,
end
=
value
return
query
.
filter
(
self
.
column
.
between
(
start
,
end
))
return
query
.
filter
(
self
.
column
.
between
(
start
,
end
))
class
DateTimeNotBetweenFilter
(
DateTimeBetweenFilter
):
class
DateTimeNotBetweenFilter
(
DateTimeBetweenFilter
):
def
apply
(
self
,
query
,
value
):
def
apply
(
self
,
query
,
value
):
...
@@ -244,45 +244,45 @@ class DateTimeNotBetweenFilter(DateTimeBetweenFilter):
...
@@ -244,45 +244,45 @@ class DateTimeNotBetweenFilter(DateTimeBetweenFilter):
def
operation
(
self
):
def
operation
(
self
):
return
lazy_gettext
(
'not between'
)
return
lazy_gettext
(
'not between'
)
class
TimeEqualFilter
(
FilterEqual
,
filters
.
BaseTimeFilter
):
class
TimeEqualFilter
(
FilterEqual
,
filters
.
BaseTimeFilter
):
pass
pass
class
TimeNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseTimeFilter
):
class
TimeNotEqualFilter
(
FilterNotEqual
,
filters
.
BaseTimeFilter
):
pass
pass
class
TimeGreaterFilter
(
FilterGreater
,
filters
.
BaseTimeFilter
):
class
TimeGreaterFilter
(
FilterGreater
,
filters
.
BaseTimeFilter
):
pass
pass
class
TimeSmallerFilter
(
FilterSmaller
,
filters
.
BaseTimeFilter
):
class
TimeSmallerFilter
(
FilterSmaller
,
filters
.
BaseTimeFilter
):
pass
pass
class
TimeBetweenFilter
(
BaseSQLAFilter
,
filters
.
BaseTimeBetweenFilter
):
class
TimeBetweenFilter
(
BaseSQLAFilter
,
filters
.
BaseTimeBetweenFilter
):
def
__init__
(
self
,
column
,
name
,
options
=
None
,
data_type
=
None
):
def
__init__
(
self
,
column
,
name
,
options
=
None
,
data_type
=
None
):
super
(
TimeBetweenFilter
,
self
)
.
__init__
(
column
,
super
(
TimeBetweenFilter
,
self
)
.
__init__
(
column
,
name
,
name
,
options
,
options
,
data_type
=
'timerangepicker'
)
data_type
=
'timerangepicker'
)
def
apply
(
self
,
query
,
value
):
def
apply
(
self
,
query
,
value
):
start
,
end
=
value
start
,
end
=
value
return
query
.
filter
(
self
.
column
.
between
(
start
,
end
))
return
query
.
filter
(
self
.
column
.
between
(
start
,
end
))
class
TimeNotBetweenFilter
(
TimeBetweenFilter
):
class
TimeNotBetweenFilter
(
TimeBetweenFilter
):
def
apply
(
self
,
query
,
value
):
def
apply
(
self
,
query
,
value
):
start
,
end
=
value
start
,
end
=
value
return
query
.
filter
(
not_
(
self
.
column
.
between
(
start
,
end
)))
return
query
.
filter
(
not_
(
self
.
column
.
between
(
start
,
end
)))
def
operation
(
self
):
def
operation
(
self
):
return
lazy_gettext
(
'not between'
)
return
lazy_gettext
(
'not between'
)
# Base SQLA filter field converter
# Base SQLA filter field converter
class
FilterConverter
(
filters
.
BaseFilterConverter
):
class
FilterConverter
(
filters
.
BaseFilterConverter
):
strings
=
(
FilterEqual
,
FilterNotEqual
,
FilterLike
,
FilterNotLike
,
strings
=
(
FilterEqual
,
FilterNotEqual
,
FilterLike
,
FilterNotLike
,
...
@@ -291,7 +291,7 @@ class FilterConverter(filters.BaseFilterConverter):
...
@@ -291,7 +291,7 @@ class FilterConverter(filters.BaseFilterConverter):
IntSmallerFilter
,
FilterEmpty
,
IntInListFilter
,
IntSmallerFilter
,
FilterEmpty
,
IntInListFilter
,
IntNotInListFilter
)
IntNotInListFilter
)
float_filters
=
(
FloatEqualFilter
,
FloatNotEqualFilter
,
FloatGreaterFilter
,
float_filters
=
(
FloatEqualFilter
,
FloatNotEqualFilter
,
FloatGreaterFilter
,
FloatSmallerFilter
,
FilterEmpty
,
FloatInListFilter
,
FloatSmallerFilter
,
FilterEmpty
,
FloatInListFilter
,
FloatNotInListFilter
)
FloatNotInListFilter
)
bool_filters
=
(
BooleanEqualFilter
,
BooleanNotEqualFilter
)
bool_filters
=
(
BooleanEqualFilter
,
BooleanNotEqualFilter
)
enum
=
(
FilterEqual
,
FilterNotEqual
,
FilterEmpty
,
FilterInList
,
enum
=
(
FilterEqual
,
FilterNotEqual
,
FilterEmpty
,
FilterInList
,
...
@@ -306,43 +306,46 @@ class FilterConverter(filters.BaseFilterConverter):
...
@@ -306,43 +306,46 @@ class FilterConverter(filters.BaseFilterConverter):
time_filters
=
(
TimeEqualFilter
,
TimeNotEqualFilter
,
TimeGreaterFilter
,
time_filters
=
(
TimeEqualFilter
,
TimeNotEqualFilter
,
TimeGreaterFilter
,
TimeSmallerFilter
,
TimeBetweenFilter
,
TimeNotBetweenFilter
,
TimeSmallerFilter
,
TimeBetweenFilter
,
TimeNotBetweenFilter
,
FilterEmpty
)
FilterEmpty
)
def
convert
(
self
,
type_name
,
column
,
name
,
**
kwargs
):
def
convert
(
self
,
type_name
,
column
,
name
,
**
kwargs
):
if
type_name
.
lower
()
in
self
.
converters
:
filter_name
=
type_name
.
lower
()
return
self
.
converters
[
type_name
.
lower
()](
column
,
name
,
**
kwargs
)
if
filter_name
in
self
.
converters
:
return
self
.
converters
[
filter_name
](
column
,
name
,
**
kwargs
)
return
None
return
None
@
filters
.
convert
(
'string'
,
'char'
,
'unicode'
,
'varchar'
,
'tinytext'
,
@
filters
.
convert
(
'string'
,
'char'
,
'unicode'
,
'varchar'
,
'tinytext'
,
'text'
,
'mediumtext'
,
'longtext'
,
'unicodetext'
,
'text'
,
'mediumtext'
,
'longtext'
,
'unicodetext'
,
'nchar'
,
'nvarchar'
,
'ntext'
)
'nchar'
,
'nvarchar'
,
'ntext'
)
def
conv_string
(
self
,
column
,
name
,
**
kwargs
):
def
conv_string
(
self
,
column
,
name
,
**
kwargs
):
return
[
f
(
column
,
name
,
**
kwargs
)
for
f
in
self
.
strings
]
return
[
f
(
column
,
name
,
**
kwargs
)
for
f
in
self
.
strings
]
@
filters
.
convert
(
'boolean'
,
'tinyint'
)
@
filters
.
convert
(
'boolean'
,
'tinyint'
)
def
conv_bool
(
self
,
column
,
name
,
**
kwargs
):
def
conv_bool
(
self
,
column
,
name
,
**
kwargs
):
return
[
f
(
column
,
name
,
**
kwargs
)
for
f
in
self
.
bool_filters
]
return
[
f
(
column
,
name
,
**
kwargs
)
for
f
in
self
.
bool_filters
]
@
filters
.
convert
(
'int'
,
'integer'
,
'smallinteger'
,
'smallint'
,
'numeric'
,
@
filters
.
convert
(
'int'
,
'integer'
,
'smallinteger'
,
'smallint'
,
'numeric'
,
'biginteger'
,
'bigint'
,
'mediumint'
)
'biginteger'
,
'bigint'
,
'mediumint'
)
def
conv_int
(
self
,
column
,
name
,
**
kwargs
):
def
conv_int
(
self
,
column
,
name
,
**
kwargs
):
return
[
f
(
column
,
name
,
**
kwargs
)
for
f
in
self
.
int_filters
]
return
[
f
(
column
,
name
,
**
kwargs
)
for
f
in
self
.
int_filters
]
@
filters
.
convert
(
'float'
,
'real'
,
'decimal'
,
'double_precision'
,
'double'
)
@
filters
.
convert
(
'float'
,
'real'
,
'decimal'
,
'double_precision'
,
'double'
)
def
conv_float
(
self
,
column
,
name
,
**
kwargs
):
def
conv_float
(
self
,
column
,
name
,
**
kwargs
):
return
[
f
(
column
,
name
,
**
kwargs
)
for
f
in
self
.
float_filters
]
return
[
f
(
column
,
name
,
**
kwargs
)
for
f
in
self
.
float_filters
]
@
filters
.
convert
(
'date'
)
@
filters
.
convert
(
'date'
)
def
conv_date
(
self
,
column
,
name
,
**
kwargs
):
def
conv_date
(
self
,
column
,
name
,
**
kwargs
):
return
[
f
(
column
,
name
,
**
kwargs
)
for
f
in
self
.
date_filters
]
return
[
f
(
column
,
name
,
**
kwargs
)
for
f
in
self
.
date_filters
]
@
filters
.
convert
(
'datetime'
,
'datetime2'
,
'timestamp'
,
'smalldatetime'
)
@
filters
.
convert
(
'datetime'
,
'datetime2'
,
'timestamp'
,
'smalldatetime'
)
def
conv_datetime
(
self
,
column
,
name
,
**
kwargs
):
def
conv_datetime
(
self
,
column
,
name
,
**
kwargs
):
return
[
f
(
column
,
name
,
**
kwargs
)
for
f
in
self
.
datetime_filters
]
return
[
f
(
column
,
name
,
**
kwargs
)
for
f
in
self
.
datetime_filters
]
@
filters
.
convert
(
'time'
)
@
filters
.
convert
(
'time'
)
def
conv_time
(
self
,
column
,
name
,
**
kwargs
):
def
conv_time
(
self
,
column
,
name
,
**
kwargs
):
return
[
f
(
column
,
name
,
**
kwargs
)
for
f
in
self
.
time_filters
]
return
[
f
(
column
,
name
,
**
kwargs
)
for
f
in
self
.
time_filters
]
@
filters
.
convert
(
'enum'
)
@
filters
.
convert
(
'enum'
)
def
conv_enum
(
self
,
column
,
name
,
options
=
None
,
**
kwargs
):
def
conv_enum
(
self
,
column
,
name
,
options
=
None
,
**
kwargs
):
if
not
options
:
if
not
options
:
...
...
flask_admin/model/filters.py
View file @
2f272f28
...
@@ -48,7 +48,7 @@ class BaseFilter(object):
...
@@ -48,7 +48,7 @@ class BaseFilter(object):
Validate value.
Validate value.
If value is valid, returns `True` and `False` otherwise.
If value is valid, returns `True` and `False` otherwise.
:param value:
:param value:
Value to validate
Value to validate
"""
"""
...
@@ -102,7 +102,7 @@ class BaseBooleanFilter(BaseFilter):
...
@@ -102,7 +102,7 @@ class BaseBooleanFilter(BaseFilter):
def
validate
(
self
,
value
):
def
validate
(
self
,
value
):
return
value
in
(
'0'
,
'1'
)
return
value
in
(
'0'
,
'1'
)
class
BaseIntFilter
(
BaseFilter
):
class
BaseIntFilter
(
BaseFilter
):
"""
"""
...
@@ -110,7 +110,7 @@ class BaseIntFilter(BaseFilter):
...
@@ -110,7 +110,7 @@ class BaseIntFilter(BaseFilter):
"""
"""
def
clean
(
self
,
value
):
def
clean
(
self
,
value
):
return
int
(
float
(
value
))
return
int
(
float
(
value
))
class
BaseFloatFilter
(
BaseFilter
):
class
BaseFloatFilter
(
BaseFilter
):
"""
"""
...
@@ -118,7 +118,7 @@ class BaseFloatFilter(BaseFilter):
...
@@ -118,7 +118,7 @@ class BaseFloatFilter(BaseFilter):
"""
"""
def
clean
(
self
,
value
):
def
clean
(
self
,
value
):
return
float
(
value
)
return
float
(
value
)
class
BaseIntListFilter
(
BaseFilter
):
class
BaseIntListFilter
(
BaseFilter
):
"""
"""
...
@@ -126,7 +126,7 @@ class BaseIntListFilter(BaseFilter):
...
@@ -126,7 +126,7 @@ class BaseIntListFilter(BaseFilter):
"""
"""
def
clean
(
self
,
value
):
def
clean
(
self
,
value
):
return
[
int
(
float
(
v
.
strip
()))
for
v
in
value
.
split
(
','
)
if
v
.
strip
()]
return
[
int
(
float
(
v
.
strip
()))
for
v
in
value
.
split
(
','
)
if
v
.
strip
()]
class
BaseFloatListFilter
(
BaseFilter
):
class
BaseFloatListFilter
(
BaseFilter
):
"""
"""
...
@@ -134,7 +134,7 @@ class BaseFloatListFilter(BaseFilter):
...
@@ -134,7 +134,7 @@ class BaseFloatListFilter(BaseFilter):
"""
"""
def
clean
(
self
,
value
):
def
clean
(
self
,
value
):
return
[
float
(
v
.
strip
())
for
v
in
value
.
split
(
','
)
if
v
.
strip
()]
return
[
float
(
v
.
strip
())
for
v
in
value
.
split
(
','
)
if
v
.
strip
()]
class
BaseDateFilter
(
BaseFilter
):
class
BaseDateFilter
(
BaseFilter
):
"""
"""
...
@@ -144,10 +144,10 @@ class BaseDateFilter(BaseFilter):
...
@@ -144,10 +144,10 @@ class BaseDateFilter(BaseFilter):
super
(
BaseDateFilter
,
self
)
.
__init__
(
name
,
super
(
BaseDateFilter
,
self
)
.
__init__
(
name
,
options
,
options
,
data_type
=
'datepicker'
)
data_type
=
'datepicker'
)
def
clean
(
self
,
value
):
def
clean
(
self
,
value
):
return
datetime
.
datetime
.
strptime
(
value
,
'
%
Y-
%
m-
%
d'
)
.
date
()
return
datetime
.
datetime
.
strptime
(
value
,
'
%
Y-
%
m-
%
d'
)
.
date
()
class
BaseDateBetweenFilter
(
BaseFilter
):
class
BaseDateBetweenFilter
(
BaseFilter
):
"""
"""
...
@@ -163,16 +163,16 @@ class BaseDateBetweenFilter(BaseFilter):
...
@@ -163,16 +163,16 @@ class BaseDateBetweenFilter(BaseFilter):
def
validate
(
self
,
value
):
def
validate
(
self
,
value
):
try
:
try
:
value
=
[
datetime
.
datetime
.
strptime
(
range
,
'
%
Y-
%
m-
%
d'
)
value
=
[
datetime
.
datetime
.
strptime
(
range
,
'
%
Y-
%
m-
%
d'
)
for
range
in
value
.
split
(
' to '
)]
for
range
in
value
.
split
(
' to '
)]
# if " to " is missing, fail validation
# if " to " is missing, fail validation
# sqlalchemy's .between() will not work if end date is before start date
# sqlalchemy's .between() will not work if end date is before start date
if
(
len
(
value
)
==
2
)
and
(
value
[
0
]
<=
value
[
1
]):
if
(
len
(
value
)
==
2
)
and
(
value
[
0
]
<=
value
[
1
]):
return
True
return
True
else
:
else
:
return
False
return
False
except
ValueError
:
except
ValueError
:
return
False
return
False
class
BaseDateTimeFilter
(
BaseFilter
):
class
BaseDateTimeFilter
(
BaseFilter
):
...
@@ -183,27 +183,27 @@ class BaseDateTimeFilter(BaseFilter):
...
@@ -183,27 +183,27 @@ class BaseDateTimeFilter(BaseFilter):
super
(
BaseDateTimeFilter
,
self
)
.
__init__
(
name
,
super
(
BaseDateTimeFilter
,
self
)
.
__init__
(
name
,
options
,
options
,
data_type
=
'datetimepicker'
)
data_type
=
'datetimepicker'
)
def
clean
(
self
,
value
):
def
clean
(
self
,
value
):
# datetime filters will not work in SQLite + SQLAlchemy if value not converted to datetime
# datetime filters will not work in SQLite + SQLAlchemy if value not converted to datetime
return
datetime
.
datetime
.
strptime
(
value
,
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
return
datetime
.
datetime
.
strptime
(
value
,
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
class
BaseDateTimeBetweenFilter
(
BaseFilter
):
class
BaseDateTimeBetweenFilter
(
BaseFilter
):
"""
"""
Base DateTime Between filter. Consolidates logic for validation and clean.
Base DateTime Between filter. Consolidates logic for validation and clean.
Apply method is different for each back-end.
Apply method is different for each back-end.
"""
"""
def
clean
(
self
,
value
):
def
clean
(
self
,
value
):
return
[
datetime
.
datetime
.
strptime
(
range
,
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
return
[
datetime
.
datetime
.
strptime
(
range
,
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
for
range
in
value
.
split
(
' to '
)]
for
range
in
value
.
split
(
' to '
)]
def
operation
(
self
):
def
operation
(
self
):
return
lazy_gettext
(
'between'
)
return
lazy_gettext
(
'between'
)
def
validate
(
self
,
value
):
def
validate
(
self
,
value
):
try
:
try
:
value
=
[
datetime
.
datetime
.
strptime
(
range
,
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
value
=
[
datetime
.
datetime
.
strptime
(
range
,
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
for
range
in
value
.
split
(
' to '
)]
for
range
in
value
.
split
(
' to '
)]
if
(
len
(
value
)
==
2
)
and
(
value
[
0
]
<=
value
[
1
]):
if
(
len
(
value
)
==
2
)
and
(
value
[
0
]
<=
value
[
1
]):
return
True
return
True
...
@@ -211,7 +211,7 @@ class BaseDateTimeBetweenFilter(BaseFilter):
...
@@ -211,7 +211,7 @@ class BaseDateTimeBetweenFilter(BaseFilter):
return
False
return
False
except
ValueError
:
except
ValueError
:
return
False
return
False
class
BaseTimeFilter
(
BaseFilter
):
class
BaseTimeFilter
(
BaseFilter
):
"""
"""
...
@@ -221,14 +221,14 @@ class BaseTimeFilter(BaseFilter):
...
@@ -221,14 +221,14 @@ class BaseTimeFilter(BaseFilter):
super
(
BaseTimeFilter
,
self
)
.
__init__
(
name
,
super
(
BaseTimeFilter
,
self
)
.
__init__
(
name
,
options
,
options
,
data_type
=
'timepicker'
)
data_type
=
'timepicker'
)
def
clean
(
self
,
value
):
def
clean
(
self
,
value
):
# time filters will not work in SQLite + SQLAlchemy if value not converted to time
# time filters will not work in SQLite + SQLAlchemy if value not converted to time
timetuple
=
time
.
strptime
(
value
,
'
%
H:
%
M:
%
S'
)
timetuple
=
time
.
strptime
(
value
,
'
%
H:
%
M:
%
S'
)
return
datetime
.
time
(
timetuple
.
tm_hour
,
return
datetime
.
time
(
timetuple
.
tm_hour
,
timetuple
.
tm_min
,
timetuple
.
tm_min
,
timetuple
.
tm_sec
)
timetuple
.
tm_sec
)
class
BaseTimeBetweenFilter
(
BaseFilter
):
class
BaseTimeBetweenFilter
(
BaseFilter
):
"""
"""
...
@@ -236,7 +236,7 @@ class BaseTimeBetweenFilter(BaseFilter):
...
@@ -236,7 +236,7 @@ class BaseTimeBetweenFilter(BaseFilter):
Apply method is different for each back-end.
Apply method is different for each back-end.
"""
"""
def
clean
(
self
,
value
):
def
clean
(
self
,
value
):
timetuples
=
[
time
.
strptime
(
range
,
'
%
H:
%
M:
%
S'
)
timetuples
=
[
time
.
strptime
(
range
,
'
%
H:
%
M:
%
S'
)
for
range
in
value
.
split
(
' to '
)]
for
range
in
value
.
split
(
' to '
)]
return
[
datetime
.
time
(
timetuple
.
tm_hour
,
return
[
datetime
.
time
(
timetuple
.
tm_hour
,
timetuple
.
tm_min
,
timetuple
.
tm_min
,
...
@@ -248,7 +248,7 @@ class BaseTimeBetweenFilter(BaseFilter):
...
@@ -248,7 +248,7 @@ class BaseTimeBetweenFilter(BaseFilter):
def
validate
(
self
,
value
):
def
validate
(
self
,
value
):
try
:
try
:
timetuples
=
[
time
.
strptime
(
range
,
'
%
H:
%
M:
%
S'
)
timetuples
=
[
time
.
strptime
(
range
,
'
%
H:
%
M:
%
S'
)
for
range
in
value
.
split
(
' to '
)]
for
range
in
value
.
split
(
' to '
)]
if
(
len
(
timetuples
)
==
2
)
and
(
timetuples
[
0
]
<=
timetuples
[
1
]):
if
(
len
(
timetuples
)
==
2
)
and
(
timetuples
[
0
]
<=
timetuples
[
1
]):
return
True
return
True
...
@@ -257,7 +257,7 @@ class BaseTimeBetweenFilter(BaseFilter):
...
@@ -257,7 +257,7 @@ class BaseTimeBetweenFilter(BaseFilter):
except
ValueError
:
except
ValueError
:
raise
raise
return
False
return
False
def
convert
(
*
args
):
def
convert
(
*
args
):
"""
"""
...
@@ -266,7 +266,7 @@ def convert(*args):
...
@@ -266,7 +266,7 @@ def convert(*args):
See :mod:`flask.ext.admin.contrib.sqla.filters` for usage example.
See :mod:`flask.ext.admin.contrib.sqla.filters` for usage example.
"""
"""
def
_inner
(
func
):
def
_inner
(
func
):
func
.
_converter_for
=
args
func
.
_converter_for
=
map
(
str
.
lower
,
args
)
return
func
return
func
return
_inner
return
_inner
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
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 comment