Implemented "one-way" search aliases.

master
Pacman Ghost 4 years ago
parent 906de3cfa1
commit 3c22fae174
  1. 14
      asl_articles/config/app.cfg
  2. 16
      asl_articles/search.py
  3. 12
      asl_articles/tests/test_search.py

@ -6,6 +6,18 @@
;HTML_TAG_WHITELIST =
[Search aliases]
; This section defines search term aliases.
; For example, the entry "a = b ; c" means that searching for "a" will become "( a OR b OR c )".
; NOTE: Searching for "b" or "c" will be unaffected.
latw = atmm ; atr ; baz ; mol-p ; mol-projector ; piat ; pf ; pfk ; psk
sw = lmg ; mmg ; hmg ; mtr ; mortar ; dc ; ft ; radio ; phone ; rcl ; atmm ; atr ; baz ; mol-p ; mol-projector ; piat ; pf ; pfk ; psk
fortifications = cave ; a-t ditch ; foxhole ; sangar ; trench ; bunker ; minefield ; mines ; booby trap ; panji ; pillbox ; roadblock ; tetrahedron ; wire
vehicles = tank ; halftrack ; half-track ; jeep ; carrier
illumination = starshell ; illuminating round ; trip flare
[Search aliases 2]
; This section defines search term aliases.
; For example, the entry "a = b = c" means that searching for any of "a" or "b" or "c" will all become "( a OR b OR c )".
asl = Advanced Squad Leader
mmp = Multi-Man Publishing = Multiman Publishing
ah = Avalon Hill
@ -38,6 +50,8 @@ ammo = ammunition
lc = landing craft
ht = halftrack
wa = wall advantage
hob = heat of battle
cg = campaign game
firelane = fire-lane = fire lane
firegroup = fire-group = fire group

@ -412,12 +412,22 @@ def init_search( session, logger ):
_logger.debug( "Loading search aliases: %s", fname )
cfg.read( fname )
global _search_aliases
_search_aliases = _load_search_aliases( cfg.items( "Search aliases" ) )
def _load_search_aliases( aliases ):
def get_section( section_name ):
try:
return cfg.items( section_name )
except configparser.NoSectionError:
return []
_search_aliases = _load_search_aliases( get_section("Search aliases"), get_section("Search aliases 2") )
def _load_search_aliases( aliases, aliases2 ):
"""Load the search aliases."""
search_aliases = {}
for row in aliases:
vals = [ row[0] ]
vals.extend( v.strip() for v in row[1].split( ";" ) )
search_aliases[ row[0] ] = vals
_logger.debug( "- %s => %s", row[0], vals )
for row in aliases2:
vals = itertools.chain( [row[0]], row[1].split("=") )
vals = [ v.strip().lower() for v in vals ]
_logger.debug( "- %s", vals )

@ -510,9 +510,10 @@ def test_make_fts_query_string():
"""Test generating FTS query strings."""
# initialize
search_aliases = _load_search_aliases( [
( "mmp", "Multi-Man Publishing = Multiman Publishing" )
] )
search_aliases = _load_search_aliases(
[ ( "aaa", "bbb ; ccc" ) ],
[ ( "mmp", "Multi-Man Publishing = Multiman Publishing" ) ]
)
def do_test( query, expected ):
assert _make_fts_query_string( query, search_aliases ) == expected
@ -567,6 +568,11 @@ def test_make_fts_query_string():
do_test( "foo OR bar", "foo OR bar" )
do_test( "(a OR b)", "(a OR b)" )
# test search aliases
do_test( "aaa", "(aaa OR bbb OR ccc)" )
do_test( "bbb", "bbb" )
do_test( "ccc", "ccc" )
# test search aliases
do_test( "MMP", '("multi-man publishing" OR "multiman publishing" OR mmp)' )
do_test( "Xmmp", "Xmmp" )

Loading…
Cancel
Save