Zeitgeist Framework 0.3.1 "Mystical Tremor"

Second development release. All internal API should be frozen. That is extension API fully ready. Most dataproviders are working.

Milestone information

Project:
Zeitgeist Framework
Series:
0.3
Version:
0.3.1
Code name:
Mystical Tremor
Released:
 
Registrant:
Mikkel Kamstrup Erlandsen
Release registered:
Active:
No. Drivers cannot target bugs and blueprints to this milestone.  

Download RDF metadata

Activities

Assigned to you:
No blueprints or bugs assigned to you.
Assignees:
7 Markus Korn, 3 Mikkel Kamstrup Erlandsen, 1 Seif Lotfy, 1 Siegfried Gevatter
Blueprints:
2 Implemented
Bugs:
2 Invalid, 14 Fix Released

Download files for this release

After you've downloaded a file, you can verify its authenticity using its MD5 sum or signature. (How do I verify a download?)

File Description Downloads
download icon zeitgeist-0.3.1.tar.gz (md5, sig) Source release 122
last downloaded 10 weeks ago
Total downloads: 122

Release notes 

Zeitgeist 0.3.1 is the second release in what is to become the stable 0.4 series.

 * Add a FindRelatedUris() method to the core DBus API (also to the Python
   client lib). This can be used to find URIs that occur in relation to
   a set of events, sorted by relevancy. Please note that FindRelatedUris()
   is still marked as experimental and we can not guarantee stability yet
 * The Zeitgeist engine now exposes a Blacklist API over DBus which can be
   used to block events from entering the log
 * The engine now also exposes a fine grained monitoring system that can be
   used to listen for updates to the log
 * InsertEvents() now return an event id of 0 for events that are blocked
   or otherwise fail insertion
 * Extensions can now provide hooks to block or change events before they
   are inserted into the log
 * Remove support for more than one backend. What was known as the
   "Resonance backend" is now just "the engine"
 * Removed method from DBus API GetLastTimestampForActor
 * Lots more unit tests added
 * The engine will now load a default set of extensions on startup
 * Overhaul and restructure our Sphinx-based API-documentation system. This
   has facilitated automagic documentation of our enumerations and Manifestation
   and Interpretation classes
 * API documentation is more or less at 100% both for the DBus API and
   the Python client library
 * Bash completion for zeitgeist-daemon
 * Code style cleanups
 * Bugfix: You may now request more than 999 events in one go from GetEvents()
 * Bugfix: In find_eventids where using more than one event template resulted
   in all but the first one ignoring the timestamp restriction
 * Bugfix: Fix URL of Interpretation.APPLICATION to correct Nepomuk URI
 * More bugfixes

Changelog 

View the full changelog

2010-01-10 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * NEWS:

 Update NEWS prior to 0.3.1 release

2010-01-10 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * VERSION:
 * configure.ac:

 Bump version to 0.3.1

2010-01-10 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/main.py:
 * _zeitgeist/engine/remote.py:
 * doc/zeitgeist/source/dbus_api.rst:
 * test/engine-test.py:
 * zeitgeist/client.py:

 Rename the method FindRelated -> FindRelatedUris, likewise inside the engine

2010-01-10 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/remote.py:
 * doc/zeitgeist/source/dbus_api.rst:
 * test/remote-test.py:
 * zeitgeist/client.py:

 Lots of doc polish on the dbus.FindRelated() and client.find_related*() and fiddle about with method paramters to simplify it and make it more coherent with the rest of the API

2010-01-10 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * test/engine-test.py:

 Fix engine test case 'testRelatedForMultipleEvents'. The relevancy ranking had changed by the recent tweak to the algo in engine.find_related()

2010-01-10 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/main.py:

 find_related: increment the number of ranges analyzed from
 7 to 100. This gives much better results.

 That LIMIT is only there to avoid too much querying when
 a long time period is given for a very used item. Long term
 we need to figure out something better.

2010-01-10 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * doc/zeitgeist/source/dbus_api.rst:
 * zeitgeist/datamodel.py:

 Polishing of the docs, adding some more cross refs and fixing some grammar

2010-01-09 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * test/test-engine-extension.rst:

 Update the extension tutorial to reflect that we now have one default extenion, namely "Blacklist"

2010-01-09 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * doc/zeitgeist/source/dbus_api.rst:
 * zeitgeist/datamodel.py:

 Document the event dbus wire format in the DBus API section

 Specify that subjects requiting a network interface have subject.storage="net" and subjects that are deleted have subject.storage="deleted"

2010-01-09 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/extensions/blacklist.py:
 * _zeitgeist/engine/remote.py:
 * doc/zeitgeist/source/dbus_api.rst:

 Update DBus API docs with the Blacklist API

