Allow searching by collection
This commit is contained in:
parent
144b1eb2ba
commit
2435ecb5ff
3 changed files with 23 additions and 1 deletions
|
@ -168,6 +168,9 @@ async def advanced_search(
|
||||||
if isinstance(criterion, tutor.search.Oracle):
|
if isinstance(criterion, tutor.search.Oracle):
|
||||||
constraints.append(f"cards.oracle_text ILIKE %({param})s")
|
constraints.append(f"cards.oracle_text ILIKE %({param})s")
|
||||||
params[param] = f"%{criterion.text}%"
|
params[param] = f"%{criterion.text}%"
|
||||||
|
if isinstance(criterion, tutor.search.Collection) and in_collection:
|
||||||
|
constraints.append(f"copies.collection ILIKE %({param})s")
|
||||||
|
params[param] = f"%{criterion.text}%"
|
||||||
|
|
||||||
if in_collection is not None:
|
if in_collection is not None:
|
||||||
if in_collection:
|
if in_collection:
|
||||||
|
|
|
@ -44,6 +44,11 @@ class Oracle(Criterion):
|
||||||
text: parsy.string
|
text: parsy.string
|
||||||
|
|
||||||
|
|
||||||
|
@dataclasses.dataclass
|
||||||
|
class Collection(Criterion):
|
||||||
|
text: parsy.string
|
||||||
|
|
||||||
|
|
||||||
@dataclasses.dataclass
|
@dataclasses.dataclass
|
||||||
class Name(Criterion):
|
class Name(Criterion):
|
||||||
operator: Operator = Operator.matches
|
operator: Operator = Operator.matches
|
||||||
|
@ -169,9 +174,15 @@ oracle = parsy.seq(
|
||||||
text=string_literal,
|
text=string_literal,
|
||||||
).combine_dict(Oracle)
|
).combine_dict(Oracle)
|
||||||
|
|
||||||
|
collection = parsy.seq(
|
||||||
|
_keyword=lstring_from("collection"),
|
||||||
|
operator=matches,
|
||||||
|
text=string_literal,
|
||||||
|
).combine_dict(Collection)
|
||||||
|
|
||||||
name = parsy.seq(text=string_literal).combine_dict(Name)
|
name = parsy.seq(text=string_literal).combine_dict(Name)
|
||||||
|
|
||||||
criterion = colors | expansion | rarity | type_line | oracle | name
|
criterion = colors | expansion | rarity | type_line | oracle | collection | name
|
||||||
|
|
||||||
padding = parsy.regex(r"\s*")
|
padding = parsy.regex(r"\s*")
|
||||||
search = padding >> (criterion << padding).many().map(Search)
|
search = padding >> (criterion << padding).many().map(Search)
|
||||||
|
|
|
@ -193,6 +193,14 @@ paths:
|
||||||
|
|
||||||
Operators
|
Operators
|
||||||
: `:` (matches)
|
: `:` (matches)
|
||||||
|
|
||||||
|
#### Collection
|
||||||
|
|
||||||
|
Keywords
|
||||||
|
: `collection`
|
||||||
|
|
||||||
|
Operators
|
||||||
|
: `:` (matches)
|
||||||
responses:
|
responses:
|
||||||
'200':
|
'200':
|
||||||
description: Search results
|
description: Search results
|
||||||
|
|
Loading…
Reference in a new issue