aboutsummaryrefslogtreecommitdiffstats
path: root/bsfs/query
diff options
context:
space:
mode:
Diffstat (limited to 'bsfs/query')
-rw-r--r--bsfs/query/ast/filter_.py17
-rw-r--r--bsfs/query/validator.py1
2 files changed, 10 insertions, 8 deletions
diff --git a/bsfs/query/ast/filter_.py b/bsfs/query/ast/filter_.py
index 44490fc..b29d89e 100644
--- a/bsfs/query/ast/filter_.py
+++ b/bsfs/query/ast/filter_.py
@@ -31,7 +31,7 @@ from collections import abc
import typing
# bsfs imports
-from bsfs.utils import URI, errors, typename, normalize_args
+from bsfs.utils import URI, typename, normalize_args
# exports
__all__ : typing.Sequence[str] = (
@@ -454,8 +454,9 @@ class OneOf(PredicateExpression, abc.Collection):
# Helpers
+# invalid-name is disabled since they explicitly mimic an expression
-def IsIn(*values): # pylint: disable=invalid-name # explicitly mimics an expression
+def IsIn(*values) -> FilterExpression: # pylint: disable=invalid-name
"""Match any of the given URIs."""
args = normalize_args(*values)
if len(args) == 0:
@@ -464,17 +465,17 @@ def IsIn(*values): # pylint: disable=invalid-name # explicitly mimics an express
return Is(args[0])
return Or(Is(value) for value in args)
-def IsNotIn(*values): # pylint: disable=invalid-name # explicitly mimics an expression
+def IsNotIn(*values) -> FilterExpression: # pylint: disable=invalid-name
"""Match none of the given URIs."""
return Not(IsIn(*values))
-def Between(
+def Between( # pylint: disable=invalid-name
lo: float = float('-inf'),
hi: float = float('inf'),
lo_strict: bool = True,
hi_strict: bool = True,
- ):
+ ) -> FilterExpression :
"""Match numerical values between *lo* and *hi*. Include bounds if strict is False."""
if abs(lo) == hi == float('inf'):
raise ValueError('range cannot be INF on both sides')
@@ -483,7 +484,7 @@ def Between(
if lo == hi and not lo_strict and not hi_strict:
return Equals(lo)
if lo == hi: # either bound is strict
- raise ValueError(f'bounds cannot be equal when either is strict')
+ raise ValueError('bounds cannot be equal when either is strict')
if lo != float('-inf') and hi != float('inf'):
return And(GreaterThan(lo, lo_strict), LessThan(hi, hi_strict))
if lo != float('-inf'):
@@ -492,7 +493,7 @@ def Between(
return LessThan(hi, hi_strict)
-def Includes(*values, approx: bool = False):
+def Includes(*values, approx: bool = False) -> FilterExpression: # pylint: disable=invalid-name
"""Match any of the given *values*. Uses `Substring` if *approx* is set."""
args = normalize_args(*values)
cls = Substring if approx else Equals
@@ -503,7 +504,7 @@ def Includes(*values, approx: bool = False):
return Or(cls(v) for v in args)
-def Excludes(*values, approx: bool = False):
+def Excludes(*values, approx: bool = False) -> FilterExpression: # pylint: disable=invalid-name
"""Match none of the given *values*. Uses `Substring` if *approx* is set."""
args = normalize_args(*values)
cls = Substring if approx else Equals
diff --git a/bsfs/query/validator.py b/bsfs/query/validator.py
index 9fbff12..f0aa795 100644
--- a/bsfs/query/validator.py
+++ b/bsfs/query/validator.py
@@ -20,6 +20,7 @@ __all__ : typing.Sequence[str] = (
'Filter',
)
+# FIXME: Split into a submodule and the two classes into their own respective files.
## code ##