summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeif Lotfy <seif@lotfy.com>2010-09-25 15:17:12 +0200
committerSiegfried-Angel Gevatter Pujals <rainct@ubuntu.com>2010-09-25 15:17:12 +0200
commitfc3640d1b087131c66b3290498ac0dd3e1674823 (patch)
tree80e8ccbb9b26ed53a68c355f2e14a7dced43c47d
parentedfb79c4acb3f5fddf7f84364eef6891d7a028fe (diff)
parent34bbc1f87fe49bd84b44b775b6036d308ae7da43 (diff)
downloadzeitgeist-fc3640d1b087131c66b3290498ac0dd3e1674823.tar.gz
Renamed the LeastRecentActor sorting type to OldestActor and implemented
a new LeastRecentActor which does what it was supposed to do (LP: #646124).
-rw-r--r--_zeitgeist/engine/main.py5
-rwxr-xr-xtest/engine-test.py54
-rw-r--r--zeitgeist/datamodel.py5
3 files changed, 44 insertions, 20 deletions
diff --git a/_zeitgeist/engine/main.py b/_zeitgeist/engine/main.py
index 5f7f30a5..74f36616 100644
--- a/_zeitgeist/engine/main.py
+++ b/_zeitgeist/engine/main.py
@@ -343,7 +343,7 @@ class ZeitgeistEngine:
else:
raise NotImplementedError, "Unsupported return_mode."
- if order == ResultType.LeastRecentActor:
+ if order == ResultType.OldestActor:
sql += """
NATURAL JOIN (
SELECT actor, min(timestamp) AS timestamp
@@ -366,7 +366,8 @@ class ZeitgeistEngine:
" GROUP BY subj_origin ORDER BY timestamp DESC",
" GROUP BY subj_origin ORDER BY timestamp ASC",
" GROUP BY subj_origin ORDER BY COUNT(subj_origin) DESC, timestamp DESC",
- " GROUP BY subj_origin ORDER BY COUNT(subj_origin) ASC, timestamp ASC")[order]
+ " GROUP BY subj_origin ORDER BY COUNT(subj_origin) ASC, timestamp ASC",
+ " GROUP BY actor ORDER BY timestamp ASC")[order]
if max_events > 0:
sql += " LIMIT %d" % max_events
diff --git a/test/engine-test.py b/test/engine-test.py
index d8f050f0..25a21f3d 100755
--- a/test/engine-test.py
+++ b/test/engine-test.py
@@ -596,19 +596,8 @@ class ZeitgeistEngineTest(_engineTestClass):
events = self.engine.find_events(
TimeRange(105,107), [], StorageState.Any, 0, ResultType.MostRecentActor)
self.assertEquals([e[0][1] for e in events], ["107", "105"])
-
- def testResultTypesLeastRecentActor(self):
- import_events("test/data/twenty_events.js", self.engine)
-
- events = self.engine.find_events(
- TimeRange.always(),
- [Event.new_for_values(subject_manifestation="stfu:File")],
- StorageState.Any, 0, ResultType.LeastRecentActor)
- self.assertEquals([e[0][1] for e in events], ["100", "101", "105"])
- # LeastRecentActor should really be: 100, 101, 105. See bug #646124.
- # This will be renamed to something like OldestActor.
-
- def testResultTypesLeastRecentActorBug641968(self):
+
+ def testResultTypesOldestActorBug641968(self):
events = [
Event.new_for_values(timestamp=1, actor="boo", subject_uri="tmp/boo"),
Event.new_for_values(timestamp=2, actor="boo", subject_uri="home/boo"),
@@ -619,22 +608,55 @@ class ZeitgeistEngineTest(_engineTestClass):
# Get the least recent actors
ids = self.engine.find_eventids(TimeRange.always(),
- [], StorageState.Any, 0, ResultType.LeastRecentActor)
+ [], StorageState.Any, 0, ResultType.OldestActor)
self.assertEquals(ids, [1, 3, 4])
# Get the least recent actors for "home/boo"
template = Event.new_for_values(subject_uri="home/boo")
ids = self.engine.find_eventids(TimeRange.always(),
- [template], StorageState.Any, 0, ResultType.LeastRecentActor)
+ [template], StorageState.Any, 0, ResultType.OldestActor)
self.assertEquals(ids, [2])
# Let's also try the same with MostRecentActor... Although there
# should be no problem here.
template = Event.new_for_values(subject_uri="home/boo")
ids = self.engine.find_eventids(TimeRange.always(),
- [template], StorageState.Any, 0, ResultType.LeastRecentActor)
+ [template], StorageState.Any, 0, ResultType.OldestActor)
self.assertEquals(ids, [2])
+ def testResultTypesOldestActor(self):
+ import_events("test/data/twenty_events.js", self.engine)
+
+ events = self.engine.find_events(
+ TimeRange.always(),
+ [Event.new_for_values(subject_manifestation="stfu:File")],
+ StorageState.Any, 0, ResultType.OldestActor)
+ self.assertEquals([e[0][1] for e in events], ["100", "101", "105"])
+
+ def testResultTypesLeastRecentActor(self):
+ import_events("test/data/twenty_events.js", self.engine)
+
+ events = self.engine.find_events(
+ TimeRange.always(),
+ [Event.new_for_values(subject_manifestation="stfu:File")],
+ StorageState.Any, 0, ResultType.LeastRecentActor)
+ self.assertEquals([e[0][1] for e in events], ['105', '114', '119'])
+
+ def testResultTypesLeastRecentActor2(self):
+ # The same test as before, but this time with fewer events so that
+ # it is actually understandable.
+ events = [
+ Event.new_for_values(timestamp=1, actor="gedit", subject_uri="oldFile"),
+ Event.new_for_values(timestamp=2, actor="banshee", subject_uri="oldMusic"),
+ Event.new_for_values(timestamp=3, actor="banshee", subject_uri="newMusic"),
+ Event.new_for_values(timestamp=4, actor="gedit", subject_uri="newFile"),
+ ]
+ self.engine.insert_events(events)
+
+ events = self.engine.find_events(TimeRange.always(),
+ [], StorageState.Any, 0, ResultType.LeastRecentActor)
+ self.assertEquals([e[0][1] for e in events], ['3', '4'])
+
def testResultTypesMostPopularOrigin(self):
import_events("test/data/twenty_events.js", self.engine)
diff --git a/zeitgeist/datamodel.py b/zeitgeist/datamodel.py
index 36eb7478..a5dd9bd1 100644
--- a/zeitgeist/datamodel.py
+++ b/zeitgeist/datamodel.py
@@ -1029,14 +1029,15 @@ class ResultType(object):
"ordered by the popularity of the actor"))
LeastPopularActor = enum_factory(("The last event of each different actor,"
"ordered ascendingly by the popularity of the actor"))
- MostRecentActor = enum_factory(("The last event of each different actor"))
- LeastRecentActor = enum_factory(("The first event of each different actor"))
+ MostRecentActor = enum_factory(("The Actor that has been used to most recently"))
+ LeastRecentActor = enum_factory(("The Actor that has been used to least recently"))
MostRecentOrigin = enum_factory(("The last event of each different origin"))
LeastRecentOrigin = enum_factory(("The first event of each different origin"))
MostPopularOrigin = enum_factory(("The last event of each different origin,"
"ordered by the popularity of the origins"))
LeastPopularOrigin = enum_factory(("The last event of each different origin,"
"ordered ascendingly by the popularity of the origin"))
+ OldestActor = enum_factory(("The first event of each different actor"))
INTERPRETATION_DOC = \