Split basic and regex search functions
This commit is contained in:
@@ -303,8 +303,30 @@ def getItemsByCategory(filter, where=None, eager=None):
|
||||
filter).all()
|
||||
|
||||
|
||||
@cachedQuery(3, "where", "nameLike", "join")
|
||||
def searchItems(nameLike, where=None, join=None, eager=None):
|
||||
if not isinstance(nameLike, str):
|
||||
raise TypeError("Need string as argument")
|
||||
|
||||
if join is None:
|
||||
join = tuple()
|
||||
|
||||
if not hasattr(join, "__iter__"):
|
||||
join = (join,)
|
||||
|
||||
items = gamedata_session.query(Item).options(*processEager(eager)).join(*join)
|
||||
for token in nameLike.split(' '):
|
||||
token_safe = "%{0}%".format(sqlizeString(token))
|
||||
if where is not None:
|
||||
items = items.filter(and_(Item.name.like(token_safe, escape="\\"), where))
|
||||
else:
|
||||
items = items.filter(Item.name.like(token_safe, escape="\\"))
|
||||
items = items.limit(100).all()
|
||||
return items
|
||||
|
||||
|
||||
@cachedQuery(3, "tokens", "where", "join")
|
||||
def searchItems(tokens, where=None, join=None, eager=None):
|
||||
def searchItemsRegex(tokens, where=None, join=None, eager=None):
|
||||
if not isinstance(tokens, (tuple, list)) or not all(isinstance(t, str) for t in tokens):
|
||||
raise TypeError("Need tuple or list of strings as argument")
|
||||
|
||||
|
||||
@@ -153,7 +153,7 @@ class SearchWorkerThread(threading.Thread):
|
||||
all_results = set()
|
||||
if len(' '.join(requestTokens)) >= config.minItemSearchLength:
|
||||
for filter_ in filters:
|
||||
filtered_results = eos.db.searchItems(
|
||||
filtered_results = eos.db.searchItemsRegex(
|
||||
requestTokens, where=filter_,
|
||||
join=(types_Item.group, types_Group.category),
|
||||
eager=("group.category", "metaGroup"))
|
||||
@@ -846,7 +846,7 @@ class Market:
|
||||
def searchShips(self, name):
|
||||
"""Find ships according to given text pattern"""
|
||||
filter_ = types_Category.name.in_(["Ship", "Structure"])
|
||||
results = eos.db.searchItems(name.split(), where=filter_,
|
||||
results = eos.db.searchItems(name, where=filter_,
|
||||
join=(types_Item.group, types_Group.category),
|
||||
eager=("group.category", "metaGroup"))
|
||||
ships = set()
|
||||
|
||||
Reference in New Issue
Block a user