3
0
Fork 0

fix: format all code with black

and from now on should not deviate from that...
This commit is contained in:
Lance Edgar 2025-08-31 12:26:43 -05:00
parent 8a09fb1a3c
commit 4d0693862d
68 changed files with 6693 additions and 5659 deletions

File diff suppressed because it is too large Load diff

View file

@ -21,24 +21,24 @@ class TestGridFilter(WebTestCase):
model = self.app.model
self.sample_data = [
{'name': 'foo1', 'value': 'ONE'},
{'name': 'foo2', 'value': 'two'},
{'name': 'foo3', 'value': 'ggg'},
{'name': 'foo4', 'value': 'ggg'},
{'name': 'foo5', 'value': 'ggg'},
{'name': 'foo6', 'value': 'six'},
{'name': 'foo7', 'value': 'seven'},
{'name': 'foo8', 'value': 'eight'},
{'name': 'foo9', 'value': 'nine'},
{"name": "foo1", "value": "ONE"},
{"name": "foo2", "value": "two"},
{"name": "foo3", "value": "ggg"},
{"name": "foo4", "value": "ggg"},
{"name": "foo5", "value": "ggg"},
{"name": "foo6", "value": "six"},
{"name": "foo7", "value": "seven"},
{"name": "foo8", "value": "eight"},
{"name": "foo9", "value": "nine"},
]
for setting in self.sample_data:
self.app.save_setting(self.session, setting['name'], setting['value'])
self.app.save_setting(self.session, setting["name"], setting["value"])
self.session.commit()
self.sample_query = self.session.query(model.Setting)
def make_filter(self, model_property, **kwargs):
factory = kwargs.pop('factory', mod.GridFilter)
kwargs['model_property'] = model_property
factory = kwargs.pop("factory", mod.GridFilter)
kwargs["model_property"] = model_property
return factory(self.request, model_property.key, **kwargs)
def test_constructor(self):
@ -46,158 +46,193 @@ class TestGridFilter(WebTestCase):
# verbs is not set by default, but can be set
filtr = self.make_filter(model.Setting.name)
self.assertFalse(hasattr(filtr, 'verbs'))
filtr = self.make_filter(model.Setting.name, verbs=['foo', 'bar'])
self.assertEqual(filtr.verbs, ['foo', 'bar'])
self.assertFalse(hasattr(filtr, "verbs"))
filtr = self.make_filter(model.Setting.name, verbs=["foo", "bar"])
self.assertEqual(filtr.verbs, ["foo", "bar"])
# verb is not set by default, but can be set
filtr = self.make_filter(model.Setting.name)
self.assertFalse(hasattr(filtr, 'verb'))
filtr = self.make_filter(model.Setting.name, verb='foo')
self.assertEqual(filtr.verb, 'foo')
self.assertFalse(hasattr(filtr, "verb"))
filtr = self.make_filter(model.Setting.name, verb="foo")
self.assertEqual(filtr.verb, "foo")
# default verb is not set by default, but can be set
filtr = self.make_filter(model.Setting.name)
self.assertFalse(hasattr(filtr, 'default_verb'))
filtr = self.make_filter(model.Setting.name, default_verb='foo')
self.assertEqual(filtr.default_verb, 'foo')
self.assertFalse(hasattr(filtr, "default_verb"))
filtr = self.make_filter(model.Setting.name, default_verb="foo")
self.assertEqual(filtr.default_verb, "foo")
def test_repr(self):
model = self.app.model
filtr = self.make_filter(model.Setting.name, factory=mod.GridFilter)
self.assertEqual(repr(filtr), "GridFilter(key='name', active=False, verb=None, value=None)")
self.assertEqual(
repr(filtr), "GridFilter(key='name', active=False, verb=None, value=None)"
)
def test_get_verbs(self):
model = self.app.model
filtr = self.make_filter(model.Setting.name, factory=mod.AlchemyFilter)
self.assertFalse(hasattr(filtr, 'verbs'))
self.assertEqual(filtr.default_verbs, ['equal', 'not_equal'])
self.assertFalse(hasattr(filtr, "verbs"))
self.assertEqual(filtr.default_verbs, ["equal", "not_equal"])
# by default, returns default verbs (plus 'is_any')
self.assertEqual(filtr.get_verbs(), ['equal', 'not_equal', 'is_any'])
self.assertEqual(filtr.get_verbs(), ["equal", "not_equal", "is_any"])
# default verbs can be a callable
filtr.default_verbs = lambda: ['foo', 'bar']
self.assertEqual(filtr.get_verbs(), ['foo', 'bar', 'is_any'])
filtr.default_verbs = lambda: ["foo", "bar"]
self.assertEqual(filtr.get_verbs(), ["foo", "bar", "is_any"])
# uses filtr.verbs if set
filtr.verbs = ['is_true', 'is_false']
self.assertEqual(filtr.get_verbs(), ['is_true', 'is_false', 'is_any'])
filtr.verbs = ["is_true", "is_false"]
self.assertEqual(filtr.get_verbs(), ["is_true", "is_false", "is_any"])
# may add is/null verbs
filtr = self.make_filter(model.Setting.name, factory=mod.AlchemyFilter,
nullable=True)
self.assertEqual(filtr.get_verbs(), ['equal', 'not_equal',
'is_null', 'is_not_null',
'is_any'])
filtr = self.make_filter(
model.Setting.name, factory=mod.AlchemyFilter, nullable=True
)
self.assertEqual(
filtr.get_verbs(),
["equal", "not_equal", "is_null", "is_not_null", "is_any"],
)
# filtr.verbs can be a callable
filtr.nullable = False
filtr.verbs = lambda: ['baz', 'blarg']
self.assertEqual(filtr.get_verbs(), ['baz', 'blarg', 'is_any'])
filtr.verbs = lambda: ["baz", "blarg"]
self.assertEqual(filtr.get_verbs(), ["baz", "blarg", "is_any"])
def test_get_default_verb(self):
model = self.app.model
filtr = self.make_filter(model.Setting.name, factory=mod.AlchemyFilter)
self.assertFalse(hasattr(filtr, 'verbs'))
self.assertEqual(filtr.default_verbs, ['equal', 'not_equal'])
self.assertEqual(filtr.get_verbs(), ['equal', 'not_equal', 'is_any'])
self.assertFalse(hasattr(filtr, "verbs"))
self.assertEqual(filtr.default_verbs, ["equal", "not_equal"])
self.assertEqual(filtr.get_verbs(), ["equal", "not_equal", "is_any"])
# returns first verb by default
self.assertEqual(filtr.get_default_verb(), 'equal')
self.assertEqual(filtr.get_default_verb(), "equal")
# returns filtr.verb if set
filtr.verb = 'foo'
self.assertEqual(filtr.get_default_verb(), 'foo')
filtr.verb = "foo"
self.assertEqual(filtr.get_default_verb(), "foo")
# returns filtr.default_verb if set
# (nb. this overrides filtr.verb since the point of this
# method is to return the *default* verb)
filtr.default_verb = 'bar'
self.assertEqual(filtr.get_default_verb(), 'bar')
filtr.default_verb = "bar"
self.assertEqual(filtr.get_default_verb(), "bar")
def test_get_verb_labels(self):
model = self.app.model
filtr = self.make_filter(model.Setting.name, factory=mod.AlchemyFilter)
self.assertFalse(hasattr(filtr, 'verbs'))
self.assertEqual(filtr.get_verbs(), ['equal', 'not_equal', 'is_any'])
self.assertFalse(hasattr(filtr, "verbs"))
self.assertEqual(filtr.get_verbs(), ["equal", "not_equal", "is_any"])
labels = filtr.get_verb_labels()
self.assertIsInstance(labels, dict)
self.assertEqual(labels['equal'], "equal to")
self.assertEqual(labels['not_equal'], "not equal to")
self.assertEqual(labels['is_any'], "is any")
self.assertEqual(labels["equal"], "equal to")
self.assertEqual(labels["not_equal"], "not equal to")
self.assertEqual(labels["is_any"], "is any")
def test_get_valueless_verbs(self):
model = self.app.model
filtr = self.make_filter(model.Setting.name, factory=mod.AlchemyFilter)
self.assertFalse(hasattr(filtr, 'verbs'))
self.assertEqual(filtr.get_verbs(), ['equal', 'not_equal', 'is_any'])
self.assertFalse(hasattr(filtr, "verbs"))
self.assertEqual(filtr.get_verbs(), ["equal", "not_equal", "is_any"])
verbs = filtr.get_valueless_verbs()
self.assertIsInstance(verbs, list)
self.assertIn('is_any', verbs)
self.assertIn("is_any", verbs)
def test_set_choices(self):
model = self.app.model
filtr = self.make_filter(model.Setting.name, factory=mod.AlchemyFilter)
self.assertEqual(filtr.choices, {})
self.assertEqual(filtr.data_type, 'string')
self.assertEqual(filtr.data_type, "string")
class MockEnum(Enum):
FOO = 'foo'
BAR = 'bar'
FOO = "foo"
BAR = "bar"
filtr.set_choices(MockEnum)
self.assertEqual(filtr.choices, OrderedDict([
('FOO', 'foo'),
('BAR', 'bar'),
]))
self.assertEqual(filtr.data_type, 'choice')
self.assertEqual(
filtr.choices,
OrderedDict(
[
("FOO", "foo"),
("BAR", "bar"),
]
),
)
self.assertEqual(filtr.data_type, "choice")
filtr.set_choices(None)
self.assertEqual(filtr.choices, {})
self.assertEqual(filtr.data_type, 'string')
self.assertEqual(filtr.data_type, "string")
def test_normalize_choices(self):
model = self.app.model
filtr = self.make_filter(model.Setting.name, factory=mod.AlchemyFilter)
class MockEnum(Enum):
FOO = 'foo'
BAR = 'bar'
FOO = "foo"
BAR = "bar"
choices = filtr.normalize_choices(MockEnum)
self.assertEqual(choices, OrderedDict([
('FOO', 'foo'),
('BAR', 'bar'),
]))
self.assertEqual(
choices,
OrderedDict(
[
("FOO", "foo"),
("BAR", "bar"),
]
),
)
choices = filtr.normalize_choices(OrderedDict([
('first', '1'),
('second', '2'),
]))
self.assertEqual(choices, OrderedDict([
('first', '1'),
('second', '2'),
]))
choices = filtr.normalize_choices(
OrderedDict(
[
("first", "1"),
("second", "2"),
]
)
)
self.assertEqual(
choices,
OrderedDict(
[
("first", "1"),
("second", "2"),
]
),
)
choices = filtr.normalize_choices({
'bbb': 'b',
'aaa': 'a',
})
self.assertEqual(choices, OrderedDict([
('aaa', 'a'),
('bbb', 'b'),
]))
choices = filtr.normalize_choices(
{
"bbb": "b",
"aaa": "a",
}
)
self.assertEqual(
choices,
OrderedDict(
[
("aaa", "a"),
("bbb", "b"),
]
),
)
choices = filtr.normalize_choices(['one', 'two', 'three'])
self.assertEqual(choices, OrderedDict([
('one', 'one'),
('two', 'two'),
('three', 'three'),
]))
choices = filtr.normalize_choices(["one", "two", "three"])
self.assertEqual(
choices,
OrderedDict(
[
("one", "one"),
("two", "two"),
("three", "three"),
]
),
)
def test_apply_filter(self):
model = self.app.model
@ -205,32 +240,46 @@ class TestGridFilter(WebTestCase):
# default verb used as fallback
# self.assertEqual(filtr.default_verb, 'contains')
filtr.default_verb = 'contains'
filtr.default_verb = "contains"
filtr.verb = None
with patch.object(filtr, 'filter_contains', side_effect=lambda q, v: q) as filter_contains:
filtered_query = filtr.apply_filter(self.sample_query, value='foo')
filter_contains.assert_called_once_with(self.sample_query, 'foo')
with patch.object(
filtr, "filter_contains", side_effect=lambda q, v: q
) as filter_contains:
filtered_query = filtr.apply_filter(self.sample_query, value="foo")
filter_contains.assert_called_once_with(self.sample_query, "foo")
self.assertIsNone(filtr.verb)
# filter verb used as fallback
filtr.verb = 'equal'
with patch.object(filtr, 'filter_equal', create=True, side_effect=lambda q, v: q) as filter_equal:
filtered_query = filtr.apply_filter(self.sample_query, value='foo')
filter_equal.assert_called_once_with(self.sample_query, 'foo')
filtr.verb = "equal"
with patch.object(
filtr, "filter_equal", create=True, side_effect=lambda q, v: q
) as filter_equal:
filtered_query = filtr.apply_filter(self.sample_query, value="foo")
filter_equal.assert_called_once_with(self.sample_query, "foo")
# filter value used as fallback
filtr.verb = 'contains'
filtr.value = 'blarg'
with patch.object(filtr, 'filter_contains', side_effect=lambda q, v: q) as filter_contains:
filtr.verb = "contains"
filtr.value = "blarg"
with patch.object(
filtr, "filter_contains", side_effect=lambda q, v: q
) as filter_contains:
filtered_query = filtr.apply_filter(self.sample_query)
filter_contains.assert_called_once_with(self.sample_query, 'blarg')
filter_contains.assert_called_once_with(self.sample_query, "blarg")
# error if invalid verb
self.assertRaises(mod.VerbNotSupported, filtr.apply_filter,
self.sample_query, verb='doesnotexist')
filtr.verbs = ['doesnotexist']
self.assertRaises(mod.VerbNotSupported, filtr.apply_filter,
self.sample_query, verb='doesnotexist')
self.assertRaises(
mod.VerbNotSupported,
filtr.apply_filter,
self.sample_query,
verb="doesnotexist",
)
filtr.verbs = ["doesnotexist"]
self.assertRaises(
mod.VerbNotSupported,
filtr.apply_filter,
self.sample_query,
verb="doesnotexist",
)
def test_filter_is_any(self):
model = self.app.model
@ -250,24 +299,24 @@ class TestAlchemyFilter(WebTestCase):
model = self.app.model
self.sample_data = [
{'name': 'foo1', 'value': 'ONE'},
{'name': 'foo2', 'value': 'two'},
{'name': 'foo3', 'value': 'ggg'},
{'name': 'foo4', 'value': 'ggg'},
{'name': 'foo5', 'value': 'ggg'},
{'name': 'foo6', 'value': 'six'},
{'name': 'foo7', 'value': 'seven'},
{'name': 'foo8', 'value': 'eight'},
{'name': 'foo9', 'value': None},
{"name": "foo1", "value": "ONE"},
{"name": "foo2", "value": "two"},
{"name": "foo3", "value": "ggg"},
{"name": "foo4", "value": "ggg"},
{"name": "foo5", "value": "ggg"},
{"name": "foo6", "value": "six"},
{"name": "foo7", "value": "seven"},
{"name": "foo8", "value": "eight"},
{"name": "foo9", "value": None},
]
for setting in self.sample_data:
self.app.save_setting(self.session, setting['name'], setting['value'])
self.app.save_setting(self.session, setting["name"], setting["value"])
self.session.commit()
self.sample_query = self.session.query(model.Setting)
def make_filter(self, model_property, **kwargs):
factory = kwargs.pop('factory', mod.AlchemyFilter)
kwargs['model_property'] = model_property
factory = kwargs.pop("factory", mod.AlchemyFilter)
kwargs["model_property"] = model_property
return factory(self.request, model_property.key, **kwargs)
def test_filter_equal(self):
@ -280,12 +329,12 @@ class TestAlchemyFilter(WebTestCase):
self.assertIs(filtered_query, self.sample_query)
# nb. by default, *is filtered* by empty string
filtered_query = filtr.filter_equal(self.sample_query, '')
filtered_query = filtr.filter_equal(self.sample_query, "")
self.assertIsNot(filtered_query, self.sample_query)
self.assertEqual(filtered_query.count(), 0)
# filtered by value
filtered_query = filtr.filter_equal(self.sample_query, 'ggg')
filtered_query = filtr.filter_equal(self.sample_query, "ggg")
self.assertIsNot(filtered_query, self.sample_query)
self.assertEqual(filtered_query.count(), 3)
@ -299,12 +348,12 @@ class TestAlchemyFilter(WebTestCase):
self.assertIs(filtered_query, self.sample_query)
# nb. by default, *is filtered* by empty string
filtered_query = filtr.filter_not_equal(self.sample_query, '')
filtered_query = filtr.filter_not_equal(self.sample_query, "")
self.assertIsNot(filtered_query, self.sample_query)
self.assertEqual(filtered_query.count(), 9)
# filtered by value
filtered_query = filtr.filter_not_equal(self.sample_query, 'ggg')
filtered_query = filtr.filter_not_equal(self.sample_query, "ggg")
self.assertIsNot(filtered_query, self.sample_query)
self.assertEqual(filtered_query.count(), 6)
@ -336,24 +385,24 @@ class TestStringAlchemyFilter(WebTestCase):
model = self.app.model
self.sample_data = [
{'name': 'foo1', 'value': 'ONE'},
{'name': 'foo2', 'value': 'two'},
{'name': 'foo3', 'value': 'ggg'},
{'name': 'foo4', 'value': 'ggg'},
{'name': 'foo5', 'value': 'ggg'},
{'name': 'foo6', 'value': 'six'},
{'name': 'foo7', 'value': 'seven'},
{'name': 'foo8', 'value': 'eight'},
{'name': 'foo9', 'value': 'nine'},
{"name": "foo1", "value": "ONE"},
{"name": "foo2", "value": "two"},
{"name": "foo3", "value": "ggg"},
{"name": "foo4", "value": "ggg"},
{"name": "foo5", "value": "ggg"},
{"name": "foo6", "value": "six"},
{"name": "foo7", "value": "seven"},
{"name": "foo8", "value": "eight"},
{"name": "foo9", "value": "nine"},
]
for setting in self.sample_data:
self.app.save_setting(self.session, setting['name'], setting['value'])
self.app.save_setting(self.session, setting["name"], setting["value"])
self.session.commit()
self.sample_query = self.session.query(model.Setting)
def make_filter(self, model_property, **kwargs):
factory = kwargs.pop('factory', mod.StringAlchemyFilter)
kwargs['model_property'] = model_property
factory = kwargs.pop("factory", mod.StringAlchemyFilter)
kwargs["model_property"] = model_property
return factory(self.request, model_property.key, **kwargs)
def test_filter_contains(self):
@ -364,11 +413,11 @@ class TestStringAlchemyFilter(WebTestCase):
# not filtered for empty value
filtered_query = filtr.filter_contains(self.sample_query, None)
self.assertIs(filtered_query, self.sample_query)
filtered_query = filtr.filter_contains(self.sample_query, '')
filtered_query = filtr.filter_contains(self.sample_query, "")
self.assertIs(filtered_query, self.sample_query)
# filtered by value
filtered_query = filtr.filter_contains(self.sample_query, 'ggg')
filtered_query = filtr.filter_contains(self.sample_query, "ggg")
self.assertIsNot(filtered_query, self.sample_query)
self.assertEqual(filtered_query.count(), 3)
@ -380,11 +429,11 @@ class TestStringAlchemyFilter(WebTestCase):
# not filtered for empty value
filtered_query = filtr.filter_does_not_contain(self.sample_query, None)
self.assertIs(filtered_query, self.sample_query)
filtered_query = filtr.filter_does_not_contain(self.sample_query, '')
filtered_query = filtr.filter_does_not_contain(self.sample_query, "")
self.assertIs(filtered_query, self.sample_query)
# filtered by value
filtered_query = filtr.filter_does_not_contain(self.sample_query, 'ggg')
filtered_query = filtr.filter_does_not_contain(self.sample_query, "ggg")
self.assertIsNot(filtered_query, self.sample_query)
self.assertEqual(filtered_query.count(), 6)
@ -392,8 +441,8 @@ class TestStringAlchemyFilter(WebTestCase):
class TestIntegerAlchemyFilter(WebTestCase):
def make_filter(self, model_property, **kwargs):
factory = kwargs.pop('factory', mod.IntegerAlchemyFilter)
kwargs['model_property'] = model_property
factory = kwargs.pop("factory", mod.IntegerAlchemyFilter)
kwargs["model_property"] = model_property
return factory(self.request, model_property.key, **kwargs)
def test_coerce_value(self):
@ -402,15 +451,15 @@ class TestIntegerAlchemyFilter(WebTestCase):
# null
self.assertIsNone(filtr.coerce_value(None))
self.assertIsNone(filtr.coerce_value(''))
self.assertIsNone(filtr.coerce_value(""))
# typical
self.assertEqual(filtr.coerce_value('42'), 42)
self.assertEqual(filtr.coerce_value('-42'), -42)
self.assertEqual(filtr.coerce_value("42"), 42)
self.assertEqual(filtr.coerce_value("-42"), -42)
# invalid
self.assertIsNone(filtr.coerce_value('42.12'))
self.assertIsNone(filtr.coerce_value('bogus'))
self.assertIsNone(filtr.coerce_value("42.12"))
self.assertIsNone(filtr.coerce_value("bogus"))
class TestBooleanAlchemyFilter(WebTestCase):
@ -420,15 +469,9 @@ class TestBooleanAlchemyFilter(WebTestCase):
model = self.app.model
self.sample_data = [
{'username': 'alice',
'prevent_edit': False,
'active': True},
{'username': 'bob',
'prevent_edit': True,
'active': True},
{'username': 'charlie',
'active': False,
'prevent_edit': None},
{"username": "alice", "prevent_edit": False, "active": True},
{"username": "bob", "prevent_edit": True, "active": True},
{"username": "charlie", "active": False, "prevent_edit": None},
]
for user in self.sample_data:
user = model.User(**user)
@ -437,37 +480,46 @@ class TestBooleanAlchemyFilter(WebTestCase):
self.sample_query = self.session.query(model.User)
def make_filter(self, model_property, **kwargs):
factory = kwargs.pop('factory', mod.BooleanAlchemyFilter)
kwargs['model_property'] = model_property
factory = kwargs.pop("factory", mod.BooleanAlchemyFilter)
kwargs["model_property"] = model_property
return factory(self.request, model_property.key, **kwargs)
def test_get_verbs(self):
model = self.app.model
# bool field, not nullable
filtr = self.make_filter(model.User.active,
factory=mod.BooleanAlchemyFilter,
nullable=False)
self.assertFalse(hasattr(filtr, 'verbs'))
self.assertEqual(filtr.default_verbs, ['is_true', 'is_false'])
filtr = self.make_filter(
model.User.active, factory=mod.BooleanAlchemyFilter, nullable=False
)
self.assertFalse(hasattr(filtr, "verbs"))
self.assertEqual(filtr.default_verbs, ["is_true", "is_false"])
# by default, returns default verbs (plus 'is_any')
self.assertEqual(filtr.get_verbs(), ['is_true', 'is_false', 'is_any'])
self.assertEqual(filtr.get_verbs(), ["is_true", "is_false", "is_any"])
# default verbs can be a callable
filtr.default_verbs = lambda: ['foo', 'bar']
self.assertEqual(filtr.get_verbs(), ['foo', 'bar', 'is_any'])
filtr.default_verbs = lambda: ["foo", "bar"]
self.assertEqual(filtr.get_verbs(), ["foo", "bar", "is_any"])
# bool field, *nullable*
filtr = self.make_filter(model.User.active,
factory=mod.BooleanAlchemyFilter,
nullable=True)
self.assertFalse(hasattr(filtr, 'verbs'))
self.assertEqual(filtr.default_verbs, ['is_true', 'is_false'])
filtr = self.make_filter(
model.User.active, factory=mod.BooleanAlchemyFilter, nullable=True
)
self.assertFalse(hasattr(filtr, "verbs"))
self.assertEqual(filtr.default_verbs, ["is_true", "is_false"])
# effective verbs also include is_false_null
self.assertEqual(filtr.get_verbs(), ['is_true', 'is_false', 'is_false_null',
'is_null', 'is_not_null', 'is_any'])
self.assertEqual(
filtr.get_verbs(),
[
"is_true",
"is_false",
"is_false_null",
"is_null",
"is_not_null",
"is_any",
],
)
def test_coerce_value(self):
model = self.app.model
@ -477,11 +529,11 @@ class TestBooleanAlchemyFilter(WebTestCase):
self.assertTrue(filtr.coerce_value(True))
self.assertTrue(filtr.coerce_value(1))
self.assertTrue(filtr.coerce_value('1'))
self.assertTrue(filtr.coerce_value("1"))
self.assertFalse(filtr.coerce_value(False))
self.assertFalse(filtr.coerce_value(0))
self.assertFalse(filtr.coerce_value(''))
self.assertFalse(filtr.coerce_value(""))
def test_filter_is_true(self):
model = self.app.model
@ -515,7 +567,7 @@ class TestBooleanAlchemyFilter(WebTestCase):
class TheLocalThing(Base):
__tablename__ = 'the_local_thing'
__tablename__ = "the_local_thing"
id = sa.Column(sa.Integer(), primary_key=True, autoincrement=False)
date = sa.Column(sa.DateTime(timezone=True), nullable=True)
@ -530,12 +582,12 @@ class TestDateAlchemyFilter(WebTestCase):
model.Base.metadata.create_all(bind=self.session.bind)
self.sample_data = [
{'id': 1, 'date': datetime.date(2024, 1, 1)},
{'id': 2, 'date': datetime.date(2024, 1, 1)},
{'id': 3, 'date': datetime.date(2024, 3, 1)},
{'id': 4, 'date': datetime.date(2024, 3, 1)},
{'id': 5, 'date': None},
{'id': 6, 'date': None},
{"id": 1, "date": datetime.date(2024, 1, 1)},
{"id": 2, "date": datetime.date(2024, 1, 1)},
{"id": 3, "date": datetime.date(2024, 3, 1)},
{"id": 4, "date": datetime.date(2024, 3, 1)},
{"id": 5, "date": None},
{"id": 6, "date": None},
]
for thing in self.sample_data:
@ -546,8 +598,8 @@ class TestDateAlchemyFilter(WebTestCase):
self.sample_query = self.session.query(TheLocalThing)
def make_filter(self, model_property, **kwargs):
factory = kwargs.pop('factory', mod.DateAlchemyFilter)
kwargs['model_property'] = model_property
factory = kwargs.pop("factory", mod.DateAlchemyFilter)
kwargs["model_property"] = model_property
return factory(self.request, model_property.key, **kwargs)
def test_coerce_value(self):
@ -562,12 +614,12 @@ class TestDateAlchemyFilter(WebTestCase):
self.assertIs(value, result)
# value as string
result = filtr.coerce_value('2024-04-01')
result = filtr.coerce_value("2024-04-01")
self.assertIsInstance(result, datetime.date)
self.assertEqual(result, datetime.date(2024, 4, 1))
# invalid
result = filtr.coerce_value('thisinputisbad')
result = filtr.coerce_value("thisinputisbad")
self.assertIsNone(result)
def test_greater_than(self):
@ -582,12 +634,14 @@ class TestDateAlchemyFilter(WebTestCase):
self.assertEqual(filtered_query.count(), 6)
# value as date
filtered_query = filtr.filter_greater_than(self.sample_query, datetime.date(2024, 2, 1))
filtered_query = filtr.filter_greater_than(
self.sample_query, datetime.date(2024, 2, 1)
)
self.assertIsNot(filtered_query, self.sample_query)
self.assertEqual(filtered_query.count(), 2)
# value as string
filtered_query = filtr.filter_greater_than(self.sample_query, '2024-02-01')
filtered_query = filtr.filter_greater_than(self.sample_query, "2024-02-01")
self.assertIsNot(filtered_query, self.sample_query)
self.assertEqual(filtered_query.count(), 2)
@ -603,17 +657,21 @@ class TestDateAlchemyFilter(WebTestCase):
self.assertEqual(filtered_query.count(), 6)
# value as date (clear of boundary)
filtered_query = filtr.filter_greater_equal(self.sample_query, datetime.date(2024, 2, 1))
filtered_query = filtr.filter_greater_equal(
self.sample_query, datetime.date(2024, 2, 1)
)
self.assertIsNot(filtered_query, self.sample_query)
self.assertEqual(filtered_query.count(), 2)
# value as date (at boundary)
filtered_query = filtr.filter_greater_equal(self.sample_query, datetime.date(2024, 3, 1))
filtered_query = filtr.filter_greater_equal(
self.sample_query, datetime.date(2024, 3, 1)
)
self.assertIsNot(filtered_query, self.sample_query)
self.assertEqual(filtered_query.count(), 2)
# value as string
filtered_query = filtr.filter_greater_equal(self.sample_query, '2024-01-01')
filtered_query = filtr.filter_greater_equal(self.sample_query, "2024-01-01")
self.assertIsNot(filtered_query, self.sample_query)
self.assertEqual(filtered_query.count(), 4)
@ -629,12 +687,14 @@ class TestDateAlchemyFilter(WebTestCase):
self.assertEqual(filtered_query.count(), 6)
# value as date
filtered_query = filtr.filter_less_than(self.sample_query, datetime.date(2024, 2, 1))
filtered_query = filtr.filter_less_than(
self.sample_query, datetime.date(2024, 2, 1)
)
self.assertIsNot(filtered_query, self.sample_query)
self.assertEqual(filtered_query.count(), 2)
# value as string
filtered_query = filtr.filter_less_than(self.sample_query, '2024-04-01')
filtered_query = filtr.filter_less_than(self.sample_query, "2024-04-01")
self.assertIsNot(filtered_query, self.sample_query)
self.assertEqual(filtered_query.count(), 4)
@ -650,17 +710,21 @@ class TestDateAlchemyFilter(WebTestCase):
self.assertEqual(filtered_query.count(), 6)
# value as date (clear of boundary)
filtered_query = filtr.filter_less_equal(self.sample_query, datetime.date(2024, 2, 1))
filtered_query = filtr.filter_less_equal(
self.sample_query, datetime.date(2024, 2, 1)
)
self.assertIsNot(filtered_query, self.sample_query)
self.assertEqual(filtered_query.count(), 2)
# value as date (at boundary)
filtered_query = filtr.filter_less_equal(self.sample_query, datetime.date(2024, 3, 1))
filtered_query = filtr.filter_less_equal(
self.sample_query, datetime.date(2024, 3, 1)
)
self.assertIsNot(filtered_query, self.sample_query)
self.assertEqual(filtered_query.count(), 2)
# value as string
filtered_query = filtr.filter_less_equal(self.sample_query, '2024-04-01')
filtered_query = filtr.filter_less_equal(self.sample_query, "2024-04-01")
self.assertIsNot(filtered_query, self.sample_query)
self.assertEqual(filtered_query.count(), 4)
@ -668,5 +732,5 @@ class TestDateAlchemyFilter(WebTestCase):
class TestVerbNotSupported(TestCase):
def test_basic(self):
error = mod.VerbNotSupported('equal')
error = mod.VerbNotSupported("equal")
self.assertEqual(str(error), "unknown filter verb not supported: equal")