self.process(binary.right, **kw),
)
- match_valid_flag_combinations = frozenset((
- # (boolean_mode, natural_language, query_expansion)
- (False, False, False),
- (True, False, False),
- (False, True, False),
- (False, False, True),
- (False, True, True),
- ))
+ match_valid_flag_combinations = frozenset(
+ (
+ # (boolean_mode, natural_language, query_expansion)
+ (False, False, False),
+ (True, False, False),
+ (False, True, False),
+ (False, False, True),
+ (False, True, True),
+ )
+ )
match_flag_expressions = (
- 'IN BOOLEAN MODE',
- 'IN NATURAL LANGUAGE MODE',
- 'WITH QUERY EXPANSION',
+ "IN BOOLEAN MODE",
+ "IN NATURAL LANGUAGE MODE",
+ "WITH QUERY EXPANSION",
)
def visit_match_op_binary(self, binary, operator, **kw):
modifiers = binary.modifiers
- boolean_mode = modifiers.get('mysql_boolean_mode', True)
- natural_language = modifiers.get('mysql_natural_language', False)
- query_expansion = modifiers.get('mysql_query_expansion', False)
+ boolean_mode = modifiers.get("mysql_boolean_mode", True)
+ natural_language = modifiers.get("mysql_natural_language", False)
+ query_expansion = modifiers.get("mysql_query_expansion", False)
flag_combination = (boolean_mode, natural_language, query_expansion)
if flag_combination not in self.match_valid_flag_combinations:
flags = (
- 'mysql_boolean_mode=%s' % boolean_mode,
- 'mysql_natural_language=%s' % natural_language,
- 'mysql_query_expansion=%s' % query_expansion,
+ "mysql_boolean_mode=%s" % boolean_mode,
+ "mysql_natural_language=%s" % natural_language,
+ "mysql_query_expansion=%s" % query_expansion,
)
flags = ", ".join(flags)
)
match_clause = binary.left
- mysql_additional_cols = modifiers.get('mysql_additional_cols')
+ mysql_additional_cols = modifiers.get("mysql_additional_cols")
if mysql_additional_cols:
match_clause = [match_clause]
against_clause = [against_clause]
against_clause.extend(flag_expressions)
- against_clause = ' '.join(against_clause)
+ against_clause = " ".join(against_clause)
return "MATCH (%s) AGAINST (%s)" % (match_clause, against_clause)
from sqlalchemy import exc
from sqlalchemy.ext.compiler import compiles
-from sqlalchemy.sql import operators
from sqlalchemy.sql import elements
+from sqlalchemy.sql import operators
def property_enables_flag(flag_name):
)
return inner
+
return wrapper
:param: against typically scalar expression to be coerced into a ``str``
:param: flags optional ``dict``. Use properties ``in_boolean_mode``,
- ``in_natural_language_mode`` and ``with_query_expansion`` to control it:
+ ``in_natural_language_mode`` and ``with_query_expansion`` to control it::
match_expr = match_(
users_table.c.firstname,
:property: ``with_query_expansion`` returns new ``match_`` object with
set to ``True`` the ``mysql_query_expansion`` flag
- .. versionadded:: 1.4.4
+ .. versionadded:: 1.4.20
.. seealso::
"""
default_flags = {
- 'mysql_boolean_mode': False,
- 'mysql_natural_language': False,
- 'mysql_query_expansion': False,
+ "mysql_boolean_mode": False,
+ "mysql_natural_language": False,
+ "mysql_query_expansion": False,
}
def __init__(self, *clauselist, **kwargs):
clause.group = False
self.clause = clause
- against = kwargs.get('against')
- flags = kwargs.get('flags')
+ against = kwargs.get("against")
+ flags = kwargs.get("flags")
if against is None:
raise exc.CompileError("Can not match without against")
self.against = against
self.flags = flags or self.default_flags.copy()
- @property_enables_flag('mysql_boolean_mode')
+ @property_enables_flag("mysql_boolean_mode")
def in_boolean_mode(self):
pass
- @property_enables_flag('mysql_natural_language')
+ @property_enables_flag("mysql_natural_language")
def in_natural_language_mode(self):
pass
- @property_enables_flag('mysql_query_expansion')
+ @property_enables_flag("mysql_query_expansion")
def with_query_expansion(self):
pass
@compiles(match_, "mysql")
def visit_match(element, compiler, **kw):
- target = element.clause.match(
- element.against,
- **element.flags
- )
+ target = element.clause.match(element.against, **element.flags)
return compiler.process(target, **kw)
matchtable = table("matchtable", column("title", String))
title = matchtable.c.title
- msg = "Flag combination does not make sence: " \
- "mysql_boolean_mode=%s, " \
- "mysql_natural_language=%s, " \
+ msg = (
+ "Flag combination does not make sence: "
+ "mysql_boolean_mode=%s, "
+ "mysql_natural_language=%s, "
"mysql_query_expansion=%s"
+ )
assert_raises_message(
exc.CompileError,
expr = match_(firstname, lastname, against="John Connor")
- msg = "Flag combination does not make sence: " \
- "mysql_boolean_mode=%s, " \
- "mysql_natural_language=%s, " \
+ msg = (
+ "Flag combination does not make sence: "
+ "mysql_boolean_mode=%s, "
+ "mysql_natural_language=%s, "
"mysql_query_expansion=%s"
+ )
assert_raises_message(
exc.CompileError,
msg % (True, False, True),
- expr.in_boolean_mode.with_query_expansion
- .compile,
+ expr.in_boolean_mode.with_query_expansion.compile,
dialect=self.__dialect__,
)
assert_raises_message(
exc.CompileError,
msg % (True, True, False),
- expr.in_boolean_mode.in_natural_language_mode
- .compile,
+ expr.in_boolean_mode.in_natural_language_mode.compile,
dialect=self.__dialect__,
)
+ # fmt: off
+ callback = expr\
+ .in_boolean_mode\
+ .in_natural_language_mode\
+ .with_query_expansion\
+ .compile
+ # fmt: on
+
assert_raises_message(
exc.CompileError,
msg % (True, True, True),
- expr.in_boolean_mode.in_natural_language_mode.with_query_expansion
- .compile,
+ callback,
dialect=self.__dialect__,
)