2009-05-26  Jason Tackaberry <tack@urandom.ca>

	* test/jobserver.py: Sync example to API changes.

	* NEWS, API_CHANGES:
	Add more API_CHANGES based on a perusal through ChangeLog; update NEWS
	for 0.6.0 release.

	* test/generators.py: Add one more test to generators test.

	* doc/core/index.rst: Add TODO.

	* MANIFEST.in
	* API_CHANGES.txt (removed):
	Remove renamed API_CHANGES.txt; add generated html docs to manifest so
	they get included in the release.

2009-05-25  Jason Tackaberry <tack@urandom.ca>

	* API_CHANGES (added)
	* doc/core/process.rst:
	Lose the extension on API_CHANGES.txt so it's in line with the other
	UPPERCASE files; sync docs to Process2 -> Process rename.

2009-05-25  Dirk Meyer <dischi@freevo.org>

	* src/net/url.py: fix import

2009-05-25  Jason Tackaberry <tack@urandom.ca>

	* API_CHANGES.txt:
	Add note about delimiting semantics in new Process class.

	* TODO, API_CHANGES.txt:
	Update API changes; remove completed items from TODO

	* src/process.py
	* src/__init__.py
	* src/popen.py (removed)
	* src/main.py:
	Remove old and busted kaa.Process, and replace with new hotness
	kaa.Process2.

	* API_CHANGES.txt: Update API changes.

	* src/coroutine.py, src/thread.py, src/net/url.py, src/async.py,
	* src/__init__.py, src/utils.py:
	InProgress.Progress -> InProgressStatus.

	* src/config.py, test/kaaconf-editor.py:
	config.Group.get_variables() -> variables property; Group.get_parent()
	-> parent property (although this now means that variables and parent
	are reserved and can't be used in config schemas).

	* src/db.py: add_object() -> add(); update_object() -> update()

	* src/thread.py, src/net/url.py:
	ThreadCallback.wait_on_exit() -> property

	* src/coroutine.py:
	CoroutineInProgress.set_interval -> CoroutineInProgress.interval
	property

	* src/callback.py:
	WeakCallback.set_weakref_destroyed_cb ->
	WeakCallback.weakref_destroyed_cb property

	* README, API_CHANGES.txt: Doc updates.

	* src/config.py, src/distribution/core.py, src/coroutine.py, src/io.py,
	* src/distribution/sphinxext.py, setup.py, src/ioctl.py,
	* src/saxutils.py, src/gobject.py, src/process.py,
	* src/extensions/inotify/__init__.py, src/logger.py, src/event.py,
	* src/popen.py, src/xmlutils.py, src/weakref.py, src/rpc.py,
	* src/main.py, src/db.py, src/distribution/build_py.py,
	* src/generator.py, src/pynotifier/dispatch.py,
	* src/pynotifier/__init__.py, src/net/mdns.py, src/input/lirc.py,
	* src/net/tls.py, src/net/url.py, src/nf_thread.py, src/callback.py,
	* src/dateutils.py, src/signals.py, src/pynotifier/nf_gtk.py,
	* src/distribution/xmlconfig.py, src/object.py, src/thread.py,
	* src/distribution/svn2log.py, src/pynotifier/log.py, src/sockets.py,
	* src/async.py, src/pynotifier/version.py, src/input/stdin.py,
	* src/timer.py, src/pynotifier/nf_generic.py, src/strutils.py,
	* src/pynotifier/nf_twisted.py, src/__init__.py, src/reactor.py,
	* src/utils.py, src/nf_wrapper.py, src/distribution/version.py:
	Remove useless (C) in copyright notice. It is not proper form.

	* src/config.py, src/distribution/core.py, src/coroutine.py, src/io.py,
	* src/distribution/sphinxext.py, setup.py, src/ioctl.py,
	* src/saxutils.py, src/gobject.py, src/process.py,
	* src/extensions/inotify/__init__.py, src/logger.py, src/xmlutils.py,
	* src/popen.py, src/event.py, src/weakref.py, src/rpc.py, src/main.py,
	* src/db.py, src/generator.py, src/distribution/build_py.py,
	* src/extensions/objectrow.c, src/net/mdns.py, src/input/lirc.py,
	* src/net/tls.py, src/net/url.py, src/nf_thread.py,
	* src/extensions/inotify/inotify.c, src/callback.py, src/dateutils.py,
	* src/signals.py, src/distribution/xmlconfig.py, src/object.py,
	* src/thread.py, src/distribution/svn2log.py, src/sockets.py,
	* src/async.py, src/input/stdin.py, src/timer.py,
	* src/extensions/utils.c, src/strutils.py, src/reactor.py, src/utils.py,
	* src/nf_wrapper.py, src/distribution/version.py:
	Remove First Edition / Maintainer lines from file headers; update
	copyright where necessary; add Id keyword to files where it was
	missing.

	* src/thread.py: Make active a property.

	* src/process.py: Missed commit: Adjust to abort() api change.

	* src/config.py, TODO, src/coroutine.py, src/io.py, test/callbacks.py,
	* src/timer.py, src/event.py, src/popen.py, src/nf_wrapper.py:
	NotifierCallback.active is now a property.

	* doc/core/signals.rst, doc/conf.py:
	Bump copyright date; small tweak to signals example.

	* src/async.py: Improve docstring for inprogress()

2009-05-24  Jason Tackaberry <tack@urandom.ca>

	* src/coroutine.py: Update coroutine to abort() api change.

	* src/io.py, src/thread.py, src/async.py:
	InProgress.abort() takes an optional argument now: the exception to
	throw to the InProgress. This is passed to abort callback also.

2009-05-24  Dirk Meyer <dischi@freevo.org>

	* src/config.py: fix handling of - and _ conversion

2009-05-24  Jason Tackaberry <tack@urandom.ca>

	* src/process.py:
	stop() uses now uses 'exited' signal instead of 'finished'

	* src/process.py:
	Sort of revert r4056 as it didn't really fix the problem.

	Change semantics of 'finished' signal: it now emits when the child is
	dead AND when stdout/stderr are closed.

	New 'exited' signal that takes the semantics of what 'finished' used
	to be: emits when the child is reaped, period.

	Proper fix for what r4056 was support to fix: namely, when _cleanup()
	executes, sometimes python outputs:  Exception
	kaa.callback.CallbackError: CallbackError('The callback (<bound
	method Process2._check_dead of <kaa.process.Process2 object at
	0x8816e0c>>)  has become invalid.',) in <Callback for <bound method
	type._cleanup of  <class 'kaa.process.Process2'>>> ignored

	* src/process.py:
	Disconnect IOChannel callbacks when the process is not running.

	* src/event.py: Remove SE/KI catch.

	* src/io.py: find_delim returns None if not found, not -1.

	* src/io.py: Don't close IOChannels on shutdown. At least for now.

	* src/process.py:
	Don't attempt to write stop command if child stdin is closed.

	* src/io.py:
	Allow delimiter to be a list, in which case any of the elements are
	used as delimiters.

2009-05-23  Jason Tackaberry <tack@urandom.ca>

	* src/extensions/utils.c, src/__init__.py:
	On Python 2.5, replace os.listdir with a built-in version that does
	not suffer from http://bugs.python.org/issue1608818

2009-05-22  Jason Tackaberry <tack@urandom.ca>

	* src/coroutine.py: Clarify comment.

	* src/thread.py:
	Add a kludge to cause InProgressAborted to trigger more reliably.

	* src/coroutine.py:
	Don't attempt to abort an InProgress that's already been finished.

	* src/async.py:
	InProgressAborted now subclasses BaseException; added docstr
	explaining why.

	* src/coroutine.py: Fix some comments.

	* src/coroutine.py:
	Remove unused bubble arg. I'm not sure where I was going with that
	one.  Probably somewhere important. Oh well, it's gone now.

	* src/async.py:
	Property aborting for kaa.delay(); added a comment questioning the
	sanity of the abortable property.

	* src/thread.py:
	Prevent JobServer from dying prematurely if InProgressAborted doesn't
	get caught earlier.

	* doc/async/threads.rst:
	Make ThreadInProgress visible; abort() is documented.

	* src/thread.py, src/async.py, src/__init__.py:
	Export InProgressAborted and ThreadInProgress objects

	NamedThreadCallbacks are now abortable -- to the same degree that
	ThreadCallbacks are abortable, which is to say kinda sorta. See
	docstring.

	* src/callback.py:
	Callback needs to call constructor (even though it's just object) so
	that MI will work.

	* src/io.py: OSError can be raised too.

2009-05-21  Jason Tackaberry <tack@urandom.ca>

	* src/rpc.py:
	Catch exceptions that might have been raised when writing to socket
	and close rpc channel if that happens. Should fix spurious unhandled
	exceptions with beacon-search.

	* src/io.py:
	Normalize errors that cause the IOChannel to close into an IOError
	exception, so that callers don't have to catch IOError, OSError,
	and/or socket.error, but instead just IOError.

	* src/async.py:
	Dump stack gotten in InProgress constructor when unhandled async
	exception is being logged (only for loglevel INFO or more verbose).
	Essential for  debugging.

	* src/extensions/inotify/__init__.py: Fix INotify on 64-bit platforms.

2009-05-20  Jason Tackaberry <tack@urandom.ca>

	* src/config.py: Cleanup multiline strings (+\ is not needed)

	* doc/core/mainloop.rst: Doc update for 'exit' signal.

	* src/config.py:
	schema hash is back, and in fact now replaces schema+values hash in
	the config file

	sync kwarg in load() only rewrites if schema has changed

	save() only writes if schema+values have changed since load, or if
	force kwarg is True

	attach exit handler when autosave=True, so that config changes are
	saved in 5 seconds or when program exits, whichever happens first.

	changed syntax errors warning a bit, to make it more noticeable

	write newline at the very end of the file

	* src/main.py: New 'exit' signal, emitted when process exits.

2009-05-18  Jason Tackaberry <tack@urandom.ca>

	* TODO: Add to TODO

2009-05-17  Jason Tackaberry <tack@urandom.ca>

	* src/coroutine.py, src/async.py:
	New abortable property (and construct kwarg) for InProgress objects

	InProgress repr() now displays something useful for debugging (shows
	the caller who created it).

	CoroutineInProgress.abort() now logs exception if aborting
	prerequisite IP raises, as opposed to failing altogether.

	CoroutineInProgress._stop() will emit 'abort' signal for coroutine
	before raising GeneratorExit into it.

	* src/config.py:
	Change Config get/set_filename and get/set_autosave to properties

	Raise an exception when config or group object attempts to add a Var
	with the same name as an internal method or property.

	Revert the schema hash stuff from last commit, it wasn't needed after
	all.

	save_if_needed() now just uses the standard hash (that includes
	values); it makes more sense that it writes the config if the schema
	_or_ values have changed, and we were already calculating that hash.

	Change load() kwargs and semantics; update docstring

	change beacon to use new api.

	* src/config.py:
	Better handle the case where loaded configs are missing hashes.

	* src/config.py:
	New method Config.save_if_needed() which saves the config only if the
	schema has changed since the one loaded (or if no config exists).
	Update beacon to use new method.

2009-05-16  Jason Tackaberry <tack@urandom.ca>

	* src/db.py:
	In update_object(), rename 'parent_obj' arg to 'parent'. Fixes a bug
	with beacon when moving files to different directories. I could have
	changed beacon, but I'm not sure why I used parent_obj instead of
	parent to begin with, as parent makes more sense.

2009-05-15  Jason Tackaberry <tack@urandom.ca>

	* src/process.py: Revert whitespace mess.

	* src/process.py:
	Change semantics of running property, and add a new writable property

	Process2.start() should return the InProgress object like the
	docstring says

	Fixed a problem where Process2.stop() would get confused if timeout()
	was called on the Process2 object's InProgress (returned by start())

	allow start() if Process2 object is in STATE_HUNG

2009-05-10  Dirk Meyer <dischi@freevo.org>

	* TODO
	* TODO.api (removed):
	update TODO list

2009-05-09  Dirk Meyer <dischi@freevo.org>

	* src/input/stdin.py, src/signals.py:
	remove deprecated Signal.SIGNAL_* variables

2009-04-22  Dirk Meyer <dischi@freevo.org>

	* src/main.py: revert exception handling change

	* src/async.py: remove deprecated code

	* TODO, src/coroutine.py, src/async.py, src/popen.py, src/nf_wrapper.py,
	* src/main.py, src/rpc.py:
	exception cleanup for Python >= 2.5

2009-04-11  Jason Tackaberry <tack@urandom.ca>

	* src/dateutils.py (added)
	* src/utils.py:
	Move date related stuff from utils into new dateutils.py file, as I
	expect to have more date related helper tools in the future; added
	dateutils.utc and dateutils.local which are tzinfo objects to be used
	with Python's datetime module.

2009-04-03  Jason Tackaberry <tack@urandom.ca>

	* src/coroutine.py, src/thread.py, src/async.py:
	async.py: new exception InProgressAborted, which an InProgress is
	finished with if abort() is called. If an InProgress A is waiting on
	InProgress B, and B is finished with InProgressAborted, then A aborts
	and emits its 'abort' signal so that abort handlers can clean up.
	InProgress.timeout() now takes an abort kwarg which will abort the
	original InProgress if there's a timeout. (This is just a
	convenience.)  thread.py: implement abort() for ThreadInProgress. This
	is a bit magical and untested.  coroutine.py: if coroutine A yields
	coroutine B and A is stopped for some reason, we don't abort B because
	someone else may also be waiting on B. However if A is explicitly
	aborted, then we do abort B. (This logic is precarious and I need to
	test it better. I just wanted to commit what I had before I forgot.)

	* doc/async/coroutines.rst, doc/async/threads.rst:
	A bit more on coroutines; add some references to the threads doc.

2009-04-02  Jason Tackaberry <tack@urandom.ca>

	* doc/async/coroutines.rst:
	Show coroutine example rewritten as classical callback approach for
	comparison

2009-04-01  Dirk Meyer <dischi@freevo.org>

	* src/saxutils.py: fix attribute handling

2009-03-22  Dirk Meyer <dischi@freevo.org>

	* src/strutils.py: catch TypeError

2009-03-19  Jason Tackaberry <tack@urandom.ca>

	* src/config.py: More robust save.

2009-03-17  Jason Tackaberry <tack@urandom.ca>

	* src/coroutine.py: stop -> abort

	* src/net/tls.py:
	Implement M2TLSSocket, a TLSSocket implementation for m2crypto.

2009-03-16  Jason Tackaberry <tack@urandom.ca>

	* src/io.py, src/sockets.py:
	Requeue data when write fails due to resource temporarily unavailable;
	fix for Socket.fileno

2009-03-15  Jason Tackaberry <tack@urandom.ca>

	* src/coroutine.py: Remove unused code

	* src/coroutine.py, src/utils.py:
	Flesh out docstring for coroutine; add new group kwarg of coroutine
	that allows a policy to apply to multiple coroutines (see docstring
	for more detail)

	* src/db.py:
	Fix bug with updating objects with ATTR_IGNORE_CASE attributes.

2009-03-14  Dirk Meyer <dischi@freevo.org>

	* src/saxutils.py: send attributes to caller

2009-03-14  Jason Tackaberry <tack@urandom.ca>

	* src/generator.py: docstring update

	* doc/async/coroutines.rst
	* doc/index.rst
	* doc/async/index.rst
	* doc/async/generators.rst (added):
	Add shell for generators; other minor doc changes.

	* src/generator.py, src/coroutine.py, src/thread.py:
	Move generator registration code into appropriate modules.

	* src/generator.py: Raise slightly more useful exceptions.

	* src/generator.py, src/coroutine.py, src/thread.py, test/generators.py:
	Proposed API change for @kaa.generator

	* src/generator.py, src/coroutine.py, src/thread.py, src/timer.py,
	* src/utils.py:
	Remove 2.4 code for utils.wraps; utils.wraps() now returns func.wraps
	when epydoc/sphinx is not loaded which properly updates
	newfunc.func_name; remove explicit rewrite of newfunc.func_name in
	decorators that use @wraps

2009-03-13  Dirk Meyer <dischi@freevo.org>

	* src/generator.py (added)
	* test/generators.py (added):
	Add InProgress aware generator. Support for kaa.threaded and
	kaa.coroutine is included. See test/generators.py for an example.

	* src/__init__.py:
	Add InProgress aware generator. Support for kaa.threaded and
	kaa.coroutine is included. See test/generators.py for an example.

	* src/saxutils.py: pprint bugfix

2009-03-13  Jason Tackaberry <tack@urandom.ca>

	* src/async.py: Document InProgress.wait return value.

	* src/callback.py, src/async.py: Minor doc corrections.

	* doc/core/signals.rst: Less clumsy wording.

	* doc/async/inprogress.rst, doc/core/signals.rst, doc/core/timer.rst,
	* doc/core/io.rst, src/async.py, doc/core/socket.rst, src/signals.py,
	* doc/core/mainloop.rst, doc/core/process.rst, src/main.py:
	Documentation for main loop, signals, async tweaks, and minor code
	changes to sync to documented behaviour

	* src/io.py, src/sockets.py, src/callback.py, src/async.py,
	* src/signals.py, src/main.py:
	Rename Signal.SIGNAL_DISCONNECTED and Signal.SIGNAL_CONNECTED to
	Signal.DISCONNECTED and Signal.CONNECTED (the former seemed kind of
	redundant);  IOChannels don't ignore signal disconnects now and will
	unregister the read monitor if no callbacks are connected (this
	condition I just removed seemed to unintuitive that I have to think I
	had a reason for it, unfortunately I didn't comment it and I can't see
	why it would be needed);  kaa.main docstring updates; other Callback
	docstring updates.

2009-03-12  Jason Tackaberry <tack@urandom.ca>

	* doc/async/coroutines.rst, doc/async/inprogress.rst:
	Call the mainloop the notifier where it makes sense. (We need to more
	clearly define the notifier's role elsewhere.)

	* doc/async/inprogress.rst: Typoed the typo fix :)

	* doc/async/inprogress.rst: Typo.

	* doc/async/threads.rst, doc/async/inprogress.rst, doc/core/signals.rst,
	* doc/core/index.rst, doc/async/index.rst:
	Document Callbacks; other minor doc tweaks.

	* src/io.py, test/callbacks.py, src/sockets.py, src/callback.py,
	* src/__init__.py, src/signals.py, src/nf_wrapper.py:
	Dead WeakCallbacks now raise kaa.CallbackError instead of TypeError,
	so that we can do some more intelligent internal handling.

	* src/coroutine.py: stop() -> abort()

	* test/callbacks.py, src/callback.py, src/signals.py:
	WeakCallback.set_weakref_destroyed_cb ->
	WeakCallback.weakref_destroyed_cb property  If weakref to the callable
	or any of the args dies, raise a TypeError if the WeakCallback is
	invoked again.  Update test/callbacks.py to reflect the change in
	semantics.

	* src/callback.py:
	Fix bug where Callback kwargs get permanently overwritten on
	invocation [!!]

	* src/callback.py: Improve Callback docstring

	* test/asynctest.py, src/coroutine.py, src/callback.py, src/async.py,
	* src/rpc.py:
	Turn Callback.ignore_caller_args and Callback.user_args_first into
	(self-documented) properties; internal API sync for
	InProgress.is_finished and InProgress.get_result deprecation.

	* doc/async/inprogress.rst, src/coroutine.py, src/io.py, src/sockets.py,
	* src/async.py, src/signals.py:
	Many more InProgress doc updates; add InProgress.abort(), providing a
	more general mechanism for async tasks represented by InProgress
	objects to abort. So far just IOChannel.read/write implements this.
	CoroutineInProgress.stop renamed to abort().

	* doc/async/coroutines.rst, doc/async/inprogress.rst:
	Flesh out InProgress section; remove duplicate coroutine text.

2009-03-11  Jason Tackaberry <tack@urandom.ca>

	* doc/async/coroutines.rst: Small example tweak

	* doc/async/coroutines.rst, doc/index.rst: Rewrite introduction.

	* doc/async/coroutines.rst (added)
	* doc/core/index.rst (added)
	* doc/async/index.rst (added):
	Add missing files.

2009-03-11  Dirk Meyer <dischi@freevo.org>

	* setup.py: update version check

2009-03-11  Jason Tackaberry <tack@urandom.ca>

	* doc/core/timer.rst, src/timer.py: Timer doc updates.

	* src/distribution/sphinxext.py:
	Only display 'This class has no foo' in the synopsis if an ..
	autofoo:: directive was specified in the rst.

	* doc/index.rst
	* doc/core/io (removed)
	* doc/core/timer.rst
	* doc/core/io.rst (added)
	* doc/core/socket.rst (added)
	* doc/core/process.rst (added):
	More doc restructuring: flatten IO subdir into the new core section.

	* src/thread.py, src/async.py, src/__init__.py:
	Import NotifierCallback into the kaa namespace (mostly so that the
	heirarchy in documentation looks reasonable); other docstring tweaks.

	* doc/index.rst
	* doc/core/io (added)
	* doc/async/inprogress.rst
	* doc/async/io (removed)
	* doc/io (removed)
	* doc/core/mainloop.rst:
	Another interim update.

	* doc/index.rst
	* doc/async/threads.rst (added)
	* doc/async/inprogress.rst (added)
	* doc/core/timer.rst (added)
	* doc/io/basics.rst (removed)
	* doc/async/io (added)
	* doc/async.rst (removed)
	* doc/io/index.rst (removed)
	* doc/mainloop.rst (removed)
	* doc/timer.rst (removed)
	* doc/core (added)
	* doc/io/process.rst (removed)
	* doc/core/signals.rst (added)
	* doc/threads.rst (removed)
	* doc/io/socket.rst (removed)
	* doc/signals.rst (removed)
	* doc/core/mainloop.rst (added)
	* doc/async (added):
	Rejigging the doc structure. However I accidentally moved io/ under
	async/ which is wrong, except svn is utterly braindamaged and doesn't
	let me fix it until I commit.

	* src/async.py: Slightly reword doc.

	* src/async.py:
	InProgress.execute should finish the IP with SE/KI exceptions, but
	reraise them; doc updates.

	* doc/async.rst:
	Fleshed out the section on coroutines, and removed the python 2.4 vs
	2.5 discussion, using only 2.5 examples.

	* src/process.py: Make use if 2.5's conditional expressions.

2009-03-10  Jason Tackaberry <tack@urandom.ca>

	* src/coroutine.py: Handle SystemExit and KeyboardInterrupt properly.

	* TODO
	* TODO.api (added):
	Add TODO.api

	* src/io.py, src/coroutine.py, src/distribution/core.py, setup.py,
	* src/gobject.py, src/process.py, src/extensions/inotify/__init__.py,
	* src/popen.py, src/main.py, src/rpc.py, src/weakref.py,
	* src/distribution/build_py.py, src/extensions/objectrow.c, TODO,
	* src/net/mdns.py, src/net/url.py, src/net/tls.py, src/input/lirc.py,
	* src/nf_thread.py, src/extensions/inotify/inotify.c, src/callback.py,
	* src/signals.py, src/distribution/xmlconfig.py, src/thread.py,
	* src/sockets.py, src/input/stdin.py, src/timer.py,
	* src/extensions/utils.c, src/__init__.py, src/reactor.py,
	* src/nf_wrapper.py, src/distribution/version.py:
	Extend copyright dates to 2009; update TODO.

	* src/rpc.py:
	Use generator expression instead of reduce (cleaner and a touch
	faster).

2009-03-09  Dirk Meyer <dischi@freevo.org>

	* src/rpc.py: silence warning on shutdown

2009-03-09  Jason Tackaberry <tack@urandom.ca>

	* src/config.py: Also catch IOError.

	* src/coroutine.py:
	Remove python 2.5 checks (assume python 2.5 now); log a useful warning
	when a coroutine ignores GeneratorExit; remove duplicate code in the
	decorator and just reuse CoroutineInProgress._step(); rename a few
	attributes to something more readable.

	* src/config.py, src/coroutine.py, src/io.py, src/thread.py,
	* src/strutils.py, src/sockets.py, src/callback.py, src/async.py,
	* src/gobject.py, src/nf_wrapper.py, src/main.py, src/rpc.py:
	Scratch a couple items off the todo, notably avoid using catch-all
	exception clauses.

	* src/process.py: Catch more specific exception

	* src/process.py: Remove unused attribute

	* src/process.py: Small bug fixes.

	* src/async.py:
	Bug fix: if any prefinished objects are passed to IPAny/All, they
	should be considered immediately (rather than when the Any/All is
	connected to) because they may cause the Any/All to be prefinished.
	This fixes a problem where if an IPAny is created with a prefinished
	IP and yielded from a coroutine, the coroutine didn't continue as it
	should have.

2009-03-08  Jason Tackaberry <tack@urandom.ca>

	* src/async.py: More IPAll/Any exception fixes.

	* src/process.py, src/main.py:
	Add Process2 Supervisor shutdown handling (to stop all child
	processes). Process2 should now be usable and more or less feature
	complete (although maybe not bug free -- bug fewer bugs than the old
	Process :))  Any objects using kaa.Process should be rewritten to use
	kaa.Process2, and then kaa.Process2 renamed to kaa.Process.

	* src/async.py:
	Fix bug with InProgressAny/All when one of the underlying IP objects
	finishes due to an exception.

