=== modified file '_zeitgeist/engine/main.py' --- _zeitgeist/engine/main.py 2011-05-04 13:04:53 +0000 +++ _zeitgeist/engine/main.py 2011-05-04 13:36:43 +0000 @@ -482,6 +482,16 @@ sql += wheresql + " ORDER BY timestamp DESC" elif order == ResultType.LeastRecentEvents: sql += wheresql + " ORDER BY timestamp ASC" + elif order == ResultType.MostRecentEventOrigin: + sql += group_and_sort("origin", wheresql, time_asc=False) + elif order == ResultType.LeastRecentEventOrigin: + sql += group_and_sort("origin", wheresql, time_asc=True) + elif order == ResultType.MostPopularEventOrigin: + sql += group_and_sort("origin", wheresql, time_asc=False, + count_asc=False) + elif order == ResultType.LeastPopularEventOrigin: + sql += group_and_sort("origin", wheresql, time_asc=True, + count_asc=True) elif order == ResultType.MostRecentSubjects: # Remember, event.subj_id identifies the subject URI sql += group_and_sort("subj_id", wheresql, time_asc=False) === modified file 'test/data/five_events.js' --- test/data/five_events.js 2011-04-27 21:51:34 +0000 +++ test/data/five_events.js 2011-05-04 13:26:44 +0000 @@ -79,5 +79,5 @@ "storage" : "368c991f-8b59-4018-8130-3ce0ec944157" } ] - } + } ] === modified file 'test/engine-test.py' --- test/engine-test.py 2011-04-29 18:40:27 +0000 +++ test/engine-test.py 2011-05-04 13:36:43 +0000 @@ -1141,6 +1141,42 @@ [], StorageState.Any, 0, ResultType.LeastRecentActor) self.assertEquals([e.timestamp for e in events], ['3', '4']) + def testResultTypesMostPopularEventOrigin(self): + import_events("test/data/twenty_events.js", self.engine) + + events = self.engine.find_events( + TimeRange.always(), [], StorageState.Any, 0, + ResultType.MostPopularEventOrigin) + self.assertEquals([e[0][5] for e in events], + ["origin1", "origin3", "origin2"]) + self.assertEquals([e.timestamp for e in events], ["102", "103", "100"]) + + def testResultTypesLeastPopularEventOrigin(self): + import_events("test/data/twenty_events.js", self.engine) + + events = self.engine.find_events( + TimeRange.always(), [], StorageState.Any, 0, + ResultType.LeastPopularEventOrigin) + self.assertEquals([e[0][5] for e in events], + ["origin2", "origin3", "origin1"]) + self.assertEquals([e.timestamp for e in events], ["100", "103", "102"]) + + def testResultTypesMostRecentEventOrigin(self): + import_events("test/data/twenty_events.js", self.engine) + + events = self.engine.find_events( + TimeRange.always(), [], StorageState.Any, 0, + ResultType.MostRecentEventOrigin) + self.assertEquals([e.timestamp for e in events], ["103", "102", "100"]) + + def testResultTypesLeastRecentEventOrigin(self): + import_events("test/data/twenty_events.js", self.engine) + + events = self.engine.find_events( + TimeRange.always(), [], StorageState.Any, 0, + ResultType.LeastRecentEventOrigin) + self.assertEquals([e.timestamp for e in events], ["100", "102", "103"]) + def testResultTypesMostPopularSubjectOrigin(self): import_events("test/data/twenty_events.js", self.engine) === modified file 'test/testutils.py' --- test/testutils.py 2011-04-26 18:44:20 +0000 +++ test/testutils.py 2011-05-04 13:35:43 +0000 @@ -58,6 +58,7 @@ for sd in subjects: subj = Subject() subj.uri = str(sd.get("uri", "").encode("UTF-8")) + subj.current_uri = str(sd.get("current_uri", "")).encode("UTF-8") subj.interpretation = str(sd.get("interpretation", "").encode("UTF-8")) subj.manifestation = str(sd.get("manifestation", "").encode("UTF-8")) subj.origin = str(sd.get("origin", "").encode("UTF-8")) === modified file 'zeitgeist/datamodel.py' --- zeitgeist/datamodel.py 2011-04-27 21:42:06 +0000 +++ zeitgeist/datamodel.py 2011-05-04 13:37:54 +0000 @@ -1060,7 +1060,8 @@ 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 subject origin")) - LeastRecentOrigin = enum_factory(("The first event of each different subject origin")) + LeastRecentOrigin = enum_factory(("The last event of each different subject " + "origin, ordered by least recently used first")) MostPopularOrigin = enum_factory(("The last event of each different subject origin," "ordered by the popularity of the origins")) LeastPopularOrigin = enum_factory(("The last event of each different subject origin," @@ -1082,6 +1083,21 @@ "ordered by the popularity of the mimetype")) LeastPopularMimeType = enum_factory(("One event for each mimetype only, " "ordered ascendingly by popularity of the mimetype")) + MostRecentEventOrigin = enum_factory(("The last event of each different origin")) + LeastRecentEventOrigin = enum_factory(("The last event of each different " + " origin, ordered by least recently used first")) + MostPopularEventOrigin = enum_factory(("The last event of each different origin," + "ordered by the popularity of the origins")) + LeastPopularEventOrigin = enum_factory(("The last event of each different origin," + "ordered ascendingly by the popularity of the origin")) + + # We should eventually migrate over to those names to disambiguate + # subject origin and event origin + # FIXME: this is breaking badly + #MostRecentSubjectOrigin = MostRecentOrigin + #LeastRecentSubjectOrigin = LeastRecentOrigin + #MostPopularSubjectOrigin = MostPopularOrigin + #LeastPopularSubjectOrigin = LeastPopularOrigin INTERPRETATION_DOC = \ """In general terms the *interpretation* of an event or subject is an abstract