model and group searching

This commit is contained in:
Damien Elmes 2011-04-10 21:35:12 +09:00
parent aacb57c196
commit d6116a5377
2 changed files with 34 additions and 0 deletions

View file

@ -11,6 +11,8 @@ SEARCH_PHRASE = 2
SEARCH_FID = 3
SEARCH_TEMPLATE = 4
SEARCH_FIELD = 5
SEARCH_MODEL = 6
SEARCH_GROUP = 7
# Find
##########################################################################
@ -94,6 +96,10 @@ order by %s""" % (lim, sort)
self._findTemplate(token, isNeg)
elif type == SEARCH_FIELD:
self._findField(token, isNeg)
elif type == SEARCH_MODEL:
self._findModel(token, isNeg, c)
elif type == SEARCH_GROUP:
self._findGroup(token, isNeg, c)
else:
self._findText(token, isNeg, c)
@ -136,6 +142,20 @@ order by %s""" % (lim, sort)
def _findFids(self, val):
self.lims['fact'].append("id in (%s)" % val)
def _findModel(self, val, isNeg, c):
extra = "not" if isNeg else ""
self.lims['fact'].append(
"mid %s in (select id from models where name like :_mod_%d)" % (
extra, c))
self.lims['args']['_mod_%d'%c] = val
def _findGroup(self, val, isNeg, c):
extra = "not" if isNeg else ""
self.lims['card'].append(
"gid %s in (select id from groups where name like :_grp_%d)" % (
extra, c))
self.lims['args']['_grp_%d'%c] = val
def _findTemplate(self, val, isNeg):
lims = []
comp = "!=" if isNeg else "="
@ -266,6 +286,12 @@ where mid in %s and flds like ? escape '\\'""" % (
elif token['value'].startswith("is:"):
token['value'] = token['value'][3:].lower()
type = SEARCH_TYPE
elif token['value'].startswith("model:"):
token['value'] = token['value'][6:].lower()
type = SEARCH_MODEL
elif token['value'].startswith("group:"):
token['value'] = token['value'][6:].lower()
type = SEARCH_GROUP
elif token['value'].startswith("fid:") and len(token['value']) > 4:
dec = token['value'][4:]
try:

View file

@ -84,3 +84,11 @@ def test_findCards():
assert deck.findCards("", sort="factFld")[0] == catCard.id
assert deck.findCards("", sort="factFld")[-1] == c.id
assert deck.findCards("", sort="cardMod")[-1] == c.id
# model
assert len(deck.findCards("model:basic")) == 5
assert len(deck.findCards("-model:basic")) == 0
assert len(deck.findCards("-model:foo")) == 5
# group
assert len(deck.findCards("group:default")) == 5
assert len(deck.findCards("-group:default")) == 0
assert len(deck.findCards("-group:foo")) == 5