2010-01-07 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * zeitgeist/datamodel.py:

 Document how event.actor is encoded (as fx. app://firefox.desktop). This fixes bug #488790: "What value should event.actor have?"

2010-01-06 Markus Korn <email address hidden>

 * _zeitgeist/engine/notify.py:

 fixed ValueError (wrong number of argument to
 MonitorManager.remove_monitor()) and RuntimeError (changing size of
 MonitorManager._connections)

2010-01-06 Markus Korn <email address hidden>

 * _zeitgeist/engine/notify.py:

 fixed MonitorManager to handle NameOwnerChanged signals correctly.
 The monitor class is called _MonitorProxy and not just Monitor

2010-01-06 Markus Korn <email address hidden>

 * _zeitgeist/engine/extensions/blacklist.py:

 The blacklist is running in its own DBus scope (object_path and interface
 address). Using this instead of the generic zeitgeist addresses.

2010-01-06 Markus Korn <email address hidden>

 * _zeitgeist/engine/remote.py:
 * zeitgeist/client.py:

 Fixed code to find related events. The API and engine methods got renamed
 some time ago, but not all neccessary bits where updated accordingly

2010-01-05 Markus Korn <email address hidden>

 * _zeitgeist/engine/__init__.py:

 * If set, zeitgeist is now using the ZEITGEIST_DATABASE_PATH env variable to
 get the location of the database again.

2010-01-05 Markus Korn <email address hidden>

 * zeitgeist/datamodel.py:

 added missing argument to TimeRange.always()

2010-01-05 Markus Korn <email address hidden>

 * doc/zeitgeist/source/conf.py:

 * fixed generation of API docs in cases where zeitgeist is also installed
 systemwide

2010-01-04 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/extensions/blacklist.py:
 * _zeitgeist/engine/main.py:
 * _zeitgeist/engine/remote.py:
 * test/benchmarks.py:
 * test/engine-extension-test.py:
 * test/engine-test.py:

 Fix constants stuff

2010-01-04 Siegfried-Angel Gevatter Pujals <email address hidden>

 * zeitgeist/datamodel.py:

 Add .from_seconds_now to datamodel.TimeRange and switch
 all such methods from static to classmethods.

2010-01-04 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/extensions:
 * _zeitgeist/engine/extensions/Makefile.am:
 * _zeitgeist/engine/extensions/__init__.py:
 * _zeitgeist/engine/extensions/blacklist.py:
 * test/blacklist-test.py:
 * _zeitgeist/engine/Makefile.am:
 * _zeitgeist/engine/__init__.py:
 * _zeitgeist/engine/extension.py:
 * _zeitgeist/engine/main.py:
 * _zeitgeist/engine/remote.py:
 * configure.ac:
 * test/benchmarks.py:
 * test/engine-extension-test.py:
 * test/engine-test.py:

 Merge with lp:~kamstrup/zeitgeist/blacklist

 - Add Mikkel Kamstrup's implementation of a blacklist,
 together with the needed changes to the extensions system.

 Good work Mikkel!

 Some changes from my side:

 - Add a .constants namespace to __init__.py and move several
 constants into there. They can be used both by Zeitgeist
 itself and by extensions (eg. DATA_PATH).

 - Fix test/engine-extension-test.py so that it doesn't break
 now that there are extensions loaded by default.

 - Some other little tweaks.

2009-12-31 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/extensions/Makefile.am:
 * _zeitgeist/engine/Makefile.am:
 * configure.ac:

 Add needed autofoo magic to include the new blacklist extension files in the distribution tarball

2009-12-29 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/extension.py:
 * _zeitgeist/engine/extensions/blacklist.py:

 Updates reflecting Markus' comments on LP review

2009-12-29 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * test/blacklist-test.py:

 Add a test to the blacklist extension to check that events are indeed filtered/let through correctly

2009-12-29 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * doc/zeitgeist/source/client.rst:
 * doc/zeitgeist/source/datamodel.rst:
 * doc/zeitgeist/source/dbus_api.rst:
 * doc/zeitgeist/source/engine.rst:
 * doc/zeitgeist/source/tutorial_engine_extension.rst:
 * .bzrignore:
 * _zeitgeist/engine/remote.py:
 * _zeitgeist/engine/resonance_engine.py:
 * doc/Makefile.am:
 * doc/zeitgeist/source/conf.py:
 * doc/zeitgeist/source/index.rst:
 * test/datamodel-test.py:
 * test/remote-test.py:
 * test/resonance-engine-test.py:
 * zeitgeist/client.py:
 * zeitgeist/datamodel.py:
 * doc/dbus:
 * doc/zeitgeist:

 Merge in latest changes from trunk in order to have a clean diff for review

2009-12-29 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * test/resonance-engine-test.py:

 Disable all extensions in resonance-engine-test.py. Extensions like Blacklist keep state around which can not know how to reset

2009-12-29 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/extensions/blacklist.py:

 Fix buggy serilization of events in _event2popo()

2009-12-29 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/extensions/blacklist.py:

 Use unicode instead of str when converting Events into POJOs for pickling

2009-12-29 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/extension.py:
 * _zeitgeist/engine/resonance_engine.py:

 Ensure proper loading and unloading of engine extensions

2009-12-29 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/__init__.py:

 Bugfix: Properly extract engine name when detecting if we already have an engine instance in create_engine()

2009-12-21 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * test/blacklist-test.py:
 * _zeitgeist/engine/extensions/blacklist.py:

 Blacklisting DBus interface actually working, and two test cases are running.

 CAVEAT: I consistently get a warning in my log which needs debugging:
 WARNING:zeitgeist.blacklist:Failed to load blacklist config file /home/mikkel/.config/zeitgeist/blacklist.pickle: Invalid subject data length 71, expected 7

2009-12-17 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/extension.py:
 * _zeitgeist/engine/extensions/blacklist.py:
 * _zeitgeist/engine/resonance_engine.py:

 Make the new blacklist infrastructure actually runnable

2009-12-16 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/__init__.py:
 * _zeitgeist/engine/extension.py:
 * _zeitgeist/engine/resonance_engine.py:

 Add functionality to load a default set of extensions given string definiting their fully qualified paths and hook this up the engine

2009-12-16 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/extensions:
 * _zeitgeist/engine/extensions/blacklist.py:

 Beginnings of a blacklist extension

2010-01-04 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/Makefile.am:
 * _zeitgeist/engine/__init__.py:
 * _zeitgeist/engine/remote.py:
 * test/benchmarks.py:
 * test/run-all-tests.py:
 * test/test-engine-extension.rst:
 * _zeitgeist/engine/resonance_engine.py:
 * _zeitgeist/engine/main.py:
 * test/resonance-engine-extension-test.py:
 * test/engine-extension-test.py:
 * test/resonance-engine-test.py:
 * test/engine-test.py:

 Remove the "resonance" branding everywhere and what remains
 of the multiple backends code (which was pretty much broken
 by now, hopefully won't be needed ever again, and it
 impedes some further simplifications).

2010-01-01 Siegfried-Angel Gevatter Pujals <email address hidden>

 * zeitgeist/__init__.py:

 Add missing import.

2009-12-30 Siegfried-Angel Gevatter Pujals <email address hidden>

 * extra/zeitgeist-daemon.bash_completion:
 * zeitgeist-daemon.py:

 Add Bash tab-completion.

2009-12-30 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/singleton.py:
 * doc/zeitgeist-daemon.1:
 * zeitgeist-daemon.py:
 * zeitgeist/__init__.py:
 * zeitgeist/datamodel.py:

 Update zeitgeist-daemon to use OptionParser.

2009-12-30 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/extension.py:
 * zeitgeist/__init__.py:
 * zeitgeist/_config.py.in:

 More changes to _config. Wrap it around a class so that we can
 add additional stuff to it and try to figure out the bzr revision
 when running from the repository.

 I'd probably make sense to move all this config stuff into
 _zeitgeist/, but for that the autotools stuff needs to be updated
 to install zeitgeist-daemon into the same directory as the private
 zeitgeist module and to only put a symlink into /usr/bin.

2009-12-30 Siegfried-Angel Gevatter Pujals <email address hidden>

 * zeitgeist/__init__.py:

 Change zeitgeist/__init__.py so that MockConfig is still used
 after running "make", without the need to remove _config.py.

2009-12-30 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/resonance_engine.py:
 * _zeitgeist/loggers/datasources/recent.py:
 * zeitgeist/datamodel.py:

 Move get_timestamp_for_now from resonance_engine.py to datamodel.py
 and use it everywhere.

2009-12-30 Siegfried-Angel Gevatter Pujals <email address hidden>

 * zeitgeist-daemon.py:

 Remove the "Deine Mudda rocks" easter-egg.

2009-12-30 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/remote.py:
 * _zeitgeist/engine/resonance_engine.py:
 * test/remote-test.py:
 * test/resonance-engine-test.py:
 * zeitgeist/client.py:

 Rename get_most_used_with to find_related and move time_range
 to be the first argument.

 (This is some old uncommitted stuff I had lying around here
 and doesn't fix all of #498878.)

2009-12-20 Siegfried-Angel Gevatter Pujals <email address hidden>

 * test/remote-test.py:
 * zeitgeist/client.py:

 Add methods for get_most_used_with_subjects to client.py

2009-12-20 Siegfried-Angel Gevatter Pujals <email address hidden>

 * zeitgeist/client.py:

 client.py: create _safe_reply_handler and _safe_error_handler
 to avoid duplicating the sanity checks for them everywhere.

2009-12-20 Siegfried-Angel Gevatter Pujals <email address hidden>

 * zeitgeist/client.py:

 Split most of the lines in client.py exceeding 80 characters

2009-12-20 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/remote.py:
 * _zeitgeist/engine/resonance_engine.py:
 * test/remote-test.py:
 * test/resonance-engine-test.py:

 Change GetMostUsedWithSubjects to take an event_template
 instead of a list of URIs. This makes it much more powerful.

2009-12-18 Markus Korn <email address hidden>

 * doc/zeitgeist/source/conf.py:
 * doc/zeitgeist/source/datamodel.rst:
 * zeitgeist/datamodel.py:

 Enums in ResultType and StorageState are now subclasses of int with a
 docstring. This docstrings are used to autogenerate docs instead of using
 the hardcoded item-list we had before.

2009-12-17 Markus Korn <email address hidden>

 * doc/zeitgeist/source/conf.py:
 * doc/zeitgeist/source/datamodel.rst:
 * zeitgeist/datamodel.py:

 Enums in ResultType and StorageState are now subclasses of int with a
 docstring. This docstrings are used to autogenerate docs instead of using
 the hardcoded item-list we had before.

2009-12-17 Markus Korn <email address hidden>

 * doc/zeitgeist/source/tutorial_engine_extension.rst:
 * doc/zeitgeist/source/index.rst:

 Added the first tutorial 'Tutorial - How do extensions to the engine work?'
 to the documentation of the engine. It is a symlink to the extension
 framework doctest.

2009-12-17 Seif Lotfy <email address hidden>

 * zeitgeist/client.py:

 allow asking for the API version over the ZeitgeistClient

2009-12-16 Markus Korn <email address hidden>

 * doc/zeitgeist/source/client.rst:
 * doc/zeitgeist/source/datamodel.rst:
 * doc/zeitgeist/source/dbus_api.rst:
 * doc/zeitgeist/source/engine.rst:
 * .bzrignore:
 * doc/Makefile.am:
 * doc/zeitgeist/source/conf.py:
 * doc/zeitgeist/source/index.rst:
 * test/datamodel-test.py:
 * zeitgeist/datamodel.py:
 * doc/dbus:
 * doc/zeitgeist:

 * Started restructuring the documentation (LP: #497324)
 - splitted up the huge index page into smaller bits
 - shpinx does now generate the documentation for Symbols
 - change things such that we cannot only ship a DBus API documentation
 but also development related docs about our engine.
 * fix some testcases, because of the changes to the documentation framework
 the docstring if Symbols are looking different now.

2009-12-16 Markus Korn <email address hidden>

 * zeitgeist/datamodel.py:

 added url to the symbol's docstring

2009-12-16 Markus Korn <email address hidden>

 * doc/zeitgeist/source/datamodel.rst:

 handle StorageState and ResultType as data

2009-12-16 Markus Korn <email address hidden>

 * zeitgeist/datamodel.py:

 readded object doc for SymbolCollections, fixed typo

2009-12-16 Markus Korn <email address hidden>

 * doc/zeitgeist/source/conf.py:

 removed some inports

2009-12-16 Markus Korn <email address hidden>

 * doc/zeitgeist/source/conf.py:
 * doc/zeitgeist/source/datamodel.rst:
 * zeitgeist/datamodel.py:

 Added SymbolDocumenter to the docs, this allows creating of documentation
 for Interpretation and Manifestation on the fly, we don't need the __doc__
 hack anymore

2009-12-16 Markus Korn <email address hidden>

 * zeitgeist/datamodel.py:

 merged lp:zeitgeist

2009-12-16 Markus Korn <email address hidden>

 * .bzrignore:

 bzr ignore files related to the process of building the docs

2009-12-16 Markus Korn <email address hidden>

 * doc/zeitgeist/source/engine.rst:

 added dummy documentation source for the engine

2009-12-16 Markus Korn <email address hidden>

 * doc/zeitgeist/source/dbus_api.rst:

 added index entries for DBus interfaces

2009-12-16 Markus Korn <email address hidden>

 * doc/zeitgeist/source/index.rst:

 added some text to the index page of the documentation

2009-12-16 Markus Korn <email address hidden>

 * doc/zeitgeist/source/index.rst:

 changed order of entries in the docs TOC

2009-12-16 Markus Korn <email address hidden>

 * doc/zeitgeist/source/client.rst:
 * doc/zeitgeist/source/datamodel.rst:
 * doc/zeitgeist/source/dbus_api.rst:
 * doc/zeitgeist/source/index.rst:

 splitted index.html into multible different pages

2009-12-16 Markus Korn <email address hidden>

 * doc/zeitgeist/source/conf.py:

 made clear the documentation is not only about the DBUS API

2009-12-16 Markus Korn <email address hidden>

 * doc/Makefile.am:
 * doc/dbus:
 * doc/zeitgeist:

 renamed doc/dbus -> doc/zeitgeist

2009-12-16 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/loggers/datasources/evolution.py.in:
 * _zeitgeist/loggers/datasources/firefox.py.in:
 * _zeitgeist/loggers/datasources/tomboy.py.in:
 * _zeitgeist/loggers/datasources/twitter.py.in:

 Delete old inactive data sources for now.

2009-12-16 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/remote.py:
 * test/remote-test.py:

 Fix GetMostUsedWithSubjects D-Bus to take all 5
 arguments required by get_most_used_with_subjects.

 Fix the test-case in ./test/remote-test.py.

2009-12-16 Markus Korn <email address hidden>

 * zeitgeist/datamodel.py:

 changed type of zeitgeist.datamodel.SymbolCollection from dict to object.
 This removes the overhead of having an aditional dict around, instead we are
 using __dict__ directly

2009-12-16 Markus Korn <email address hidden>

 * test/remote-test.py:

 added (failing) testcase for RemoteInterface.GetMostUsedWithSubjects

2009-12-15 Markus Korn <email address hidden>

 * _zeitgeist/engine/remote.py:

 fixed IndentionError in remote.py (LP: #497139)

2009-12-15 Seif Lotfy <email address hidden>

 * _zeitgeist/engine/remote.py:

 fixed little issue with signatures for get_most_used_with_subjects

2009-12-15 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/remote.py:
 * _zeitgeist/engine/resonance_engine.py:
 * test/resonance-engine-test.py:

 Rename get_most_used_with_subject to _subjects and let
 it take a list of subject URIs.

2009-12-14 Markus Korn <email address hidden>

 * _zeitgeist/engine/remote.py:
 * doc/dbus/source/index.rst:
 * test/remote-test.py:
 * zeitgeist/client.py:
 * zeitgeist/datamodel.py:

 * If GetEvents is called with an event id which does either not exist or is
 blocked a NULL_EVENT struct is returned (LP: #495392)
 * Documented this behaviour and also the fix for bug 495179

2009-12-14 Markus Korn <email address hidden>

 * doc/dbus/Makefile:

 merged lp:zeitgeist

2009-12-14 Markus Korn <email address hidden>

 * _zeitgeist/engine/remote.py:
 * doc/dbus/source/index.rst:
 * zeitgeist/client.py:
 * zeitgeist/datamodel.py:

 documented NULL_EVENT

2009-12-14 Markus Korn <email address hidden>

 * _zeitgeist/engine/resonance_engine.py:
 * test/remote-test.py:
 * test/resonance-engine-test.py:

 merged lp:zeitgeist

2009-12-14 Markus Korn <email address hidden>

 * _zeitgeist/engine/remote.py:

 documented `0` return value in InsertEvents

2009-12-11 Markus Korn <email address hidden>

 * test/data/apriori_events.js:
 * _zeitgeist/engine/remote.py:
 * _zeitgeist/engine/resonance_engine.py:
 * test/resonance-engine-test.py:
 * zeitgeist/datamodel.py:

 merged latest changes from lp:zeitgeist

2009-12-11 Markus Korn <email address hidden>

 * _zeitgeist/engine/remote.py:

 simpllified loop in GetEvents()

2009-12-11 Markus Korn <email address hidden>

 * zeitgeist/datamodel.py:

 change NULL_EVENT to python tuple, thanks RainCT for this hint

2009-12-11 Markus Korn <email address hidden>

 * zeitgeist/client.py:
 * zeitgeist/datamodel.py:

 * completed renaming Event.new_from_raw() -> Event.new_from_struct()
 * made Event.new_for_values() a classmethod
 * made Event._dict_contains_subject_keys() a staticmethod

2009-12-11 Markus Korn <email address hidden>

 * zeitgeist/datamodel.py:

 made Event.new_for_data a classmethod

2009-12-11 Markus Korn <email address hidden>

 * _zeitgeist/engine/remote.py:
 * test/remote-test.py:
 * zeitgeist/client.py:
 * zeitgeist/datamodel.py:

 Added NULL_EVENT as one approach to fix (LP: #495392)
 This branch still needs some tweaks but should be able to show the overall
 idea

2009-12-14 Markus Korn <email address hidden>

 * doc/dbus/Makefile:

 removed creation of 'zeitgeist' symlink in _zeitgeist/engine at doc
 build-time. This is handled on python level in doc/dbus/source/conf.py

2009-12-13 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/resonance_engine.py:
 * test/resonance-engine-test.py:

 Fix regression in FindEventIds because of which the return
 value of where.may_have_results() and where.sql were incorrect
 in the case that a condition with no results but including a
 timestamp was asked for.

2009-12-13 Markus Korn <email address hidden>

 * test/resonance-engine-test.py:

 'fixed' the engine testcase for bug 496109, this test is failing now too

2009-12-13 Markus Korn <email address hidden>

 * test/remote-test.py:
 * test/resonance-engine-test.py:

 Added testcases for bug 496109
 The pure engine testcase is working as expected, but the testcase
 using the remote API fails.

2009-12-11 Siegfried-Angel Gevatter Pujals <email address hidden>

 * test/data/apriori_events.js:
 * _zeitgeist/engine/remote.py:
 * _zeitgeist/engine/resonance_engine.py:
 * test/resonance-engine-test.py:
 * zeitgeist/datamodel.py:

 Merge with lp:~zeitgeist/zeitgeist/apriori/, adding a
 get_most_used_with_subject function and some cleanup of the
 WHERE clause handling stuff.

2009-12-11 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/resonance_engine.py:
 * test/resonance-engine-test.py:

 Fix regression in WhereClause stuff with last commit.

2009-12-11 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/resonance_engine.py:
 * test/resonance-engine-test.py:

 Order results from get_most_used_with_subject from
 most to least relevant.

2009-12-11 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/resonance_engine.py:
 * test/data/apriori_events.js:
 * test/resonance-engine-test.py:
 * zeitgeist/datamodel.py:

 Finish up get_most_used_with_subject so that the
 result_event_templates filter is used, and add a
 testcase for this.

 Add some more sugar to the WhereClause class.

2009-12-09 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/resonance_engine.py:
 * test/resonance-engine-test.py:

 Change get_most_used_with_subject to use a custom query to
 find the initial set of timestamps, instead of calling both
 get_events and find_event_ids.

 Also add a docstring to it and let it take several additional
 arguments (not all are implemented yet).

2009-12-09 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/resonance_engine.py:

 Optimize SQL.

2009-12-09 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/resonance_engine.py:

 Build the WHERE clause construction stuff from find_eventids into a separate function.

2009-12-08 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/resonance_engine.py:

 Change query from using LeastRecent to MostRecentEvents.

2009-12-08 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/remote.py:
 * _zeitgeist/engine/resonance_engine.py:
 * test/resonance-engine-test.py:

 Rename function to "get_most_used_with_subject", add a
 D-Bus method for it and add a check to avoid ZeroDivisionError.

2009-12-08 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/resonance_engine.py:

 More cleanup.

2009-12-08 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/resonance_engine.py:
 * test/resonance-engine-test.py:

 A bit more cleanup.

2009-12-08 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/resonance_engine.py:

 Little bit of cleanup :).

2009-12-08 Seif Lotfy <email address hidden>

 * _zeitgeist/engine/resonance_engine.py:
 * test/resonance-engine-test.py:

 fixed test case and removed prints

2009-12-08 Seif Lotfy <email address hidden>

 * test/data/apriori_events.js:
 * _zeitgeist/engine/resonance_engine.py:
 * test/resonance-engine-test.py:

 added a most_used using a very simplified "A Priori" approach

2009-12-11 Markus Korn <email address hidden>

 * _zeitgeist/engine/remote.py:
 * _zeitgeist/engine/resonance_engine.py:
 * test/resonance-engine-extension-test.py:
 * test/resonance-engine-test.py:

 From now on an event-id of 0 indicates an error (LP: #495179)
 Implemented this convention for InsertEvent

2009-12-11 Markus Korn <email address hidden>

 * _zeitgeist/engine/resonance_engine.py:

 renamend error wrapper in ZeitgeistEngine as suggested by Mikkel

2009-12-11 Markus Korn <email address hidden>

 * _zeitgeist/engine/resonance_engine.py:

 added comment about finding the last event id

2009-12-11 Markus Korn <email address hidden>

 * test/resonance-engine-test.py:

 fixed engine tests to respect new error handling for insert_events

2009-12-11 Markus Korn <email address hidden>

 * _zeitgeist/engine/resonance_engine.py:

 as the last_event_id is raised before each insert it is safe to use 0 as
 beginning id if we are using an empty database.

2009-12-11 Markus Korn <email address hidden>

 * _zeitgeist/engine/remote.py:
 * _zeitgeist/engine/resonance_engine.py:
 * test/resonance-engine-extension-test.py:

 From now on an event-id of 0 indicates an error (LP: #495179)
 This revisions implements this convention for InsertEvent.

2009-12-10 Markus Korn <email address hidden>

 * test/resonance-engine-extension-test.py:

 added failing testcase to test insert_hook for extensions

2009-12-08 Siegfried-Angel Gevatter Pujals <email address hidden>

 * Makefile.am:

 Change changelog generation rule in Makefile.am to only
 show changes after 0.1.0 was released.

 This is already long enough and saves us all the commits
 which included GUI stuff. (In fact I don't believe that
 we need a ChangeLog, the NEWS file is more than enough,
 but that's a different topic :)).

2009-12-08 Siegfried-Angel Gevatter Pujals <email address hidden>

 * Makefile.am:

 Changes to the hashbang substitution in Makefile.am.

2009-12-07 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/extension.py:
 * _zeitgeist/engine/resonance_engine.py:

 Change name of hook methods in Extension to {get,insert}_event_hook(). And move all hooks logic into the ExtensionCollection class

2009-12-07 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/extension.py:
 * _zeitgeist/engine/resonance_engine.py:

 Implement two hooks extensions may implement in order to filter, change, or block events as they enter or leave the engine

2009-12-07 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/remote.py:
 * _zeitgeist/engine/resonance_engine.py:

 Make it the responsibility of remote.py to wrap raw DBus events into Event class instances.

 This removes DBus logic from the core engine

2009-12-07 Markus Korn <email address hidden>

 * _zeitgeist/engine/resonance_engine.py:

 removed redundant brackets

2009-12-07 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/resonance_engine.py:

 Change GetEvents() to use our own escaping instead
 of the one provided by sqlite3. This allows us to
 fetch more than 999 events at once.

2009-12-07 Siegfried-Angel Gevatter Pujals <email address hidden>

 * _zeitgeist/engine/resonance_engine.py:
 * test/data/twenty_events.js:
 * test/resonance-engine-test.py:

 Fix bug in find_eventids where using more than one event
 template resulted in all but the first one ignoring the
 timestamp restriction.

 Also update the test case we created for bug #490110 to
 catch this problem now that we really know what it is.

2009-12-06 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/remote.py:
 * doc/dbus/source/index.rst:
 * zeitgeist/client.py:

 Prettify the docs about org.gnome.zeitgeist.Monitor

2009-12-06 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * zeitgeist/datamodel.py:

 More doc polish

2009-12-06 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * zeitgeist/datamodel.py:

 Fix URL of Interpretation.APPLICATION to correct Nepomuk URI

2009-12-06 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * doc/dbus/source/index.rst:
 * zeitgeist/datamodel.py:

 Make the generated docs for Symbols (Interpretation and Manifestation) a lot prettier and also print their display name and URI

2009-12-06 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/notify.py:
 * _zeitgeist/engine/Makefile.am:
 * _zeitgeist/engine/remote.py:
 * _zeitgeist/engine/resonance_engine.py:
 * doc/dbus/source/index.rst:
 * test/datamodel-test.py:
 * test/remote-test.py:
 * zeitgeist/client.py:
 * zeitgeist/datamodel.py:

 Merge lp:~kamstrup/zeitgeist/notifications

 This brings in a new DBus API for apps to be notified when the engine inserts or deletes events.

 It works like this: The client sets up a DBus object implementing org.gnome.zeitgeist.Monitor
 and sends the DBus path of this object together with a time range and a set of event tempaltes
 to the engine. The engine will then notify the monitor object when a matching event is changed.

2009-12-05 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/notify.py:
 * test/remote-test.py:

 Allow an empty set of Monitor templates to match anything

2009-12-05 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/notify.py:
 * _zeitgeist/engine/remote.py:
 * _zeitgeist/engine/resonance_engine.py:
 * test/datamodel-test.py:
 * test/remote-test.py:
 * zeitgeist/client.py:
 * zeitgeist/datamodel.py:

 Whopping commit updating the Monitor/Notify framework as follows:

 org.gnome.zeitgeist.Monitor now has two methods:

 NotifyInsert(in (xx) time_range, in aE events)
 NotifyDelete(in (xx) time_range, in au event_ids)

 The client.install_monitor() method needed to be adapted to take two callbacks instad
 The NotifyDelete call always receives _all_ deleted event ids. We can however at times
 drop the notification all together if the Monitor time range is outside of the time range
 of the deleted events.

 The core notification system, notify.py needed update to this new DBus signature

 I also changed delete_events() in resonance_engine.py to return the max and min
 timestamps for the affectedd events.

 Add some convenience constructors to TimeRange. Namely .always() and .from_now().

2009-12-04 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * test/datamodel-test.py:
 * zeitgeist/datamodel.py:

 Implement some convenience methods regarding time ranges:

 TimeRange.intersect(time_range) - calculates the intersection TimeRange of self and time_range

 Event.in_time_range(time_range) - returns True if event.timestamp lies in time_range

2009-12-03 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/remote.py:

 Comments and doc updates

2009-12-03 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/notify.py:
 * _zeitgeist/engine/remote.py:
 * test/remote-test.py:
 * zeitgeist/client.py:

 Change DBus API for the Monitor.Notify() method to take an uint32 as first argument.
 This first arg is an enumeration: NotifyInsert=0 and NotifyDelete=1 designating
 the type of notification.

 Still delete notifications remains to be handled. I wrote in the docs that we only
 return the event ids in the event structs on NotifyDelete

2009-12-03 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/notify.py:
 * test/remote-test.py:

 Fix insertion/removal of monitors in notify.py. The attached test case exposes a bug where we must use the monitor hash as key instead of simply the monitor itself

2009-12-03 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * zeitgeist/client.py:

 Fix signature of the dispath_handler() in client.remove_monitor()

 Also fix a warning statement

2009-12-03 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/notify.py:

 Fix type in debug string

2009-12-03 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * zeitgeist/client.py:

 Add a monitor_removed_handler arg to remove_monitor()

2009-12-03 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/notify.py:

 Add some clarifying comments in the install_monitor()

 Fix debug statement in remove_monitor()

2009-12-02 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * doc/dbus/source/index.rst:
 * zeitgeist/client.py:

 Add zeitgeist.client.Monitor to the list of documented classes

 Doc updates for ZeitgeistClient regarding monitoring

2009-12-02 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * test/remote-test.py:
 * zeitgeist/client.py:

 Add API in ZeitgeistClient to install a monitor most conveniently

 Add a simple test in remote-test.py to check that we indeed get notifications

2009-12-02 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/remote.py:

 Remove make_dbus_sendable() from remote.py and use the functionality from Event._make_dbus_senable() instead

 Add a MonitorManager at the remote.py level, so no changes in resonance-engine is needed in order to enable notifications.
 This brings in two new methods on out org.gnome.zeitgeist.Log interface:

 InstallMonitor(oaE)
 RemoveMonitor(o)

 These are wired directly to the MonitorManager

2009-12-02 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/notify.py:

 The notification system works now. The only public class in notify.py is MonitorManager.
 It is supposed to be used from the engine either at the remote.py level or directly inside
 resonance_engine.py

2009-12-02 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * test/datamodel-test.py:

 Add test for the new method Event.matches_event()

2009-12-02 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * zeitgeist/datamodel.py:

 Disregard event timestamps in Event.matches_template

 Introduce the dual method of matches_template, namely Event.matches_event() where 'self' is interpreted as the template. This is very useful for filter() calls etc.

 Add method Event._make_dbus_sendable() from remote.py as it is generally useful. Although we don't make it public

2009-12-02 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/notify.py:
 * _zeitgeist/engine/remote.py:

 Make calls to Monitor.Notify() async

 Rename and document all calls MonitorManager.{install,remove}_monitor and notify_monitors()

 Properly install a signal listener for bus disconnects in MonitorManager

 Add FIXME: Filter out duplicate- or failed event insertions in remote.py InsertEvents()

2009-12-01 "Mikkel Kamstrup Erlandsen" <email address hidden>

 * _zeitgeist/engine/notify.py:
 * _zeitgeist/engine/Makefile.am:
 * _zeitgeist/engine/remote.py:
 * zeitgeist/client.py:

 Initial import of notify.py

2009-12-06 Markus Korn <email address hidden>

 * test/test-datamodel.rst:
 * doc/dbus/source/index.rst:
 * test/datamodel-test.py:
 * test/remote-test.py:
 * zeitgeist/datamodel.py:

 Made definition of Manifestation and Interpretation simpler (LP: #492261)

2009-12-05 Markus Korn <email address hidden>

 * test/datamodel-test.py:

 fixed unittests for datamodel

2009-12-05 Markus Korn <email address hidden>

 * zeitgeist/datamodel.py:

 * Symbol.__doc__ must always return a string
 * global decleration a names for Manifestation and Interpretation
 collections

2009-12-04 Markus Korn <email address hidden>

 * zeitgeist/datamodel.py:

 some addition to the docstring of SymbolCollections

2009-12-04 Markus Korn <email address hidden>

 * zeitgeist/datamodel.py:

 made the reST formated text more readable

2009-12-04 Markus Korn <email address hidden>

 * doc/dbus/source/index.rst:
 * zeitgeist/datamodel.py:

 dynamically generate docstring of Symbols to automatically get docs for
 Manifestation and Interpretation symbols

2009-12-04 Markus Korn <email address hidden>

 * zeitgeist/datamodel.py:

 show symbol names in dir(SymbolCollection), maybe we can use it in the
 future to autogenerate docs of hardcoded Symbols

2009-12-04 Markus Korn <email address hidden>

 * zeitgeist/datamodel.py:

 renamings: Category -> Symbol and CategoryCollection -> SymbolCollection
 as categories are in fact symbols ;)

2009-12-04 Markus Korn <email address hidden>

 * zeitgeist/datamodel.py:

 * added more verbose error messages
 * added some code comments

2009-12-04 Markus Korn <email address hidden>

 * zeitgeist/datamodel.py:

 added docstring

2009-12-04 Markus Korn <email address hidden>

 * test/remote-test.py:
 * zeitgeist/datamodel.py:

 * by making Category a subclass of str it is not possible to send
 Manifestations and Interpretations directly over dbus, without using
 tricks like Manaifestation.FILE.uri or str(Manifestation.FILE)
 * adjusted dbus testcases to reflect this

2009-12-04 Markus Korn <email address hidden>

 * zeitgeist/datamodel.py:

 get proper category name

2009-12-04 Markus Korn <email address hidden>

 * test/test-datamodel.rst:

 removed test/test-datamodel.rst as this is not how it is working now

2009-12-04 Markus Korn <email address hidden>

 * zeitgeist/datamodel.py:

 simpified defenition of Manifestations and Interpretations

2009-12-01 Markus Korn <email address hidden>

 * _zeitgeist/engine/resonance_engine.py:
 * test/resonance-engine-test.py:

 Fixed bug where ResultType.LeastRecentEvents and
 ResultType.MostRecentEvents return just the oposite results and added
 testcases for the fix.

2 blueprints and 16 bugs targeted

Blueprint Priority Assignee Delivery
General code cleanup and review General code cleanup and review 5 Essential Seif Lotfy  11 Implemented
Engine Extension Framwork Engine Extension Framwork 4 High Markus Korn  11 Implemented
Bug report Importance Assignee Status
406054 #406054 Export extensions and dataproviders into a new package 3 High   3 Invalid
497140 #497140 zeitgeist-daemon errors with "No module named notify" 1 Undecided   3 Invalid
495179 #495179 What to do on failed or blocked event insertions? 2 Critical Markus Korn  10 Fix Released
495392 #495392 What to do if an event is not found or blocked when calling GetEvents (or its engine equivalent) 2 Critical Markus Korn  10 Fix Released
503619 #503619 Failing remote-test and blacklist-test testcases 2 Critical Markus Korn  10 Fix Released
488790 #488790 What value should event.actor have? 3 High Mikkel Kamstrup Erlandsen  10 Fix Released
488967 #488967 Add event notification and subscription system 3 High Mikkel Kamstrup Erlandsen  10 Fix Released
490110 #490110 bug in client.py 3 High   10 Fix Released
493529 #493529 OperationalError: too many SQL variables when requesting a huge number of events in GetEvents 3 High   10 Fix Released
496109 #496109 querying for events with specified actors 3 High   10 Fix Released
447417 #447417 Event blacklisting/Privacy mode 4 Medium Mikkel Kamstrup Erlandsen  10 Fix Released
497188 #497188 add get_most_used_with_subjects to client.py 4 Medium Siegfried Gevatter  10 Fix Released
492261 #492261 Make defenition of Manifestation and Interpretation in datamodel.py simpler 5 Low Markus Korn  10 Fix Released
497306 #497306 add HACKING document to the zeitgeist project 6 Wishlist Markus Korn  10 Fix Released
495017 #495017 AttributeError: 'NoneType' object has no attribute 'payload' 1 Undecided Markus Korn  10 Fix Released
496750 #496750 "zeitgeist-daemon --replace" may fail if an existing Zeitgeist instance is unresponsive 1 Undecided   10 Fix Released
This milestone contains Public information
Everyone can see this information.