2009-03-01  Jason Tackaberry <tack@urandom.ca>

	* src/pynotifier/nf_generic.py:
	Fix race condition where a timer added or removed asynchronously (e.g.
	by a SIG* handler) may crash the notifier. Remove an unnecessary copy
	of the timers dict.

2009-02-16  Dirk Meyer <dischi@freevo.org>

	* test/asynctest.py
	* src/rpc2.py (removed)
	* src/rpc.py:
	rewrite kaa.rpc connection handling

	* src/saxutils.py: more magic: replace underscore with minus if needed

2009-02-13  Dirk Meyer <dischi@freevo.org>

	* src/saxutils.py: add methods to convert Element to string or unicode

	* src/xmlutils.py: remove SaxTreeHandler

	* src/distribution/svn2log.py: use the new ElementParser from saxutils.py

	* src/saxutils.py (added):
	Copy the generic XML Element class from kaa.xmpp to kaa.base, rename
	some variables, and add even more 'magic' to it. It is very useful
	saving stuff as xml files. A special xml.sax.ContentHandler based on
	the code in xmlutils is added to make it easy to use.

2009-02-12  Dirk Meyer <dischi@freevo.org>

	* src/rpc2.py: make sure status is connected for inprogress

2009-02-02  Dirk Meyer <dischi@freevo.org>

	* src/io.py, src/distribution/sphinxext.py, test/property.py,
	* src/process.py, doc/conf.py, src/object.py:
	svn property update

2009-01-31  Dirk Meyer <dischi@freevo.org>

	* src/popen.py:
	Handle strange bug. No need to trace it, Process will be replaced by
	new code soon anyway.

2009-01-23  Dirk Meyer <dischi@freevo.org>

	* src/rpc2.py, src/rpc.py: add coroutine to expose

2009-01-21  Jason Tackaberry <tack@urandom.ca>

	* src/rpc2.py, src/rpc.py:
	Rename client_connected signal to client-connected.

2009-01-21  Dirk Meyer <dischi@freevo.org>

	* test/asynctest.py
	* src/rpc2.py (added):
	Copied kaa.rpc to kaa.rpc2 for a transition to a new API. The
	communication is still the same, kaa.rpc and kaa.rpc2 applications can
	talk to each other. Besides some smaller stuff, the main changes are
	an option for the client to auto-reconnect (this removes a lot of
	duplicated code in Freevo and some kaa modules) and that creating a
	client will not raise an exception if the remote hiost is unavailable.
	It will be delayed. Use kaa.inprogress(client) to wait until the
	channel is open or if it failed. When all kaa and Freevo modules are
	ported to kaa.rpc2, it will override the current kaa.rpc.

2009-01-17  Jason Tackaberry <tack@urandom.ca>

	* src/distribution/sphinxext.py:
	Show read/write for user-defined attributes.

	* doc/threads.rst, src/distribution/sphinxext.py, doc/io/basics.rst,
	* doc/async.rst, doc/io/socket.rst, doc/signals.rst, doc/timer.rst,
	* doc/_static/kaa.css, doc/rpc.rst, doc/io/process.rst:
	Rewrite sphinxext so that it's more useful and doesn't completely
	suck.

2009-01-16  Jason Tackaberry <tack@urandom.ca>

	* src/process.py: Add a lot of doc explaining the sigchld situation.

2009-01-16  Dirk Meyer <dischi@freevo.org>

	* doc/index.rst
	* doc/notifier (removed)
	* doc/threads.rst (added)
	* doc/io/basics.rst (added)
	* doc/async.rst (added)
	* doc/io/index.rst (added)
	* doc/mainloop.rst (added)
	* doc/io/socket.rst (added)
	* doc/io (added)
	* doc/signals.rst (added)
	* doc/timer.rst (added)
	* doc/io/process.rst (added):
	Reflect changes from te source directory in doc.

	* doc/Makefile: I still don't like /orion as output dir :)

2009-01-15  Jason Tackaberry <tack@urandom.ca>

	* src/async.py, src/__init__.py: Fix comment typos.

2009-01-15  Dirk Meyer <dischi@freevo.org>

	* src/object.py, src/io.py, src/async.py, src/__init__.py,
	* src/signals.py:
	Remove imports inside functions. We still have many recursive imports.
	In most cases we can handle them by importing modules we need during
	at the end of the file.

2009-01-15  Jason Tackaberry <tack@urandom.ca>

	* src/process.py: Interrupted system call fix, but only for Python 2.5+

2009-01-15  Dirk Meyer <dischi@freevo.org>

	* src/process.py: deactivate sigchild handler

2009-01-15  Jason Tackaberry <tack@urandom.ca>

	* src/io.py:
	Move import main to bottom of file rather than during method
	execution.

2009-01-15  Dirk Meyer <dischi@freevo.org>

	* src/sockets.py
	* src/__init__.py
	* src/tmpfile.py (removed)
	* src/utils.py:
	move tempfile to utils

2009-01-15  Jason Tackaberry <tack@urandom.ca>

	* doc/_static/kaa.css:
	Make class heaaders (class kaa.Foo(...)) stand out much more.

2009-01-15  Dirk Meyer <dischi@freevo.org>

	* test/callbacks.py, src/thread.py, src/io.py, test/twisted_in_kaa.py,
	* test/kaa_in_twisted.py, src/gobject.py, src/process.py, README,
	* src/timer.py, src/popen.py, src/xmlutils.py, src/main.py, TODO,
	* src/nf_thread.py, doc/notifier/mainloop.rst, src/reactor.py,
	* src/utils.py:
	remove more references to kaa.notifier

	* src/net/url.py, doc/notifier/mainloop.rst, test/twisted_in_kaa.py,
	* src/popen.py:
	notifier movement updates

