Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@tomeuvizoso.net>2008-08-22 16:16:01 (GMT)
committer Tomeu Vizoso <tomeu@tomeuvizoso.net>2008-08-22 16:41:37 (GMT)
commitd79d5f67858c669c42e75141fdf87cd3f1a2bb2a (patch)
treee538299243299ca7428d1c92053c6eec6512c3a7
parent04e50db67c15d6c905400c8707e77e45bde92c55 (diff)
Implement get_uniquevaluesfor
-rw-r--r--src/olpc/datastore/datastore.py8
-rw-r--r--src/olpc/datastore/indexstore.py21
2 files changed, 22 insertions, 7 deletions
diff --git a/src/olpc/datastore/datastore.py b/src/olpc/datastore/datastore.py
index 803d647..23c1f21 100644
--- a/src/olpc/datastore/datastore.py
+++ b/src/olpc/datastore/datastore.py
@@ -159,8 +159,12 @@ class DataStore(dbus.service.Object):
in_signature='sa{sv}',
out_signature='as')
def get_uniquevaluesfor(self, propertyname, query=None):
- return []
-
+ if propertyname != 'activity':
+ raise ValueError('Only ''activity'' is a supported property name')
+ if query:
+ raise ValueError('The query parameter is not supported')
+ return self._index_store.get_activities()
+
@dbus.service.method(DS_DBUS_INTERFACE,
in_signature='s',
out_signature='')
diff --git a/src/olpc/datastore/indexstore.py b/src/olpc/datastore/indexstore.py
index 6336b62..0b8f85f 100644
--- a/src/olpc/datastore/indexstore.py
+++ b/src/olpc/datastore/indexstore.py
@@ -15,6 +15,9 @@ _VALUE_MIME_TYPE = 3
_VALUE_ACTIVITY = 4
_VALUE_KEEP = 5
+_PREFIX_UID = 'Q'
+_PREFIX_ACTIVITY = 'A'
+
_PROPERTIES_NOT_TO_INDEX = ['timestamp', 'activity_id', 'keep', 'preview']
class IndexStore(object):
@@ -23,7 +26,7 @@ class IndexStore(object):
self._database = WritableDatabase(index_path, xapian.DB_CREATE_OR_OPEN)
def _document_exists(self, uid):
- postings = self._database.postlist('Q' + uid)
+ postings = self._database.postlist(_PREFIX_UID + uid)
try:
postlist_item = postings.next()
except StopIteration:
@@ -32,7 +35,9 @@ class IndexStore(object):
def store(self, uid, properties):
document = Document()
- document.add_term('Q' + uid)
+ document.add_term(_PREFIX_UID + uid)
+ document.add_term(_PREFIX_ACTIVITY + properties['activity'])
+
document.add_value(_VALUE_UID, uid)
document.add_value(_VALUE_TIMESTAMP, str(properties['timestamp']))
document.add_value(_VALUE_ACTIVITY_ID, properties['activity_id'])
@@ -59,7 +64,7 @@ class IndexStore(object):
if not self._document_exists(uid):
self._database.add_document(document)
else:
- self._database.replace_document('Q' + uid, document)
+ self._database.replace_document(_PREFIX_UID + uid, document)
self._database.flush()
def _extract_text(self, properties):
@@ -123,7 +128,7 @@ class IndexStore(object):
queries.append(query)
if query_dict.has_key('uid'):
- queries.append(Query('Q' + query_dict['uid']))
+ queries.append(Query(_PREFIX_UID + query_dict['uid']))
if not queries:
queries.append(Query(''))
@@ -145,5 +150,11 @@ class IndexStore(object):
query['timestamp'] = {'start': start, 'end': end}
def delete(self, uid):
- self._database.delete_document('Q' + uid)
+ self._database.delete_document(_PREFIX_UID + uid)
+
+ def get_activities(self):
+ activities = []
+ for term in self._database.allterms(_PREFIX_ACTIVITY):
+ activities.append(term.term[len(_PREFIX_ACTIVITY):])
+ return activities