Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2013-06-12 16:18:25 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2013-06-12 16:18:25 (GMT)
commit3a2deef661a6df790826fa345b22a6e5e2bf6118 (patch)
tree4f0cbe06552d5f9212aa1b6a969aacc96e2b1fa4
parentb59d8f4ac340390636e6f26fbc437abef37f67a3 (diff)
Fix wrong indexing i18n properties
-rw-r--r--sugar_network/db/index.py17
-rwxr-xr-xtests/units/db/index.py37
2 files changed, 46 insertions, 8 deletions
diff --git a/sugar_network/db/index.py b/sugar_network/db/index.py
index a87ffdc..cd456ed 100644
--- a/sugar_network/db/index.py
+++ b/sugar_network/db/index.py
@@ -331,23 +331,24 @@ class IndexWriter(IndexReader):
if prop.slot is not None:
if prop.typecast in [int, float, bool]:
- add_value = xapian.sortable_serialise(value)
+ value_ = xapian.sortable_serialise(value)
else:
if prop.localized:
- value = env.gettext(value) or ''
- add_value = prop.to_string(value)[0]
- document.add_value(prop.slot, add_value)
+ value_ = env.gettext(value) or ''
+ else:
+ value_ = prop.to_string(value)[0]
+ document.add_value(prop.slot, value_)
if prop.prefix or prop.full_text:
- for value in prop.to_string(value):
+ for value_ in prop.to_string(value):
if prop.prefix:
if prop.boolean:
document.add_boolean_term(
- _term(prop.prefix, value))
+ _term(prop.prefix, value_))
else:
- document.add_term(_term(prop.prefix, value))
+ document.add_term(_term(prop.prefix, value_))
if prop.full_text:
- term_generator.index_text(value, 1, prop.prefix or '')
+ term_generator.index_text(value_, 1, prop.prefix or '')
term_generator.increase_termpos()
self._db.replace_document(_term(GUID_PREFIX, guid), document)
diff --git a/tests/units/db/index.py b/tests/units/db/index.py
index 7319765..b94675a 100755
--- a/tests/units/db/index.py
+++ b/tests/units/db/index.py
@@ -592,6 +592,43 @@ class IndexTest(tests.Test):
],
db._find(order_by='-prop')[0])
+ def test_SearchByLocalizedProps(self):
+ db = Index({'prop': IndexedProperty('prop', 1, 'A', localized=True, full_text=True)})
+
+ db.store('1', {'prop': {'a': 'ё'}})
+ db.store('2', {'prop': {'a': 'ё', 'b': 'ю'}})
+ db.store('3', {'prop': {'a': 'ю', 'b': 'ё', 'c': 'я'}})
+
+ self.assertEqual(
+ sorted([{'guid': '1'}, {'guid': '2'}, {'guid': '3'}]),
+ sorted(db._find(prop='ё')[0]))
+ self.assertEqual(
+ sorted([{'guid': '2'}, {'guid': '3'}]),
+ sorted(db._find(prop='ю')[0]))
+ self.assertEqual(
+ sorted([{'guid': '3'}]),
+ sorted(db._find(prop='я')[0]))
+
+ self.assertEqual(
+ sorted([{'guid': '1'}, {'guid': '2'}, {'guid': '3'}]),
+ sorted(db._find(query='ё')[0]))
+ self.assertEqual(
+ sorted([{'guid': '2'}, {'guid': '3'}]),
+ sorted(db._find(query='ю')[0]))
+ self.assertEqual(
+ sorted([{'guid': '3'}]),
+ sorted(db._find(query='я')[0]))
+
+ self.assertEqual(
+ sorted([{'guid': '1'}, {'guid': '2'}, {'guid': '3'}]),
+ sorted(db._find(query='prop:ё')[0]))
+ self.assertEqual(
+ sorted([{'guid': '2'}, {'guid': '3'}]),
+ sorted(db._find(query='prop:ю')[0]))
+ self.assertEqual(
+ sorted([{'guid': '3'}]),
+ sorted(db._find(query='prop:я')[0]))
+
def test_find_MultipleFilter(self):
db = Index({'prop': IndexedProperty('prop', 1, 'A')})