2009-01-15  Jason Tackaberry <tack@urandom.ca>

	* src/notifier (removed): Kill notifier directory.

	* src/config.py
	* src/coroutine.py (added)
	* src/io.py (added)
	* src/distribution/sphinxext.py
	* src/notifier/callback.py (removed)
	* src/gobject.py (added)
	* src/process.py (added)
	* src/notifier/reactor.py (removed)
	* src/notifier/pynotifier (removed)
	* test/sockettest.py
	* src/popen.py (added)
	* src/event.py (added)
	* src/main.py (added)
	* src/rpc.py
	* doc/notifier/io.rst
	* src/db.py
	* src/notifier/object.py (removed)
	* src/notifier/coroutine.py (removed)
	* src/notifier/thread.py (removed)
	* src/net/url.py
	* src/net/tls.py
	* src/input/lirc.py
	* src/nf_thread.py (added)
	* src/notifier/gobject.py (removed)
	* src/callback.py (added)
	* src/notifier/process.py (removed)
	* src/signals.py (added)
	* src/notifier/event.py (removed)
	* src/notifier/popen.py (removed)
	* test/asynctest.py
	* src/object.py (added)
	* src/thread.py (added)
	* src/notifier/nf_thread.py (removed)
	* src/sockets.py (added)
	* src/async.py (added)
	* src/notifier/__init__.py (removed)
	* src/notifier/signals.py (removed)
	* src/timer.py (added)
	* src/notifier/nf_wrapper.py (removed)
	* src/notifier/io.py (removed)
	* src/notifier/sockets.py (removed)
	* src/notifier/async.py (removed)
	* src/notifier/timer.py (removed)
	* src/reactor.py (added)
	* src/__init__.py
	* src/utils.py
	* src/pynotifier (added)
	* src/notifier/main.py (removed)
	* src/nf_wrapper.py (added)
	* doc/Makefile:
	Move base/src/notifier/* to base/src/ effectively removing the
	kaa.notifier submodule. Various comments/docstrings updated to reflect
	this change (but many still need to be updated).  Updated a couple
	spots elsewhere in kaa that referenced kaa.notifier directly (just
	test examples that I could find).

	* src/notifier/io.py: Small docstring change.

	* src/notifier/process.py: Rename status property to exitcode

	* src/rpc.py: Fix docutils parse warning.

	* doc/_static/kaa.css: Cosmetic bug fix: description columns should wrap.

	* doc/rpc.rst: Use new sphinx extensions for kaa.rpc.Server and Client.

	* src/distribution/sphinxext.py: Bug fix for inherited-members option.

	* src/rpc.py:
	kaa.rpc objects now subclass kaa.Object and use __kaasignals__.

	* src/distribution/sphinxext.py, doc/_static/kaa.css:
	Import bug fix and slight cosmetic tweak

	* src/notifier/io.py, src/distribution/sphinxext.py:
	Fix bug where references to signals (kaa.Foo.signals.bar) were not
	being resolved; update IOChannel class docstr to reference read and
	readline signals (as a test, mostly).

	* src/distribution/sphinxext.py, doc/_static/kaa.css:
	Include property read/write status in properties synopsis table.

	* src/notifier/io.py, src/notifier/process.py: Doc updates

2009-01-14  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/io.py, src/distribution/sphinxext.py, doc/_static/kaa.css:
	Change class hierarchy to be top down (the sane way) -- I think the
	tree generation algorithm is sane, but could be wrong :)  Other
	cosmetic improvements.

	* doc/_static/kaa.css: Lighten color of synopsis tables.

	* src/notifier/object.py, src/distribution/sphinxext.py,
	* src/notifier/sockets.py, src/notifier/process.py, doc/_static/kaa.css,
	* src/notifier/nf_wrapper.py, doc/notifier/io.rst:
	Add reST params/return values for Socket class.  kaa sphinx extension
	improvements:   - new object hierarchy diagram (inverted to allow for
	MI) in synopsis section  - new options: inherited-members (flag),
	inherited-signls (flag), add-members   remove-members, add-signals,
	remove-signals (comma-separated lists).

2009-01-14  Dirk Meyer <dischi@freevo.org>

	* doc/Makefile: set output directory to doc/html

2009-01-14  Jason Tackaberry <tack@urandom.ca>

	* src/distribution/sphinxext.py (added)
	* doc/notifier/async.rst
	* doc/_static (added)
	* doc/_static/kaa.css (added)
	* doc/conf.py
	* doc/_templates (added)
	* doc/_templates/layout.html (added)
	* doc/Makefile
	* doc/notifier/io.rst:
	New custom sphinx directives:  autosynopsis: adds 3 summary tables for
	methods, properties, and signals automethods: lists all methods in the
	class, preceded by a 'Methods' header autosignals: same as above but
	for signals autoproperties: same as above but for properties  The
	autosynopsis directive works, but it's a serious kludge.  See io.rst
	for a demo of the new directives.

	* src/notifier/object.py (added)
	* src/notifier/io.py
	* src/notifier/sockets.py
	* src/notifier/process.py
	* src/notifier/__init__.py:
	New common base-class kaa.Object, which processes a class attribute
	__kaasignals__  Update IOChannel to subclass new kaa.Object, and add
	__kaasignals__ to IOChannel and Socket.  Many docstring updates: make
	first line of docstring a single-sentence short description of the
	method (for the method table in docs).

2009-01-06  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/__init__.py, src/notifier/main.py:
	Revert last commit to main.py (oops) and commit __init__.py instead.

	* src/notifier/process.py (added)
	* src/notifier/main.py:
	Committing Process rewrite. It's not quite finished yet (Supervisor
	needs some love), so it's only exported as Process2. Mostly committing
	to get extra eyeballs on this code.

	* src/notifier/io.py:
	Doc update: what happens when channel closes before write() completes.

	* src/notifier/io.py:
	doc update: A kaa.InProgress object -> An InProgress object

	* src/notifier/io.py, doc/notifier/async.rst, src/notifier/async.py,
	* doc/notifier/signals.rst, doc/notifier/timer.rst, doc/conf.py,
	* doc/notifier/io.rst:
	reSTify IOChannel docstrings; make IOChannel.delimiter a property so a
	docstring can be added; other misc doc updates.

	* src/notifier/io.py:
	More docstring tweaks; handle ValueError for fileno property; move
	main import even later in execution to prevent import cycle (main.py
	will eventually indirectly import io.py, once the Process rewrite is
	done); allow other IOChannels to be wrapped.

2009-01-05  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/io.py: Fix incorrect comment.

	* src/notifier/io.py: More docstring updates

	* src/notifier/io.py:
	Implement readline support; better docstring documentation; queue size
	is now a settable property; write_queue_size property renamed to
	write_queue_used; new corresponding read_queue_used property; enforce
	queue_size limit for write queue.

2009-01-04  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/io.py, src/notifier/sockets.py:
	IOChannel updates (mostly plumbing needed for Process rewrite):  New
	readable property, replaces _is_readable private method and should be
	used instead of the alive property when determining if read() can be
	called. (This is in preparation for readline support, which will
	require read buffering.)  New writable property, returns True by
	default but subclasses can override. write() now checks that the
	channel is writable.  Miscallenous bug fixes; added debug logging.

	* src/notifier/async.py:
	Another InProgressAny bug fix: wrongly assumed one of the prefinished
	IPs would not get filtered.

	* src/notifier/async.py: InProgressAny bug fixes.

	* src/notifier/async.py:
	New filter kwarg added to InProgressAny initializer.

2008-12-31  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/coroutine.py:
	Reverts r3702. This logic was not consequence free.

2008-12-29  Jason Tackaberry <tack@urandom.ca>

	* setup.py:
	Do not build kaa.shm on Darwin; don't bother attempting to check for
	inotify support on non-Linux.

2008-12-21  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/coroutine.py:
	If a coroutine yields an InProgress but does not yield any other value
	after that InProgress finishes (i.e. we get StopIteration), implicitly
	yield the result of the last InProgress. This allows a coroutine to
	end with:    yield some_other_coroutine()  which is (now, with this
	commit) equivalent to ending the coroutine with:    yield (yield
	some_other_coroutine())

2008-12-20  Jason Tackaberry <tack@urandom.ca>

	* src/db.py:
	Remove Database.__del__ and attach a shutdown callback to commit().

	* src/db.py: Thread safety for kaa.db.

	* src/notifier/main.py: New function kaa.main.is_stopped()

2008-12-13  Dirk Meyer <dischi@freevo.org>

	* src/utils.py: fix UTC handling

2008-12-07  Dirk Meyer <dischi@freevo.org>

	* src/notifier/timer.py: make interval read-only

2008-12-05  Dirk Meyer <dischi@freevo.org>

	* src/notifier/timer.py, API_CHANGES.txt:
	change Timer.get_interval() to Timer.interval

	* test/twisted_in_kaa.py, src/notifier/reactor.py:
	update twisted reactor to Twisted 0.8.x

	* src/notifier/io.py, setup.py, src/notifier/callback.py,
	* src/notifier/async.py, src/notifier/signals.py, API_CHANGES.txt:
	Start breaking the API again for 0.6.0. The changes are documented in
	API_CHANGES.txt. Changes in this revision:  The methods
	set_ignore_caller_args and set_user_args_first in Callback are
	replaced by variables ignore_caller_args and user_args_first.
	get_user_args is now called _get_user_args.

2008-12-05  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/__init__.py: Export IOChannel

2008-12-04  Jason Tackaberry <tack@urandom.ca>

	* src/utils.py: No need to replace property for 2.6 or later.

2008-12-03  Dirk Meyer <dischi@freevo.org>

	* src/distribution/xmlconfig.py, src/config.py,
	* src/distribution/core.py, src/distribution/svn2log.py,
	* src/notifier/nf_thread.py, src/notifier/__init__.py,
	* src/notifier/reactor.py, src/extensions/inotify/__init__.py,
	* src/notifier/signals.py, src/rpc.py, src/db.py,
	* src/notifier/thread.py, src/extensions/shmmodule.c,
	* src/distribution/build_py.py, src/notifier/io.py, src/net/mdns.py,
	* src/extensions/objectrow.c, TODO, src/net/tls.py,
	* src/notifier/sockets.py, src/notifier/async.py, src/input/__init__.py,
	* src/notifier/timer.py, src/notifier/main.py,
	* src/distribution/version.py:
	cosmetic changes

	* src/distribution/core.py:
	generate doc for sdist (does not work as it should)

2008-12-02  Jason Tackaberry <tack@urandom.ca>

	* TODO: Update TODO with an eye to 1.0

2008-11-29  Jason Tackaberry <tack@urandom.ca>

	* src/distribution/core.py:
	Remove Extension.__del__ which caused config.h unlink to sometimes
	fail due to the unpredictability of how objects get destroyed on
	shutdown. Reimplement instead as an explicit Extension.clean() method.

2008-11-28  Dirk Meyer <dischi@freevo.org>

	* src/notifier/sockets.py: addmissing import

2008-11-27  Dirk Meyer <dischi@freevo.org>

	* src/net/tls.py: handle pre-handshake data sending

2008-11-19  Jason Tackaberry <tack@urandom.ca>

	* src/net/tls.py: Fix typo

2008-11-18  Jason Tackaberry <tack@urandom.ca>

	* src/net/tls.py: Fix the comment to match the code.

2008-11-18  Dirk Meyer <dischi@freevo.org>

	* src/notifier/thread.py, doc/notifier/threads.rst,
	* doc/notifier/mainloop.rst, src/notifier/gobject.py:
	doc update

	* src/net/tls.py: do not override _update_read_monitor

	* doc/notifier/threads.rst (added)
	* src/notifier/gobject.py
	* doc/notifier/signals.rst (added)
	* doc/notifier/timer.rst (added)
	* doc/conf.py
	* doc/notifier/io.rst (added)
	* doc/notifier/index.rst:
	Add template for kaa.notifier doc

2008-11-17  Dirk Meyer <dischi@freevo.org>

	* src/net/tls.py: do not pass TLS handshake data to clients

	* src/notifier/coroutine.py, src/notifier/thread.py,
	* src/notifier/timer.py:
	preserve function name when using decorators

2008-11-16  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/async.py:
	Fix a bug with InProgressAny(...).wait(); add pass_index kwarg to
	InProgressAny.

	* src/net/tls.py: Remove dubious _handle_read()

	* src/notifier/io.py, src/net/tls.py, src/notifier/sockets.py:
	Rename IODescriptor to IOChannel; fix TLSSocket to confirm to Socket
	changes, and also fix a bug where tlssocket.read() might miss data.

2008-11-13  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/io.py (added)
	* src/notifier/sockets.py
	* src/notifier/__init__.py
	* src/notifier/popen.py:
	Move out non-socket stuff into io.py; several changes to IODescriptor
	to accommodate Process rewrite.

2008-11-12  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/sockets.py: Allow wrapping a new fd with a different mode.

	* src/notifier/sockets.py, src/notifier/signals.py:
	Signals.__add__ for convenience (self.signals += ('foo', 'bar'));
	Socket.write() now returns InProgress, which is finished when the data
	passed to that write() call is actually written to the socket.  In
	preparation for Process rewrite, factor out logic that will eventually
	be shared between Socket and Process into a common base class called
	IODescriptor. This isn't _terribly_ well tested, hopefully I didn't
	break much. :)

2008-11-02  Dirk Meyer <dischi@freevo.org>

	* src/notifier/async.py:
	handle _finalize_connect with some objects finished

2008-10-26  Dirk Meyer <dischi@freevo.org>

	* ChangeLog.in: add Hans Meine to svn users

2008-10-25  Hans Meine <hans_meine@gmx.net>

	* src/net/tls.py, src/notifier/reactor.py:
	two related errors found using pyflakes; one of them apparently
	fixed, one of them turned into a FIXME

	* src/distribution/xmlconfig.py, src/distribution/core.py,
	* src/distribution/svn2log.py, test/decorator.py,
	* src/notifier/callback.py, test/kaa_in_twisted.py,
	* test/twisted_in_kaa.py, test/config2.py, src/input/stdin.py,
	* src/weakref.py, src/rpc.py, src/notifier/thread.py,
	* src/notifier/coroutine.py, src/notifier/sockets.py,
	* src/notifier/async.py, test/config.py, src/notifier/timer.py,
	* src/notifier/popen.py:
	clean up imports (now that Dischi used pyflakes on beacon, I don't
	want to have this lying around uncommitted any longer)

2008-10-18  Dirk Meyer <dischi@freevo.org>

	* doc/conf.py: import version number

	* doc/index.rst (added)
	* doc/notifier (added)
	* doc/mainloop.epydoc (removed)
	* setup.py
	* doc/notifier/async.rst (added)
	* doc/notifier/mainloop.rst (added)
	* doc/rpc.rst (added)
	* doc/conf.py (added)
	* doc/Makefile (added)
	* doc/notifier/index.rst (added):
	start sphinx-based doc for kaa.base

2008-10-16  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/thread.py:
	Clarify comment and output when calling coroutines in threads.

2008-10-12  Dirk Meyer <dischi@freevo.org>

	* src/utils.py: add sphinx support for wrap

2008-10-11  Dirk Meyer <dischi@freevo.org>

	* src/distribution/core.py: add Sphinx support

2008-10-08  Dirk Meyer <dischi@freevo.org>

	* src/distribution/core.py:
	use name for svnlog if module is not available

2008-10-06  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/async.py: Fix bug from last commit.

	* src/notifier/async.py, src/notifier/signals.py:
	In InProgressAny/All, defer connecting to underlying InProgress
	objects until the Any/All is connected to, and connect strongly rather
	than weakly.

2008-10-02  Dirk Meyer <dischi@freevo.org>

	* src/notifier/thread.py: make sure the lock is released on errors

	* src/notifier/thread.py:
	avoid blocked mainloop when thread callbacks are faster added then
	handled

2008-10-02  Jason Tackaberry <tack@urandom.ca>

	* src/utils.py:
	Since we only care about preserving the function signature for
	introspection needed by epydoc, wraps() now acts as a "passthrough"
	when epydoc is not  loaded. When epydoc _is_ loaded, wraps() will
	return a signature-preserving decorator, munging arguments as needed
	to make the decorated function make sense for API documentation (e.g.
	coroutine's progress=True will munge first argument from decorated
	function).

2008-09-21  Jason Tackaberry <tack@urandom.ca>

	* src/distribution/core.py, src/utils.py:
	Allows non-intrinsics to be passed as kwargs to decorated functions
	that use wraps() (like coroutine, timed, threaded, etc)

2008-09-21  Dirk Meyer <dischi@freevo.org>

	* src/xmlutils.py:
	Do not use utils.property because xmlutils is needed by distribution
	and  utils has many dependencies including notifier that won't work in
	a  non-installed version

	* src/distribution/core.py: support projects without subprojects

	* src/xmlutils.py: add simple minidom based parser and writer

2008-09-19  Dirk Meyer <dischi@freevo.org>

	* src/utils.py:
	move utc2localtime and localtime2utc from kaa.epg to kaa.base

2008-09-13  Dirk Meyer <dischi@freevo.org>

	* src/distribution/core.py: make it possible to override kaa namespace

	* src/rpc.py: use function name as default rpc command name

2008-09-11  Dirk Meyer <dischi@freevo.org>

	* src/net/tls.py:
	Merge TLSServerSocket back into TLSSocket because a client may not
	know what it has to use when the socket is created (e.g. XMPP streams)

2008-09-10  Dirk Meyer <dischi@freevo.org>

	* src/net/tls.py: small key handling updates

2008-09-08  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/coroutine.py, src/notifier/thread.py, src/utils.py:
	Allow wraps() decorator to modify original function's call spec
	(currently just by shifting args from the left). Updated
	kaa.coroutine() and kaa.threaded() decorators to use this. Needed to
	make test/progress.py work again.

	* test/callbacks.py:
	Adjust number of times we step in the test for weak timer destruction
	since we could be waiting a while. (More details in comments.)

	* src/notifier/coroutine.py:
	Allow progress=None for CoroutineInProgress (fixes test/async_lock.py)

2008-09-07  Dirk Meyer <dischi@freevo.org>

	* src/net/tls.py:
	Add SRP support and split server into extra class. Some cleanups.

	* src/notifier/sockets.py: create object of the same class in accept

2008-08-28  Dirk Meyer <dischi@freevo.org>

	* src/notifier/timer.py: check for dead weakrefs in store

2008-08-26  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/signals.py:
	Reraise existing exception on KeyboardInterrupt/SystemExit, rather
	than always raising SystemExit.

2008-08-20  Dirk Meyer <dischi@freevo.org>

	* src/notifier/signals.py: add signal connect first_once

	* src/notifier/main.py:
	Do not use notifier dispatcher for the step signal. Doing that will
	wake up the loop every 100ms even when there is nothing to do. While
	this may be a nice feature, it is not what 'step' is about.

2008-08-13  Dirk Meyer <dischi@freevo.org>

	* src/notifier/coroutine.py, setup.py, src/notifier/sockets.py,
	* src/notifier/async.py, test/async_lock.py, API_CHANGES.txt:
	adjust to latest kaa.notifier changes

2008-08-13  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/coroutine.py: Restore missing line in docstring.

	* src/notifier/coroutine.py, src/notifier/__init__.py:
	Introduce coroutine policies and deprecate synchronized kwarg.

2008-08-12  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/thread.py, src/notifier/timer.py, src/utils.py:
	Change decorator_data_store function DecoratorDataStore class, since
	it  behaved more like a class anyway.

2008-08-11  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/coroutine.py:
	It seems to me this is needed, or else a yield NotFinished following
	yield of an InProgress would return the result of that InProgress.
	Probably not a big deal (as nobody does data = yield kaa.NotFinished)
	but also not strictly correct.

	* src/notifier/coroutine.py:
	A bit of restructuring with stop(); in addition to calling close() on
	the generator (for python 2.5), also throw GeneratorExit() into
	CoroutineInProgress  objects so anyone monitoring the object gets
	alerted when it was aborted.

	* src/utils.py:
	Fix wraps() decorator bug where default kwarg values would be passed
	into the decorator even if the kwarg value was given in the outside
	call.

2008-08-10  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/popen.py:
	Don't get confused if OSError gets raised when writing data when we
	are killing it. It just means the child died before we had a chance to
	write the stop command.

	* src/notifier/popen.py: Implement Process.__inprogress__

	* test/property.py:
	One more test: verify deleting a propery with no deleter raises
	exception.

	* test/property.py (added): Test for kaa.utils.property

	* src/notifier/coroutine.py:
	Use generator's close() method if we're prematurely stopping a
	coroutine. This is as per PEP 342.

	* src/notifier/coroutine.py: Fix naming snafu from r3434

	* test/asynctest.py:
	Add test code for recent async API changes, especially InProgressAny
	and InProgressAll.

	* src/notifier/signals.py:
	Signals object must preserve key order, or else subset().any() isn't
	going to return the right index of which signal was handled.

	* src/notifier/coroutine.py:
	Revert coroutine code that calls inprogress() on a yielded result,
	coroutine now must do that explicitly; added a few more comments;
	renamed CoroutineInProgressLock to CoroutineLockedInProgress.

2008-08-10  Dirk Meyer <dischi@freevo.org>

	* src/notifier/async.py, src/notifier/__init__.py, src/notifier/popen.py:
	Remove InProgressList. It is deprecated and was only used in an
	already deleted code in kaa.candy. Also remove InProgressSignals. It
	was also written for now removed code and kaa.candy and in popen. The
	popen code was changed to use inprogress(signal).

2008-08-10  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/sockets.py: Sync to new API

	* src/notifier/__init__.py: Export inprogress() function.

2008-08-09  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/coroutine.py, src/notifier/async.py,
	* src/notifier/__init__.py, src/notifier/signals.py:
	New function kaa.delay(secs) that returns an InProgress object that
	finishes after the given number of seconds; Renamed InProgress.link()
	to InProgress.waitfor(); Signal.async() changed to
	Signal.__inprogress__, and a new function inprogress() created to
	invoke __inprogress__ on any object (similar to len() and __len__).
	This new protocol is so that one can pass arbitrary objects within kaa
	where an InProgress is supported, and it will be translated or coerced
	to an InProgress. One example is Signal (which is the only object that
	has an __inprogress__ implemented.) So you can now pass signals
	directly to InProgress(Any|All) and can now yield signals in
	coroutines.  Signal.__inprogress__ returns an InProgress object that
	is weakly connected to the signal, because the existence of the Signal
	isn't any reason to keep the InProgress alive. Weakly connecting means
	when the InProgress goes away, it will be cleanly disconnected from
	the Signal.  Global references to active CoroutineInProgress objects
	are now kept; see CoroutineInProgress.__init__ for detailed rationale.
	Warnings are now logged when InProgressSignals or InProgressList is
	used as they are now considered deprecated.

2008-08-09  Dirk Meyer <dischi@freevo.org>

	* src/notifier/gobject.py: maybe fix a crash

2008-08-08  Dirk Meyer <dischi@freevo.org>

	* src/notifier/gobject.py, src/notifier/__init__.py:
	make sure we have a clean shutdown of the gobject loop

	* src/notifier/async.py:
	revert weakref patch because beacon stopped working

2008-08-07  Dirk Meyer <dischi@freevo.org>

	* src/net/mdns.py, test/mdns.py, test/events.py, test/progress.py:
	update svn properties

	* src/notifier/signals.py: remove debug

2008-08-07  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/async.py, src/notifier/__init__.py,
	* src/notifier/signals.py:
	New classes InProgressAny and InProgressAll (should hopefully
	deprecate InProgressSignals and InProgressList respectively); added
	properties result, finished, failed to InProgress; added methods
	subset(), any() (creates InProgressAny from signals), all() (creates
	InProgressAll from signals).

2008-08-06  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/timer.py: Remove superfluous line.

	* src/notifier/coroutine.py: Still more leftover debugging :)

	* src/notifier/coroutine.py: Remove leftover debugging from last commit.

	* src/notifier/coroutine.py, src/notifier/async.py:
	Fix bug where a InProgress would throw an exception to a linked
	InProgress, which would then handle that exception, but the original
	InProgress didn't know, so it would log an unhandled async exception.

	* src/notifier/async.py:
	Finish InProgressSignals with a 2-tuple, containing the idx of the
	signal and (now) the args passed to the signal. Now makes it possible
	to more conveniently handle InProgressSignals completion without
	having to keep a reference to the object (for the now removed
	signal_args). Example:    idx, args = yield
	kaa.InProgressSignals(self.signals, 'good', 'failure')   if idx == 1:
	raise args[1]

	* src/notifier/thread.py, src/notifier/timer.py, src/utils.py:
	Abstract the ugly (and duplicated) code that attaches data to a
	decorated function/method into a separate utility function (in
	kaa.utils).

2008-08-05  Jason Tackaberry <tack@urandom.ca>

	* src/utils.py:
	wraps() decorator factory as described in r3385 (forgot to commit).

	* src/notifier/coroutine.py, src/notifier/thread.py,
	* src/notifier/timer.py:
	wraps() decorator factory that preserves the decorated function's
	signature. Necessary in order not to confuse epydoc.

	* src/notifier/async.py:
	If exception handler is not passed to InProgress.connect_both(), it
	will use the finished handler. (Convenience for when you want to use
	the same handler.)

	* src/notifier/popen.py:
	Process.stop() returns an InProgress object that finishes with the
	return code when the process dies.

2008-08-04  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/coroutine.py:
	CoroutineInProgress.throw() will call stop() first. Allows a coroutine
	to be aborted asynchronously.

	* src/utils.py: Slightly shorter function name.

	* src/utils.py:
	Utility function to get number of processors in a reasonably portable
	way.

2008-07-10  Jason Tackaberry <tack@urandom.ca>

	* src/db.py:
	Add term_id to ivtidx_%IDXNAME%_terms_map_object_idx, or else sqlite
	gets very bad performance as associated terms are added to
	get_inverted_index_terms(). (postgres and mysql perform fine without
	this index though, so it's just due to sqlite's poor query optimizer.)

2008-07-08  Dirk Meyer <dischi@freevo.org>

	* src/net/tls.py: ignore socket close

2008-06-22  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/main.py:
	Don't use pid in determining mainloop running state. This partially
	reverts r3047, as I'm not sure what in the hell I was thinking.

2008-06-22  Dirk Meyer <dischi@freevo.org>

	* src/notifier/async.py: fix condition to start a loop, again

	* src/notifier/async.py: fix condition to start a loop

	* src/notifier/async.py, src/notifier/main.py:
	fix the race condition code (I hope)

2008-06-22  Jason Tackaberry <tack@urandom.ca>

	* src/db.py: Extraneous whitespace.

	* src/db.py:
	Fix bug where add_object() would not return dict containing keys for
	the given type if those keys were not passed on kwargs.

2008-06-10  Dirk Meyer <dischi@freevo.org>

	* src/notifier/thread.py, src/notifier/sockets.py,
	* src/notifier/callback.py, src/notifier/timer.py:
	doc update

	* doc (added)
	* doc/mainloop.epydoc (added)
	* src/distribution/core.py
	* setup.py:
	add distutils epydoc support

	* src/notifier/thread.py, src/notifier/sockets.py,
	* src/notifier/gobject.py, src/notifier/__init__.py,
	* src/notifier/reactor.py, src/notifier/signals.py, src/notifier/main.py:
	Add some doc for epydoc support

2008-06-05  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/sockets.py: Correct docstring.

2008-06-04  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/sockets.py:
	New connecting property; new alive property; do not aggregate calls to
	_update_read_monitor via a POLCY_ONCE timer, otherwise we may lose
	incoming data (race condition) -- see comments; read() or readline()
	will no longer forever if the socket is disconnected (and not in the
	process of connecting) but rather will immediately return an
	InProgress finished with None; more comments as to why we need
	_update_read_monitor

	* src/notifier/thread.py, src/notifier/async.py:
	InProgress.finish() returns self to allow convenient priming of
	finished InProgress objects (for those cases where the function must
	return an InProgress but no delaying is needed):    return
	InProgress().finish(value)

	* src/notifier/main.py:
	Prevent (hopefully) a race condition where two threads concurrently
	call loop(). This can happen, for example:
	kaa.main.run(threaded=True)   some_inprogress.wait()
	InProgress.wait() will call main.loop() if it thinks no mainloop is
	currently running. So the above race condition happens when the
	threaded main.run gets past the is_running() call in main.loop, and
	just before _set_running() is called, InProgress.wait() calls
	is_running() and thinks there is no loop.  The mutex should prevent
	this.

2008-05-30  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/timer.py:
	Use threaded decorator rather than MainThreadCallback.

2008-05-26  Jason Tackaberry <tack@urandom.ca>

	* src/strutils.py:
	Set python's global encoding with set_encoding(); add optional
	encoding kwarg to most funcitons to allow overriding the default
	encoding.

2008-05-25  Jason Tackaberry <tack@urandom.ca>

	* src/db.py, src/extensions/objectrow.c:
	Don't unpickle ObjectRow pickle if pickling the ObjectRow itself.
	(That seriously makes sense, I swear.) In practice, this means it is
	not necessary (and not desirable) to convert result rows to dicts
	before pickling. Rather it is better to simply pickle the ObjectRow,
	where the other side can benefit from the deferred unpickling feature
	of ObjectRow.  This speeds up pickling/unpickling of result sets from
	db.query() by about 6-7 times and cuts the amount of data transmitted
	by about half.

2008-05-24  Jason Tackaberry <tack@urandom.ca>

	* src/db.py:
	Preserve case for registered inverted index attributes (e.g. the
	genres attribute in kaa.epg)

	* src/notifier/signals.py:
	Signal.async() convenience function (see docstring)

2008-05-07  Dirk Meyer <dischi@freevo.org>

	* src/net/url.py: remove not existing completed signal check

2008-05-02  Dirk Meyer <dischi@freevo.org>

	* src/notifier/async.py, src/notifier/__init__.py:
	add InProgressList to wait for several InProgress objects

2008-04-24  Jason Tackaberry <tack@urandom.ca>

	* src/distribution/core.py:
	When compiling tests for a given library, make sure we link dependency
	libraries.

2008-04-13  Dirk Meyer <dischi@freevo.org>

	* src/notifier/gobject.py:
	use gobject.idle_add and not gobject.timeout_add

	* src/notifier/gobject.py: make async=False calls work in the same thread

2008-04-12  Dirk Meyer <dischi@freevo.org>

	* src/notifier/gobject.py: make it possible to set gtk loop object

2008-04-11  Dirk Meyer <dischi@freevo.org>

	* src/tmpfile.py: fix unique tempfile

2008-04-01  Dirk Meyer <dischi@freevo.org>

	* src/utils.py: ignore dot files and directories

	* src/notifier/main.py: support starting main in a thread

	* src/notifier/sockets.py: prevent double close

2008-03-31  Dirk Meyer <dischi@freevo.org>

	* src/notifier/main.py: fix timeout handling

	* src/rpc.py: send signal when authenticated

2008-03-29  Jason Tackaberry <tack@urandom.ca>

	* src/input/stdin.py: Add keycodes for pgup/dn

2008-03-24  Dirk Meyer <dischi@freevo.org>

	* NEWS: update

2008-03-20  Dirk Meyer <dischi@freevo.org>

	* src/notifier/async.py: add doc

	* test/progress.py: create example with parameter

	* src/notifier/coroutine.py, src/notifier/thread.py, test/progress.py:
	make it possible to override the progress class

	* src/notifier/async.py, src/notifier/__init__.py:
	Revert kaa.execute back into kaa.InProgress().execute

	* src/notifier/coroutine.py
	* src/notifier/thread.py
	* src/net/url.py
	* test/progress.py (added)
	* src/notifier/async.py:
	Add parameter 'progress' to kaa.threaded and kaa.coroutine. When
	progress is True, the first argument to the function is an
	InProgress.Progress object that will be bound to the returning
	InProgress to monitor the progress as caller.

	* src/distribution/core.py:
	revert write_version test to avoid rewriting version.py every time

	* src/version.py (removed)
	* src/distribution/core.py:
	also write version.py for kaa.base

2008-03-19  Dirk Meyer <dischi@freevo.org>

	* src/decorators.py (removed): remove not needed save_execution decorator

	* src/notifier/async.py, src/notifier/__init__.py:
	rename class InProgressExecution to def execute (similar to twisted)

	* src/notifier/async.py, src/notifier/__init__.py:
	move execute from InProgress into new InProgressExecution class

	* src/notifier/coroutine.py, src/notifier/async.py:
	add timeout support for InProgress

	* src/net/tls.py: fix tls close bug blocking kaa shutdown

	* src/notifier/async.py: add shortcut for InProgressSignals

2008-03-18  Dirk Meyer <dischi@freevo.org>

	* src/notifier/async.py: store signal result arguments

2008-03-16  Dirk Meyer <dischi@freevo.org>

	* src/notifier/async.py, src/notifier/__init__.py:
	add InProgressSignals class to wait for signals

2008-03-15  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/sockets.py:
	Import kaa.notifier.main upfront (in the mainthread) instead of doing
	so inside wrap(), because wrap() might be called in a thread, and
	importing in a thread seems to deadlock.

2008-03-15  Dirk Meyer <dischi@freevo.org>

	* src/utils.py: also check against given process name, it may be changed

	* src/notifier/sockets.py:
	fix block by making sure wrap() is called from the mainthread

2008-03-14  Dirk Meyer <dischi@freevo.org>

	* src/notifier/sockets.py:
	deactivate some stuff that breaks freevo, needs investigating

	* src/notifier/async.py: small bugfix

2008-03-13  Jason Tackaberry <tack@urandom.ca>

	* src/utils.py:
	Don't assume first element in sys.path is always cwd, and don't assume
	it is the only one.

	* src/notifier/async.py: Return proxied exception's methods and members.

	* src/notifier/async.py:
	Python 2.4 ignores __getattribute__ because AsyncException does not
	subclass object, so we use __getattr__ instead for 2.4. Now we don't
	call superclass constructor after all, in order to ensure
	AsyncException.__getattr__ is called.

	* src/notifier/async.py:
	Call proxied exception class __init__ in AsyncException, which is
	necessary for python 2.4.

	* src/notifier/sockets.py:
	Don't remove the unix socket if we weren't the one who created it. (In
	other words, clients should not remove the socket file. Duh.)

	* src/notifier/async.py:
	Subclass AsyncExceptionBase from Exception required for python 2.4. We
	used to do this, but for some reason it was reverted. I'll assume it
	was  accidental.

2008-03-12  Dirk Meyer <dischi@freevo.org>

	* src/net/tls.py: Python 2.4 does not allow finally in a coroutine

2008-03-11  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/sockets.py, src/rpc.py:
	Use kaa.tempfile in kaa.Socket if filename does not start with a slash
	(previously only did it if the filename contained no slash). Remove
	this logic from kaa.rpc.

2008-03-11  Dirk Meyer <dischi@freevo.org>

	* src/rpc.py:
	Put socket in tempdir if not absolute path was provided. Fixes beacon
	thumbnail connect.

2008-03-11  Jason Tackaberry <tack@urandom.ca>

	* src/rpc.py: More correct.

	* src/rpc.py: Raise rpc.ConnectError if connection fails.

	* src/notifier/sockets.py:
	Use absolute kaa import rather than relative main.

	* src/notifier/sockets.py, src/notifier/async.py, src/rpc.py:
	AsyncException: use str() on the proxied exception to get the message
	instead of accessing self.message or self.args. Results in simpler
	code that I think is more correct.  kaa.Socket changes: new
	buffer_size and chunk_size properties; custom __repr__ that shows
	fileno; use kaa.tempfile() on unix sockets if only filename is
	specified; clear out stale unix sockets when listening (this logic
	moved from kaa.rpc); register shutdown handler to close socket and
	clean up.  kaa.rpc: significantly refactored to use kaa.Socket; new
	Channel.close() method added.

2008-03-08  Dirk Meyer <dischi@freevo.org>

	* src/notifier/timer.py: fix default timer for timed

2008-03-05  Dirk Meyer <dischi@freevo.org>

	* src/net/mdns.py, test/mdns.py: some thread cleanup

	* src/net/mdns.py, test/mdns.py:
	Support more than one service to be provided.

	Add removal of a serviceKnown Bug: changing of TXT records of a
	service does notwork, I have no idea how to detect that on client
	side.

	* test/events.py: more test cases

	* NEWS: add tls and mdns

	* src/net/tls.py: doc update

2008-03-05  Rob Shortt <rob@tvcentric.com>

	* test/events.py (added): A very simple events test (from the wiki docs).

2008-03-05  Dirk Meyer <dischi@freevo.org>

	* src/net/tls.py: Better key management

	* src/net/mdns.py: store local

2008-03-04  Dirk Meyer <dischi@freevo.org>

	* src/net/tls.py: fix tls

	* src/net/tls.py: Add basic TLS server support

	* src/notifier/sockets.py:
	move accept to extra function to override in TlsSocket

	* src/notifier/sockets.py:
	Socket bugfixes: signals are object specific and resolve port when
	port = 0 (autoselect) is used.

	* src/net/mdns.py (added)
	* test/mdns.py (added):
	Add multicast DNS and service discovery module based on Avahi

2008-03-02  Dirk Meyer <dischi@freevo.org>

	* test/gobject.py, test/synchronized.py, src/notifier/gobject.py,
	* test/sockettest.py:
	svn property update

	* src/notifier/thread.py, src/notifier/gobject.py, src/utils.py:
	rename importhelper to sysimport

	* test/glib.py (removed)
	* test/gobject.py (added)
	* src/notifier/glib.py (removed)
	* src/notifier/gobject.py (added)
	* src/notifier/__init__.py:
	rename glib to gobject

	* src/utils.py: do not search in the working directory

	* src/notifier/thread.py, src/utils.py:
	add import helper for files with name conflict

2008-03-01  Dirk Meyer <dischi@freevo.org>

	* src/notifier/thread.py
	* test/synchronized.py (added):
	Improve kaa.synchronized. It can be used as decorator and with with
	statements and supports any object as lock. This is similar to
	synchronized in Java.

	* test/glib.py: remove init

	* src/notifier/glib.py: remove debug

	* test/glib.py (added): add glib test

	* src/notifier/glib.py (added)
	* NEWS
	* src/notifier/__init__.py:
	Support to run a glib mainloop in an extra thread

	* src/notifier/thread.py, NEWS, src/notifier/__init__.py:
	add synchronized decorator (does not work with a coroutine)

2008-02-29  Dirk Meyer <dischi@freevo.org>

	* test/interface.py (removed): remove interface test

	* src/utils.py:
	Remove interface code again, it is very specific and does not belong
	into kaa.base.

	* test/interface.py: update test

	* test/interface.py, src/utils.py:
	The metaclass must inherit from type or super() will not work in such
	classes. As a downside, the member __initerface__ to init the
	interface is now gone.

	* src/__init__.py: do not import the interface stuff

	* test/interface.py (added)
	* src/__init__.py
	* src/utils.py:
	Add some code similar to interfaces

2008-02-22  Dirk Meyer <dischi@freevo.org>

	* src/notifier/__init__.py:
	revert change, AsyncExceptionBase is not exposed to the API anymore

2008-02-21  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/async.py, src/rpc.py:
	AsyncException now proxies original exception, rather than trying to
	recreate it.

2008-02-21  Dirk Meyer <dischi@freevo.org>

	* src/notifier/__init__.py: expose AsyncExceptionBase

	* src/notifier/nf_thread.py, test/kaa_in_twisted.py,
	* test/twisted_in_kaa.py, src/notifier/reactor.py,
	* src/notifier/nf_wrapper.py, src/notifier/main.py:
	Fix notifier shutdown when the kaa mainloop is running besides another
	mainloop (e.g. twisted). There is now a nf_wrapper shutdown function
	to replace the normal sys.exit with something backend specific.

2008-02-20  Dirk Meyer <dischi@freevo.org>

	* src/notifier/main.py: fix exception handling

	* src/notifier/main.py:
	Make sure we reset the running status even for exceptions we did not
	catch. E.g. In Python 2.5 SystemExit and KeyboardInterrupt do not
	inherit from Exception.

2008-02-19  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/main.py:
	Propogate _all_ exceptions (including KeyboardInterrupt/SystemExit) in
	main.loop(). This allows KeyboardInterrupt to bubble up to the main
	loop if one is running. Specifically this should fix ctrl-c during
	InProgress.wait() going silently ignored.

2008-02-19  Dirk Meyer <dischi@freevo.org>

	* src/notifier/async.py, src/notifier/main.py:
	move timeout parameter to loop()

2008-02-19  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/async.py: Remove superfluous import

	* src/notifier/async.py, src/notifier/main.py:
	New function main.loop(), which is mostly what main.run() used to be.
	Update InProgress.wait() to use this function.  This fixes a nasty bug
	where two threads call wait() on an InProgress object before
	main.run() is started. Each one thinks it should set itself to be the
	main thread.  main.step() should not usually be called. All instances
	of this idiom:    while some_condition:     main.step()  should be
	replaced with this one:    main.loop(lambda: some_condition)

2008-02-17  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/coroutine.py: Avoid cmp

	* src/notifier/async.py:
	Create AsyncException object in throw() rather than get_result(). This
	fixes a bug when coroutine.py's _process calls throw() on the
	generator, because as it was, _exception[2] was a stack object not a
	traceback, so the raise failed. Now _exception[1] contains an
	AsyncException object so this is thrown to the generator.

2008-02-16  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/async.py:
	Fix for python 2.4. AsyncException.__str__ was not being called.

	* src/notifier/async.py:
	Don't wrap async exception in an AsyncException object if it's already
	one (e.g. already a RemoteException)

	* src/notifier/async.py, src/rpc.py:
	New AsyncException class, which is a more generic RemoteException
	(RemoteException now subclasses it); when traceback is not available
	in InProgress.get_result(), raise an AsyncException so that the
	traceback is more useful.

2008-02-15  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/coroutine.py, src/notifier/thread.py,
	* src/notifier/async.py, src/notifier/popen.py, src/rpc.py:
	Renamed InProgress.finished() to InProgress.finish() so that throw()
	and finishe() are both verbs.

2008-02-14  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/coroutine.py, src/rpc.py: Fixes for python 2.4

2008-02-14  Dirk Meyer <dischi@freevo.org>

	* src/notifier/coroutine.py: more cleanups

	* src/notifier/coroutine.py:
	Rename YieldFunction to CoroutineInProgress and YieldLock to
	CoroutineInProgressLock. Both classes are only for internal use.
	Remove the external use handling (__call__) from CoroutineInProgress.

	* test/asynctest.py, src/notifier/coroutine.py, src/net/tls.py,
	* src/notifier/sockets.py, src/notifier/async.py,
	* src/notifier/__init__.py, API_CHANGES.txt:
	Move coroutine.YieldCallback to async.InProgressCallback

	* src/notifier/coroutine.py, src/notifier/__init__.py, API_CHANGES.txt:
	Remove YieldFunction from the public API and add a set_interval
	function to manipulate the coroutine execution from the outside.

	* src/notifier/async.py:
	Add an execute function to InProgress to execute a non coroutine
	function inside an InProgress object.

2008-02-14  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/sockets.py
	* src/notifier/signals.py
	* src/notifier/timer.py
	* test/sockettest.py (added)
	* src/utils.py
	* src/rpc.py:
	Overhauled kaa.Socket; exposed Signal.changed_cb property; created
	Signals.add method; import kaa.weakref for timed decorator; lazy
	import create_thread_notifier_pipe in kaa.utils (to avoid circular
	importing when using kaa.utils internally).

	* src/notifier/coroutine.py, src/notifier/thread.py:
	Don't wrap return value from non-generator coroutine wrapped functions
	after all. (I advocated this a while back, but doing this may conceal
	an actual problem that the user should know about.) So we raise an
	exception instead.  Log a warning if a thread callback is a generator
	or returns an InProgress object, because this likely means the
	threaded function is being treated like a coroutine. It'd be nice if
	this worked, but that's a TODO.

2008-02-13  Dirk Meyer <dischi@freevo.org>

	* test/asynctest.py, src/notifier/coroutine.py, test/async_lock.py,
	* src/notifier/__init__.py, API_CHANGES.txt:
	rename YieldContinue to NotFinished

2008-02-13  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/coroutine.py: Another little comment.

2008-02-13  Dirk Meyer <dischi@freevo.org>

	* src/notifier/coroutine.py: more code cleanup

	* src/notifier/coroutine.py: remove deprecated code from YieldCallback

	* src/notifier/coroutine.py: cleanup

	* src/notifier/coroutine.py, src/notifier/async.py,
	* src/notifier/__init__.py, src/__init__.py, API_CHANGES.txt:
	doc update, remove deprecated code

	* src/notifier/sockets.py, src/notifier/__init__.py,
	* src/notifier/main.py:
	fix imports, jobserver.py and decorators.py is gone now

2008-02-13  Jason Tackaberry <tack@urandom.ca>

	* src/utils.py: new property implementation

	* src/notifier/thread.py
	* src/notifier/timer.py
	* src/notifier/jobserver.py (removed)
	* src/notifier/main.py
	* src/notifier/decorators.py (removed):
	Remove jobserver.py and decorators.py and move code into more sensible
	places.

2008-02-13  Dirk Meyer <dischi@freevo.org>

	* src/__init__.py:
	add str_to_unicode and unicode_to_str to the kaa namespace

	* src/__init__.py, src/rpc.py: remove kaa.TEMP and updated code using it

	* src/net/__init__.py, src/net/tls.py,
	* src/notifier/pynotifier/nf_twisted.py, src/notifier/signals.py,
	* src/notifier/main.py:
	svn property updates

	* src/notifier/coroutine.py: remove old comments

	* src/notifier/coroutine.py (added)
	* src/notifier/__init__.py
	* src/notifier/yieldfunc.py (removed):
	rename file yieldfunc to coroutine

	* src/notifier/thread.py
	* src/notifier/sockets.py
	* src/notifier/callback.py
	* src/notifier/async.py
	* src/notifier/__init__.py
	* src/notifier/signals.py (added)
	* src/notifier/jobserver.py
	* src/notifier/popen.py
	* src/notifier/yieldfunc.py
	* src/notifier/nf_wrapper.py
	* src/notifier/main.py:
	move Signal(s) from callback.py to a new file signals.py

2008-02-13  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/decorators.py: Add some documentation and slight cleanup

2008-02-13  Dirk Meyer <dischi@freevo.org>

	* test/async_lock.py: rename yield_execution to coroutine

	* src/input/lirc.py, src/net/tls.py, src/notifier/sockets.py,
	* src/notifier/__init__.py, src/extensions/inotify/__init__.py,
	* src/input/stdin.py, src/notifier/popen.py, API_CHANGES.txt, src/rpc.py:
	rename (Weak)SocketDispatcher to (Weak)IOMonitor

	* src/notifier/thread.py, src/notifier/nf_thread.py,
	* src/notifier/sockets.py, src/notifier/callback.py,
	* src/notifier/reactor.py, src/notifier/timer.py,
	* src/notifier/jobserver.py, src/notifier/popen.py,
	* src/notifier/nf_wrapper.py, src/notifier/decorators.py:
	update copyright year

	* setup.py, NEWS, API_CHANGES.txt: add/change version info

2008-02-13  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/thread.py, src/notifier/decorators.py:
	Don't use a string for kaa.MAINTHREAD, so that @threaded('main') and
	@threaded(kaa.MAINTHREAD) are functionally different; better form for
	MainThreadCallbacks

2008-02-13  Dirk Meyer <dischi@freevo.org>

	* src/notifier/decorators.py: remove more old code

	* src/notifier/__init__.py, API_CHANGES.txt, src/notifier/decorators.py:
	move the old parameter handling to the execute_in_timer wrapper

	* test/decorator.py: adjust to kaa.notifier decorator name changes

	* src/notifier/__init__.py, src/notifier/decorators.py:
	define helper variables for timed policy

2008-02-13  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/decorators.py: Make @kaa.timed arguments suck less.

	* src/notifier/async.py:
	Reraise asynchronous KeyboardInterrupt/SystemExit exceptions in the
	main loop so that, for example, threads that call sys.exit() actually
	cause the loop to shutdown.

	* src/__init__.py:
	Pull signals back into kaa namespace. (Used to be brought in from
	notifier/__init__.py)

	* src/net/tls.py, src/notifier/jobserver.py: Sync to renamed decorators

	* test/asynctest.py, src/notifier/thread.py, src/notifier/sockets.py,
	* src/notifier/__init__.py, src/__init__.py, src/notifier/jobserver.py,
	* API_CHANGES.txt, src/notifier/yieldfunc.py, src/notifier/main.py,
	* src/notifier/decorators.py:
	Removed deprecated code for mainloop functions in kaa.notifier;
	removed deprecated code for MainThreadCallback.set_async()
	functionality; renamed decorators:     @kaa.execute_in_timer -->
	@kaa.timed    @kaa.execute_in_thread --> @kaa.threaded
	@kaa.execute_in_mainloop --> @kaa.threaded(kaa.MAINTHREAD)
	@kaa.yield_execution --> @kaa.coroutine  Updated asynctest.py to
	reflect API changes

	* src/notifier/popen.py:
	Handle case when child dies before write buffer is emptied.

2008-02-13  Dirk Meyer <dischi@freevo.org>

	* src/notifier/thread.py, src/utils.py:
	rename create_thread_notifier_pipe

2008-02-13  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/yieldfunc.py:
	Forgot to commit this. Last log entry applies to this file too.

	* src/notifier/async.py:
	Pretty much rewrote InProgress.throw, documenting gotchas. Fixed bug
	where if InProgress A is waiting on InProgress B, if B raises an
	exception, A's  generator wouldn't get the exception (using the python
	2.5 features).

2008-02-12  Dirk Meyer <dischi@freevo.org>

	* src/notifier/yieldfunc.py: update doc

	* src/notifier/yieldfunc.py: add one missing timer delete

	* src/notifier/yieldfunc.py: remove timer with circular ref

	* src/notifier/async.py, src/notifier/yieldfunc.py:
	log exception without using __del__

	* src/notifier/async.py: clean up signal callbacks

2008-02-11  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/thread.py, src/utils.py, src/notifier/main.py:
	A bit of refactoring; kaa.utils.daemonize() will now create a new
	thread notifier pipe if necessary; kaa.main.run() will not raise a
	'Mainloop already running' exception if we've forked and want to start
	a new loop.

	* src/notifier/thread.py: Better style

2008-02-11  Dirk Meyer <dischi@freevo.org>

	* src/notifier/reactor.py, src/notifier/main.py:
	adjust to latest kaa.MainThreadCallback changes

2008-02-11  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/thread.py, src/notifier/popen.py, src/notifier/main.py:
	Revert recent changes to is_mainthread(). Fix bug when calling
	Process.start from non-mainthread, Watcher.append was not being
	called.

	* src/notifier/async.py: Dummy handler not needed anymore.

2008-02-10  Jason Tackaberry <tack@urandom.ca>

	* test/asynctest.py, src/notifier/thread.py, src/notifier/async.py,
	* API_CHANGES.txt, src/notifier/yieldfunc.py, src/notifier/main.py,
	* src/notifier/decorators.py, src/rpc.py:
	MainThreadCallback.set_async is deprecated (and logs a warning).
	Calling a MainThreadCallback will now return an InProgress object, and
	the caller can wait() on this InProgress if synchronous behaviour is
	needed.  InProgress.wait() is now thread safe. If wait() is called
	from the main thread, the notifier is kept alive via a step() loop. If
	it's called from a thread, the thread is blocked by waiting on a
	threading.Event object. wait() now accepts an optional timeout
	argument, in seconds. If timeout expires, a TimeoutException is
	raised.  Updated test/asynctest.py to conform to API changes (removes
	deprecation warnings from output).  Changed is_mainthread() semantics.
	is_mainthread() now returns None if no mainthread has been set.
	main.run() now raises an exception if some other thread has been set
	as the main thread.  Unhandled InProgress exceptions are now logged in
	the destructor. This is still not perfect, but it's a hard problem to
	solve. :)  New method InProgress.link() to link together two
	InProgress objects. With one.link(two), when two finishes, one is
	finished (or throws).

2008-02-08  Dirk Meyer <dischi@freevo.org>

	* src/utils.py:
	Add generic plugin finder to avoid duplicate code in all modules that
	load plugins from a given directory.

2008-02-05  Dirk Meyer <dischi@freevo.org>

	* src/net/tls.py (added):
	add tls for kaa.notifier support based on tlslite

	* src/net/__init__.py (added)
	* src/net/url.py (added)
	* src/net (added)
	* src/notifier/url.py (removed):
	move kaa.notifier.url to kaa.net.url

	* src/notifier/sockets.py:
	use fileno() in case self._socket will be changed to a non socket
	object

2008-02-05  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/popen.py: New close_stdin() method (see docstring)

2008-02-04  Dirk Meyer <dischi@freevo.org>

	* setup.py, NEWS: release kaa.base 0.3.0

2008-02-04  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/popen.py:
	Support for non-blocking writes. (Note I still intend to rewrite
	popen.py, so the use of mixed approaches [e.g. SocketDispatcher vs.
	notifier.socket_add] isn't a big deal right now.)

	* src/notifier/popen.py, src/rpc.py:
	Add Channel.is_connected() method; add raw-stdout and raw-stderr
	signals to Process object, and modify behaviour so that if there are
	no handlers connected to the regular signals (per-line handlers), the
	output will not get processed or queued. This allows for handling
	binary data in output.

2008-02-03  Jason Tackaberry <tack@urandom.ca>

	* src/rpc.py:
	Support for specifing send/receive socket buffer size. This can
	improve performance when pushing large amounts of data via rpc by
	about 3 fold.

	* src/notifier/async.py: Obvious bug.

2008-02-02  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/timer.py:
	New method set_restart_when_active. Using the restart_when_active
	member directly is deprecated. This makes it consistent with the other
	behaviour modifier methods in Callback (e.g. set_user_args_first,
	etc.)

	* src/notifier/sockets.py, src/notifier/async.py:
	New InProgress.wait() method; update Socket.connect() to use
	InProgress.wait()

2008-01-29  Dirk Meyer <dischi@freevo.org>

	* src/notifier/pynotifier/nf_twisted.py: handle step parameter

2008-01-29  Rob Shortt <rob@tvcentric.com>

	* src/notifier/pynotifier/nf_twisted.py:
	Call doIteration(t) before runUntilCurrent() since doIteration can
	block.

	* src/notifier/pynotifier/nf_twisted.py:
	Remove the call to reactor.run() and replace it with a loop of our
	own. I also added a call to dispatcher.dispatchers_run() inside of our
	step() so it gets called every iteration of the loop like it was
	intended to. Beware that if the loop is idle it won't get called.
	Comments included.

2008-01-22  Dirk Meyer <dischi@freevo.org>

	* src/notifier/async.py: yield_execution bugfixes

	* src/notifier/jobserver.py, src/notifier/decorators.py, API_CHANGES.txt:
	adjust to yield_execution changes

	* src/notifier/yieldfunc.py: activate new yield code

2008-01-21  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/thread.py, src/notifier/sockets.py, src/notifier/async.py:
	Fix Socket to deal with exception changes. It now also will call
	set_as_mainthread() if mainthread is not running in order to
	initialize notifier pipe: this fixes a bug when Socket was being
	insantiated before main.run()

2008-01-21  Dirk Meyer <dischi@freevo.org>

	* src/notifier/sockets.py, src/notifier/yieldfunc.py:
	Adjust to new InProgress exception style

2008-01-21  Jason Tackaberry <tack@urandom.ca>

	* API_CHANGES.txt: Document exception handler changes.

	* src/notifier/yieldfunc.py:
	async should be defined whether or not object is valid.

	* src/notifier/yieldfunc.py: Remove debug

	* test/asynctest.py, src/notifier/thread.py, src/notifier/async.py,
	* src/notifier/yieldfunc.py, src/notifier/nf_wrapper.py,
	* src/notifier/main.py, src/rpc.py:
	Exception handlers now are expected to take three arguments instead of
	one: exception type, exception value, and traceback.

2008-01-20  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/thread.py:
	Eat arguments emitted to signal handlers when connecting thread join()
	method, since join() doesn't take these arguments.

	* API_CHANGES.txt: Update to reflect lock kwarg rename

	* test/async_lock.py: lock was renamed to synchronize

	* src/notifier/yieldfunc.py: Rename lock kwarg to synchronize.

2008-01-20  Dirk Meyer <dischi@freevo.org>

	* src/notifier/yieldfunc.py: deactivated code to always return InProgress

	* src/notifier/yieldfunc.py: remove wrong comment

	* API_CHANGES.txt: InProgress.is_finished is now a function

	* src/notifier/thread.py, src/notifier/async.py,
	* src/notifier/yieldfunc.py:
	InProgress.is_finished is now a function

2008-01-19  Dirk Meyer <dischi@freevo.org>

	* src/notifier/yieldfunc.py: support already finished InProgress objects

	* src/notifier/yieldfunc.py:
	add new Python 2.5 yield code but deactivate it since it breaks
	existing code

	* test/asynctest.py, src/notifier/yieldfunc.py:
	make YieldCallback an InProgress object

2008-01-18  Dirk Meyer <dischi@freevo.org>

	* src/notifier/async.py, src/notifier/yieldfunc.py:
	Prepare yield_execution for some changes by adding a lot of doc to
	that code to understand again how it works. There are also some XXX
	notes for the future changes to consider. The YieldInProgress class is
	gone, I hope it was not needed and the changes I made still work.

	* src/notifier/thread.py, src/notifier/sockets.py,
	* src/notifier/async.py, API_CHANGES.txt, src/notifier/yieldfunc.py,
	* src/rpc.py:
	Rename exception in InProgress into throw and exception_handler into
	exception

	* src/notifier/thread.py, src/notifier/sockets.py,
	* src/notifier/__init__.py, API_CHANGES.txt, src/notifier/url.py:
	replace code using kaa.Thread with kaa.ThreadCallback

	* test/asynctest.py, src/notifier/thread.py, src/notifier/__init__.py,
	* src/notifier/jobserver.py:
	create new ThreadCallback

	* src/notifier/async.py, src/notifier/__init__.py: remove BackgroundTask

	* src/notifier/thread.py, src/notifier/jobserver.py:
	move InProgressCallback to thread.ThreadCallback

	* test/jobserver.py, src/notifier/jobserver.py:
	rework NamedThreadCallback

	* test/jobserver.py, src/notifier/async.py, src/notifier/__init__.py,
	* src/notifier/jobserver.py, API_CHANGES.txt:
	Add new kaa notifier class BackgroundTask

	Rename ThreadCallback to NamedThreadCallback and make it a Callback
	and a BackgroundTask. Replace register with a __call__ function that
	returns InProgress

	* src/input/lirc.py, src/notifier/reactor.py:
	adjust to new kaa.notifier namespace

	* test/callbacks.py
	* API_CHANGES.txt (added)
	* test/decorator.py
	* test/xmlrpc.py (removed)
	* test/async_lock.py
	* test/kaa_in_twisted.py
	* test/kaaconf-editor.py
	* src/rpc.py
	* test/asynctest.py
	* test/twisted_in_kaa.py
	* test/signals.py
	* test/jobserver.py
	* src/notifier/main.py:
	adjust to kaa.notifier namespace changes

2008-01-17  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/async.py:
	Use emit_when_handled so that finished() may be called before a
	handler has connected yet.

	* src/notifier/callback.py:
	Ability to defer emission until there is callback connected to the
	signal.

2008-01-14  Dirk Meyer <dischi@freevo.org>

	* src/notifier/yieldfunc.py: remove duplicate log

2008-01-13  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/yieldfunc.py:
	Handle the case when a function decorated with yield_execution doesn't
	actually yield anything. In this case the function should behave as
	though it was't decorated at all.

2008-01-12  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/thread.py, src/notifier/__init__.py, src/__init__.py,
	* src/notifier/main.py:
	Rename kaa.main.start to kaa.main.run as discussed; add
	Thread.is_alive method.

2008-01-10  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/thread.py, src/notifier/nf_thread.py:
	Sync to set_as_mainthread function rename.

2008-01-09  Dirk Meyer <dischi@freevo.org>

	* src/notifier/async.py: doc update

2008-01-09  Rob Shortt <rob@tvcentric.com>

	* src/notifier/pynotifier/nf_twisted.py:
	Check to see if reactor is runnning, handle exit a bit better.

2008-01-08  Dirk Meyer <dischi@freevo.org>

	* src/notifier/main.py: resort functions

	* src/notifier/__init__.py: remove wakeup for kaa namespace

	* src/notifier/async.py, src/notifier/__init__.py, src/notifier/url.py:
	move class Progress into InProgress

	* src/notifier/__init__.py: add some cleanup notes

2008-01-08  Rob Shortt <rob@tvcentric.com>

	* src/notifier/pynotifier/nf_twisted.py:
	Check for int or socket (well, something with fileno()), other general
	improvements.

2008-01-08  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/thread.py, src/notifier/main.py:
	Rename set_mainthread to set_as_mainthread; add is_shutting_down()
	function.

2008-01-07  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/main.py:
	Don't wait for result on shutdown() if not called from mainthread.

2008-01-07  Dirk Meyer <dischi@freevo.org>

	* src/__init__.py: keep main wrapper simple

	* src/notifier/thread.py, src/notifier/nf_thread.py,
	* src/notifier/__init__.py, src/__init__.py, src/notifier/main.py:
	move set_current_as_mainthread as set_mainthread to main

	* src/xmlrpc.py (removed)
	* src/config.py
	* src/input/lirc.py
	* src/notifier/nf_thread.py
	* src/notifier/reactor.py
	* src/extensions/inotify/__init__.py
	* src/input/stdin.py
	* src/notifier/main.py
	* src/rpc.py:
	adjust to latest kaa.notifier changes

	* src/notifier/__init__.py: add InProgress and Progress

2008-01-07  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/main.py: One bug so far. :)

2008-01-07  Dirk Meyer <dischi@freevo.org>

	* src/notifier/pynotifier/__init__.py, src/notifier/nf_wrapper.py:
	keep names in sync with pynotifier

2008-01-07  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/__init__.py
	* src/__init__.py
	* src/notifier/main.py (added):
	New main api, with temporary backward compatibility. (Access of old
	api logs warning message.)

2008-01-07  Rob Shortt <rob@tvcentric.com>

	* src/notifier/pynotifier/__init__.py
	* src/notifier/pynotifier/nf_twisted.py (added)
	* src/notifier/nf_wrapper.py:
	A new Twisted based notifier. This one integrates into the twisted
	reactor loop and acts as a layer between kaa s timers and sockets. It
	uses the default reactor (selectreactor) and behaves very much like
	the generic notifier. There's a bit more work to be done (marked by
	FIXME comments) and it still needs more testing.

2008-01-07  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/__init__.py: Missing decorators.

2008-01-04  Jason Tackaberry <tack@urandom.ca>

	* src/__init__.py: Fix comment.

	* src/notifier/__init__.py, src/__init__.py:
	Bring most of notifier directly into kaa namespace.

2007-12-31  Jason Tackaberry <tack@urandom.ca>

	* src/extensions/utils.c (added)
	* setup.py
	* src/utils.py:
	Support for modifying the process name as it appears in ps. (Also
	supports killall via prctl.)

2007-12-22  Dirk Meyer <dischi@freevo.org>

	* setup.py, NEWS: metadata for 0.2.0 release

2007-12-21  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/popen.py: Some fixmes

2007-12-20  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/popen.py: Leftover debugging cruft.

	* src/notifier/popen.py:
	If multiple Processes finish at once, the exit code of the last
	process ends up being passed to the completed signal for _all_ the
	processes that exited. So we have the watcher pass the pid to the
	callback so it can decide whether or not to ignore it.

2007-12-12  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/timer.py: Fix AtTimer.

2007-12-07  Dirk Meyer <dischi@freevo.org>

	* src/notifier/pynotifier/nf_generic.py: handle crash on closed socket

	* src/notifier/__init__.py, src/notifier/nf_wrapper.py:
	realize kaa.notifier.loop by using nf_wrapper.step

2007-12-04  Dirk Meyer <dischi@freevo.org>

	* src/notifier/__init__.py, src/notifier/popen.py:
	refactor popen kill all code to not use step in popen.py

2007-12-02  Dirk Meyer <dischi@freevo.org>

	* src/notifier/__init__.py: fix signal handling

	* src/notifier/pynotifier/nf_generic.py:
	sync with pynotifier

	call timer after select

	cleanup try/except blocks

	handle unix events

2007-11-20  Dirk Meyer <dischi@freevo.org>

	* src/notifier/thread.py: add some doc

	* src/notifier/thread.py: check the queue after the pipe is created

2007-11-19  Dirk Meyer <dischi@freevo.org>

	* src/xmlrpc.py, src/notifier/nf_thread.py, test/kaa_in_twisted.py,
	* test/twisted_in_kaa.py, src/notifier/reactor.py, test/kaaconf-
	* editor.py, test/xmlrpc.py:
	set properties

2007-11-13  Jason Tackaberry <tack@urandom.ca>

	* src/extensions/inotify/__init__.py: Do not hardcode integer size.

2007-10-29  Dirk Meyer <dischi@freevo.org>

	* src/notifier/nf_thread.py, test/kaa_in_twisted.py:
	some internal renaming, better shutdown

	* src/notifier/reactor.py: fix async parameter

	* src/notifier/nf_thread.py: add doc and header

	* src/notifier/nf_thread.py, src/notifier/nf_wrapper.py:
	rename use_pynotifier to force_internal

	* src/notifier/nf_thread.py, test/kaa_in_twisted.py,
	* src/notifier/__init__.py:
	fix shutdown and add special twisted support to threading

	* src/notifier/pynotifier/nf_generic.py
	* src/notifier/nf_thread.py (added)
	* test/kaa_in_twisted.py (added)
	* src/notifier/__init__.py:
	add notifier type thread to run kaa.notifier besides a different
	mainloop

	* src/notifier/nf_wrapper.py: we only support nf_generic and nf_gtk

	* src/notifier/nf_wrapper.py:
	create option to force the usage of the internal pynotifier copy

	* src/rpc.py: fix crash when called in thread

	* test/twisted_in_kaa.py (added)
	* test/twisted_integration.py (removed):
	rename twisted test

	* src/notifier/thread.py, src/notifier/reactor.py,
	* src/notifier/jobserver.py:
	Create notifier pipe when setting up the mainthread. I hope this will
	fix the pipe problem for the future.

2007-10-28  Dirk Meyer <dischi@freevo.org>

	* src/notifier/reactor.py: fix bug to create _thread_notifier_pipe

	* src/notifier/reactor.py (added)
	* test/twisted_integration.py (added):
	Add small KaaReactor code to use kaa.notifier with Twisted

2007-10-26  Dirk Meyer <dischi@freevo.org>

	* src/notifier/timer.py: add AtTimer and OneShotAtTimer to __all__

	* src/rpc.py: make rpc thread safe

2007-10-25  Dirk Meyer <dischi@freevo.org>

	* src/notifier/timer.py
	* src/notifier/attimer.py (removed):
	move AtTimer into timer.py

	* src/notifier/attimer.py: simpler version of AtTimer and OneShotAtTimer

	* src/notifier/attimer.py (added): first draft of AtTimer

2007-10-14  Jason Tackaberry <tack@urandom.ca>

	* src/db.py: A bit more detailed error.

	* src/db.py:
	Raise exception when referencing an undefined attribute. Indirectly
	fixes a bug in which the pickle is replaced with an empty dictionary
	when updating (solely) undefined attributes.

2007-10-13  Dirk Meyer <dischi@freevo.org>

	* src/notifier/yieldfunc.py: delete references after usage

	* src/distribution/build_py.py, src/distribution/core.py:
	better plugin detection

2007-10-12  Dirk Meyer <dischi@freevo.org>

	* src/distribution/build_py.py, src/distribution/core.py:
	Add special 'plugins' support. This can be used to install plugins to
	other kaa modules and the feedparser will use it soon to hook into
	beacon but still remains an extra kaa module.

2007-10-08  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/popen.py:
	_handle_read shouldn't return true on errno=11 if we're flushing,
	because the child process could be dead, and that will cause a busy
	loop inside flush().

2007-09-25  Jason Tackaberry <tack@urandom.ca>

	* src/db.py:
	Fix for exception when updating object that has an attribute of string
	type that is ATTR_INVERTED_INDEX.

2007-09-24  Jason Tackaberry <tack@urandom.ca>

	* src/db.py:
	Last checkin was wrong; should be ATTR_INDEXED_IGNORE_CASE, not
	ATTR_IGNORE_CASE.

	* src/db.py:
	When ATTR_IGNORE_CASE attribute is specified in attrs list during
	query, ensure pickle is fetched as well (because correct case is
	stored in pickle)

	* src/db.py:
	Fix bug where distinct queries weren't actually being distincted
	(fixed by adding GROUP BY clause to query -- this bug was caused by
	implicitly adding id column to all queries); support for executemany
	in _db_query; apply pragmas to both cursors (improves performance
	somewhat);

2007-09-20  Dirk Meyer <dischi@freevo.org>

	* src/rpc.py:
	kaa.rpc is well tested, reduce logging level from info to debug for
	some default stuff.

2007-09-19  Jason Tackaberry <tack@urandom.ca>

	* src/extensions/objectrow.c:
	Index of pickle data was being miscalculated when parent_id occurred
	after pickle in sql row. This old code was clearly wrong. The only
	reason it ever possibly worked was luck.

2007-09-17  Jason Tackaberry <tack@urandom.ca>

	* src/db.py:
	Add prefix option to get_inverted_index_terms, returning only the
	terms that start with prefix (useful for autocompletion); remove
	useless query from get_db_info(); fix vacuum() to work with ivtidx
	changes.

	* src/db.py: Add docstring for register_inverted_index

	* src/db.py, src/extensions/objectrow.c:
	Abstracts keyword stuff into general inverted indexes, which must be
	explicitly registered via register_inverted_index() (see docstring)

	New method get_inverted_index_terms() (see docstring)

	Registered attributes can then be associated with zero or one inverted
	indexes.

	Registered attributes can be named after an inverted index, in which
	case the terms for that index are cached in the object. (TODO: support
	being able to fetch ivtidx terms for a given object  even when there
	is no explicit attribute named after the ivtidx)

	ATTR_KEYWORDS is removed, and ATTR_INVERTED_INDEX is provided as the
	new  flag.

	Exactly one of ATTR_SIMPLE or ATTR_SEARCHABLE must now be specified
	for each attribute.

	RegexpCache wasn't actually caching compiled regexp.

	Use set intrinsic in place of Set module (python 2.4)

	Added a bunch more internal documentation in the form of new or
	expanded docstrings, as well as more comments.

	More and smarter sanity checking.

	Probably a lot of bugs :)

2007-09-16  Dirk Meyer <dischi@freevo.org>

	* src/rpc.py: handle unpickable exceptions

2007-09-15  Dirk Meyer <dischi@freevo.org>

	* src/rpc.py:
	add add_client to expose to send the channel to the callback on
	request

2007-09-01  Dirk Meyer <dischi@freevo.org>

	* src/notifier/jobserver.py:
	make it possible to use execute_in_thread without thread name

	* src/notifier/url.py: add missing length

2007-08-31  Dirk Meyer <dischi@freevo.org>

	* src/notifier/url.py:
	Rename URL to URLOpener in kaa.notifier and move the download code
	from the feed parser to kaa.notifier.url.

	* src/notifier/async.py, src/notifier/__init__.py:
	move generic Status object to kaa.notifier.Progress

2007-08-24  Dirk Meyer <dischi@freevo.org>

	* src/db.py: add db file path to info

2007-08-18  Dirk Meyer <dischi@freevo.org>

	* src/notifier/async.py: typo

2007-08-16  Dirk Meyer <dischi@freevo.org>

	* src/notifier/jobserver.py: make sure thread pipe is connected

2007-08-15  Dirk Meyer <dischi@freevo.org>

	* src/db.py: use regexp cache

	* src/db.py: add regexp support in select

2007-07-13  Dirk Meyer <dischi@freevo.org>

	* src/notifier/thread.py:
	make it possible not to wait for a thread on exit

	* src/notifier/async.py: basic status support

	* src/notifier/thread.py: small thread fixes

2007-06-30  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/async.py:
	Don't break when internal _exc_info isn't set on async exception.

2007-06-28  Dirk Meyer <dischi@freevo.org>

	* src/notifier/async.py: add get_results function

2007-06-27  Jason Tackaberry <tack@urandom.ca>

	* src/db.py:
	Use executescript method instead of spawning sqlite3. Fixes bug where
	sqlite lib is installed but not tools.

2007-06-25  Jason Tackaberry <tack@urandom.ca>

	* src/config.py: Bug fix.

	* src/config.py:
	Add value to hash; remove force kward from save(), always saves now;
	prevent double load() when Inotify-monitor file changed.

2007-06-25  Dirk Meyer <dischi@freevo.org>

	* src/config.py: fix typo and add logging to find such problems

	* test/kaaconf-editor.py: better gtk notifier select

2007-06-25  Jason Tackaberry <tack@urandom.ca>

	* test/kaaconf-editor.py (added)
	* test/kaaconf-editor.glade (added):
	Initial gtk-based config editor. Not complete and very hackish, much
	still to do.

	* src/config.py:
	Fix bug in get_config when config object can't be imported directly;
	add some more helper functions.

2007-06-24  Jason Tackaberry <tack@urandom.ca>

	* src/config.py:
	Removed unused code; add get_config function to return a Config object
	based on a given config file.

2007-06-23  Jason Tackaberry <tack@urandom.ca>

	* src/config.py: More formatting tweaks and fixes.

	* src/config.py:
	Don't space out variables that don't have comments just because a
	sibling is a group.

	* src/config.py: Fix delimit character for lists/dict

	* src/config.py, src/distribution/xmlconfig.py,
	* src/distribution/build_py.py:
	Config file output cleanup; Config class takes module kwarg which can
	specify what to import to access the Config instance -- this is
	written to the config file; update xmlconfig to specify the module
	name.

2007-06-23  Dirk Meyer <dischi@freevo.org>

	* src/xmlutils.py: add some basic parse code to SaxTreeHandler

2007-06-05  Dirk Meyer <dischi@freevo.org>

	* src/config.py: Fix encoding information (ISO8859 is iso-8859)

2007-06-01  Dirk Meyer <dischi@freevo.org>

	* src/xmlrpc.py (added)
	* test/xmlrpc.py (added):
	add basic xmlrpc support

	* test/xml.py (removed)
	* test/xmlutils.py (added):
	rename xml test file to avoid name conflict

2007-05-29  Jason Tackaberry <tack@urandom.ca>

	* src/input/stdin.py: Add 'tab' to key codes.

2007-05-25  Jason Tackaberry <tack@urandom.ca>

	* src/distribution/core.py:
	Return None if check_library() doesn't find the requested library.
	Some setup.py code expects this. (Fixes kaa.display compile failure if
	composite headers aren't found.)

2007-05-23  Dirk Meyer <dischi@freevo.org>

	* src/distribution/core.py: improve check_library

2007-05-20  Dirk Meyer <dischi@freevo.org>

	* src/distribution/core.py, setup.py:
	add has_python_h function in core to check for Python.h

	* setup.py: make setup work without Python.h

2007-05-08  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/pynotifier/dispatch.py,
	* src/notifier/pynotifier/nf_generic.py:
	If there are no timers and no dispatchers, there is no sense in waking
	up every 100ms. (This patch should be tested and then submitted
	upstream if it's ok.)

	* src/db.py: Add fixme.

2007-04-22  Dirk Meyer <dischi@freevo.org>

	* setup.py, src/distribution/__init__.py:
	Import distribution code from distribution.core and do not nor import
	core.py at distribution/__init__.py. This works around a bug making
	python distutils a requirenment to run Freevo 1.7.

2007-04-18  Jason Tackaberry <tack@urandom.ca>

	* src/logger.py: Be daring and change the default logger format.

	* src/config.py: Log which settings changed.

	* src/config.py: Log when monitored config file has changed.

	* src/config.py: Strip newlines from start/end of group description.

	* src/config.py:
	If config var type is a tuple, display allowed values in variable
	comment; Do not comment out variables if they are using the default
	values -- this significantly improves readability in editors using
	syntax highlighting; as a compromise to the previous change, include
	the default setting in  the comment block; include begin/end group
	comments with output similar to breadcrumb bars in websites

2007-04-18  Dirk Meyer <dischi@freevo.org>

	* src/notifier/async.py:
	better error message for unhandled InProgress exceptions

	* setup.py, NEWS: release

2007-04-15  Jason Tackaberry <tack@urandom.ca>

	* src/config.py: Support for implicit indexing of lists.

	* src/notifier/async.py: Remove unneeded sys module.

	* src/notifier/thread.py, src/notifier/async.py,
	* src/notifier/jobserver.py, src/notifier/yieldfunc.py:
	Pass exc_info triplet in any exception raised asynchronously and log
	full traceback in default async exception handler.

	* src/extensions/inotify/__init__.py:
	Fix typo; don't automatically remove watch on DELETE_SELF after all.

	* src/config.py:
	INotify fixes; change api a bit for set_default and get_description:
	they now accept a VarProxy object; fix some constructor instantiation
	problems as a result of MI in VarProxy.

	* src/extensions/inotify/__init__.py:
	Handle case where event callback removes a watch for which we've
	already buffered more events. Before this would log an error, but now
	we keep track of recently removed watches in order to suppress the
	error. Also add MOVED_FROM and MOVED_TO to default event mask.

2007-04-09  Jason Tackaberry <tack@urandom.ca>

	* src/extensions/inotify/__init__.py:
	Remove watch data on more appropriate inotify event.

2007-03-30  Dirk Meyer <dischi@freevo.org>

	* src/notifier/popen.py: add back completed signal

	* src/distribution/core.py, src/xmlutils.py:
	add warning when xml.py is still there

2007-03-28  Dirk Meyer <dischi@freevo.org>

	* src/notifier/callback.py, src/extensions/inotify/__init__.py,
	* src/db.py, src/notifier/thread.py, TODO, src/extensions/objectrow.c,
	* src/input/lirc.py, src/extensions/inotify/inotify.c, AUTHORS,
	* src/notifier/__init__.py, test/config2.py, src/input/stdin.py,
	* src/strutils.py, src/notifier/sockets.py, NEWS, src/notifier/timer.py,
	* src/utils.py:
	metadata update

	* test/config2.py (added): second config test

	* src/distribution/core.py
	* kaa-base.ebuild (removed):
	remove ebuild generation

2007-03-23  Dirk Meyer <dischi@freevo.org>

	* trunk/base, src/distribution/svn2log.py, src, ChangeLog.in,
	* MANIFEST.in, src/distribution, NEWS:
	Improve MANIFEST and ChangeLog file support and set svn ignore
	properties to ignore generated files.

	* src/xmlutils.py: fix a small stupig bug

	* src/xmlutils.py: fix typo

	* src/distribution/svn2log.py: only create ChangeLog if there is a .svn

	* src/xmlutils.py: return children by name with getattr

	* src/distribution/svn2log.py, test/async_lock.py, src/xmlutils.py:
	update svn properties

	* ChangeLog.in: change Tack's mail address

	* MANIFEST.in
	* ChangeLog.in (added):
	create ChangeLog.in and add ChangeLog to MANIFEST

	* src/distribution/core.py
	* src/distribution/svn2log.py (added):
	add code to generate ChangeLog files from svn log and ChangeLog.in

	* src/xmlutils.py (added): some xml helper functions

	* NEWS
	* src/xml.py (removed):
	remove kaa.xml libxml2 wrapper, not needed in any kaa module anymore

2007-03-19  Dirk Meyer <dischi@freevo.org>

	* ChangeLog (removed)
	* NEWS (added):
	rename ChangeLog to NEWS and update it

2007-03-18  Dirk Meyer <dischi@freevo.org>

	* test/async_lock.py (added)
	* src/notifier/yieldfunc.py:
	add code to lock yield_execution functions while running

2007-03-17  Jason Tackaberry <tack@urandom.ca>

	* src/distribution/__init__.py: Check for python 2.4

2007-03-16  Dirk Meyer <dischi@freevo.org>

	* src/notifier/__init__.py: make it possible to import kaa from a thread

2007-03-13  Jason Tackaberry <tack@urandom.ca>

	* src/extensions/objectrow.c: Another py2.5 fix.

	* src/extensions/objectrow.c: Support Py_ssize_t on python 2.5.

	* src/extensions/shmmodule.c:
	Hopefully eliminate compiler warning on 64 bit platforms.

2007-03-11  Dirk Meyer <dischi@freevo.org>

	* ChangeLog (added):
	add ChangeLog for released modules, please keep it up-to-date

	* src/notifier/url.py: return url return code if not 200

2007-02-28  Dirk Meyer <dischi@freevo.org>

	* src/notifier/yieldfunc.py: handle StopIteration on first call

2007-02-26  Dirk Meyer <dischi@freevo.org>

	* setup.py: append src to get access to python xml

	* src/distribution/xmlconfig.py:
	Replace kaa.xml with minidom for parsing cxml files. This removes an
	extra dependency just for installing kaa modules.

2007-02-26  Jason Tackaberry <tack@urandom.ca>

	* src/distribution/core.py
	* setup.cfg (added):
	Make bdist_rpm work again; prefix RPM package names with python-;
	remove unneeded spec file from kaa.imlib2.

2007-02-15  Dirk Meyer <dischi@freevo.org>

	* src/utils.py: bugfix

	* src/notifier/__init__.py: do not import url as default

2007-02-14  Dirk Meyer <dischi@freevo.org>

	* src/config.py:
	create functions to set default and get desc without using _ vars

2007-02-13  Dirk Meyer <dischi@freevo.org>

	* src/notifier/sockets.py, src/notifier/callback.py,
	* src/notifier/timer.py, src/notifier/event.py,
	* src/notifier/nf_wrapper.py:
	Move NotifierCalback(s) to nf_wrapper to start cleanup callback.py

	* src/notifier/popen.py:
	Remove the "completed" signal from Process and return an InProgress
	object instead on start(). Since an InProgress object is a Signal the
	only difference for current code is that you can only register after
	start and need to reregister on each start. There is no problem with
	short running processes, the signal won't be called before the next
	main loop iteration, enough time to register. The good think about
	this is that you can use this InProgress object in async functions
	using yield_execution. It also makes the interface look similar to
	code already using InProgress. As a next step I will use InProgress
	for Threads. Since InProgress objects contain a second Signal for
	exceptions, this would make the interface simpler.

2007-02-12  Dirk Meyer <dischi@freevo.org>

	* src/extensions/inotify/inotify.c: 64 bit patch by Mathias Weber

2007-02-11  Dirk Meyer <dischi@freevo.org>

	* test/signals.py, src/tmpfile.py, src/notifier/url.py: update properties

	* src/tmpfile.py:
	Respect TMPDIR env and don't care about extra flags in the mode like
	the sticky bit as long as group and others have no read, write and
	execute rights.

2007-02-10  Dirk Meyer <dischi@freevo.org>

	* src/distribution/xmlconfig.py: handle dict type

	* src/xml.py: add unlink function

2007-02-07  Dirk Meyer <dischi@freevo.org>

	* src/distribution/xmlconfig.py: escape ' in desc

	* src/config.py:
	Dict with more than one Var fix; return items in Group in correct
	order on iter

2007-02-04  Dirk Meyer <dischi@freevo.org>

	* src/config.py: make it possible to interate over the config

2007-02-03  Dirk Meyer <dischi@freevo.org>

	* src/config.py: support - in config file

2007-01-23  Dirk Meyer <dischi@freevo.org>

	* src/notifier/url.py: use correct callbacks

	* src/notifier/__init__.py
	* src/notifier/url.py (added):
	add urllib2 wrapper based on threads

	* src/utils.py: rename Memberfunction to MemberFunction

	* src/utils.py: add Singleton class

2007-01-22  Jason Tackaberry <tack@urandom.ca>

	* test/callbacks.py, src/notifier/callback.py:
	Rework Signal class to use Callback and WeakCallback objects: when a
	callback is connected, a Callback object will be returned; fixed bug
	where doing cb == Callback(cb) wouldn't be True; simplified
	WeakCallback a bit (removed __call__ and created get_user_args()
	method); added __nonzero__ method that always returns True for Signal
	objects

2007-01-22  Dirk Meyer <dischi@freevo.org>

	* src/notifier/yieldfunc.py:
	support Signals/functions in YieldCallback.__init__

	* src/notifier/async.py: Always use once=True for InProgress

2007-01-20  Dirk Meyer <dischi@freevo.org>

	* src/notifier/nf_wrapper.py:
	Default recursive_depth of 2 is not enough when using yield functions
	and step() in epg. I need at least 3, so let us use 5.:)

	* src/notifier/yieldfunc.py: support yieldfunctions without return

2007-01-19  Dirk Meyer <dischi@freevo.org>

	* setup.py: set version higher than last release

2007-01-16  Jason Tackaberry <tack@urandom.ca>

	* src/extensions/shmmodule.c:
	Use PyObject_DEL instead of PyMem_DEL which no longer works as of
	Python 2.5; fix provided by Pierre Ossman.

2007-01-16  Rob Shortt <rob@tvcentric.com>

	* src/config.py: if filename is None expanduser() fails

2007-01-15  Jason Tackaberry <tack@urandom.ca>

	* src/distribution/core.py:
	Add extra_libraries kwarg to check_cc() and compile() methods; fix
	kaa.display setup.py to use this for checking dfb evas engine.

2007-01-14  Jason Tackaberry <tack@urandom.ca>

	* src/config.py:
	Add _hash() method to each class and store schema hash with the config
	file; by default, do not overwrite config file if schema hasn't
	changed.

	* src/notifier/thread.py: Log an error when thread pipe has no data.

	* src/config.py:
	Call expanduser on load/save filename. Add 'create' kwarg to load for
	creating config files if they don't exist.

2007-01-13  Dirk Meyer <dischi@freevo.org>

	* src/utils.py: create function to track if a kaa app is running

	* src/__init__.py
	* src/tmpfile.py (added):
	move TEMP variable to extra file and add tempfile function

2007-01-12  Dirk Meyer <dischi@freevo.org>

	* src/config.py: fix unicde bug

	* src/notifier/callback.py: do not confuse Jason

	* test/signals.py (added)
	* src/notifier/callback.py:
	add Signals class (dict) for easier use of signal dicts

2007-01-09  Dirk Meyer <dischi@freevo.org>

	* src/extensions/inotify/__init__.py:
	Set fd paramater when we know it worked

2007-01-05  Dirk Meyer <dischi@freevo.org>

	* src/config.py: translate _ to - if needed

	* src/input/lirc.py: expose signal direct in the module

	* src/distribution/xmlconfig.py:
	make it possible to add default values for dict

	* src/config.py:
	Fix dict in dict or group in dict on save. It should still work for
	all the other cases, some stuff in it was very strang and made no
	sense. :)

2007-01-02  Dirk Meyer <dischi@freevo.org>

	* src/distribution/xmlconfig.py, src/distribution/__init__.py: prop set

	* src/config.py: make it look better (tested on popcorn config)

2006-12-30  Jason Tackaberry <tack@urandom.ca>

	* src/extensions/inotify/__init__.py:
	Use non-block socket and log an error if data handler got no data;
	don't allow constructor to be called more than once (for singleton)

2006-12-30  Dirk Meyer <dischi@freevo.org>

	* src/config.py:
	Create INotify object when needed and not global. If it is done global
	the inotify fd will connect to the mainloop on import. Forking a
	helper process like beacon after the fd is connected causes some
	strange errors resulting in calling the wrong callback in the other
	process.

2006-12-30  Jason Tackaberry <tack@urandom.ca>

	* src/distribution/core.py, setup.py:
	Better support for RPM packaging via distutils bdist_rpm command.

	* src/distribution/core.py: More pythonic

2006-12-29  Jason Tackaberry <tack@urandom.ca>

	* src/distribution/core.py, setup.py:
	Check that Python.h exists if need to compile an extension module
	(hopefully solves a FAQ); indicate that lack of inotify in glibc is
	not an error (hopefully solves another FAQ).

2006-12-26  Jason Tackaberry <tack@urandom.ca>

	* src/distribution/core.py:
	Library.compile() should add include and library paths for that
	library.

2006-12-10  Jason Tackaberry <tack@urandom.ca>

	* src/distribution/core.py:
	When calling check_cc for an Extension, add all include and library
	paths as compile argments for all libraries added to that ext.

	* src/distribution/core.py: Use $CC, $CFLAGS, and $LDFLAGS.

2006-12-10  Dirk Meyer <dischi@freevo.org>

	* src/notifier/sockets.py: catch socket error

2006-12-09  Jason Tackaberry <tack@urandom.ca>

	* src/rpc.py: Better order.

	* src/rpc.py:
	Put DoS check back, but make it work for the case when server sends
	large amount of data along with response to client challenge.

2006-12-09  Dirk Meyer <dischi@freevo.org>

	* src/rpc.py: remove some extra check, I hope we do not need it

2006-12-02  Dirk Meyer <dischi@freevo.org>

	* src/notifier/callback.py: raise better exception

	* src/distribution/core.py: typo

2006-11-30  Dirk Meyer <dischi@freevo.org>

	* src/distribution/xmlconfig.py:
	remove <schema> from xml, use 4 spaces indent

2006-11-29  Dirk Meyer <dischi@freevo.org>

	* src/distribution/xmlconfig.py: add group and list parser, cleanup

	* src/distribution/xmlconfig.py (added)
	* src/distribution/build_py.py (added)
	* src/distribution/core.py:
	add config xml to python converter

	* src/distribution/__init__.py (added): add missing __init__.py

	* src/version.py
	* src/distribution/core.py (added)
	* src/distribution (added)
	* src/distribution.py (removed)
	* src/distribution/version.py (added):
	move distribution.py into a subdir

2006-11-29  Jason Tackaberry <tack@urandom.ca>

	* src/distribution.py:
	Include newline at end of code to compile (lack of newline flags a
	compiler warning)

2006-11-27  Jason Tackaberry <tack@urandom.ca>

	* src/ipc.py (removed): Move kaa.ipc into DEPRECATED/

2006-11-27  Dirk Meyer <dischi@freevo.org>

	* setup.py, MANIFEST.in: fix MANIFEST.in and release 0.1.1

2006-11-27  Jason Tackaberry <tack@urandom.ca>

	* src/rpc.py: Pad generated auth key to SHA1 block size, as with HMAC.

	* src/rpc.py: log auth failure on client end.

	* src/rpc.py:
	Don't read all data on socket unless authenticated; prevents possible
	DoS

2006-11-27  Dirk Meyer <dischi@freevo.org>

	* setup.py: update license

2006-11-27  Jason Tackaberry <tack@urandom.ca>

	* src/rpc.py: Remove more code duplication.

	* src/notifier/async.py: Better form.

	* src/rpc.py:
	Add some logging for authentication; fix bug where server could send a
	non-auth command to client before authentication completed; remove
	some code duplication.

	* src/rpc.py: Simplify the code path for packets before authentication.

	* src/rpc.py:
	Use a modified CRAM-SHA for authentication as opposed to a double-SHA
	(CRAM is makes offline attacks more difficult); add a comment that
	chosen plaintext attacks aren't very likely. (The salt was necessary
	with kaa.ipc where the client would initiate auth, but with rpc the
	server initiates auth, so salting the response only thwarts a CPA if
	the server is rogue.)

2006-11-26  Jason Tackaberry <tack@urandom.ca>

	* src/rpc.py:
	Merge back most of the auth logic (and comments) from kaa.ipc -- fixes
	2 DoS attacks and extends the auth process to be a 3-way handshake
	instead of 2-way to prevent server from being able to do rpc calls on
	client when secrets don't match; allow connecting an exposed function;
	some cleanups with __repr__

2006-11-22  Jason Tackaberry <tack@urandom.ca>

	* src/distribution.py:
	Don't use &> for redirection as it assumes bash, which may not be
	default shell.

2006-11-21  Dirk Meyer <dischi@freevo.org>

	* src/notifier/pynotifier/__init__.py,
	* src/notifier/pynotifier/dispatch.py,
	* src/notifier/pynotifier/nf_generic.py, src/notifier/pynotifier/log.py,
	* src/notifier/pynotifier/version.py, src/notifier/pynotifier/nf_gtk.py:
	sync with pynotifier trunk:

	fixed indentation

	removed $Id$ from header

	globally catch KeyboardInterrupt and SystemExit exceptions in step  to
	preserve maximum resursion depth errors

2006-11-21  Jason Tackaberry <tack@urandom.ca>

	* src/distribution.py:
	Fix problem where modules in src/extensions/foo were getting
	translated to a python path of kaa.module.extensions.foo instead of
	kaa.module.foo.

2006-11-19  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/pynotifier/nf_generic.py:
	Fix bug in notifier where KeboardInterrupt was not being handled
	during select in step().

2006-11-17  Jason Tackaberry <tack@urandom.ca>

	* src/distribution.py:
	Refactor distribution stuff to minimize code duplication.

2006-11-16  Dirk Meyer <dischi@freevo.org>

	* kaa-base.ebuild (added): add ebuild templates

	* setup.py: use setup from distribution.py

	* src/distribution.py: add support for ebuild generation

2006-11-12  Jason Tackaberry <tack@urandom.ca>

	* src/distribution.py: Remove needless string join.

	* src/distribution.py: Actually use maxlen :)

	* src/distribution.py: Don't error when version found == min version.

	* src/distribution.py:
	Use lexical comparison for versions, but pad version components to be
	equal length so cmp actually works right.

2006-11-12  Duncan Webb <duncan@freevo.org>

	* src/extensions/shmmodule.c: Changed functions to be a correct prototype

	* src/distribution.py:
	check does not work in all cases, eg SDL 1.2.5 is greater than 1.2.11
	This fixes this and should work in all cases

2006-11-09  Jason Tackaberry <tack@urandom.ca>

	* src/extensions/objectrow.c: Add Id keyword.

	* src/extensions/inotify/__init__.py: Fix copyright.

	* src/extensions/inotify/__init__.py:
	Fix INotify MOVE event to no longer require MOVED_TO event for a
	corresponding MOVED_FROM event to occur in the same call to
	_handle_data().

	* src/extensions/inotify/__init__.py: Implement as singleton.

	* src/config.py:
	This assert is redundant. (Callback constructor already does it.)

2006-11-06  Dirk Meyer <dischi@freevo.org>

	* src/notifier/popen.py:
	deliver all data in queue before handling dead child

2006-11-01  Dirk Meyer <dischi@freevo.org>

	* test/callbacks.py: svn propset

	* src/extensions/objectrow.c, src/extensions/inotify/inotify.c:
	respect C standard, needs to be fixed in other modules, too

2006-10-30  Dirk Meyer <dischi@freevo.org>

	* src/extensions/inotify/__init__.py: oops, I broke it

	* src/decorators.py, src/config.py, setup.py, src/ioctl.py, src/ipc.py,
	* src/logger.py, src/extensions/inotify/__init__.py,
	* src/distribution.py, src/input/stdin.py, src/rpc.py, src/weakref.py,
	* src/db.py, src/extensions/objectrow.c, TODO, src/input/lirc.py,
	* src/strutils.py, COPYING, src/extensions/inotify/inotify.c,
	* src/__init__.py, src/utils.py, src/xml.py:
	Relicence kaa.base under LGPL. Add header to all files and point to
	the LGPL in all headers. Also remove trailing whitespaces.

	* src/input/bluetooth.py (removed):
	move bluetooth out of kaa.base, it is not LGPL compatible

2006-10-27  Dirk Meyer <dischi@freevo.org>

	* src/logger.py: use internal reference to original makeRecord

	* src/logger.py: next try to fix logger for python 2.5

	* src/logger.py: make logger work with python 2.5 (without testing)

2006-10-15  Jason Tackaberry <tack@urandom.ca>

	* src/extensions/objectrow.c:
	Look in pickle for attribute if ATTR_INDEXED_IGNORE_CASE, not if
	ATTR_IGNORE_CASE.

2006-10-06  Dirk Meyer <dischi@freevo.org>

	* src/extensions/inotify/inotify.c: use perror to show the problem

2006-10-04  Jason Tackaberry <tack@urandom.ca>

	* src/db.py, test/callbacks.py, src/notifier/callback.py:
	Support weakref for functions; don't update types table if type hasn't
	really changed; support the case when modifying an existing type
	attribute; commit after registering object type attr, just to be safe;
	reload object types after updating attributes of an existing object
	type.

2006-09-26  Dirk Meyer <dischi@freevo.org>

	* src/notifier/thread.py, src/notifier/sockets.py,
	* src/notifier/callback.py, src/notifier/async.py,
	* src/notifier/__init__.py, src/notifier/timer.py,
	* src/notifier/event.py, src/notifier/jobserver.py,
	* src/notifier/popen.py, src/notifier/yieldfunc.py,
	* src/notifier/nf_wrapper.py, src/notifier/decorators.py:
	put kaa.notifier under LGPL 2.1

2006-08-11  Jason Tackaberry <tack@urandom.ca>

	* src/extensions/objectrow.c: Fix the "major kaa.db bug"

2006-08-08  Dirk Meyer <dischi@freevo.org>

	* src/rpc.py: call callback signal even without connected stuff

2006-08-07  Dirk Meyer <dischi@freevo.org>

	* src/utils.py: add wait in daemonize to block until the child is ready

2006-08-06  Dirk Meyer <dischi@freevo.org>

	* src/notifier/timer.py: incr. log level to see if the bug is fixed

2006-08-05  Dirk Meyer <dischi@freevo.org>

	* src/notifier/popen.py:
	close the child socket is a good idea to avoid running out of
	filehandles :)

2006-08-04  Jason Tackaberry <tack@urandom.ca>

	* src/extensions/shmmodule.c:
	Don't check memory status when detaching shmem segment. Actually this
	basic logic is broken in shmmodule, because it is possible for a
	segment to be destroyed (or rather marked for destruction) which means
	it technically doesn't exist, but it should otherwise function fine
	for any processes that have attached it. I'll revisit this code later,
	but for now this change allows us to detach from a shmem segment after
	it has been marked for destruction in another process.

2006-08-03  Dirk Meyer <dischi@freevo.org>

	* src/notifier/nf_wrapper.py: support notifier init options

	* src/notifier/pynotifier/__init__.py,
	* src/notifier/pynotifier/version.py, src/notifier/pynotifier/nf_gtk.py:
	sync with new pynotifier

	* src/db.py: require some higher sqlite version

2006-08-02  Jason Tackaberry <tack@urandom.ca>

	* src/db.py, src/extensions/objectrow.c:
	Support pickling ObjectRow objects; fixes a bug in beacon when doing
	dirname queries of a new directory that isn't yet in the db. (beacon
	returns a list of pickled ObjectRows instead.)

2006-08-01  Dirk Meyer <dischi@freevo.org>

	* src/db.py: check pysqlite version

2006-08-01  Jason Tackaberry <tack@urandom.ca>

	* src/db.py, src/extensions/objectrow.c:
	Integrate new ObjectRow row factory with kaa.db; remove all the cruft
	from kaa.db that has to do with normalizing rows; remove query_raw(),
	it's just query() now.

	* setup.py: Make glib optional.

2006-07-31  Dirk Meyer <dischi@freevo.org>

	* src/distribution.py: fix version check when using pkg-config

	* setup.py: print error

2006-07-31  Jason Tackaberry <tack@urandom.ca>

	* setup.py: Require glib.

	* src/extensions/objectrow.c (added)
	* setup.py:
	Initial work on custom C-based sqlite row factory. This is about 2-4
	times faster than the current normalize code. This introduces a
	dependency on glib, which isn't really a problem as glib is a pretty
	standard library nowadays.  Not integrated yet with kaa.db; will do
	that tomorrow.

2006-07-23  Dirk Meyer <dischi@freevo.org>

	* src/extensions/inotify/__init__.py: no need for the signal anymore

	* src/notifier/callback.py: return active() == false on python shutdown

	* src/rpc.py: raise special ConnectError exception

2006-07-22  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/callback.py:
	Rename _notifier_running to something more descriptive; add comment
	describing it.

2006-07-21  Dirk Meyer <dischi@freevo.org>

	* src/extensions/inotify/__init__.py: add small todo

	* src/notifier/callback.py:
	prevent weakrefs from calling anything on python shutdown

	* src/notifier/__init__.py: disconnect all signals on shutdown

	* src/config.py: remember loaded filename for save

	* src/rpc.py: fix error on debug

	* src/notifier/decorators.py: adjust to notifier change

2006-07-19  Jason Tackaberry <tack@urandom.ca>

	* test/callbacks.py (added): Add callbacks test script.

2006-07-18  Dirk Meyer <dischi@freevo.org>

	* src/notifier/callback.py: recursion can not happen with new pynotifier

2006-07-17  Dirk Meyer <dischi@freevo.org>

	* src/notifier/yieldfunc.py: support two kinds of __call__

2006-07-16  Dirk Meyer <dischi@freevo.org>

	* src/notifier/pynotifier/nf_generic.py, src/rpc.py,
	* src/notifier/pynotifier/log.py, test/asynctest.py,
	* src/notifier/pynotifier/__init__.py,
	* src/notifier/pynotifier/dispatch.py,
	* src/notifier/pynotifier/nf_gtk.py, src/input/stdin.py,
	* src/notifier/nf_wrapper.py, src/notifier/async.py, src/utils.py,
	* src/notifier/yieldfunc.py:
	set missing properties

	* src/notifier/pynotifier/__init__.py,
	* src/notifier/pynotifier/dispatch.py,
	* src/notifier/pynotifier/nf_generic.py, src/notifier/pynotifier/log.py,
	* src/notifier/pynotifier/version.py, src/notifier/pynotifier/nf_gtk.py:
	switch to pynotifier 0.5 (LGPL)

	* src/notifier/yieldfunc.py:
	make it possible to create a YieldFunction directly

2006-07-15  Dirk Meyer <dischi@freevo.org>

	* src/extensions/inotify/__init__.py: unregister socket on shutdown

	* src/rpc.py: avoid double close

	* src/rpc.py: write and read as fast as possible

	* src/rpc.py: close on shutdown

	* test/asynctest.py (added): add test for async calls

	* src/rpc.py: change interface and always return an InProgress object

	* src/notifier/__init__.py: adjust to moved fuctions/classes

	* src/notifier/thread.py:
	use InProgress on async MainThreadCallback calls

	* src/notifier/jobserver.py, src/notifier/decorators.py:
	move execute_in_thread to job.py and return an InProgress object when
	such a function is called.

	* src/notifier/yieldfunc.py:
	update yield function to accepts InProgress as return

	* src/notifier/async.py (added):
	InProgress not inherits from Signal and is moved to async.py

2006-07-13  Dirk Meyer <dischi@freevo.org>

	* src/notifier/pynotifier/__init__.py,
	* src/notifier/pynotifier/nf_generic.py,
	* src/notifier/pynotifier/nf_gtk.py:
	sync with pynotifier trunk

	* src/utils.py: do not reset umask

	* src/db.py: accept list and tuple in QExp

2006-07-12  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/callback.py:
	Fix not creating log object; Update Callback.__cmp__ to also check if
	the passed object is the callback object itself, as well as check if
	it's the callback we're wrapping. (Fixes a bug in connect_weak: when
	the referance dies, the callback doesn't get properly disconnected.
	This manifested itself during animations.)

2006-07-12  Dirk Meyer <dischi@freevo.org>

	* src/notifier/callback.py: error handling for emit callbacks

	* src/rpc.py: send delayed messages after auth

2006-07-11  Dirk Meyer <dischi@freevo.org>

	* src/notifier/pynotifier/__init__.py,
	* src/notifier/pynotifier/nf_generic.py, src/notifier/nf_wrapper.py:
	fix pynotifier generic

	* src/notifier/pynotifier/__init__.py (added)
	* src/notifier/pynotifier/dispatch.py (added)
	* src/notifier/pynotifier/nf_generic.py (added)
	* src/notifier/pynotifier/log.py (added)
	* setup.py
	* src/notifier/pynotifier/version.py (added)
	* src/notifier/nf_generic.py (removed)
	* src/notifier/pynotifier/nf_gtk.py (added)
	* src/notifier/pynotifier (added)
	* src/notifier/nf_wrapper.py:
	Copy current pynotifier with generic and gtk support into
	kaa.notifier.

	* src/notifier/popen.py: accept tuple

	* src/notifier/thread.py: move missing variables around

2006-07-11  Jason Tackaberry <tack@urandom.ca>

	* src/extensions/shmmodule.c:
	Fix bug on 64 bit arg. (Should submit this upstream to RH)

	* src/notifier/nf_wrapper.py: Add default value for condition arg.

2006-07-10  Jason Tackaberry <tack@urandom.ca>

	* src/distribution.py:
	Support custom extra_compile_args; copy libraries, library_dirs, etc.
	in constructor so they can be safely modified after instantiaton.

2006-07-10  Dirk Meyer <dischi@freevo.org>

	* src/notifier/thread.py
	* src/notifier/sockets.py
	* src/notifier/callback.py
	* src/notifier/__init__.py
	* src/notifier/timer.py
	* src/notifier/popen.py
	* src/notifier/nf_wrapper.py (added):
	Create real notifier instance when needed. This makes it possible to
	select a new mainloop even after kaa is imported. After timer or
	sockets are added, a mainloop switch is not possible.

	* src/config.py: support multi-line doc in list

2006-07-10  Jason Tackaberry <tack@urandom.ca>

	* src/config.py, src/db.py, src/extensions/inotify/__init__.py:
	Get rid of the NoCopyCallback kludge -- kludge moved to Callback
	class. Fix bugs with deepcopying Config objects; add an autosave
	feature to Config.

	* src/notifier/callback.py: Implements cmp for callbacks.

	* src/notifier/callback.py: See docstring.

	* src/config.py:
	Fix bug where List with a Group schema would be saved as, for example,
	list.[0].foo = bar. It should be list[0].foo = bar. Also added repr to
	all objects for useful debugging.

	* src/config.py: Fixes for the lame deepcopy problem.

	* src/config.py:
	Add watch() API to config for config file monitoring; add
	set_filename() method for setting the default filename for the config
	object. load() no longer remembers the value passed to it, so code
	that relies on this will have to be changed.

	* src/extensions/inotify/__init__.py:
	Fix bug where watch doesn't get fully removed when DELETE_SELF occurs.

2006-07-09  Jason Tackaberry <tack@urandom.ca>

	* src/extensions/inotify (added)
	* setup.py
	* src/extensions/inotify/__init__.py:
	Always build shm module, but put under kaa.shm; move inotify to
	kaa.base.

	* src/distribution.py: Terminology fixes.

	* src/distribution.py: Fix for building kaa modules on x86_64.

	* src/extensions/shmmodule.c: Fix some compiler warnings under -Wall

2006-07-09  Dirk Meyer <dischi@freevo.org>

	* src/notifier/thread.py: create _thread_notifier_pipe when needed

2006-07-09  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/thread.py, src/notifier/__init__.py:
	Fixes for when kaa.main() is started in another thread.

	* src/utils.py: A bit more elegant.

2006-07-08  Jason Tackaberry <tack@urandom.ca>

	* src/utils.py:
	Don't return a list of results for which(); just the first one.

	* src/utils.py: Fix zombie when exit=False

	* src/utils.py (added): Add some utility functions.

2006-07-08  Dirk Meyer <dischi@freevo.org>

	* src/notifier/thread.py, src/notifier/popen.py:
	fix some exception handling

2006-07-06  Dirk Meyer <dischi@freevo.org>

	* src/rpc.py: update debug

	* src/notifier/__init__.py
	* src/notifier/yieldfunc.py (added):
	add support and doc(!) for using yield in functions

2006-06-24  Dirk Meyer <dischi@freevo.org>

	* src/rpc.py: add more doc

	* src/rpc.py: add doc

2006-06-23  Dirk Meyer <dischi@freevo.org>

	* src/notifier/__init__.py: stop at system exit

	* src/rpc.py (added):
	Add a simple rpc module. It has much less features than kaa.ipc but it
	is possible to use this without any blocking (step() calling)

2006-06-11  Dirk Meyer <dischi@freevo.org>

	* src/notifier/__init__.py: nicer exception debug

2006-04-29  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/callback.py, src/notifier/__init__.py:
	Change signal emit default return value to True, if any handlers
	return False then emit will return False. Removed step signal wrapper
	and pass the emit method directly to notifier again. (If any step
	signal handlers return False this dispatcher will get removed, but
	that's not a big deal, we just make sure we don't do that).

2006-04-29  Dirk Meyer <dischi@freevo.org>

	* src/notifier/__init__.py: rename idle signal to step

	* src/xml.py: prevent crash

2006-04-28  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/__init__.py:
	Wrap idle signal emit in a function that ignores return value so
	notifier doesn't remove the dispatcher.

2006-04-25  Jason Tackaberry <tack@urandom.ca>

	* src/ipc.py: Stupid annoying exceptions on shutdown

	* src/ipc.py:
	Return false if read from socket failed (due to socket close, not due
	to nonblock read with no data) so that notifier will remove the fd
	handler; remove custom _debug and use logger debug instead.

	* src/db.py:
	Add vacuum method; add get_db_info method that returns some info about
	the database such as total object count, indexed keywords, available
	object types, count breakdown by type.

	* src/notifier/timer.py:
	And the clouds parted and a wonderous voice hath spake unto me from
	the heavens above: "thou shalt edit timer.py and modify thine inactive
	callback warning to debug." And the heathens and infidels trembled
	before the mighty voice, and the commandment was passed into law.

2006-04-22  Jason Tackaberry <tack@urandom.ca>

	* src/ipc.py: Don't propagate KeyboardInterrupt exceptions to remote.

	* src/db.py:
	Revert coersion for limit kwarg; changed my mind, this should be the
	caller's responsibility.

	* src/db.py:
	Also coerge string of digits to numeric type for limit kwarg.

	* src/db.py:
	Coerce string of digits into numeric type; fix typo in _query_keywords
	__doc__

	* src/db.py: Split keywords on digits too.

2006-04-21  Dirk Meyer <dischi@freevo.org>

	* src/weakref.py: better None support

	* src/weakref.py: revert change

	* src/notifier/popen.py: prevent recursion

	* src/weakref.py: fix a second True/False bug when _ref() is not None

2006-04-20  Dirk Meyer <dischi@freevo.org>

	* src/weakref.py: create weakref also for "False" objects

2006-04-19  Jason Tackaberry <tack@urandom.ca>

	* src/db.py: Some minor optimizations to keyword searching.

	* src/ipc.py: Exception cleanup

2006-04-17  Dirk Meyer <dischi@freevo.org>

	* src/notifier/nf_generic.py: fix typo

2006-04-16  Dirk Meyer <dischi@freevo.org>

	* src/notifier/callback.py, src/notifier/__init__.py:
	small code to support gtk notifier

2006-04-07  Dirk Meyer <dischi@freevo.org>

	* src/db.py: remove debug

	* src/ipc.py: remove debug

	* src/input/__init__.py, src/input/stdin.py:
	update stdin stuff, you must import kaa.input.stdin now

	* src/input/stdin.py: fix another bug when porting getch

	* TODO, src/notifier/__init__.py: update to missing utils file

	* src/input/__init__.py: import stdin as default (maybe not later)

	* src/ipc.py
	* src/notifier/__init__.py
	* src/input/stdin.py (added)
	* src/utils.py (removed):
	move stdin signal code (getch) from util to input

2006-03-31  Jason Tackaberry <tack@urandom.ca>

	* src/db.py:
	remove "ON CONFLICT REPLACE" clause from index as it was removed from
	sqlite as of 3.3.3

2006-03-31  Dirk Meyer <dischi@freevo.org>

	* test/xml.py, test/decorator.py, src/input/bluetooth.py, src/config.py,
	* src/logger.py, src/notifier/decorators.py, test/config.py,
	* src/decorators.py, src/strutils.py, src/xml.py:
	set properties

	* src/notifier/.cvsignore (removed)
	* src/input/.cvsignore (removed)
	* src/.cvsignore (removed):
	remove .cvsignore files, we now use svn

2006-03-31  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/thread.py: Silence stupid exceptions on shutdown.

2006-03-27  Jason Tackaberry <tack@urandom.ca>

	* src/db.py:
	Add case-insensitive columns via ATTR_IGNORE_CASE flag. For non-
	indexed  columns it will just call lower(column) in the sql query. For
	indexed columns it will actually store the value lower case in that
	column and use the pickle for the actual value. This means case-
	insensitive queries on indexed columns can still benefit from the
	index.

2006-03-25  Jason Tackaberry <tack@urandom.ca>

	* src/db.py: Finish a comment I started :)

	* src/db.py:
	Deprecated ATTR_KEYWORDS_FILENAME and instead added a heuristic to see
	if the text to index is a possible filename or not.

2006-03-25  Dirk Meyer <dischi@freevo.org>

	* src/logger.py: do not set log level

	* src/ipc.py: remove launch code

2006-03-21  Dirk Meyer <dischi@freevo.org>

	* src/config.py: fix comment stuff

	* src/ipc.py: prevent crash on shutdown

2006-03-19  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/sockets.py:
	Socket keeps ref cycle with notifier only while connected, so that
	disconnected sockets get deallocated without intervention from gc.

	* src/notifier/sockets.py: Add listen support to Socket class

2006-03-18  Dirk Meyer <dischi@freevo.org>

	* src/db.py: change doc to make highlight work with emacs :)

	* src/notifier/timer.py: do not call timer when already inactive

	* src/notifier/decorators.py: prevent recursion

2006-03-18  Jason Tackaberry <tack@urandom.ca>

	* src/db.py: Add "like" operator to QExpr

2006-03-18  Dirk Meyer <dischi@freevo.org>

	* src/db.py: do not use print

	* src/ipc.py: stop warning on shutdown

	* src/ipc.py: user logger and not print

2006-03-16  Rob Shortt <rob@tvcentric.com>

	* src/ipc.py:
	it will IPCDisconnectedError if disconnected, so return False

	* src/db.py: classic int() fix

2006-03-11  Dirk Meyer <dischi@freevo.org>

	* src/__init__.py, src/notifier/decorators.py:
	fix name conflict with weakref as module and function

	* test/xml.py (added)
	* src/libxml2.py (removed)
	* src/xml.py (added)
	* test/libxml2.py (removed):
	rename libxml2.py to xml.py

	* setup.py: there is no base dir anymore

	* src/libxml2.py (added)
	* src/ioctl.py (added)
	* src/weakref.py (added)
	* test/libxml2.py
	* src/ipc.py (added)
	* src/notifier/__init__.py
	* src/distribution.py (added)
	* src/utils.py (added)
	* src/config.py (added)
	* src/logger.py (added)
	* src/base (removed)
	* src/notifier/decorators.py
	* src/db.py (added)
	* src/version.py (added)
	* test/config.py
	* src/decorators.py (added)
	* src/strutils.py (added)
	* src/__init__.py:
	restructure kaa.base

2006-03-10  Dirk Meyer <dischi@freevo.org>

	* src/base/libxml2.py: handle empty attributes

	* src/base/distribution.py: fix stupid bug when using the global setup.py

	* src/base/distribution.py: start moving some stuff around

2006-03-05  Dirk Meyer <dischi@freevo.org>

	* src/input/bluetooth.py: only send when connected

2006-03-04  Dirk Meyer <dischi@freevo.org>

	* src/base/ipc.py: be more verbose

	* src/input/bluetooth.py: fix bluetooth init

	* src/base/distribution.py: make better test file

2006-02-26  Dirk Meyer <dischi@freevo.org>

	* src/base/libxml2.py: make it possible to read from memory

	* src/notifier/__init__.py: better shutdown handling

2006-02-24  Dirk Meyer <dischi@freevo.org>

	* src/base/distribution.py: change stdout/stderr handling

	* src/base/distribution.py: create Configfile class outside extention

2006-02-19  Dirk Meyer <dischi@freevo.org>

	* src/base/ipc.py: add function to autostart server if needed

2006-02-18  Dirk Meyer <dischi@freevo.org>

	* src/notifier/decorators.py: make timers weak to help the gc

2006-02-13  Dirk Meyer <dischi@freevo.org>

	* src/base/libxml2.py: add better import warning

	* src/base/libxml2.py:
	Some content unicode bugfixes, also replace all & with &amp; when
	using .content. If you need to set something with an entity, use
	set_content_raw. Also make it possible to add any kind of object as
	child as long as it as __xml__ defined returning a node

	* src/base/libxml2.py: fix unicode bug

	* src/base/decorators.py (added): start decorators module

	* test/libxml2.py, src/base/libxml2.py:
	update iterator to go thru all nodes

2006-02-12  Dirk Meyer <dischi@freevo.org>

	* test/libxml2.py (added)
	* src/base/libxml2.py (added):
	add libxml2 wrapper

2006-02-05  Dirk Meyer <dischi@freevo.org>

	* test/decorator.py, src/notifier/decorators.py:
	fix bug with more than one exposed function in a class

	* test/decorator.py (added)
	* src/notifier/__init__.py
	* src/notifier/decorators.py (added):
	Add some decorators to avoid duplicate code all this time. In many
	cases Timer or used to simulate stepping or delayed callbacks. And the
	execute_in_thread and execute_in_mainloop decorators will make sure a
	function is called in the correct thread context.

2006-02-02  Dirk Meyer <dischi@freevo.org>

	* AUTHORS (added)
	* TODO (added)
	* setup.py
	* COPYING (added)
	* MANIFEST.in (added)
	* README (added):
	add metadata

2006-02-01  Dirk Meyer <dischi@freevo.org>

	* src/notifier/popen.py: use isinstance and not type()

2006-01-30  Dirk Meyer <dischi@freevo.org>

	* src/input/lirc.py:
	Update lirc to make it possible to stop the lirc connection later and
	add some docs.

2006-01-29  Dirk Meyer <dischi@freevo.org>

	* src/input/lirc.py: add fixme

	* src/base/config.py: format multiline descriptions

	* src/notifier/callback.py: remove default notifier logger

	* src/base/logger.py: remove debug

2006-01-21  Dirk Meyer <dischi@freevo.org>

	* src/notifier/thread.py:
	better exception handling for thread/mainloop interaction

2006-01-15  Dirk Meyer <dischi@freevo.org>

	* src/input/bluetooth.py (added): add bluetooth into system

2006-01-09  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/sockets.py: SocketDispatcher missing from __all__

	* src/notifier/thread.py, src/notifier/sockets.py,
	* src/notifier/callback.py, test/config.py, src/notifier/__init__.py,
	* src/notifier/popen.py:
	Some cleanup in notifier/__init__.py (no need to explicitly reference
	what  things to import from notifier modules, since __all__ is
	specified); new function set_current_as_mainthread() which is called
	when notifier.loop() is called, which allows the main loop to run in
	another thread; fix for Process.is_alive()

2006-01-08  Jason Tackaberry <tack@urandom.ca>

	* src/base/config.py: Some fixes for proxying bool config variables.

	* src/base/ipc.py, src/base/weakref.py, src/base/config.py:
	Refactor config code a bit, and add monitor support; bug fixes in ipc;
	fixes in weakref for non-callable objects.

2006-01-05  Dirk Meyer <dischi@freevo.org>

	* src/base/strutils.py:
	add format function to take care of string and unicode

2006-01-05  Jason Tackaberry <tack@urandom.ca>

	* src/input/lirc.py: Fixes for lirc shutdown.

2006-01-02  Dirk Meyer <dischi@freevo.org>

	* src/base/strutils.py: fix copy error

	* src/base/config.py: use strutils to convert between str and unicode

	* src/__init__.py:
	import base.logger to make sure the python logging module is updated

	* src/base/__init__.py, src/base/db.py:
	adjustments to the new logger/string module

	* src/base/logger.py (added):
	add "fixes" to the python logging module to handle unicode

	* src/base/utils.py
	* src/base/strutils.py (added):
	move string utils into an extra file and add some more

	* src/base/config.py: add get and __nonzero__ function to Dict

	* src/base/config.py:
	handle empty values and print errors with the logger

2006-01-01  Dirk Meyer <dischi@freevo.org>

	* src/base/config.py: some more improvements for new types

2005-12-30  Dirk Meyer <dischi@freevo.org>

	* src/base/__init__.py: import weakref directly

	* test/config.py (added): config test app

	* src/base/config.py: clean up config module

2005-12-29  Dirk Meyer <dischi@freevo.org>

	* src/base/config.py: allow = in dict key and value

	* src/base/config.py:
	replace descr with desc

	fix more str/unicode bugs

	read config file in the specified encoding

	* src/base/config.py: fix unicode error handling

	* src/base/config.py: more or less final version

	* src/base/config.py: try different config layout using an extra object

2005-12-28  Dirk Meyer <dischi@freevo.org>

	* src/base/config.py: use dicts not lists

2005-12-28  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/callback.py:
	Override __repr__ for WeakCallback to display more information.

	* src/notifier/callback.py: Use __repr__ instead of __str__

2005-12-27  Jason Tackaberry <tack@urandom.ca>

	* src/input/lirc.py: Don't die if lirc config file doesn't exist.

	* src/notifier/timer.py: Add get_interval() method to Timer

	* src/base/distribution.py:
	Update check_library to use foo-config first, and then fall back on
	pkg-config

2005-12-26  Jason Tackaberry <tack@urandom.ca>

	* src/base/distribution.py:
	When using pkg-config, need to use --modversion to get the library
	version, since --version returns pkg-config's version.

2005-12-24  Jason Tackaberry <tack@urandom.ca>

	* src/base/distribution.py: Update check_library to support pkg-config

2005-12-23  Dirk Meyer <dischi@freevo.org>

	* src/base/config.py (added): first draft of config reader

2005-12-10  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/nf_generic.py:
	Fix bug in notifier where if a timer callback called unregister() on
	itself, it would not get properly unregistered. (Actually, it would
	get unregistered, but then it would get added again.)

	* src/notifier/callback.py:
	For callbacks connected with connect_once, disconnect before calling
	callback.

2005-12-08  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/callback.py:
	Handle the situation where a weak callback connected to a signal loses
	its ref during the signal emission process.

	* src/notifier/callback.py:
	Fix bug where WeakCallback._get_callback() could return None even
	though the reference was still alive (if the object it was proxying
	implements __len__ or __nonzero__); fix bug in signal disconnection if
	WeakCallback was specified (which as a result fixes a bug where weak
	callbacks would fail to get automatically disconnected when their ref
	died).

2005-12-06  Jason Tackaberry <tack@urandom.ca>

	* src/base/ipc.py: Add __ipc_noproxy_args kwarg.

	* src/notifier/callback.py, src/notifier/popen.py:
	Preseve old flags when setting descriptors non-block in IOHandler; fix
	Signal to support weak callbacks for the iterator; implent
	__contains__ for Signal.

2005-12-03  Jason Tackaberry <tack@urandom.ca>

	* src/base/ipc.py:
	Several cleanups for shutdown handling. Use WeakSocketDispatcher and
	ensure proxied objects get removed on shutdown, so that their
	destructors will get  called.

	* src/notifier/__init__.py:
	Added a small sleep to step() when called from non-mainthread to
	prevent  busy loops.

	* src/notifier/thread.py, src/notifier/sockets.py,
	* src/notifier/__init__.py, src/notifier/popen.py:
	Split Process.killall into top steps: stopall and killall. stopall is
	called before the kaa shutdown signal emits, whereas killall is called
	afterward. Also fixed a bug where notifier.step() could be called from
	a thread -- it was causing _thread_notifier_run_queue to be executed
	in non-mainthread and resulting in infinite loop in between that
	function and MainThreadCallback.__call__. Now calling step() from a
	thread simply calls wakeup(). (It should probably sleep a little bit
	as well, to prevent a busy loop.)

	* src/base/ipc.py:
	Fix bugs on shutdown where client sockets wouldn't get properly
	unregistered from notifier.

	* src/notifier/nf_generic.py: Replace tabs with spaces.

2005-11-30  Dirk Meyer <dischi@freevo.org>

	* src/notifier/nf_generic.py: use logging module

	* src/notifier/thread.py, src/notifier/sockets.py,
	* src/notifier/callback.py, src/notifier/__init__.py,
	* src/notifier/nf_generic.py, src/notifier/timer.py,
	* src/notifier/popen.py:
	switch to new pyNotifier version

2005-11-23  Dirk Meyer <dischi@freevo.org>

	* setup.py, src/base/ipc.py, src/input/lirc.py, src/input/__init__.py,
	* src/notifier/event.py, src/notifier/timer.py, src/notifier/sockets.py,
	* src/base/weakref.py, src/__init__.py, src/notifier/callback.py,
	* src/notifier/nf_generic.py, src/notifier/popen.py,
	* src/base/__init__.py, src/base/utils.py, src/notifier/__init__.py,
	* src/base/version.py, src/notifier/thread.py, src/base/distribution.py,
	* src/notifier/jobserver.py, src/base/ioctl.py, test/jobserver.py,
	* src/base/db.py:
	set keyword property

2005-11-19  Jason Tackaberry <tack@urandom.ca>

	* src/base/ipc.py:
	Rename isproxy to is_proxy; add is_proxy_alive function.

2005-11-19  Dirk Meyer <dischi@freevo.org>

	* src/base/__init__.py, src/notifier/__init__.py:
	move logging stuff to an extra function to enable it withut calling
	step()

2005-11-17  Dirk Meyer <dischi@freevo.org>

	* src/notifier/thread.py:
	acquire look only when needed (fix race condition)

	* src/notifier/thread.py: handle error when there is nothing to read

	* src/notifier/thread.py: fix bad wakeup timing whenusing notifier.step

2005-11-06  Jason Tackaberry <tack@urandom.ca>

	* src/base/ipc.py:
	Don't needlessly incref proxies in _proxy_data(); handle StopIteration
	exception so iterating over a remote object works properly.

	* src/base/ipc.py:
	Fix bug where proxied objects weren't getting associated with the
	IPCChannel for async replies.

	* src/notifier/sockets.py:
	Fix bug when async callback is specified in Socket.connect

	* src/base/ipc.py, src/notifier/sockets.py, src/notifier/__init__.py:
	Notifier-aware socket class

2005-10-31  Jason Tackaberry <tack@urandom.ca>

	* src/base/db.py: Fix bug introduced by last check-in

	* src/base/db.py:
	Ensure ATTR_SIMPLE attributes which are set to None still get included
	in the normalized result rows.

2005-10-31  Dirk Meyer <dischi@freevo.org>

	* src/notifier/thread.py, src/notifier/__init__.py:
	make it possible to wake up main thread

2005-10-31  Jason Tackaberry <tack@urandom.ca>

	* src/base/ipc.py:
	Handle "resource temporarily unavailable" exceptions for socket writes

2005-10-25  Jason Tackaberry <tack@urandom.ca>

	* src/base/db.py:
	Raise exception when registering object type with no keywords or
	attributes specified.

	* src/base/db.py: Remove automatic adding of 'dir' object type.

2005-10-17  Jason Tackaberry <tack@urandom.ca>

	* src/base/db.py: Bug fixes.

	* src/base/ipc.py:
	Raise IPCRemoteException when remote exceptions occur on server.

	* src/notifier/callback.py: Fix bugs in signal disconnection

2005-10-16  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/callback.py:
	Added set_prevent_recursion() method to Callback base class, which
	prevents a callback from recursing into itself.

2005-10-14  Jason Tackaberry <tack@urandom.ca>

	* src/base/ipc.py: Comment clarifications.

	* src/base/ipc.py:
	Add salt to auth response to prevent chosen plaintext attacks; add
	more comments for the auth code.

2005-10-13  Jason Tackaberry <tack@urandom.ca>

	* src/base/ipc.py:
	Implement authentication and this time try not to make it suck. Needs
	review.

	* src/base/ipc.py:
	Implement simple challenge authentication in ipc; various cleanups;
	fix bug with async calls.

	* src/base/db.py:
	Move some variable declarations to the top of the function.

	* src/notifier/callback.py:
	Removed unused dictionary interface from Signal; added __iter__ to
	Signal that iterates over callbacks for that signal.

2005-10-12  Jason Tackaberry <tack@urandom.ca>

	* src/base/ipc.py, src/base/db.py:
	Use list instead of string concatentation for constructing query
	string. Allow support for QExpr in parent attribute for queries.

	* src/notifier/__init__.py:
	Er, check notifier handler in both loop() and step()

	* src/notifier/__init__.py:
	Set default handler in step() rather than loop() for client apps that
	don't call main()

	* src/base/utils.py, src/base/db.py:
	Renamed query to query_raw and query_normalized to query. Added some
	convenience functions for dealing with raw datasets.

	* src/base/ipc.py: Support for pickling buffer objects

2005-10-10  Jason Tackaberry <tack@urandom.ca>

	* src/base/db.py:
	Added some internal convenience functions (_get_type_id and
	_get_type_attrs); changed the interface to register_object_type_attrs
	so that db attributes are specified as keyword arguments; added
	support for multi-column indexes.

2005-10-09  Jason Tackaberry <tack@urandom.ca>

	* setup.py: Change the message about shm module.

	* src/base/db.py:
	Change index on words_map to (object_id,object_type) instead of
	(object_type, object_id) for better performance; use triggers to
	handle decrementing file count in words table and keywords_objectcount
	in meta table; rename  _value_to_printable back to _list_to_printable;
	new method  _type_has_keyword_attr which returns True if the specified
	type has any  attribute that's ATTR_KEYWORDS; add method
	delete_by_query which allows deleting multiple objects based on an
	arbitrary query; fixed a bug when attrs keyword is specified in
	query(); fixed a bug where specifying a query limit could return more
	rows than requested.

2005-10-08  Jason Tackaberry <tack@urandom.ca>

	* src/base/db.py (added): Moved db to kaa.base

2005-10-07  Jason Tackaberry <tack@urandom.ca>

	* src/base/ipc.py: Implement support for async calls

2005-09-23  Dirk Meyer <dischi@freevo.org>

	* src/notifier/__init__.py
	* src/notifier/signals.py (removed):
	remove unix signal support (never worked right)

2005-09-21  Jason Tackaberry <tack@urandom.ca>

	* src/base/distribution.py: Add -Wall to extra_compile_args

2005-09-18  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/popen.py:
	Add set_stop_command to Process class. A string or callback can be set
	here and will be used to try to gracefully terminate the process in a
	call to stop(). Since stop() gets automatically called on shutdown, in
	order to terminate processes gracefully on SystemExit, this method
	must be used to set a stop command/callback.

	* src/base/ipc.py:
	Turn debugging back off; make shutdown handling a bit less retarded;
	fix a KeyError bug I introduced in the last checkin.

	* src/base/ipc.py:
	Remove socket file on shutdown; don't send replies to decref/incref
	requests; don't raise exception if the socket is disconnected when we
	try to send a reply -- that's not really a serious condition and it
	can be handled by connecting to the "client_closed" or "closed"
	signals; some other small fixups I forget.

	* src/extensions/shmmodule.c (added)
	* src/extensions (added)
	* src/input/lirc.py
	* setup.py:
	Use SocketDispatcher for lirc instead of polling; add copy of
	shmmodule and install if it's not already available (seems shmmodule
	is not a standard distro module as I thought).

2005-09-18  Dirk Meyer <dischi@freevo.org>

	* src/base/ipc.py:
	test before reusing a unix domain socket, add support for kaa.TEMP

	* src/__init__.py: make sure we have a secure temp directory to play with

2005-09-15  Jason Tackaberry <tack@urandom.ca>

	* setup.py: Update setup.py for kaa.input

	* src/input/.cvsignore (added)
	* src/input (added)
	* src/input/lirc.py (added)
	* src/input/__init__.py (added):
	Add kaa.input, what will become an input subsystem for kaa. I have no
	idea yet how this will be designed, but I wanted to get some of my
	mebox lirc code here because I wanted lirc support in kaaplayer.
	kaaplayer will soon be rewritten to actually be useful, rather than a
	staging ground for spaghetti test code. kaa.input design will need to
	be discussed.

2005-09-11  Rob Shortt <rob@tvcentric.com>

	* src/base/ioctl.py (added): Add ioctl module from Freevo.

2005-09-11  Dirk Meyer <dischi@freevo.org>

	* src/base/distribution.py: remove bad kaa file hack

2005-09-10  Dirk Meyer <dischi@freevo.org>

	* src/base/distribution.py:
	Somebad hacks to make coding in C a little bit easier. Yes, I know
	it's ugly and a bad hack, I will correct it later.

2005-09-10  Jason Tackaberry <tack@urandom.ca>

	* src/base/ipc.py:
	Fix for 64bit arch; fix for __ipc_oneway calls still sometimes timing
	out (on high latency links).

2005-09-02  Jason Tackaberry <tack@urandom.ca>

	* src/base/ipc.py:
	Added get_ipc_from_proxy() function; renamed get_proxy_type() to
	_get_proxy_type() since it's not a public API; fixed a bug where
	proxied empty lists or dicts weren't getting properly registered for
	pickling.

	* src/notifier/sockets.py: Typo.

	* src/notifier/popen.py: Handle non-blocking I/O in popen wrapper.

	* src/notifier/sockets.py, src/notifier/nf_generic.py,
	* src/notifier/__init__.py, src/notifier/timer.py:
	Fix for step() in nf_generic to prevent infinite recursion when a
	timer callback calls step() (this patch was submitted upstream); fix
	SocketDispatcher unregister() so it passes the condition to
	notifier.removeSocket(); fix for Timer.stop() from other threads.

	* src/base/ipc.py (added):
	Initial import of my IPC stuff. It's working, but obviously lots of
	work needs to be done on it. :)

2005-09-01  Jason Tackaberry <tack@urandom.ca>

	* src/base/utils.py: Unicode helper functions

2005-08-25  Dirk Meyer <dischi@freevo.org>

	* test/jobserver.py (added)
	* src/notifier/__init__.py
	* src/notifier/jobserver.py (added)
	* test (added):
	add jobserver to handle callbacks in a sequence in a thread

2005-08-11  Dirk Meyer <dischi@freevo.org>

	* src/notifier/timer.py: add some doc

	* src/notifier/callback.py:
	remove hack with id, it can be solved otherwise

	* src/notifier/callback.py:
	Better unregister handling in __call__. Add a __str__ function for
	debug

2005-08-07  Dirk Meyer <dischi@freevo.org>

	* src/notifier/event.py: handle system exit exceptions

2005-08-06  Dirk Meyer <dischi@freevo.org>

	* src/notifier/event.py:
	adjust to kaa.notifier.Timer.start now using seconds

	* src/notifier/timer.py: set timer start parameter to be seconds

	* src/notifier/popen.py: set __dead to false on start

	* src/notifier/popen.py: change interface back to send the exit code

	* src/notifier/popen.py: add extra signal for completed with exit code

	* src/notifier/popen.py: add extra signal for completed with exit code

	* src/notifier/timer.py: remove bad assumtion, it breaks Freevo

2005-08-05  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/popen.py:
	Add start() method to Process -- process no longer gets automatically
	started in constructor, it must be started explicitly. The start()
	method can take a list or string of parameters to get appended on the
	command line. Command lines passed as strings now get converted to a
	list of parameters (quoting is honored). "completed" signal callbacks
	are passed the exit code of the process.

2005-08-05  Dirk Meyer <dischi@freevo.org>

	* src/notifier/popen.py:
	rename "died" signal in kaa.notifier to "completed"

	* src/notifier/popen.py: remove old callback code

	* src/notifier/thread.py: remove old callback code

2005-08-02  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/callback.py: Make signal.connect_once() work.

	* src/notifier/popen.py:
	Remove Process.readlines() because dischi doesn't like it :)

	* src/notifier/thread.py, src/notifier/sockets.py,
	* src/notifier/callback.py, src/notifier/__init__.py,
	* src/notifier/timer.py, src/notifier/popen.py:
	Ensure shutdown() is called from main thread; allow shutdown() to be
	called when notifier raises exception; add "exception" and
	"unregistered" signals to NotifierCallback -- attach to the exception
	signal of any notifier callback (Timer, SocketDispatcher, Weak*) and
	it will get called with the exception object, giving the callback an
	opportunity to stop the notifier callback from being unregistered;
	catch exceptions in popen.killall(); add "completed" and "exception"
	signals to Thread class.

	* src/notifier/thread.py, src/notifier/__init__.py:
	Collect zombies in kaa.shutdown(); make Thread exception handler
	handle any exception, not just those derived from Exception.

	* src/notifier/__init__.py:
	Check shutdown recursion after testing if the loop is still running.

	* src/notifier/__init__.py, src/__init__.py:
	Import shutdown() into kaa module; make shutdown() safe to be called
	from shutdown callbacks.

	* src/notifier/__init__.py, src/notifier/popen.py:
	Add signals to Process class so that it can be useful without
	subclassing; add readlines() function to Process class to read lines
	from process immediately rather than going through the notifier loop;
	kill processes after shutdown signal emits, rather than before.

2005-08-01  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/thread.py: Use insert/pop

2005-07-29  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/thread.py:
	Explicitly return None in MainThreadCallback for asynchronous
	invocation.

2005-07-27  Viggo Fredriksen <vifredr@users.sf.net>

	* src/notifier/popen.py: Fix typo.

2005-07-25  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/thread.py:
	_thread_notifier_run_queue needs to return True explicitly now that
	it's no longer being called by SocketDispatcher.

2005-07-25  Dirk Meyer <dischi@freevo.org>

	* src/notifier/popen.py: make stop thread safe

	* src/notifier/thread.py
	* src/notifier/sockets.py (added)
	* src/notifier/callback.py
	* src/notifier/__init__.py
	* src/notifier/timer.py (added)
	* src/notifier/signals.py
	* src/notifier/popen.py
	* src/notifier/event.py:
	make Timer, SocketDispatcher and Process thead safe

	* src/notifier/thread.py, src/notifier/__init__.py:
	add function to delect if we are in a thread or not

	* src/notifier/event.py: make it thread safe and change interface

	* src/notifier/thread.py, src/notifier/callback.py,
	* src/notifier/__init__.py:
	move thread stuff from callback.py to thread.py and adjust this file

2005-07-25  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/callback.py, src/notifier/__init__.py:
	New MainThreadCallback. The other classes (Timer, SocketDispatcher and
	their weakref varients) could derive from this as well. It provides a
	callback that executes in the main thread with optional synchronous
	execution (i.e. block until the main thread executes and returns).
	This will probably deprecate the stuff in thread.py as it doesn't
	require registering the thread with the notifier (i.e. you don't need
	to use notifier.Thread, which is impossible if the thread is created
	from C space). It's also better in that it will wake up the thread if
	it's sleeping inside a select.

2005-07-24  Dirk Meyer <dischi@freevo.org>

	* src/notifier/callback.py: set socket fd to _id

2005-07-23  Jason Tackaberry <tack@urandom.ca>

	* src/base/utils.py, src/notifier/__init__.py:
	Add space/backspace names to getch(); rename keypress to
	stdin_key_press_event.

2005-07-22  Dirk Meyer <dischi@freevo.org>

	* src/base/weakref.py: fix crash when ref is set

2005-07-22  Jason Tackaberry <tack@urandom.ca>

	* src/base/utils.py:
	Make getch suck a little bit less. Still needs work. Will return
	strings now (translated keycode or the literal letter) instead of
	integers.

2005-07-19  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/callback.py:
	Sanity check to detect if Python is shutting down.

	* src/notifier/callback.py, src/notifier/__init__.py:
	WeakCallback should return the callback's return value, not blindly
	return False.

2005-07-17  Dirk Meyer <dischi@freevo.org>

	* src/notifier/callback.py:
	add variable to prevent timer from restart when active

2005-07-16  Dirk Meyer <dischi@freevo.org>

	* src/base/distribution.py:
	check all parameters in a different call (needed for libpng-config)

	* src/notifier/event.py: copy list to make sure nothing is missed

	* src/notifier/event.py: rename self.args to self.arg

	* src/notifier/event.py: rename self.args to self.arg

	* src/notifier/event.py: add missing self

2005-07-15  Dirk Meyer <dischi@freevo.org>

	* src/notifier/__init__.py
	* src/notifier/event.py (added):
	add event class and handler

2005-07-14  Dirk Meyer <dischi@freevo.org>

	* src/notifier/callback.py, src/notifier/__init__.py:
	remove select_notifier, use notifier.init before importing kaa

	* src/notifier/signals.py:
	use OneShotTimer from callback to schedule signal

2005-07-14  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/callback.py: Bug fixes to weakref destroy callback stuff.

	* src/notifier/callback.py:
	For Signal and WeakrefCallback, handle the case where weakrefs to user
	args become invalid. For Signals, automatically disconnect the
	callback, for WeakNotifierCallback, automatically call unregister.

	* src/notifier/callback.py, src/notifier/__init__.py:
	Fix bug in Signal.disconnect; add keypress signal for handling keys on
	stdin using utils.getch. Once we add an event subsystem to kaa, this
	would get moved there.

2005-07-13  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/callback.py:
	Fix bug in Signal.emit() where user args weren't getting passed.

2005-07-13  Dirk Meyer <dischi@freevo.org>

	* src/notifier/thread.py: use Timer

	* src/notifier/__init__.py
	* src/notifier/signals.py (added)
	* src/notifier/posixsignals.py (removed):
	rename posixsignals.py to signals.py again

	* src/notifier/__init__.py: remove import

2005-07-13  Jason Tackaberry <tack@urandom.ca>

	* src/base/__init__.py
	* src/base/utils.py
	* src/notifier/callback.py
	* src/base/weakref.py
	* src/notifier/__init__.py
	* src/notifier/nf_generic.py
	* src/notifier/signals.py (removed):
	Rewrote Signal class and moved it into callback.py; removed
	signals.py; fixed typo in nf_generic.py in removeDispatcher().

	* src/notifier/__init__.py: Fix typo of SIGNAL_DISCONNECTED

	* src/notifier/callback.py, src/notifier/__init__.py:
	Implement WeakOneShotTimer; don't weakref functions (only instance
	methods) so we can use closures for the Weak* family.

	* src/notifier/callback.py
	* src/notifier/__init__.py
	* src/__init__.py
	* src/notifier/signals.py
	* src/notifier/wrapper.py (removed):
	Refactored (ok, rewrote :))
	Callback/Timer/OneShotTimer/SocketDispatcher and weakref variants
	thereof, added shutdown and idle handlers as signals and provided
	kaa.signals dict to connect to them. Removed deprecated code for the
	above. Deprecated Function class and folded that functionality into
	Callback class via set_ignore_caller_args() method. Also added
	set_user_args_first() method.

2005-07-13  Dirk Meyer <dischi@freevo.org>

	* src/notifier/wrapper.py: add waek timer

2005-07-12  Dirk Meyer <dischi@freevo.org>

	* src/notifier/__init__.py
	* src/notifier/wrapper.py (added):
	add notifier wrapper classes

2005-07-12  Jason Tackaberry <tack@urandom.ca>

	* src/notifier/nf_generic.py, src/notifier/__init__.py,
	* src/notifier/signals.py:
	Catch and log exceptions when executing dispatchers; replace some tabs
	with spaces.

2005-07-11  Jason Tackaberry <tack@urandom.ca>

	* src/base/weakref.py, src/notifier/__init__.py:
	Add container interface to weakref; when exceptions raise during main
	loop, print the stack trace before raising a new exception. (FIXME:
	need to find some way to propagate the traceback when raising the new
	exception.)

2005-07-10  Jason Tackaberry <tack@urandom.ca>

	* src/base/weakref.py:
	Use __getattribute__ and proxy __class__ so that isinstance() will
	succeed when you really want to test for the proxied object. Also test
	if wrapping an existing weakref proxy.

	* src/base/__init__.py
	* src/base/weakref.py (added):
	Add the weakref proxy class from freevo

	* src/base/utils.py: Make utf8() handle existing unicode strings.

	* src/base/utils.py (added)
	* src/notifier/__init__.py
	* src/notifier/signals.py
	* src/notifier/posixsignals.py (added):
	Added Signal class for callbacks in signals.py; Renamed old signals.py
	to posixsignals.py. Added utils for getch, utf8, and some weakref
	functions that will probably get replaced by something better.

	* src/__init__.py: Make kaa.main() do stuff :)

2005-07-07  Dirk Meyer <dischi@freevo.org>

	* src/base/version.py: use python cmp function

	* src/base/distribution.py
	* src/base/version.py (added):
	add extra version module

	* src/base/distribution.py: fix varname

	* src/notifier/.cvsignore (added)
	* src/notifier/thread.py (added)
	* src/notifier (added)
	* setup.py
	* src/notifier/callback.py (added)
	* src/notifier/nf_generic.py (added)
	* src/notifier/__init__.py (added)
	* src/notifier/signals.py (added)
	* src/notifier/popen.py (added):
	move notifier to base

	* src/base/distribution.py: make sure the config file is there

	* src/base/distribution.py: add function to check with cc

	* src/base/distribution.py: some path fixes

	* src/.cvsignore (added)
	* src (added)
	* src/base/distribution.py (added)
	* setup.py (added)
	* src/base/__init__.py (added)
	* src/__init__.py (added)
	* src/base/.cvsignore (added)
	* trunk/base (added)
	* src/base (added):
	add first version of kaa.base

