Commits

James Mills committed b587c1f

docs/ChangeLog: Updated for 1.1 - Am not going to categorize ChangeLog entries anymore as it takes way too much time. (Closes #23)

  • Participants
  • Parent commits 02464ac
  • Tags 1.1

Comments (0)

Files changed (1)

docs/ChangeLog.wiki

 
 == 1.1 ==
  Released:: ... (''...'')
- Revision:: [414]
+ Revision:: [916]
 
-=== Documentation ===
- * In [263]: [source:circuits/__init__.py circuits]: Updated sample example in main docstring - simplified.
- * In [311]: [source:LICENSE LICENSE]: Added copy of LICENSE
-
-=== NEW ===
-
-=== Enhancements ===
- * In [312]: [source:MANIFEST.in MANIFEST.in]: Added MANIFEST.in to include other files for distribution
+ * In [261]: tests.test_workers: Fixed test by waiting until worker has finished
+ * In [262]: Ignore tmp
+ * In [263]: circuits: Updated sample example in main docstring - simplified.
+ * In [264]: core: Removed unused Registered Event
+ * In [265]: drivers: New drivers module importing from lib.drivers.*
+ * In [266]: lib.drivers: New drivers package. New PyGameDriver
+ * In [267]: lib.pygamepump: Removed - Moved to circuits.lib.drivers.pygame_driver as PyGameDriver
+ * In [268]: lib.web: Removed - Moved to circuits.lib.web
+ * In [269]: lib.http: Removed - Moved to circuits.lib.web
+ * In [270]: web: New web module importing from lib.web.*
+ * In [271]: lib.sockets: Refactored close, write and shutdown events
+ * In [272]: examples/echoserver.py: Fixed tabs. Simplified read event
+ * In [273]: core: Allow send(...) to actually return a value if required
+ * In [274]: sockets: Removed useless header line (Filename)
+ * In [275]: circuits.web: NEW refactored Web Components (100% event driven), no external dependencies
+ * In [276]: examples/simpleweb.py: Fixed
+ * In [277]: lib.web.dispatchers: Minor simplificiation
+ * In [278]: lib.sockets: send Shutdown events
+ * In [279]: lib.web.core: Removed unused imported modules
+ * In [280]: lib.web.http: Simplified simple and httperror handlers
+ * In [281]: lib.web.http: Adapted dispatcher code to iter through possible request handlers - request handlers only need to return now
+ * In [282]: lib.web.dispatcher: Fixed channel http errors go to
+ * In [283]: lib.web.servers: Added base() to return the base url the server listens on.
+ * In [284]: lib.web.servers: Pass a copy of BaseServer to HTTP for reference
+ * In [285]: lib.web.webob: Added server attribute to store a reference to the underlying server component (servers.BaseServer
+)
+ * In [286]: lib.web.http: Store server. Pass a copy to reach webob.Request object created for reference.
+ * In [287]: lib.web.utils: Added url() function to calculate an absolute url given a request object and optional parameters
+ * In [288]: lib.web.http: Get a list of all non None objects from iterating trough all possible request handlers. Only set response.body if the first result is a string
+ * In [289]: lib.web.errors: Error module implementing error objects that modify response objects
+ * In [290]: lib.web: Added import of error.Redirect
+ * In [291]: lib.sockets: Added ssl (unused) attribute to Server base component
+ * In [292]: lib.web.dispatchers: Get a list of all non None objects from iterating trough all possible request handlers. Only set response.body if the first result is a string
+ * In [293]: lib.web.core: Added redirect() method to Controller component
+ * In [294]: lib.web: Greatly improved error template and handlnig
+ * In [295]: lib.web: Import Logger
+ * In [296]: lib.web.tools: New tools modules
+ * In [297]: lib.web.wsgi: Forgot to import Dispatcher
+ * In [298]: lib.web.webob: Forgot to import BUFFER_SIZE
+ * In [299]: lib.web.webob: Added request as an attribute of Response
+ * In [300]: lib.web.utils: Added valid_status() and get_ranges() functions - borrowed from CherryPy-3.1
+ * In [301]: lib.web.constants: As taken from CherryPy-3.1, removed RESPONSESin favor of importing and copying from BaseHTTPServer
+ * In [302]: lib.web.errors: Added __nonzero__(), Always defaults to False for any error (subclass of BaseError).
+ * In [303]: lib.web.errors: Added NotFound error.
+ * In [304]: lib.web.http: Set response.request to request - keeping a copy of the original request in response
+ * In [305]: lib.web.loggers: Log the response instead of the request
+ * In [306]: lib.web.dispatchers: Added FileServer/FileDispatcher. Return responses - Don't send as this is done by HTTP.
+ * In [307]: lib.web.servers: Use Dispatcher (alias of DefaultDispatcher)
+ * In [308]: lib.web: import FileServer (from dispatchers)
+ * In [309]: lib.web.errors: Fixed HTTPError
+ * In [310]: lib.web.http: Use errors.HTTPError to build the actual error resposne.
+ * In [311]: Added copy of LICENSE
+ * In [312]: Added MANIFEST.in to include other files for distribution
+ * In [313]: lib.web.tests: Added test suite. Added one test.
+ * In [314]: workers: isAlive() should evaluate: self.running and self.thread.isAlive() - Call self.thread.join() after setting self.running to False.
+ * In [315]: lib.web.constants: protocol should be tuple (major, minor).
+ * In [316]: lib.web.webob: Use self.request.protocol
+ * In [317]: lib.web.webob: Fixed protocol attributes and repr.
+ * In [318]: lib.web.servers: Added poll() in BaseServer
+ * In [319]: lib.web.http: Fixed doc.
+ * In [320]: lib.web.http: Fixed protocol.
+ * In [321]: lib.web.http: Fixed checking for "Conenction" "close" header and setting "Connection" "close" response headers.
+ * In [322]: workers: Added join() method - Removed self.thread.join() from stop() - causes problems :)
+ * In [323]: tests/tests_workers: Fixed test
+ * In [324]: Added test suite for sockets - Fixed channels in sockets
+ * In [325]: lib.web.servers: Added address and port propertoes.
+ * In [326]: lib.web.http: Set webob.Request local_host and remote_host appropriately.
+ * In [327]: examples/ircbot.py: Fixed event handlers
+ * In [328]: lib.irc; Forgot to call parent constructor :/
+ * In [329]: lib.web.errors: Fixed status in HTTPError response output.
+ * In [330]: lib.web.errors: Added Forbidden error class.
+ * In [331]: lib.web.core: Added forbidden() and notfound() methods.
+ * In [332]: lib.web.core: Created BaseController - moved convenience methods to BaseController - cleaning up Controller.
+ * In [333]: lib.web.dispatchers: Return a list of all possible responses that are not None - allowing for Error responses which evaluate to False. Also return the first item regardless
+ * In [334]: lib.web.http: Return a list of all possible responses that are not None - allowing for Error responses which evaluate to False.
+ * In [335]: lib.web.tests.test_core: Fixed name of test case. Fixed tearDown to join and wait for server to finish
+ * In [336]: lib.web.errors: Allow a custom message to be passed for NotFound errors.
+ * In [337]: lib.web.core: Allow a custom message to be passed.
+ * In [338]: lib.web.errors: Set status's message to short, not message which may be longer or custom
+ * In [339]: Respect unique channels allowing mixing with other componets with similar events
+ * In [340]: examples/ircbot: Integrated circuits.web just as a show-off demo of circuits and circutis.web capability
+ * In [341]: lib.web.dispatchers: Dispatcher doesn't need to iterate through Controller based web requests by respecting the channel the Controller is registered with
+ * In [342]: core: Modifed repr of Event objects - channels are in [ ]
+ * In [343]: tests.test_core: Fixed testing of Event repr due to 67a17a037fe7
+ * In [344]: core: Removed Error exception type. Use Exception as subclass for InvalidHandler exception.
+ * In [345]: core: Added Error Event class for pushing exceptions that occur in event handlers.
+ * In [346]: core: Raise TypeError instead.
+ * In [347]: core: try/except calls to handlers. If an Exception occurs, push the exception to the global "error" channel and continue on...
+ * In [348]: lib.sockets: Retabbed
+ * In [349]: lib.sockets: Moved Client and Server class attributes into __init__. Class attributes are bad when using multiple instances I've discovered :)
+ * In [350]: examples/ircbot.py: Modified to demonstrate multiple bots (2 or more) plus web server all at teh same time
+ * In [351]: lib.web.servers: Forgot to import os
+ * In [352]: core: Push the actual type, value and treaceback (from sys) o fhte exception that occured.
+ * In [353]: debugger: Retabbed and added error handler
+ * In [354]: core: Use partial function calling. Greatly simplifies listener and send/iter.
+ * In [355]: core: If kwarg _raiseErrors is passed and True, re-raise the exception.
+ * In [356]: lib.web.core: Updated expose decorator to match listener change in circuits.core @ 893e0b9862ac
+ * In [357]: lib.web.dispatchers: Renamed methods for readability.
+ * In [358]: lib.web.dispatchers: Minor optimizations.
+ * In [359]: lib.web.dispatchers: Fixed expiry.
+ * In [360]: lib.web.dispatchers: Rewrote to use self.send vs. self.iter
+ * In [361]: lib.web.http: Rewrote to use self.send vs. self.iter
+ * In [362]: lib.web.http: raise will do.
+ * In [363]: lib.web.http: str.split is faster than re.split
+ * In [364]: examples/helloweb.py: Simplified and added psyco
+ * In [365]: examples/simpleweb.py: Retabbed and added psyco
+ * In [366]: examples/echoserver.py: Removed unused imports and use of Manager
  * In [367]: Fixed unused imports and undefined names as found by pyflaes
+ * In [368]: lib.drivers.pygame_driver: Fixed call to super __new__
+ * In [369]: lib.sockets: Renamed connected attribute to _connected and added isConnected() method - Having 'connected' would conflict with the event handler 'connected'.
  * In [370]: Fixed unused imports and undefined names as found by pyflaes
-
- * In [264]: [source:circuits/core.py core]: Removed unused Registered Event
- * In [273]: [source:circuits/core.py core]: Allow send(...) to actually return a value if required
- * In [314]: [source:circuits/workers.py workers]: isAlive() should evaluate: self.running and self.thread.isAlive() - Call self.thread.join() after setting self.running to False.
- * In [322]: [source:circuits/workers.py workers]: Added join() method - Removed self.thread.join() from stop() - causes problems :)
- * In [342]: [source:circuits/core.py core]: Modifed repr of Event objects - channels are in [ ]
- * In [344]: [source:circuits/core.py core]: Removed Error exception type. Use Exception as subclass for InvalidHandler exception.
- * In [345]: [source:circuits/core.py core]: Added Error Event class for pushing exceptions that occur in event handlers.
- * In [346]: [source:circuits/core.py core]: Raise TypeError instead.
- * In [347]: [source:circuits/core.py core]: try/except calls to handlers. If an Exception occurs, push the exception to the global "error" channel and continue on...
- * In [352]: [source:circuits/core.py core]: Push the actual type, value and treaceback (from sys) o fhte exception that occured.
- * In [353]: [source:circuits/debugger.py debugger]: Retabbed and added error handler
- * In [354]: [source:circuits/core.py core]: Use partial function calling. Greatly simplifies listener and send/iter.
- * In [355]: [source:circuits/core.py core]: If kwarg _raiseErrors is passed and True, re-raise the exception.
- * In [380]: [source:circuits/core.py core]: Simplified forcing send to raise errors. Changed keyword to 'errors'. (Defaults to False)
- * In [381]: [source:circuits/core.py core]: Deprecated iter()
- * In [383]: [source:circuits/core.py core]: Fixed calling manager.send - Passed in wrong arg
- * In [384]: [source:circuits/debugger.py debugger]: This event handler doesn't need to be a filter. Refactored to handle any generic event thrown at it, but specifically this only handles exception erros that pass a tuple of length 3, (type, value, traceback).
- * In [385]: [source:circuits/debugger.py debugger]: Renamed event handler to 'event'.
- * In [398]: [source:circuits/debugger.py debugger]: Improved constructor allowing logging of errors/events to be toggled
- * In [399]: [source:circuits/core.py core]: Push the error first then check of errors=True and re-raise.
- * In [400]: [source:circuits/core.py core]: Removed __new__ from Event class, changed to __init__. Moved class attributes to __init__.
- * In [401]: [source:circuits/core.py core]: Simplified __eq__ by using all()
- * In [408]: [source:circuits/core.py core]: Only log errors if log=True (Default: True). Use sys.exc_info() to get the exception's type, value and traceback.
- * In [409]: [source:circuits/core.py core]: If errors is not True, clear exception.
-
-=== Fixes ===
-
-=== Library ===
-
-==== New ====
-
-==== Updated ====
- * In [278]: [source:circuits/lib/sockets.py lib.sockets]: send Shutdown events
- * In [291]: [source:circuits/lib/sockets.py lib.sockets]: Added ssl (unused) attribute to Server base component
- * In [328]: [source:circuits/lib/irc.py lib.irc]; Forgot to call parent constructor :/
- * In [348]: [source:circuits/lib/sockets.py lib.sockets]: Retabbed
- * In [349]: [source:circuits/lib/sockets.py lib.sockets]: Moved Client and Server class attributes into __init__. Class attributes are bad when using multiple instances I've discovered :)
- * In [368]: [source:circuits/lib/sockets.py lib.sockets]: Fixed call to super __new__
- * In [369]: [source:circuits/lib/sockets.py lib.sockets]: Renamed connected attribute to _connected and added isConnected() method - Having 'connected' would conflict with the event handler 'connected'.
- * In [265]: [source:circuits/drivers.py drivers]: New drivers module importing from lib.drivers.*
- * In [266]: [source:circuits/lib/drivers.py lib.drivers]: New drivers package. New PyGameDriver
- * In [267]: [source:circuits/lib/pygamepump.py lib.pygamepump]: Removed - Moved to circuits.lib.drivers.pygame_driver as PyGameDriver
- * In [268]: [source:circuits/lib/web.py lib.web]: Removed - Moved to circuits.lib.web
- * In [269]: [source:circuits/lib/http.py lib.http]: Removed - Moved to circuits.lib.web
- * In [270]: [source:circuits/web.py web]: New web module importing from lib.web.*
- * In [271]: [source:circuits/lib/sockets.py lib.sockets]: Refactored close, write and shutdown events
- * In [275]: [source:circuits/web.py circuits.web]: NEW refactored Web Components (100% event driven), no external dependencies
-
-=== Examples ===
-
-==== New ====
-
-==== Updated ====
- * In [272]: [source:examples/echoserver.py examples/echoserver.py]: Fixed tabs. Simplified read event
- * In [276]: [source:examples/simpleweb.py examples/simpleweb.py]: Fixed
- * In [327]: [source:examples/ircbot.py examples/ircbot.py]: Fixed event handlers
- * In [340]: [source:examples/ircbot.py examples/ircbot.py]: Integrated circuits.web just as a show-off demo of circuits and circutis.web capability
- * In [350]: [source:examples/ircbot.py examples/ircbot.py]: Modified to demonstrate multiple bots (2 or more) plus web server all at teh same time
- * In [364]: [source:examples/helloweb.py examples/helloweb.py]: Simplified and added psyco
- * In [365]: [source:examples/simpleweb.py examples/simpleweb.py]: Retabbed and added psyco
- * In [366]: [source:examples/echoserver.py examples/echoserver.py]: Removed unused imports and use of Manager
- * In [375]: [source:examples/simpleweb.py examples/simpleweb.py]: Just showing off Manager's __add__ features
- * In [377]: [source:circuits/tests/test_sockets.py tests.test_sockets] and [source:examples/ircbot.py examples/ircbot.py]: Use isConnected() - connected attribute is deprecated
-
-=== Tools ===
-
-==== New ====
-
-==== Updated ====
-
-=== Tests ===
- * In [261]: [source:circuits/tests/test_workers.py tests.test_workers]: Fixed test by waiting until worker has finished
- * In [324]: [source:circuits/tests/test_sockets.py tests.test_sockets]: Added test suite for sockets - Fixed channels in sockets
- * In [343]: [source:circuits/tests/test.core.py tests.test_core]: tests.test_core: Fixed testing of Event repr due to 67a17a037fe7
- * In [377]: [source:circuits/tests/test_sockets.py tests.test_sockets] and [source:examples/ircbot.py examples/ircbot.py]: Use isConnected() - connected attribute is deprecated
- * In [382]: [source:circuits/tests/test_core tests.test_core]: iter() is deprecated - removing test
- * In [412]: [source:circuits/tests/test_sockets tests.test_sockets]: Fixed Manager by not calling isConnected on client which may be a Server component that doesn't have isConnected
- * In [413]: [source:circuits/tests/test_debugger tests.test_debugger]: enabled attribute changed to events. Fixed tests.
- * In [414]: [source:circuits/tests/test_core tests.tests_core]: This test no longer applies - removed.
-
-=== circuits.web ===
-
-==== NEW ====
-
-==== Enhancements ====
- * In [277]: [source:circuits/lib/web lib.web.dispatchers: Minor simplificiation
- * In [279]: [source:circuits/lib/web lib.web.core: Removed unused imported modules
- * In [280]: [source:circuits/lib/web lib.web.http: Simplified simple and httperror handlers
- * In [281]: [source:circuits/lib/web lib.web.http: Adapted dispatcher code to iter through possible request handlers - request handlers only need to return now
- * In [283]: [source:circuits/lib/web lib.web.servers: Added base() to return the base url the server listens on.
- * In [284]: [source:circuits/lib/web lib.web.servers: Pass a copy of BaseServer to HTTP for reference
- * In [285]: [source:circuits/lib/web/ lib.web.webob: Added server attribute to store a reference to the underlying server component (servers.BaseServer)
- * In [286]: [source:circuits/lib/web/ lib.web.http: Store server. Pass a copy to reach webob.Request object created for reference.
- * In [287]: [source:circuits/lib/web/ lib.web.utils: Added url() function to calculate an absolute url given a request object and optional parameters
- * In [288]: [source:circuits/lib/web/ lib.web.http: Get a list of all non None objects from iterating trough all possible request handlers. Only set response.body if the first result is a string
- * In [289]: [source:circuits/lib/web/ lib.web.errors: Error module implementing error objects that modify response objects
- * In [290]: [source:circuits/lib/web/ lib.web: Added import of error.Redirect
- * In [292]: [source:circuits/lib/web/ lib.web.dispatchers: Get a list of all non None objects from iterating trough all possible request handlers. Only set response.body if the first result is a string
- * In [293]: [source:circuits/lib/web/ lib.web.core: Added redirect() method to Controller component
- * In [294]: [source:circuits/lib/web/ lib.web: Greatly improved error template and handlnig
- * In [295]: [source:circuits/lib/web/ lib.web: Import Logger
- * In [296]: [source:circuits/lib/web/ lib.web.tools: New tools modules
- * In [297]: [source:circuits/lib/web/ lib.web.wsgi: Forgot to import Dispatcher
- * In [298]: [source:circuits/lib/web/ lib.web.webob: Forgot to import BUFFER_SIZE
- * In [299]: [source:circuits/lib/web/ lib.web.webob: Added request as an attribute of Response
- * In [300]: [source:circuits/lib/web/ lib.web.utils: Added valid_status() and get_ranges() functions - borrowed from CherryPy-3.1
- * In [301]: [source:circuits/lib/web/ lib.web.constants: As taken from CherryPy-3.1, removed RESPONSESin favor of importing and copying from BaseHTTPServer
- * In [302]: [source:circuits/lib/web/ lib.web.errors: Added __nonzero__(), Always defaults to False for any error (subclass of BaseError).
- * In [303]: [source:circuits/lib/web/ lib.web.errors: Added NotFound error.
- * In [304]: [source:circuits/lib/web/ lib.web.http: Set response.request to request - keeping a copy of the original request in response
- * In [305]: [source:circuits/lib/web/ lib.web.loggers: Log the response instead of the request
- * In [306]: [source:circuits/lib/web/ lib.web.dispatchers: Added FileServer/FileDispatcher. Return responses - Don't send as this is done by HTTP.
- * In [307]: [source:circuits/lib/web/ lib.web.servers: Use Dispatcher (alias of DefaultDispatcher)
- * In [308]: [source:circuits/lib/web/ lib.web: import FileServer (from dispatchers)
- * In [310]: [source:circuits/lib/web/ lib.web.http: Use errors.HTTPError to build the actual error resposne.
- * In [313]: [source:circuits/lib/web/ lib.web.tests: Added test suite. Added one test.
- * In [315]: [source:circuits/lib/web/ lib.web.constants: protocol should be tuple (major, minor).
- * In [316]: [source:circuits/lib/web/ lib.web.webob: Use self.request.protocol
- * In [318]: [source:circuits/lib/web/ lib.web.servers: Added poll() in BaseServer
- * In [325]: [source:circuits/lib/web/ lib.web.servers: Added address and port propertoes.
- * In [326]: [source:circuits/lib/web/ lib.web.http: Set webob.Request local_host and remote_host appropriately.
- * In [330]: [source:circuits/lib/web/ lib.web.errors: Added Forbidden error class.
- * In [331]: [source:circuits/lib/web/ lib.web.core: Added forbidden() and notfound() methods.
- * In [332]: [source:circuits/lib/web/ lib.web.core: Created BaseController - moved convenience methods to BaseController - cleaning up Controller.
- * In [333]: [source:circuits/lib/web/ lib.web.dispatchers: Return a list of all possible responses that are not None - allowing for Error responses which evaluate to False. Also return the first item regardless
- * In [334]: [source:circuits/lib/web/ lib.web.http: Return a list of all possible responses that are not None - allowing for Error responses which evaluate to False.
- * In [336]: [source:circuits/lib/web/ lib.web.errors: Allow a custom message to be passed for NotFound errors.
- * In [337]: [source:circuits/lib/web/ lib.web.core: Allow a custom message to be passed.
- * In [338]: [source:circuits/lib/web/ lib.web.errors: Set status's message to short, not message which may be longer or custom
- * In [339]: Respect unique channels allowing mixing with other componets with similar events
- * In [341]: [source:circuits/lib/web/ lib.web.dispatchers: Dispatcher doesn't need to iterate through Controller based web requests by respecting the channel the Controller is registered with
- * In [351]: [source:circuits/lib/web/ lib.web.servers: Forgot to import os
- * In [356]: [source:circuits/lib/web/ lib.web.core: Updated expose decorator to match listener change in circuits.core @ 893e0b9862ac
- * In [357]: [source:circuits/lib/web/ lib.web.dispatchers: Renamed methods for readability.
- * In [358]: [source:circuits/lib/web/ lib.web.dispatchers: Minor optimizations.
- * In [360]: [source:circuits/lib/web/ lib.web.dispatchers: Rewrote to use self.send vs. self.iter
- * In [361]: [source:circuits/lib/web/ lib.web.http: Rewrote to use self.send vs. self.iter
- * In [362]: [source:circuits/lib/web/ lib.web.http: raise will do.
- * In [363]: [source:circuits/lib/web/ lib.web.http: str.split is faster than re.split
- * In [371]: [source:circuits/lib/web/ lib.web.servers: Removed docroot kw, can be put in kwargs
- * In [372]: [source:circuits/lib/web/ lib.web.tools: Use hashlib.md5 (md5 is deprecated).
- * In [378]: [source:circuits/lib/web/ lib.web.errors: Return True when evaluated as a bool (__nonzero__)
- * In [379]: [source:circuits/lib/web/ lib.web.errors: Set response.close = True for errors
- * In [388]: [source:circuits/lib/web/ lib.web.webob: Added done attribute to Response to indicate whether the response has been written and -is- done.
- * In [389]: [source:circuits/lib/web/ lib.web.http: Set response.done when the response has been completely written.
- * In [390]: [source:circuits/lib/web/ lib.web.errors: Improved BaseError, and mvoed some of HTTPError code to BaseError. Added appropriate __repr__ methods for BaseError and HTTPError. Fixed subclass of Redirect to be HTTPError.
- * In [392]: [source:circuits/lib/web/ lib.web.events: Renamed "HTTP Error" event to Error.
- * In [393]: [source:circuits/lib/web/ lib.web.events: Error (was HTTPError) event now only contains a single argument: An error object (errors.BaseError instance).
- * In [394]: [source:circuits/lib/web/ lib.web.servers: Moved docroot out of kwargs to make it more obvious.
- * In [395]: [source:circuits/lib/web/ lib.web.servers: Check if we have a 'server' attribute first.
- * In [396]: [source:circuits/lib/web/ lib.web.http: Refactored error handling.
- * In [402]: [source:circuits/lib/web/ lib.web.events: Removed Error event - deprecated
- * In [403]: [source:circuits/lib/web/ lib.web.errors: BaseError deprecated. HTTPError is now an Event. Tidied up constructor
- * In [404]: [source:circuits/lib/web/ lib.web.core: Moved setting attributes into try/finally. Tidied up. Added session support if available.
- * In [405]: [source:circuits/lib/web/ lib.web.http: BaseError deprecated. Use HTTPError. Changed channel back to 'httperror' and update HTTP Erorr Event Handler
- * In [406]: [source:circuits/lib/web/ lib.web: Import loggers, sessions and dispatchers but just the modules. Import all errors.
- * In [407]: [source:circuits/lib/web/ lib.web.sessions: New sessions module adding very basic (optional) session handling
- * In [410]: [source:circuits/lib/web/ lib.web.dispatcher: Raise errors, but don't log
- * In [411]: [source:circuits/lib/web/ lib.web.http: Raise errors, but don't log
-
-==== Fixes ====
- * In [282]: [source:circuits/lib/web/dispatchers.py lib.web.dispatcher]: Fixed channel http errors go to
- * In [309]: [source:circuits/lib/web/errors.py lib.web.errors]: Fixed HTTPError
- * In [317]: [source:circuits/lib/web/webob.py lib.web.webob]: Fixed protocol attributes and repr.
- * In [319]: [source:circuits/lib/web/http.py lib.web.http]: Fixed doc.
- * In [320]: [source:circuits/lib/web/http.py lib.web.http]: Fixed protocol.
- * In [321]: [source:circuits/lib/web/http.py lib.web.http]: Fixed checking for "Conenction" "close" header and setting "Connection" "close" response headers.
- * In [329]: [source:circuits/lib/web/errors.py lib.web.errors]: Fixed status in HTTPError response output.
- * In [335]: [source:circuits/lib/web/tests/test_core.py lib.web.tests.test_core]: Fixed name of test case. Fixed tearDown to join and wait for server to finish
- * In [359]: [source:circuits/lib/web/dispatchers.py lib.web.dispatchers]: Fixed expiry.
- * In [373]: [source:circuits/lib/web/tools.py lib.web.tools]: Fixed import of Redirect.
- * In [374]: [source:circuits/lib/web/utils.py lib.web.utils]: Fixed import of _urljoin
- * In [376]: [source:circuits/lib/web/dispatchers.py lib.web.dispatchers]: Fixed setting of docroot and defaults
- * In [386]: [source:circuits/lib/web/wsgi.py lib.web.wsgi]: Fixed import of HTTPError
- * In [387]: [source:circuits/lib/web/wsgi.py lib.web.wsgi]: Fixed tabs. Some minor fixed (untested)
- * In [391]: [source:circuits/lib/web/dispatchers.py lib.web.dispatchers]: Fixed call to use proper keyword argument of 'erros'
- * In [397]: [source:circuits/lib/web/http.py lib.web.http]: Fixed requestline by strippig any left over whitespace
-
+ * In [371]: lib.web.servers: Removed docroot kw, can be put in kwargs
+ * In [372]: lib.web.tools: Use hashlib.md5 (md5 is deprecated).
+ * In [373]: lib.web.tools: Fixed import of Redirect.
+ * In [374]: lib.web.utils: Fixed import of _urljoin
+ * In [375]: Just showing off Manager's __add__ features
+ * In [376]: lib.web.dispatchers: Fixed setting of docroot and defaults
+ * In [377]: Use isConnected() - connected attribute is deprecated
+ * In [378]: lib.web.errors: Return True when evaluated as a bool (__nonzero__)
+ * In [379]: lib.web.errors: Set response.close = True for errors
+ * In [380]: core: Simplified forcing send to raise errors. Changed keyword to 'errors'. (Defaults to False)
+ * In [381]: core: Deprecated iter()
+ * In [382]: tests.test_core: iter() is deprecated - removing test
+ * In [383]: core: Fixed calling manager.send - Passed in wrong arg
+ * In [384]: debugger: This event handler doesn't need to be a filter. Refactored to handle any generic event thrown at it, but specifically this only handles exception erros that pass a tuple of length 3, (type, value, traceback).
+ * In [385]: debugger: Renamed event handler to 'event'.
+ * In [386]: lib.web.wsgi: Fixed import of HTTPError
+ * In [387]: lib.web.wsgi: Fixed tabs. Some minor fixed (untested)
+ * In [388]: lib.web.webob: Added done attribute to Response to indicate whether the response has been written and -is- done.
+ * In [389]: lib.web.http: Set response.done when the response has been completely written.
+ * In [390]: lib.web.errors: Improved BaseError, and mvoed some of HTTPError code to BaseError. Added appropriate __repr__ methods for BaseError and HTTPError. Fixed subclass of Redirect to be HTTPError.
+ * In [391]: lib.web.dispatchers: Fixed call to use proper keyword argument of 'erros'
+ * In [392]: lib.web.events: Renamed "HTTP Error" event to Error.
+ * In [393]: lib.web.events: Error (was HTTPError) event now only contains a single argument: An error object (errors.BaseError instance).
+ * In [394]: lib.web.servers: Moved docroot out of kwargs to make it more obvious.
+ * In [395]: lib.web.servers: Check if we have a 'server' attribute first.
+ * In [396]: lib.web.http: Refactored error handling.
+ * In [397]: lib.web.http: Fixed requestline by strippig any left over whitespace
+ * In [398]: debugger: Improved constructor allowing logging of errors/events to be toggled
+ * In [399]: core: Push the error first then check of errors=True and re-raise.
+ * In [400]: core: Removed __new__ from Event class, changed to __init__. Moved class attributes to __init__.
+ * In [401]: core: Simplified __eq__ by using all()
+ * In [402]: lib.web.events: Removed Error event - deprecated
+ * In [403]: lib.web.errors: BaseError deprecated. HTTPError is now an Event. Tidied up constructor
+ * In [404]: lib.web.core: Moved setting attributes into try/finally. Tidied up. Added session support if available.
+ * In [405]: lib.web.http: BaseError deprecated. Use HTTPError. Changed channel back to 'httperror' and update HTTP Erorr Event Handler
+ * In [406]: lib.web: Import loggers, sessions and dispatchers but just the modules. Import all errors.
+ * In [407]: lib.web.sessions: New sessions module adding very basic (optional) session handling
+ * In [408]: core: Only log errors if log=True (Default: True). Use sys.exc_info() to get the exception's type, value and traceback.
+ * In [409]: core: If errors is not True, clear exception.
+ * In [410]: lib.web.dispatcher: Raise errors, but don't log
+ * In [411]: lib.web.http: Raise errors, but don't log
+ * In [412]: tests.test_sockets: Fixed Manager by not calling isConnected on client which may be a Server component that doesn't have isConnected
+ * In [413]: tests.test_debugger: enabled attribute changed to events. Fixed tests.
+ * In [414]: tests.tests_core: This test no longer applies - removed.
+ * In [415]: Added tag 1.0b1 for changeset eabf5dd3bdf8
+ * In [416]: docs/ChangeLog: Fixed 1.0b1 release and release date
+ * In [417]: docs/ChangeLog: Updated ChnageLog for 1.0b1
+ * In [418]: circuits: Updated CopyRight year to include 2009.
+ * In [419]: docs/ChangeLog: Ordered entries for 1.0b1
+ * In [420]: workers: Python 2.5.x compatibility with the backported processing package
+ * In [421]: lib.log: Removed redundant @listener defs and simplified
+ * In [422]: examples/simpleweb.py: Reverted back to it's simplest form. Try to import psyco, if this fails, do nothing.
+ * In [423]: examples/simpleweb.py: Removed Debugger, Sessions and Admin
+ * In [424]: examples/simpleweb.py: Fixed typo in try/except
+ * In [425]: version: Possible fix, fixing bug when creating version information the first time
+ * In [426]: tools.bench: Only import hotshot if we can and only try to profile if hotshot is available, otherwise print a warning
+ * In [427]: lib.web.tools: Import hashlib and use hashlib.md5 instead of importing the md5 function.
+ * In [428]: lib.web.tools: Removed unused imports.
+ * In [429]: lib.web.core: Added tools serve_file, serve_download and expires to Controller
+ * In [430]: lib.web.dispatchers: Renamed _getParams t _parseBody and modified to pass in params dict from _parseQueryString and update it, return if an error response was returned (return is False).
+ * In [431]: lib.web.dispatchers: Just update params with dictform(form) in all cases.
+ * In [432]: lib.web.dispatchers: If form.file, set request.body to file.form otherwise update params.
+ * In [433]: examples/helloweb.py: Try to import psyco, if it fails do nothing.
+ * In [434]: lib.web.wsgi: Removed *args, **kwargs from request handler - they aren't needed.
+ * In [435]: lib.web.wsgi: Just return the response string, no need to "send" a Response event anymore.
+ * In [436]: lib.web.webob: Removed app attribute.
+ * In [437]: lib.web.webob: Renamed and reordered Request default class attributes.
+ * In [438]: lib.web.webob: Added sock and scheme to Request constructor.
+ * In [439]: lib.web.webob: Added sock, scheme as attributes. Reordered and fixed names of other attributes.
+ * In [440]: lib.web.webob: Set self.base of the request when setting headers.
+ * In [441]: lib.web.loggers: request.remote_host renamed to request.remote
+ * In [442]: lib.web.loggers: Rebuild requestline from request's method, path and scheme.
+ * In [443]: lib.web.tools: Fixed names of request attributes
+ * In [444]: lib.web.utils: Fixed names of request attributes.
+ * In [445]: lib.web.utils: Removed use of request.app as there is no request.app for url()
+ * In [446]: lib.web.servers: Set Request.server and Request.local upon BaseServer creation
+ * In [447]: lib.web.dispatchers: Pass in request to _getChannel (instead of request.path and request.method.upper()), extract them instead. Set request.index if path ends with a '/'.
+ * In [448]: lib.web.http: No need for elif because if stream we return.
+ * In [449]: lib.web.http: Use map to extract requested protocol. Pass in sock and scheme to Request(...)
+ * In [450]: lib.web.http: These attributes are not needed anymore or already set elsewhere.
+ * In [451]: lib.web.http: Use map to build atams.
+ * In [452]: lib.web.webob: Fixed docstring for Request
+ * In [453]: lib.web.webob: Pass in request object into Response. Response(sock, reqeust)
+ * In [454]: lib.web.http: Updated docstring of HTTP
+ * In [455]: lib.web.http: Use a slice to get to the protocol (1.1 or 1.0) part.
+ * In [456]: lib.web.http: Pass in requeset to Response(...)
+ * In [457]: lib.web.http: Removed local var atoms and merged into a single path = "".join(...)
+ * In [458]: lib.web.http: Removed local vars rp, sp.
+ * In [459]: core: Added start/stop/_run to Manager (starts the Component in a thread). Added run (starts the Component in the main thread and blocks). Components -now- have the capability of running by themselves without any boilerplate.
+ * In [460]: lib.sockets: Added tick attributes/methods pointing to poll(...)
+ * In [461]: lib.web.servers: Removed poll() and run() - These are now handled automagically
+ * In [462]: lib.web.tests.test_core: Don't need the TestServer(Thread) component anymore - just start the (Server(...) + Root(...)) component.
+ * In [463]: core: Renamed handlers(...) to _getHandlers
+ * In [464]: core: Renamed add(...) to _add
+ * In [465]: core: Renamed remove(...) to _remove
+ * In [466]: core: Import sys.exc_info and sys.exc-clear as _exc_info and _exc_clear respectively
+ * In [467]: tests.test_core: Fixed test to match Manager.add and Manager.remove changes to _add and _remove
+ * In [468]: lib.pollers: Added read, write, all properties to access _fds. This uses bitwise flags to determine if a fd is to be polled for reading or writing or both.
+ * In [469]: lib.pollers: Set tick to poll(...)
+ * In [470]: lib.pollers: Retabbed
+ * In [471]: lib.pollers: Import select.select as _select
+ * In [472]: core: Give component threads started by start(...) the name of the class
+ * In [473]: tools.sniffer: Use Manager.run(...) to run the system
+ * In [474]: tools.sniffer: Fixed tabs
+ * In [475]: core: Fixed minor typos in Error's codstring
+ * In [476]: Retabbed
+ * In [477]: core: Set Component _run(...) threads to daemons so they die at system exit.
+ * In [478]: core: Termiante run(...) loop on SystemExit as well.
+ * In [479]: debugger: CHeck if self.logger is not None (which is correct)
+ * In [480]: bridge: If event can't be pickled, don't attempt to send it
+ * In [481]: core: Use shorter variable names (k, v) for iterating through the dct (HandlersType meteclass).
+ * In [482]: core: Manager attribute changes; Added _components. Renamed channels to _channels.
+ * In [483]: core: Removed __getitem__ (useless). Use self.channels
+ * In [484]: core: Renamed _getHandlers(...) to handlers(...)
+ * In [485]: core: Added properties for components and channels.
+ * In [486]: core: Fixed use of private _channels attribute.
+ * In [487]: core: Fixed call to _getHandlers - was renamed to handlers(...)
+ * In [488]: core: Reorganized run and _run methods. Implemented _calls method which returns a generator of all component instances' __tick__ methods in the current component that is being run.
+ * In [489]: core: Simplified getting list of handlers to register
+ * In [490]: core: When registering a component with a manager, add the component to the manager's list of component it -has- registered.
+ * In [491]: core: Removed component from components list upon unregistration
+ * In [492]: core: (NEW) If a Component A subclasses B, and both define an identically bound event handler (by the same attribute name), when B is created, the event handlers from A that are also found in B (of the same binding/attribute) are rebound to B with the prefix of 'A_'... This means ... Event Handlers are automatically inherited (to a depth of 1).
+ * In [493]: tests.test_core: Fixed tests as Manager.__getitem__ has been deprecated in favor of using .channels
+ * In [494]: lib.pollers: Added __tick__ method (was tick)
+ * In [495]: lib.pollers: Added __tick__ method (was tick)
+ * In [496]: core: Check if component has __tick__ attribute before yielding it (some may not have)
+ * In [497]: core: In Runnable Components and their 'run' loops, collect and call the 'tick' (__tick__) functions of not just components bound to the current component (self.foo) but also ones registered to the current component/manager.
+ * In [498]: timers: Added tick (__tick__) functions for Timers and Timer.
+ * In [499]: tools.bench: Added -q/--quiet and -o/--output options to bench tool.
+ * In [500]: core: Added _hidden attribute to Manager.
+ * In [501]: core: Moved bulk of send(...) to _send. If we have hidden components, iterate through and call ._send on each for this event.
+ * In [502]: core: Build a list of hidden components for the component being registered and pass this to manager._hidden updatnig the set.
+ * In [503]: core: object has no __init__, no need to call super(Manager, self).__init__(...) here.
+ * In [504]: core: Implemented a workaround for Python bug: http://bugs.python.org/issue5322
+ * In [505]: tools: Added graph function to return a string representing the structure of registered components
+ * In [506]: core: Moved calls to registered/unregistered to BaseComponent (where they should have been). Added _updateHidden function to update the set of hidden components.
+ * In [507]: core: Use values(...) to get the bound values of a component instead of itervalues - as it may change while we're iterating
+ * In [508]: lib.ann: Refactored. Removd use of @listener. Node is now a plain old Component (not a Thread), use Runnable Components' .start() instead. Merged Neuron Type Classes into Neuron itself as methods (_compute is set dynamically).
+ * In [509]: core: Deprecated InvalidHandler exception. It's the caller's responsibility to ensure they are -actually- adding Event Handlers defined by @listener to a Manager/Component.
+ * In [510]: core: Moved _send back into send. We're not calling _send on _hidden components anymore ... Instead we're registering hidden components (once only).
+ * In [511]: core: New Manager attribute _ticks. Used in _run(...) and run(...) - Copied in case it changes during the run cycles. (Runnable Components0.
+ * In [512]: core: Renamed Component's _updateHidden to _registerHidden. We're not registering hidden components. Implemented _getTicks to collect and update the manager's _ticks set (This collects tick functions from the component being registered, any components bound to it and any hidden components).
+ * In [513]: tools.bench: Start the Bridge if in bridge mdoe
+ * In [514]: core: Also collect tick functions from any hidden components
+ * In [515]: tests.test_core: Testing for InvalidHandler exception is deprecated.
+ * In [516]: tests.test_core: Use a few auto-generated event handlers for good measure.
+ * In [517]: lib.sockets: Fixed Client/TCPClient so that we don't poll the socket for write unless we -actually- have data to write (reduces cpu usage as select returns too quickly otherwise)
+ * In [518]: lib.sockets: Fixed removal of Client _sock on shutdown
+ * In [519]: lib.web.core: Added filter attribute to wrapper (automagically exposed methods of a Controller). This was a recent change in circuits.core' @listener decorator @ 906403be1f6d
+ * In [520]: tests.test_sockets: Refactored these tests to not use a Manager or seprate channels. Created generic Server/Client components that accept any of the socket components as their first argument
+ * In [521]: lib.sockets: Delete inherited event handler onSEND from base Server component (UDPServer needs one that is entirely different)
+ * In [522]: docs/graphs/circuits.pdf: Updated
+ * In [523]: docs/graphs/lib.pdf: Updated
+ * In [524]: docs/graphs/tests.pdf: Updated
+ * In [525]: docs/graphs: New graph web.pdf (graph of circuits.web)
+ * In [526]: examples/ircbot.py: Just use manager.run() now
+ * In [527]: core: Rewrote _updateTicks as _getTIcks to fix a memory leak with references to old/unused tick functions being left in the manager.
+ * In [528]: lib.irc; Added Pong (PONG) event support.
+ * In [529]: core: Added an optional sleep argument to start(...) and run(...). If given (a float), will sleep after each cycle. Useful in situations where you have very few pollers (I/O calls).
+ * In [530]: core: Return self._components, not a copy of it.
+ * In [531]: lib.drivers.pygame_driver: Added tick function
+ * In [532]: tools: Store the depth (d) on the stack and restore when backtracking
+ * In [533]: core: raise KeyboardInterrupt or SystemExit -always-.
+ * In [534]: timers: Deprecated Timers. This is not needed anymore as -any- Component/Manager can manage a set of Timer instances
+ * In [535]: circuits: Timers is deprecated
+ * In [536]: tests.test_timers: Timers is deprecated. Start the Manager in each test case.
+ * In [537]: core: Removed source, ignore from Event object (used by the Bridge). The Bridge can set and test for these itself\!
+ * In [538]: bridge: When testing to see if we need to ignore an event, check if the event has been set with the 'ignore' attribute
+ * In [539]: tests.test_core: _ignore attribute of Event object deprecated.
+ * In [540]: core: Removed old useless docstring.
+ * In [541]: core: Documented (Optional) but convenient operator functions.
+ * In [542]: core: Improved __repr__ of Manager and BaseComponent to include the no. of channels it has as well as the running state. Added running state property.
+ * In [543]: core: Delete channels that are empty when removing event handlers.
+ * In [544]: tests.test_core: Fixed repr tests
+ * In [545]: core: Added multiprocessing support to Runnable Components. Call start with process=True (default: False). NB: This -will- start the Manager/Component and all it's associated Components in the new process - detaching itself from the parent process.
+ * In [546]: core: Fixed (Optional) __iadd__ and __add__ to register y with self rather than self.manager.
+ * In [547]: debugger: Added custom file support. Can change the file (defaults to sys.stderr) that we log to.
+ * In [548]: lib.sockets: IF we get an EAGAIN error while trying to accept and create a new socket, ignore it and continue (we'll try again later).
+ * In [549]: core: Use self._running to check the running state during the run loop. (publicly you should use the .running property - this is internal only).
+ * In [550]: core: Remove the hidden (registered) components from the manager's list of components - The manager only needs thei registration, and they only need listed in the _hidden set. This fixes the graphing.
+ * In [551]: core: Added (as an experiment) __call__ to the BaseComponent. This creates a new Event object out of the args and kwargs passed to the call, sends the event and returns the result.
+ * In [552]: workers: Use _running to set running state of Thread worker. Set Thread instance as _thread.
+ * In [553]: workers: Deprecated isAlive function in favour of alive property.
+ * In [554]: tests.test_workers: Fixed usage of isAlive() -> alive
+ * In [555]: examples/filewatch.py: New example to watch the contents of a file. Basically a tail clone
+ * In [556]: workers: Set HAS_MULTIPROCESSING constant appropriately as we try to import multiprocessing or processing (python-2.5). Only build the Process component if we have any kind of multiprocessing support
+ * In [557]: core: Start in process mode if we have multiprocessing support, otherwise ignore process=True and start in thread mode
+ * In [558]: tests.test_timers: Wait longer for this test - timing on comptuers sucks
+ * In [559]: circuits: Don't import Proess from workers if it doesn't exist
+ * In [560]: docs: Updaetd overview. Added HelloWorld example. Updated links to the core library
+ * In [561]: docs/DownloadInstall: Fixed spelling errors
+ * In [562]: docs/License: Updated copyright year
+ * In [563]: docs/License: Removed BOM marker
+ * In [564]: docs/GeneralPerformance: Renamed to docs/Performance
+ * In [565]: docs/QuickStart: Removed
+ * In [566]: docs: Removed link to QuickStart, added DevelopersGuide and renamed TutorialHelloWorld to Tutorial
+ * In [567]: docs/TutorialHelloWorld: Renamed to docs/Tutorial
+ * In [568]: docs/Tutorial: Fixed Status block
+ * In [569]: lib.irc; Added User event object.
+ * In [570]: lib.irc: Renamed all IRC Command and their Event Handlers (removed use of @listener). Updated any calls to IRC Commands.
+ * In [571]: lib.irc; Removed use of @listener for (Default) Event Handlers.
+ * In [572]: lib.sockets: Added Connect event object.
+ * In [573]: lib.sockets: Deprecated isConnected() call in favor of a property. Use .connected property isntead.
+ * In [574]: lib.sockets: Removed "open" function and moved into TCPClient's constructor (__init__). TCPClient now takes a host, port and optional ssl and bind keyword arguments. Added "connect" event handler for initiating new connections (defaults to the host, port settings provided by the TCPClient constructor).
+ * In [575]: examples/ircbot.py: Simplified and fixed up
+ * In [576]: examples/telnet.py: Fixed and simplieifed
+ * In [577]: core: Improved send so that the default target is now either the target given (if it doesn't evaluate to False), or it's the channel of the Component/Manager managing events. (This simplifies a lot of code making it almost unnecessary to specify targets)
+ * In [578]: examples/ircbot.py: Don't need to specifty target - defaults nicely
+ * In [579]: examples/ircbot.py: Don't need to specifty target - defaults nicely
+ * In [580]: lib.io: Retabbed
+ * In [581]: core: Renamed *args to *channels in listener decorator to be more clear.
+ * In [582]: core: Fixed setting of target. Set target to given target (if not None or False), set to self.channel (if available), defaulting back to None.
+ * In [583]: lib.io: Added tick function
+ * In [584]: lib.io: Simplified constuctor for Stdin component.
+ * In [585]: tests.test_sockets: Client.open is deprcated, use connect instead (which is also an event handler)
+ * In [586]: tests.test_bridge: Retabbed
+ * In [587]: tools: Remove StringIO import. Use a simple list to build up the output and return .join(s)
+ * In [588]: core: Fixed the order that events come off the queue. (I can't believe the whole time this was LILO rather than FIFO :/)
+ * In [589]: drivers: Added a load function to load all available drivers into the drivers namespace as well as their Component
+ * In [590]: drivers.inotify_driver: New INotifyDriver using the pyinotify library added
+ * In [591]: drivers.pygame_driver: Import pygame into the global namespace. Remove 'Event' from event object names.
+ * In [592]: drivers.pygame_driver: Remvoed __new__ from PyGameDriver as this is not needed.
+ * In [593]: bridge: Added tick function
+ * In [594]: tests.test_bridge: Use wait() function (from tests.test_sockets). Start and stop each manager
+ * In [595]: examples/dirwatch.py: New example using the inotify_driver (INotifyDriver) to watch a directory for changes
+ * In [596]: lib.drivers.pygame_driver: Forgot to import pygame
+ * In [597]: lib.drivers.pygame_driver: Initialize the pygame event system.
+ * In [598]: examples/pygameex.py: Simplified
+ * In [599]: core: Simplified _getTicks
+ * In [600]: core: Added Started "started", Stopped "stopped", Registered "registered" and Unregistered "unregistered" events.
+ * In [601]: core: Check our parent manager. If it's not our manager add ourselves as a hidden component to the parent manager.
+ * In [602]: tools: Alias s.append as write and use this to write the strings.
+ * In [603]: tools: Added an inspect(...) function which takes as a single argument a component x to inspect and print detailed information about.
+ * In [604]: core: Added hidden and ticks properties to the Manager.
+ * In [605]: core: Use the ticks property during the run cycle of runnable Components.
+ * In [606]: core: Use the hidden property when gathering tick functions in _getTIcks of the Component.
+ * In [607]: core: @listener is deprecated in favor of @handler (more readable and easier to type) ... -and- they are "Event Handlers".
+ * In [608]: core: Updated doc string for @handler
+ * In [609]: core: Updated doc string examples for @handler
+ * In [610]: core: Event Handlers (created with @handler) now have an attribute 'handler' set to True.
+ * In [611]: core: Fixed doc string for @handler
+ * In [612]: core: When sorting Event Handlers, use {{{lambda x: not x.filter}}} as the sorting key - this puts Filters first.
+ * In [613]: core: Updated doc string of Manager._remove
+ * In [614]: core: Fixed Manager._remove so that if no channel is given the handler is removed from -all- channels.
+ * In [615]: core: Fixed doc string of Manager.flush
+ * In [616]: core: Fixed doc string of Manager.send
+ * In [617]: core: Fixed doc string of BaseComponent/Component (they were in the wrong place).
+ * In [618]: circuits: Import new @handler decorator into the circuits namespace but leave @listener until 1.2 when it gets deprecated.
+ * In [619]: core: Fixed @handler (fubbered up the commit?)
+ * In [620]: core: Updated @expose to match @handler in circuits.core
+ * In [621]: tests.test_core: Fixed repr tests as there are now "registered" and "unregistered" events that will be in the queue.
+ * In [622]: core: Added a new test to test the filter order of Event Handlers.
+ * In [623]: tools: New tool reprhandler(x) which returns a nicely formatted string representing the Event Handler given.
+ * In [624]: tools: Use new reprhandler(...) to pretty print the Event Handlers found by the inspect tool
+ * In [625]: bridge: Fixed registered event handler
+ * In [626]: lib.web.servers: Fixed registration event handlers.
+ * In [627]: lib.web.wsgi: Fixed registration event handlers.
+ * In [628]: examples/circ.py: Fixed registration event handler.
+ * In [629]: lib.irc: Added Pass event object.
+ * In [630]: core: If target is None, try to get the channel of the current component this event was pushed from, otherwise default back to NOne.
+ * In [631]: core: When sending events, if target is None, try to get the channel of the current component, otherwise default back to None.
+ * In [632]: core: When setting the actual channel we're sending to, if target is not None and target is an instance of Component, set the target to the Component's channel, otherwise default back to None. When finally setting the channel, ensure that target is of the str type.
+ * In [633]: core: Explicitly set the target channel of "registered" and "unregsitered" events.
+ * In [634]: tests.test_core: Fixed repr test as an Unregistered event gets pushed when a component is unregistered from a manager
+ * In [635]: tests.test_timer: Wait longer before doing teh assertion (timing sucks) :)
+ * In [636]: lib.web.servers: Removed registered event handlers - don't need them
+ * In [637]: docs/ChangeLog: Completed up to r411
+ * In [638]: core: Fixed a bug in setting the correct channel for a handler if handler.target is not None.
+ * In [639]: examples/telnet.py: Changed to use new @handler decorator.
+ * In [640]: examples/telnet.py: Just register the TCPClient instnace.
+ * In [641]: examples/telnet.py: Import Write event from lib.sockets
+ * In [642]: core: Ignore any other exception raised if they weren't caught already
+ * In [643]: examples/udpserver: Fixed and simplified
+ * In [644]: examples/udpserver: Fixed and simplified
+ * In [645]: lib.sockets: No need to delete the Server_onSEND as it doesn't exist anymore :)
+ * In [646]: examples/filewatch.py: Fixed consturctor
+ * In [647]: examples/echoserver.py: Fixed and simplified
+ * In [648]: examples/telnet.py: Set unique channel to make read events unique
+ * In [649]: core: Try to set the target before doing anything.
+ * In [650]: core: Try to set the target before doing anything.
+ * In [651]: examples/eventserver.py: Fixed and simplified
+ * In [652]: examples/eventclient.py: Fixed and simplified
+ * In [653]: examples/ircbot.py: Simplified consturctor
+ * In [654]: examples/lniktest.py: Removed this bad example
+ * In [655]: examples/loops.py: Removed this bad example
+ * In [656]: examples/simpleweb.wsgi: Simplified
+ * In [657]: examples/todo: Fixed and simplified
+ * In [658]: examples/timers.py: Fixed and simplified
+ * In [659]: examples/workertest.py: Removed bad example
+ * In [660]: examples/testwsgi.py: Removed bad example
+ * In [661]: examples: Removed most @listener. Changed filters to use @handler - This example -is- still broken though :/
+ * In [662]: core: Import warnings instead of warn from warnings. Use warnings.warn
+ * In [663]: lib.log: Removed unused listener import
+ * In [664]: lib.irc; Removed unused listener import
+ * In [665]: lib.irc; Corrected doc string of IRC component.
+ * In [666]: lib.irc; Removed use of @listener in doc string example.
+ * In [667]: lib.drivers: Imported warn as _warn from warnings (forgot to import this).
+ * In [668]: lib.drivers.inotifydriver: Removed unused IN_ISDIR import.
+ * In [669]: lib.drivers.pygame_driver: Added Unknown event object (forgot to add this).
+ * In [670]: lib.web.core: Fixed spelling error of self in serve_file def
+ * In [671]: lib.web.http: Removed unsued import of SERVER_PROTOCOL
+ * In [672]: lib.web.wsgi: Removed unused import of Response
+ * In [673]: lib.web.wsgi: Fixed error handler - code is actually status.
+ * In [674]: tools.sniffer: Removed unused import of sys
+ * In [675]: tools.sniffer: Removed unused import of listener
+ * In [676]: tools.bench: Added import of missing Debugger
+ * In [677]: tools.bench: Removed use of @listener, Use @handler for filters. Fixed one use of self.opts.verbose (was opts.verbose :/).
+ * In [678]: tools.bench: If in debug mode (opts.debug), add a Debugger instance to the manager.
+ * In [679]: examples/todo.py: Removed unused import of listener
+ * In [680]: examples/timers.py: Removed unused import of listener
+ * In [681]: examples/eventclient.py: Removed unused import of listener
+ * In [682]: lib.drivers.inotify_driver: Added _sleep function that the tick function uses to sleep. Basically the driver will sleep max(0, freq - timeout). Renamed self._manager to self._wm.
+ * In [683]: lib.sockets: Setting TCP_NODELAY is not necessary after accepting a new server's client socket as the server already has this set.
+ * In [684]: lib.sockets: Added some better error handlnig around pollling and accept server clietn sockets
+ * In [685]: core: Send ourself (self) the component being registered along with the manager (the Component/Manager being registered with) in the Registered event data.
+ * In [686]: core: Send ourself (self) the component being unregistered along with the manager (the Component/Manager being unregistered from) in the Unregistered event data.
+ * In [687]: bridge: 'registered' event handlers now get an additional argument, the component being registered with
+ * In [688]: lib.web.wsgi: 'registered' event handlers now get an additional argument, the component being registered with
+ * In [689]: examples/circ.py: 'registered' event handlers now get an additional argument, the component being registered with
+ * In [690]: lib.drivers.inotify_driver: Changed default channel to 'inotify' allowing this to be customized with channel keyword argument
+ * In [691]: lib.drivers.pygame_driver: Changed default channel to 'pygame' allowing this to be customized with channel keyword argument
+ * In [692]: lib.web.tools: return the response object (isntead of response.body) for serve_file
+ * In [693]: lib.web.tools: else return the original response if no redirection was done.
+ * In [694]: lib.web.tools: return the response (after flattening).
+ * In [695]: lib.web.http: If v (a possible resposne) is an instance of webob.Response, create a new Response event based on v and send it.
+ * In [696]: lib.drivers.inotify_driver: Pass dir in as an argument not a keyword argument - requested by hacker_kid
+ * In [697]: core: Set Runnable Components' threads as Daemons (they wil automatically terminate when the main thread terminates).
+ * In [698]: core: When a Runnable Component terminates: While we still have events in the queue, run tick functions and process events until we either have no more events in the queue or a 3s timeout has expired. (This gives components a chance to cleanup).
+ * In [699]: lib.io: Removed useless "# Filename:" header.
+ * In [700]: lib.io: Refactored into a reusable File component with three additional convenient components, StdIn, StdOut and StdErr. This also adds initialized instances stdin, stdout and stderr.
+ * In [701]: core: Added errors, log arguments to start(...) and run(...) - same as send(...).
+ * In [702]: docs/html: Added generated docs by epydoc
+ * In [703]: circuits: Updated main doc string
+ * In [704]: docs: Updated
+ * In [705]: circuits: (docs) Fixed example
+ * In [706]: docs: Updated
+ * In [707]: tools: Included counts in inspect tool
+ * In [708]: docs: Fixed all epydoc warnings and updated some documentation that was a bit oudated
+ * In [709]: docs: Updated
+ * In [710]: Merged with 709:b6fc98eecc6f
+ * In [711]: docs: Updated
+ * In [712]: circuits: Updated listed keywords picked up by setuptools.
+ * In [713]: core: (docs) Updated module's doc string.
+ * In [714]: core: (docs) Updated doc strings for Event
+ * In [715]: core: (docs) Updated doc strings for Error Event
+ * In [716]: core: (docs) Updated doc strings for Started, Stopped, Registered and Unregistered Events. NEW: Started and Stopped both take 1 argument (component).
+ * In [717]: core: (docs) Some minor spelling adjustments of terms used in doc strings.
+ * In [718]: core: (docs) Updated doc string of Manager.push
+ * In [719]: core: (docs) Updated doc string of Manager.flush
+ * In [720]: core: (docs) Updated doc string of Manager.send
+ * In [721]: core: Started and Stopped both now take a single argument. (component,) - The component being started/stopped.
+ * In [722]: core: (docs) Updated doc string for BaseComponent.unregister
+ * In [723]: docs: Updated
+ * In [724]: core: (docs) Updated coc string example of handler
+ * In [725]: core: (docs) Added deprecated note of the use of type in kwargs for handler(...) - planend to be deprecated in favor of filter in 1.2
+ * In [726]: core: (docs) Added deprecated note for the use of listener(...) - planned to be deprecated in 1.2 in favor of handlers
+ * In [727]: core: (docs) Updated doc string for HandlersType (metaclass).
+ * In [728]: core: (docs) Updated doc string of Manager
+ * In [729]: core: (docs) Updated doc string for Manager.__len__
+ * In [730]: circuits: Added a sleep of 1s in the main doc string example so that at least it doesn't fail! :)
+ * In [731]: core: Renamed Manager.handlers(...) to _getHandlers (no need for a public interface to this).
+ * In [732]: core: (docs) Documented the return values and types of the (Optional) operator convenience functions.
+ * In [733]: core: (docs) Updated doc string of BaseComponent
+ * In [734]: core: (docs) Updated doc string of BaseComponent.__call__
+ * In [735]: core: (docs) Updated doc string of BaseComponent.register
+ * In [736]: core: (docs) Removed most of the doc string from Component (most of this is already documented).
+ * In [737]: core: (docs) Fixed indentation
+ * In [738]: core: (docs) Remoevd superfluous documentation on channel.
+ * In [739]: docs: Updated
+ * In [740]: bridge: (docs) Updated module doc string.
+ * In [741]: bridge: Removed __all__ (not needed).
+ * In [742]: bridge: Switched to using handler (listener is deprecated).
+ * In [743]: core: (docs) Fixed example handler usage in handler doc string.
+ * In [744]: docs: Updated
+ * In [745]: docs: Updated
+ * In [746]: docs: Added missing epydoc generated files
+ * In [747]: tools: (docs) Updated doc string for graph(x)
+ * In [748]: tools: (docs) Updated doc string for inspect(x)
+ * In [749]: tools: (docs) Fixed typo
+ * In [750]: docs: Updated
+ * In [751]: tools: (docs) Updated doc string for reprhandler
+ * In [752]: docs: Updated
+ * In [753]: tools: Changed the way graph(x) displays the registered components to look more like a structured wiki list
+ * In [754]: docs/Performance: Updated status
+ * In [755]: docs/graphs: Updated
+ * In [756]: Makefile: Ignore circuits.version in generated docs
+ * In [757]: docs: Updated
+ * In [758]: circuits: (blanket chnage) Switched to @handler everywhere. Removed import of circuits.core in favor of just circuits (with the exception of lib.web.core which needs access to the core.BaseComponent)
+ * In [759]: docs/graphs: Updated
+ * In [760]: docs/graphs: Updated
+ * In [761]: lib.web.webob: Set scheme to Reqeust.scheme (default: 'http') if an empty scheme is passed in. Possible as a lot of HTTP requests can be a plain old 'GET /'
+ * In [762]: lib.web.webob: Set self.remote for Request objects only if self.sock is not None (it's None when dealing with we are served from a WSGI server, eg: Apache + mdo_wsgo).
+ * In [763]: lib.web.webob: Set self.script_name to self.base for all Request objects. (I'm not sure if there are any other cases where script_name should be different - except in the case of being served by another WSGI server, eg: Apache + mod_wsgi - but that's handled by the Application Component).
+ * In [764]: lib.web.wsgi: Switched to using @handler (@listener is deprecated).
+ * In [765]: lib.web.wsgI: Added in extra imports we need.
+ * In [766]: lib.web.wsgi: Simplified Component registration in Application Component and removed reference to dispatcher.
+ * In [767]: lib.web.wsgI: Parse the SERVER_PROTOCOL, because we get it as 'HTTP/x.y' - we want (x, y). Pass in None for sock to Request object creation.
+ * In [768]: lib.web.wsgi: Pass in environ["wsgi.url_scheme"] to Request as the scheme.
+ * In [769]: lib.web.wsgI: Pass in the parsed protocol.
+ * In [770]: lib.web.wsgi: Build Host object for Request.remote from environ["REMOTE_ADDR"] and environ["REMOTE_PORT"].
+ * In [771]: lib.web.wsgi: Fixed creation of Response object (needs a reference to the request object). Added in a default response header 'X-Powered-By'.
+ * In [772]: lib.web.wsgi: Fixed Application request/response and error handling. (NOTE: This is almost identical code to that of HTTP's - Should refactor this into a single Component).
+ * In [773]: lib.web.wsgi: Pass in SERVER_NAME and SERVER_PORT to Middleware loaded apps.
+ * In [774]: lib.web.wsgi: Pass in wsgi.version, wsgi.errors, wsgi.multithread, wsgi.multiprocess, and wsgi.run_once values to the environ for the Middleware loaded app.
+ * In [775]: lib.web.wsgi: Fixed typo (weird way of spelling 'status').
+ * In [776]: lib.web.servers: Changed default channel for BaseServer (and Server) and child components to 'web'.
+ * In [777]: lib.web.servers: Simplified Server properties.
+ * In [778]: lib.web: Import wsgi as a module. Import tools too. Removed import of Application, Middleware, Filter from wsgi.
+ * In [779]: lib.web.wsgi: Renamed Middleware to Gateway (will deprecated Middlware in 1.2)
+ * In [780]: lib.web: Added deprecation note about the direct import of Application, Middleware and Filter into the circuits.web namespace. Post 1.2 this will be deprecated in favour of simply importnig wsgi.
+ * In [781]: lib.web.wsgi: Replaced Middleware alias with an equivilant function to display an appropiate warning about the deprecation of Middleware post 1.2
+ * In [782]: lib.web.wsgI: Fixed type, it's not Gateway :)
+ * In [783]: docs: Updated
+ * In [784]: lib.web: Removed Filter. (I'm not sure this Component works, is used or useful!).
+ * In [785]: lib.web.wsgi: Removed Filter (I'm not sure this works, is used or is useful!)
+ * In [786]: lib.web.dispatchers: Modified the DefaultDispatcher's behavior such that if the channel that was match for a particular URI happens to be a 'request' channel (plain old web request handlers), then create a basic Request Event Object based only on the request and response data (nothing else). Otherwise proceed with the normal behavior of creating a Request Event Object with proper *args, **kwargs.
+ * In [787]: lib.web.wsgi: Removed *args, **kwargs from Application constructor (if we need customization in future, we'll add it).
+ * In [788]: lib.web.wsgi: As Gateway Components are used in the context of either a BaseServer or Server, it must also listen on teh same default 'web' channel. Correct the channel appropriately if a custom path is given for the WSGI Application to be mounted on.
+ * In [789]: lib.web.wsgi: Renamed request, response instance variables to _request and _response respectively (no need for a public interface to these). Renamed event handlers as simply request/response (much more sense).
+ * In [790]: Backed out changeset 1123b4e86c96 - I souldn't code on little sleep :)
+ * In [791]: Merged with 5f898166ae4f
+ * In [792]: lib.web.dispatchers: The channel will in fact end with ":request" not be equal to "request" (targets).
+ * In [793]: docs: Updated
+ * In [794]: lib.web.utils: Retabbed. Rewrite parseQueryString to use urlparse.parse_qs and use a list comprehension instead of a for loop
+ * In [795]: lib.web.dispatchers: Reuse the Request Event rather than recreate a new one.
+ * In [796]: lib.web.sessions: Switched to using @handler (@listener is deprecated)
+ * In [797]: lib.config: Switched to using @handler (@listener is deprecated)
+ * In [798]: lib.env: Switched to using @handler (@listener is deprecated)
+ * In [799]: lib.smtp: Switched to using @handler (@listener is deprecated)
+ * In [800]: lib.sockets: Switched to using @handler (@listener is deprecated)
+ * In [801]: docs: Updated
+ * In [802]: debugger: Use type=True (filter=... is deprecated)
+ * In [803]: tests.test_core: Use type=True (filter=... is deprecated)
+ * In [804]: lib.sockets: Fixed capturing EWOUDLBLOCK and EAGAIN errors
+ * In [805]: lib.web.dispatchers: Greatly simplified the DefaultDispatcher's Request Handler to just return the result of sending the dispatched request to Controllers (if any were found). It's ok to return None here or return nothing at all (None) to give other Dispatchers a chance to do something with the request.
+ * In [806]: lib.web.dispatchers: Come to think of it, Dispatchers' Request Handlers should probably be filters.
+ * In [807]: lib.web.dispatchers: Removed unused imports.
+ * In [808]: lib.web.http: Fixed buffering of socket, request and response objects in cases where the entire body hasn't been received yet.
+ * In [809]: lib.web.http: Don't try/except th sending of the request, let the outter try do this, just check if v is not NOne, if it is return a 404.
+ * In [810]: docs: Updated
+ * In [811]: lib.irc: Fixed source so that we send the entire source as split by sourceSplit (nick, ident, host)
+ * In [812]: examples/irc.py: Fixed message handler to pass in the correct target (source[0])
+ * In [813]: ez_setpu.py: Removed - download the latest version from http://peak.telecommunity.com/dist/ez_setup.py isntead
+ * In [814]: lib.web.http: Removed server instance variable from HTTP (not used).
+ * In [815]: lib.web.servers: Added 'version' property to BaseServer.
+ * In [816]: lib.web.servers: Added ssl, scheme and host properties and rewrite the base property to use these.
+ * In [817]: lib.web.webob: Don't set the script_name of the Request object to the base of the server - this is wrong :)
+ * In [818]: lib.web.webob: Added 'X-Powered-By' default header to Response objects and changed 'Server' default header to use request.server.version property.
+ * In [819]: lib.web.wsgi: Fixed up a few issues with the WSGI environ being created and added a few missing pieces.
+ * In [820]: lib.web.wsgi: Removed default 'X-Powered-By' response header here as it's taken care of by the Response object(s).
+ * In [821]: lib.web.wsgi: Fixed start_response functions (added keyword argument exc_info).
+ * In [822]: lib.web.wsgi: Make 'environ' a private function '_createEnviron' (no need for public interface).
+ * In [823]: lib.web.dispatchers: No need to have a special case for channels ending n ":request".
+ * In [824]: lib.web.dispatchers: Added 'default' as the last channel to look for.
+ * In [825]: lib.web.dispatchers: Raise errors when sending the Request Event so the HTTP Component can pick it up.
+ * In [826]: lib.web.servers: Set a default Request.host that it Server.host
+ * In [827]: lib.web.webob: Default host for Request is ""
+ * In [828]: lib.web.webob: Set Response.cookie to Request.cookie and reuse the object rather than creating a new one to woryr about.
+ * In [829]: lib.web.wsgi: Set self.path in Gateway
+ * In [830]: lib.web.wsgi: Recalculate Request.script_name and Request.path based on the fact that the WSGI mounted via this Gateway may be mounted and rooted at a specific path. eg: Gateway(app, "/app")
+ * In [831]: docs: Updated
+ * In [832]: core: Make it possible to 'override' inherited event handlers by specifying override=True in the @handler decorator  when defining custom event handlers.
+ * In [833]: lib.pollers: Completed implementation of Select, Poll and EPoll pollers
+ * In [834]: lib.sockets: Refactored to use the new Poller Components from lib.pollers
+ * In [835]: examples/echoserver.py: Just write the response backk to the client
+ * In [836]: examples/ircbot.py: Fixed this example due to lib.sockets refactor and changes in TCPClient (minor).
+ * In [837]: examples/telnet.py: Fixed import of stdin (Stdin was deprecated).
+ * In [838]: examples/telnet.py: Fixed TCPClient instantiation due to recent changes in lib.sockets.TCPClient (minor) due to new lib.pollers
+ * In [839]: examples/telnet.py: Added error handler to print errors, eg: "Connection Refused" :)
+ * In [840]: examples/udpclient.py: Fixed import of stdin from lib.io (Stdin was deprecated)
+ * In [841]: tests.test_sockets: Fixed TCPServer and TCPCLient test and half fixed UDPServer/UDPClient test (1 failure still :/)
+ * In [842]: lib.web.cgifs: readline() doesn't accept any argumetns\!
+ * In [843]: errors: Don't set a default 'Close' header for Response object - this is set by the server (and it must not be set for WSGI)
+ * In [844]: lib.web.webob: Fixed settnig of server_version in Response object
+ * In [845]: docs: Updated
+ * In [846]: lib.web.servers: Make it possible to customize other things with the BaseServer and subclasses thereof and it's underlying Componetns (such as the poller used)
+ * In [847]: lib.web.utils: Fix for python-2.5 compatibility (2.5's urlparse module doesn't have parse_qs, cgi does though).
+ * In [848]: lib.pollers: Fixed epoll for python-2.5 compatibility. (Use the select26 library to get epoll support for 2.5 - otherwise the EPoll component is deleted).
+ * In [849]: lib.sockets: Removed unsed import of errno
+ * In [850]: lib.sockets: Removed unused import of select. Removed import of Poll and EPoll from lib.pollers (leave the default poller for Client/Server components to be Select).
+ * In [851]: lib.web.servers: (python-2.5 compatibility) Fixed docroot property to work with python-2.5 and added some documentation about it.
+ * In [852]: docs/html: Updated
+ * In [853]: lib.pollers: It's possible that for Poll and EPoll pollers that an incoming event might occur whereby a Client/Server interested in it has already deregistered their interest altogether - So close it and return.
+ * In [854]: lib.web: Import the actual Components we want from errors (don't use from ... import *).
+ * In [855]: lib.web.dispatchers: Added 'index.xhtml' and 'index.htm" as additional static file defaults to look for in a DefaultDispatcher's docroot.
+ * In [856]: lib.web.http: Put an assertion guard around the type of v being returend. This should -never- occur!
+ * In [857]: lib.web.wsgi: Added missing import of NotFound from errors.
+ * In [858]: lib.web.wsgi: IT's not a WSGI Application'(deployed on another web server), s responsibility to "Close a Connection" by setting the "Close" header.
+ * In [859]: lib.web.wsgi: Fixed request and error handlers in wsgi.Application
+ * In [860]: lib.web.wsgi: Fixed path (and Component channel) setting in wsgi.Gateway (thanks aa_).
+ * In [861]: lib.web.wsgi: Set "wsgi.errors" to a File component that goes to /dev/null (for now) - not sure how to handle errors that occur in WSGI apps mounted via our Gateway :/
+ * In [862]: lib.core: Ignore any exceptions that might occur during sleep (eg: KeyboardInterrupt).
+ * In [863]: lib.core: Fixed exceptions thrown during shutdown when using processes. Turns out trying to terminate a process within a process isn't a very good idea (self._task will be None! duh!) :)
+ * In [864]: lib.pollers: Recreate our poller object if we are part of something that's started in either Process (P) or Thread (T) mode for EPoll.
+ * In [865]: core: Added a 2nd argument to the Started Event 'mode'. This is the mode in which the Component was started in. It is one of 'P' for Process mode, 'T' for Thread mode or None for Main/Normal.
+ * In [866]: core: Pass in an additional argument to the run function when a Component is started. Set this argument (mode) to 'P' if started in Process mode, 'T' if started in Thread mode, otherwise it defaults to None. Send this as part of the Started Event just before we go into our Event Loop.
+ * In [867]: core: (NEW) Added regsitered signal handlers for SIGINT, SIGHUP and SIGTERM. Added a new Event, Signal; which gets sent on any of SIGINT, SIGHUP or SIGTERM signals. If no Event Handler handles or filters the Signal Event, then the system is terminated cleanly. Upon system termination, all child threads and processes are also termianted.
+ * In [868]: cire: Set the default join timeout to 3 (when stopping).
+ * In [869]: core: Gah I'm an idiot, threads don't have a .stop() :P
+ * In [870]: lib.pollers: Fixed Poll/EPoll
+ * In [871]: core: Only setup signals when started in non-thread mode (apparently only the main thread can have registered posix signal handlers).
+ * In [872]: lib.web.dispatchers: Fixed args given to the Request event from vpath (the left over path).
+ * In [873]: lib.web.httpauth: Added HTTP Authentication library (borrowed from Cherrypy - which they borrowed from someone else\!)
+ * In [874]: lib.web.errors: Don't clear the response in HTTPError (Bad for Unauthorized error).
+ * In [875]: lib.web.errors: Don't need HTTPError or subclasses thereof to evaluate to False.
+ * In [876]: lib.web.errors: Added Unauthorized error (sends a 401).
+ * In [877]: lib.web.tools: Added basic_auth and digest_auth tools.
+ * In [878]: core: (NEW) Added the capability for Event Handlers to be created with a priority. That is, Event Handlers are registered with a Manager/Component and are sorted by their priority, then by whether or not they are a filter.
+ * In [879]: core: Preserve the structure of a component tree.
+ * In [880]: core: Removed this component from it's manager's parent's set of hidden components if it exists.
+ * In [881]: lib.pollers: Changed default TIMEOUT to be 1ms (0.001s). Removed a bit of useless code in Poll/EPoll constructors that multiplied the timeout by 1000 (what the hell for ? - what were those twisted guys smoking ?).
+ * In [882]: lib.web.dispatchers: Changed the default channel of the DefaultDispatcher to "web".
+ * In [883]: lib.web.http: Changed the default channel of HTTP to be "http". Updated all Events destined for a Server to "server". Set all Request events to go to "web" (by default).
+ * In [884]: lib.web.http: Changed TypeError raised for when the type of v is unhandled to an assertion.
+ * In [885]: tools: Added kill() function to destroy the entire structure of a component and it's children recursively
+ * In [886]: lib.web.servers: Changed the way TCPServer and HTTP get registered to ouse BaseServer (circuits.web).
+ * In [887]: Automated merge with http://hg.softcircuit.com.au/projects/circuits/
+ * In [888]: lib.web.servers: Forgot to remove this
+ * In [889]: lib.web.core: Forgot to update the ExposeType meteclass when 'type' had been deprecated from @handler. The checks were failing :/
+ * In [890]: docs/Contributing: Updated
+ * In [891]: docs/html: Updated
+ * In [892]: core: Fixed sending of Registered and Unregistered evetns
+ * In [893]: Backed out changeset 2f6c72536609 (Half asleep here :/)
+ * In [894]: tools: (NEW) Added new tools root(x) to find the root of a component - ie: it's actual manager
+ * In [895]: lib.web.http: Fixed streaming
+ * In [896]: web.constants: Reduced default buffer size to 4KB
+ * In [897]: core: Put try/except/pass around exception handlers in Manager.run in case of unclean shutdowns
+ * In [898]: drivers: Greatly simplified this package and it's drivers. Removed auto loading crap :) Just load explicity
+ * In [899]: net.sockets: Rewrite tools
+ * In [900]: tools: Fixed walk and graph functions.
+ * In [901]: Imported circuits-dev-973:592956c5f436.patch
+ * In [902]: tools: Removed detail about hidden componnets in inspect tool as this is removed now
+ * In [903]: core: Fixed Manager._unregisterHandlers (Manager._remove not Manager.remove)
+ * In [904]: core: Better register/unregister functionality - ensures we register not only with our manager but the root manager but maintain the structure
+ * In [905]: Imported circuits-dev-980:04a88088235d.patch
+ * In [906]: core: _handlers may change as we're iterating - iteratore over a copy
+ * In [907]: tools: Removed initial component form being printed in detailed inspect report
+ * In [908]: core: Fixed sending of Unregistered event
+ * In [909]: core: Fixed Manager.unregister in the case where a Component's manager is it fact itself
+ * In [910]: tests.test_sockets: Fixed UDP test by fixing the channel
+ * In [911]: core: Use values() as the list can changed if we iter over it instead.
+ * In [912]: lib.web.tools: Fixed doc string of auth tools
+ * In [913]: lib.web: Renamed httpauth modules to _httpauth (excluding this form docs)
+ * In [914]: docs/html: Updated
+ * In [915]: docs/ChangeLog: Removed BOM markert
+ * In [916]: docs/ChangeLog: Up to 414
 
 == 1.0b1 ==
  Released:: 20081231 (''31st December 2008'')
  * In [261]: [source:circuits/tests/tests.test_workers.py tests.test_workers]: Fixed test by waiting until worker has finished
 
 
+
+ * In [420]: workers: Python 2.5.x compatibility with the backported processing package
+ * In [421]: lib.log: Removed redundant @listener defs and simplified
+ * In [422]: examples/simpleweb.py: Reverted back to it's simplest form. Try to import psyco, if this fails, do nothing.
+ * In [423]: examples/simpleweb.py: Removed Debugger, Sessions and Admin
+ * In [424]: examples/simpleweb.py: Fixed typo in try/except
+ * In [425]: version: Possible fix, fixing bug when creating version information the first time
+ * In [426]: tools.bench: Only import hotshot if we can and only try to profile if hotshot is available, otherwise print a warning
+ * In [427]: lib.web.tools: Import hashlib and use hashlib.md5 instead of importing the md5 function.
+ * In [428]: lib.web.tools: Removed unused imports.
+ * In [429]: lib.web.core: Added tools serve_file, serve_download and expires to Controller
+ * In [430]: lib.web.dispatchers: Renamed _getParams t _parseBody and modified to pass in params dict from _parseQueryString and update it, return if an error response was returned (return is False).
+ * In [431]: lib.web.dispatchers: Just update params with dictform(form) in all cases.
+ * In [432]: lib.web.dispatchers: If form.file, set request.body to file.form otherwise update params.
+ * In [433]: examples/helloweb.py: Try to import psyco, if it fails do nothing.
+ * In [434]: lib.web.wsgi: Removed *args, **kwargs from request handler - they aren't needed.
+ * In [435]: lib.web.wsgi: Just return the response string, no need to "send" a Response event anymore.
+ * In [436]: lib.web.webob: Removed app attribute.
+ * In [437]: lib.web.webob: Renamed and reordered Request default class attributes.
+ * In [438]: lib.web.webob: Added sock and scheme to Request constructor.
+ * In [439]: lib.web.webob: Added sock, scheme as attributes. Reordered and fixed names of other attributes.
+ * In [440]: lib.web.webob: Set self.base of the request when setting headers.
+ * In [441]: lib.web.loggers: request.remote_host renamed to request.remote
+ * In [442]: lib.web.loggers: Rebuild requestline from request's method, path and scheme.
+ * In [443]: lib.web.tools: Fixed names of request attributes
+ * In [444]: lib.web.utils: Fixed names of request attributes.
+ * In [445]: lib.web.utils: Removed use of request.app as there is no request.app for url()
+ * In [446]: lib.web.servers: Set Request.server and Request.local upon BaseServer creation
+ * In [447]: lib.web.dispatchers: Pass in request to _getChannel (instead of request.path and request.method.upper()), extract them instead. Set request.index if path ends with a '/'.
+ * In [448]: lib.web.http: No need for elif because if stream we return.
+ * In [449]: lib.web.http: Use map to extract requested protocol. Pass in sock and scheme to Request(...)
+ * In [450]: lib.web.http: These attributes are not needed anymore or already set elsewhere.
+ * In [451]: lib.web.http: Use map to build atams.
+ * In [452]: lib.web.webob: Fixed docstring for Request
+ * In [453]: lib.web.webob: Pass in request object into Response. Response(sock, reqeust)
+ * In [454]: lib.web.http: Updated docstring of HTTP
+ * In [455]: lib.web.http: Use a slice to get to the protocol (1.1 or 1.0) part.
+ * In [456]: lib.web.http: Pass in requeset to Response(...)
+ * In [457]: lib.web.http: Removed local var atoms and merged into a single path = "".join(...)
+ * In [458]: lib.web.http: Removed local vars rp, sp.
+ * In [459]: core: Added start/stop/_run to Manager (starts the Component in a thread). Added run (starts the Component in the main thread and blocks). Components -now- have the capability of running by themselves without any boilerplate.
+ * In [460]: lib.sockets: Added tick attributes/methods pointing to poll(...)
+ * In [461]: lib.web.servers: Removed poll() and run() - These are now handled automagically
+ * In [462]: lib.web.tests.test_core: Don't need the TestServer(Thread) component anymore - just start the (Server(...) + Root(...)) component.
+ * In [463]: core: Renamed handlers(...) to _getHandlers
+ * In [464]: core: Renamed add(...) to _add
+ * In [465]: core: Renamed remove(...) to _remove
+ * In [466]: core: Import sys.exc_info and sys.exc-clear as _exc_info and _exc_clear respectively
+ * In [467]: tests.test_core: Fixed test to match Manager.add and Manager.remove changes to _add and _remove
+ * In [468]: lib.pollers: Added read, write, all properties to access _fds. This uses bitwise flags to determine if a fd is to be polled for reading or writing or both.
+ * In [469]: lib.pollers: Set tick to poll(...)
+ * In [470]: lib.pollers: Retabbed
+ * In [471]: lib.pollers: Import select.select as _select
+ * In [472]: core: Give component threads started by start(...) the name of the class
+ * In [473]: tools.sniffer: Use Manager.run(...) to run the system
+ * In [474]: tools.sniffer: Fixed tabs
+ * In [475]: core: Fixed minor typos in Error's codstring
+ * In [476]: Retabbed
+ * In [477]: core: Set Component _run(...) threads to daemons so they die at system exit.
+ * In [478]: core: Termiante run(...) loop on SystemExit as well.
+ * In [479]: debugger: CHeck if self.logger is not None (which is correct)
+ * In [480]: bridge: If event can't be pickled, don't attempt to send it
+ * In [481]: core: Use shorter variable names (k, v) for iterating through the dct (HandlersType meteclass).
+ * In [482]: core: Manager attribute changes; Added _components. Renamed channels to _channels.
+ * In [483]: core: Removed __getitem__ (useless). Use self.channels
+ * In [484]: core: Renamed _getHandlers(...) to handlers(...)
+ * In [485]: core: Added properties for components and channels.
+ * In [486]: core: Fixed use of private _channels attribute.
+ * In [487]: core: Fixed call to _getHandlers - was renamed to handlers(...)
+ * In [488]: core: Reorganized run and _run methods. Implemented _calls method which returns a generator of all component instances' __tick__ methods in the current component that is being run.
+ * In [489]: core: Simplified getting list of handlers to register
+ * In [490]: core: When registering a component with a manager, add the component to the manager's list of component it -has- registered.
+ * In [491]: core: Removed component from components list upon unregistration
+ * In [492]: core: (NEW) If a Component A subclasses B, and both define an identically bound event handler (by the same attribute name), when B is created, the event handlers from A that are also found in B (of the same binding/attribute) are rebound to B with the prefix of 'A_'... This means ... Event Handlers are automatically inherited (to a depth of 1).
+ * In [493]: tests.test_core: Fixed tests as Manager.__getitem__ has been deprecated in favor of using .channels
+ * In [494]: lib.pollers: Added __tick__ method (was tick)
+ * In [495]: lib.pollers: Added __tick__ method (was tick)
+ * In [496]: core: Check if component has __tick__ attribute before yielding it (some may not have)
+ * In [497]: core: In Runnable Components and their 'run' loops, collect and call the 'tick' (__tick__) functions of not just components bound to the current component (self.foo) but also ones registered to the current component/manager.
+ * In [498]: timers: Added tick (__tick__) functions for Timers and Timer.
+ * In [499]: tools.bench: Added -q/--quiet and -o/--output options to bench tool.
+ * In [500]: core: Added _hidden attribute to Manager.
+ * In [501]: core: Moved bulk of send(...) to _send. If we have hidden components, iterate through and call ._send on each for this event.
+ * In [502]: core: Build a list of hidden components for the component being registered and pass this to manager._hidden updatnig the set.
+ * In [503]: core: object has no __init__, no need to call super(Manager, self).__init__(...) here.
+ * In [504]: core: Implemented a workaround for Python bug: http://bugs.python.org/issue5322
+ * In [505]: tools: Added graph function to return a string representing the structure of registered components
+ * In [506]: core: Moved calls to registered/unregistered to BaseComponent (where they should have been). Added _updateHidden function to update the set of hidden components.
+ * In [507]: core: Use values(...) to get the bound values of a component instead of itervalues - as it may change while we're iterating
+ * In [508]: lib.ann: Refactored. Removd use of @listener. Node is now a plain old Component (not a Thread), use Runnable Components' .start() instead. Merged Neuron Type Classes into Neuron itself as methods (_compute is set dynamically).
+ * In [509]: core: Deprecated InvalidHandler exception. It's the caller's responsibility to ensure they are -actually- adding Event Handlers defined by @listener to a Manager/Component.
+ * In [510]: core: Moved _send back into send. We're not calling _send on _hidden components anymore ... Instead we're registering hidden components (once only).
+ * In [511]: core: New Manager attribute _ticks. Used in _run(...) and run(...) - Copied in case it changes during the run cycles. (Runnable Components0.
+ * In [512]: core: Renamed Component's _updateHidden to _registerHidden. We're not registering hidden components. Implemented _getTicks to collect and update the manager's _ticks set (This collects tick functions from the component being registered, any components bound to it and any hidden components).
+ * In [513]: tools.bench: Start the Bridge if in bridge mdoe
+ * In [514]: core: Also collect tick functions from any hidden components
+ * In [515]: tests.test_core: Testing for InvalidHandler exception is deprecated.
+ * In [516]: tests.test_core: Use a few auto-generated event handlers for good measure.
+ * In [517]: lib.sockets: Fixed Client/TCPClient so that we don't poll the socket for write unless we -actually- have data to write (reduces cpu usage as select returns too quickly otherwise)
+ * In [518]: lib.sockets: Fixed removal of Client _sock on shutdown
+ * In [519]: lib.web.core: Added filter attribute to wrapper (automagically exposed methods of a Controller). This was a recent change in circuits.core' @listener decorator @ 906403be1f6d
+ * In [520]: tests.test_sockets: Refactored these tests to not use a Manager or seprate channels. Created generic Server/Client components that accept any of the socket components as their first argument
+ * In [521]: lib.sockets: Delete inherited event handler onSEND from base Server component (UDPServer needs one that is entirely different)
+ * In [522]: docs/graphs/circuits.pdf: Updated
+ * In [523]: docs/graphs/lib.pdf: Updated
+ * In [524]: docs/graphs/tests.pdf: Updated
+ * In [525]: docs/graphs: New graph web.pdf (graph of circuits.web)
+ * In [526]: examples/ircbot.py: Just use manager.run() now
+ * In [527]: core: Rewrote _updateTicks as _getTIcks to fix a memory leak with references to old/unused tick functions being left in the manager.
+ * In [528]: lib.irc; Added Pong (PONG) event support.
+ * In [529]: core: Added an optional sleep argument to start(...) and run(...). If given (a float), will sleep after each cycle. Useful in situations where you have very few pollers (I/O calls).
+ * In [530]: core: Return self._components, not a copy of it.
+ * In [531]: lib.drivers.pygame_driver: Added tick function
+ * In [532]: tools: Store the depth (d) on the stack and restore when backtracking
+ * In [533]: core: raise KeyboardInterrupt or SystemExit -always-.
+ * In [534]: timers: Deprecated Timers. This is not needed anymore as -any- Component/Manager can manage a set of Timer instances
+ * In [535]: circuits: Timers is deprecated
+ * In [536]: tests.test_timers: Timers is deprecated. Start the Manager in each test case.
+ * In [537]: core: Removed source, ignore from Event object (used by the Bridge). The Bridge can set and test for these itself\!
+ * In [538]: bridge: When testing to see if we need to ignore an event, check if the event has been set with the 'ignore' attribute
+ * In [539]: tests.test_core: _ignore attribute of Event object deprecated.
+ * In [540]: core: Removed old useless docstring.
+ * In [541]: core: Documented (Optional) but convenient operator functions.
+ * In [542]: core: Improved __repr__ of Manager and BaseComponent to include the no. of channels it has as well as the running state. Added running state property.
+ * In [543]: core: Delete channels that are empty when removing event handlers.
+ * In [544]: tests.test_core: Fixed repr tests
+ * In [545]: core: Added multiprocessing support to Runnable Components. Call start with process=True (default: False). NB: This -will- start the Manager/Component and all it's associated Components in the new process - detaching itself from the parent process.
+ * In [546]: core: Fixed (Optional) __iadd__ and __add__ to register y with self rather than self.manager.
+ * In [547]: debugger: Added custom file support. Can change the file (defaults to sys.stderr) that we log to.
+ * In [548]: lib.sockets: IF we get an EAGAIN error while trying to accept and create a new socket, ignore it and continue (we'll try again later).
+ * In [549]: core: Use self._running to check the running state during the run loop. (publicly you should use the .running property - this is internal only).
+ * In [550]: core: Remove the hidden (registered) components from the manager's list of components - The manager only needs thei registration, and they only need listed in the _hidden set. This fixes the graphing.
+ * In [551]: core: Added (as an experiment) __call__ to the BaseComponent. This creates a new Event object out of the args and kwargs passed to the call, sends the event and returns the result.
+ * In [552]: workers: Use _running to set running state of Thread worker. Set Thread instance as _thread.
+ * In [553]: workers: Deprecated isAlive function in favour of alive property.
+ * In [554]: tests.test_workers: Fixed usage of isAlive() -> alive
+ * In [555]: examples/filewatch.py: New example to watch the contents of a file. Basically a tail clone
+ * In [556]: workers: Set HAS_MULTIPROCESSING constant appropriately as we try to import multiprocessing or processing (python-2.5). Only build the Process component if we have any kind of multiprocessing support
+ * In [557]: core: Start in process mode if we have multiprocessing support, otherwise ignore process=True and start in thread mode
+ * In [558]: tests.test_timers: Wait longer for this test - timing on comptuers sucks
+ * In [559]: circuits: Don't import Proess from workers if it doesn't exist
+ * In [560]: docs: Updaetd overview. Added HelloWorld example. Updated links to the core library
+ * In [561]: docs/DownloadInstall: Fixed spelling errors
+ * In [562]: docs/License: Updated copyright year
+ * In [563]: docs/License: Removed BOM marker
+ * In [564]: docs/GeneralPerformance: Renamed to docs/Performance
+ * In [565]: docs/QuickStart: Removed
+ * In [566]: docs: Removed link to QuickStart, added DevelopersGuide and renamed TutorialHelloWorld to Tutorial
+ * In [567]: docs/TutorialHelloWorld: Renamed to docs/Tutorial
+ * In [568]: docs/Tutorial: Fixed Status block
+ * In [569]: lib.irc; Added User event object.
+ * In [570]: lib.irc: Renamed all IRC Command and their Event Handlers (removed use of @listener). Updated any calls to IRC Commands.
+ * In [571]: lib.irc; Removed use of @listener for (Default) Event Handlers.
+ * In [572]: lib.sockets: Added Connect event object.
+ * In [573]: lib.sockets: Deprecated isConnected() call in favor of a property. Use .connected property isntead.
+ * In [574]: lib.sockets: Removed "open" function and moved into TCPClient's constructor (__init__). TCPClient now takes a host, port and optional ssl and bind keyword arguments. Added "connect" event handler for initiating new connections (defaults to the host, port settings provided by the TCPClient constructor).
+ * In [575]: examples/ircbot.py: Simplified and fixed up
+ * In [576]: examples/telnet.py: Fixed and simplieifed
+ * In [577]: core: Improved send so that the default target is now either the target given (if it doesn't evaluate to False), or it's the channel of the Component/Manager managing events. (This simplifies a lot of code making it almost unnecessary to specify targets)
+ * In [578]: examples/ircbot.py: Don't need to specifty target - defaults nicely
+ * In [579]: examples/ircbot.py: Don't need to specifty target - defaults nicely
+ * In [580]: lib.io: Retabbed
+ * In [581]: core: Renamed *args to *channels in listener decorator to be more clear.
+ * In [582]: core: Fixed setting of target. Set target to given target (if not None or False), set to self.channel (if available), defaulting back to None.
+ * In [583]: lib.io: Added tick function
+ * In [584]: lib.io: Simplified constuctor for Stdin component.
+ * In [585]: tests.test_sockets: Client.open is deprcated, use connect instead (which is also an event handler)
+ * In [586]: tests.test_bridge: Retabbed
+ * In [587]: tools: Remove StringIO import. Use a simple list to build up the output and return .join(s)
+ * In [588]: core: Fixed the order that events come off the queue. (I can't believe the whole time this was LILO rather than FIFO :/)
+ * In [589]: drivers: Added a load function to load all available drivers into the drivers namespace as well as their Component
+ * In [590]: drivers.inotify_driver: New INotifyDriver using the pyinotify library added
+ * In [591]: drivers.pygame_driver: Import pygame into the global namespace. Remove 'Event' from event object names.
+ * In [592]: drivers.pygame_driver: Remvoed __new__ from PyGameDriver as this is not needed.
+ * In [593]: bridge: Added tick function
+ * In [594]: tests.test_bridge: Use wait() function (from tests.test_sockets). Start and stop each manager
+ * In [595]: examples/dirwatch.py: New example using the inotify_driver (INotifyDriver) to watch a directory for changes
+ * In [596]: lib.drivers.pygame_driver: Forgot to import pygame
+ * In [597]: lib.drivers.pygame_driver: Initialize the pygame event system.
+ * In [598]: examples/pygameex.py: Simplified
+ * In [599]: core: Simplified _getTicks
+ * In [600]: core: Added Started "started", Stopped "stopped", Registered "registered" and Unregistered "unregistered" events.
+ * In [601]: core: Check our parent manager. If it's not our manager add ourselves as a hidden component to the parent manager.
+ * In [602]: tools: Alias s.append as write and use this to write the strings.
+ * In [603]: tools: Added an inspect(...) function which takes as a single argument a component x to inspect and print detailed information about.
+ * In [604]: core: Added hidden and ticks properties to the Manager.
+ * In [605]: core: Use the ticks property during the run cycle of runnable Components.
+ * In [606]: core: Use the hidden property when gathering tick functions in _getTIcks of the Component.
+ * In [607]: core: @listener is deprecated in favor of @handler (more readable and easier to type) ... -and- they are "Event Handlers".
+ * In [608]: core: Updated doc string for @handler
+ * In [609]: core: Updated doc string examples for @handler
+ * In [610]: core: Event Handlers (created with @handler) now have an attribute 'handler' set to True.
+ * In [611]: core: Fixed doc string for @handler
+ * In [612]: core: When sorting Event Handlers, use {{{lambda x: not x.filter}}} as the sorting key - this puts Filters first.
+ * In [613]: core: Updated doc string of Manager._remove
+ * In [614]: core: Fixed Manager._remove so that if no channel is given the handler is removed from -all- channels.
+ * In [615]: core: Fixed doc string of Manager.flush
+ * In [616]: core: Fixed doc string of Manager.send
+ * In [617]: core: Fixed doc string of BaseComponent/Component (they were in the wrong place).
+ * In [618]: circuits: Import new @handler decorator into the circuits namespace but leave @listener until 1.2 when it gets deprecated.
+ * In [619]: core: Fixed @handler (fubbered up the commit?)
+ * In [620]: core: Updated @expose to match @handler in circuits.core
+ * In [621]: tests.test_core: Fixed repr tests as there are now "registered" and "unregistered" events that will be in the queue.
+ * In [622]: core: Added a new test to test the filter order of Event Handlers.
+ * In [623]: tools: New tool reprhandler(x) which returns a nicely formatted string representing the Event Handler given.
+ * In [624]: tools: Use new reprhandler(...) to pretty print the Event Handlers found by the inspect tool
+ * In [625]: bridge: Fixed registered event handler
+ * In [626]: lib.web.servers: Fixed registration event handlers.
+ * In [627]: lib.web.wsgi: Fixed registration event handlers.
+ * In [628]: examples/circ.py: Fixed registration event handler.
+ * In [629]: lib.irc: Added Pass event object.
+ * In [630]: core: If target is None, try to get the channel of the current component this event was pushed from, otherwise default back to NOne.
+ * In [631]: core: When sending events, if target is None, try to get the channel of the current component, otherwise default back to None.
+ * In [632]: core: When setting the actual channel we're sending to, if target is not None and target is an instance of Component, set the target to the Component's channel, otherwise default back to None. When finally setting the channel, ensure that target is of the str type.
+ * In [633]: core: Explicitly set the target channel of "registered" and "unregsitered" events.
+ * In [634]: tests.test_core: Fixed repr test as an Unregistered event gets pushed when a component is unregistered from a manager
+ * In [635]: tests.test_timer: Wait longer before doing teh assertion (timing sucks) :)
+ * In [636]: lib.web.servers: Removed registered event handlers - don't need them
+ * In [637]: docs/ChangeLog: Completed up to r411
+ * In [638]: core: Fixed a bug in setting the correct channel for a handler if handler.target is not None.
+ * In [639]: examples/telnet.py: Changed to use new @handler decorator.
+ * In [640]: examples/telnet.py: Just register the TCPClient instnace.
+ * In [641]: examples/telnet.py: Import Write event from lib.sockets
+ * In [642]: core: Ignore any other exception raised if they weren't caught already
+ * In [643]: examples/udpserver: Fixed and simplified
+ * In [644]: examples/udpserver: Fixed and simplified
+ * In [645]: lib.sockets: No need to delete the Server_onSEND as it doesn't exist anymore :)
+ * In [646]: examples/filewatch.py: Fixed consturctor
+ * In [647]: examples/echoserver.py: Fixed and simplified
+ * In [648]: examples/telnet.py: Set unique channel to make read events unique
+ * In [649]: core: Try to set the target before doing anything.
+ * In [650]: core: Try to set the target before doing anything.
+ * In [651]: examples/eventserver.py: Fixed and simplified
+ * In [652]: examples/eventclient.py: Fixed and simplified
+ * In [653]: examples/ircbot.py: Simplified consturctor
+ * In [654]: examples/lniktest.py: Removed this bad example
+ * In [655]: examples/loops.py: Removed this bad example
+ * In [656]: examples/simpleweb.wsgi: Simplified
+ * In [657]: examples/todo: Fixed and simplified
+ * In [658]: examples/timers.py: Fixed and simplified
+ * In [659]: examples/workertest.py: Removed bad example
+ * In [660]: examples/testwsgi.py: Removed bad example
+ * In [661]: examples: Removed most @listener. Changed filters to use @handler - This example -is- still broken though :/
+ * In [662]: core: Import warnings instead of warn from warnings. Use warnings.warn
+ * In [663]: lib.log: Removed unused listener import
+ * In [664]: lib.irc; Removed unused listener import
+ * In [665]: lib.irc; Corrected doc string of IRC component.
+ * In [666]: lib.irc; Removed use of @listener in doc string example.
+ * In [667]: lib.drivers: Imported warn as _warn from warnings (forgot to import this).
+ * In [668]: lib.drivers.inotifydriver: Removed unused IN_ISDIR import.
+ * In [669]: lib.drivers.pygame_driver: Added Unknown event object (forgot to add this).
+ * In [670]: lib.web.core: Fixed spelling error of self in serve_file def
+ * In [671]: lib.web.http: Removed unsued import of SERVER_PROTOCOL
+ * In [672]: lib.web.wsgi: Removed unused import of Response
+ * In [673]: lib.web.wsgi: Fixed error handler - code is actually status.
+ * In [674]: tools.sniffer: Removed unused import of sys
+ * In [675]: tools.sniffer: Removed unused import of listener
+ * In [676]: tools.bench: Added import of missing Debugger
+ * In [677]: tools.bench: Removed use of @listener, Use @handler for filters. Fixed one use of self.opts.verbose (was opts.verbose :/).
+ * In [678]: tools.bench: If in debug mode (opts.debug), add a Debugger instance to the manager.
+ * In [679]: examples/todo.py: Removed unused import of listener
+ * In [680]: examples/timers.py: Removed unused import of listener
+ * In [681]: examples/eventclient.py: Removed unused import of listener
+ * In [682]: lib.drivers.inotify_driver: Added _sleep function that the tick function uses to sleep. Basically the driver will sleep max(0, freq - timeout). Renamed self._manager to self._wm.
+ * In [683]: lib.sockets: Setting TCP_NODELAY is not necessary after accepting a new server's client socket as the server already has this set.
+ * In [684]: lib.sockets: Added some better error handlnig around pollling and accept server clietn sockets
+ * In [685]: core: Send ourself (self) the component being registered along with the manager (the Component/Manager being registered with) in the Registered event data.
+ * In [686]: core: Send ourself (self) the component being unregistered along with the manager (the Component/Manager being unregistered from) in the Unregistered event data.
+ * In [687]: bridge: 'registered' event handlers now get an additional argument, the component being registered with
+ * In [688]: lib.web.wsgi: 'registered' event handlers now get an additional argument, the component being registered with
+ * In [689]: examples/circ.py: 'registered' event handlers now get an additional argument, the component being registered with
+ * In [690]: lib.drivers.inotify_driver: Changed default channel to 'inotify' allowing this to be customized with channel keyword argument
+ * In [691]: lib.drivers.pygame_driver: Changed default channel to 'pygame' allowing this to be customized with channel keyword argument
+ * In [692]: lib.web.tools: return the response object (isntead of response.body) for serve_file
+ * In [693]: lib.web.tools: else return the original response if no redirection was done.
+ * In [694]: lib.web.tools: return the response (after flattening).
+ * In [695]: lib.web.http: If v (a possible resposne) is an instance of webob.Response, create a new Response event based on v and send it.
+ * In [696]: lib.drivers.inotify_driver: Pass dir in as an argument not a keyword argument - requested by hacker_kid
+ * In [697]: core: Set Runnable Components' threads as Daemons (they wil automatically terminate when the main thread terminates).
+ * In [698]: core: When a Runnable Component terminates: While we still have events in the queue, run tick functions and process events until we either have no more events in the queue or a 3s timeout has expired. (This gives components a chance to cleanup).
+ * In [699]: lib.io: Removed useless "# Filename:" header.
+ * In [700]: lib.io: Refactored into a reusable File component with three additional convenient components, StdIn, StdOut and StdErr. This also adds initialized instances stdin, stdout and stderr.
+ * In [701]: core: Added errors, log arguments to start(...) and run(...) - same as send(...).
+ * In [702]: docs/html: Added generated docs by epydoc
+ * In [703]: circuits: Updated main doc string
+ * In [705]: circuits: (docs) Fixed example
+ * In [707]: tools: Included counts in inspect tool
+ * In [708]: docs: Fixed all epydoc warnings and updated some documentation that was a bit oudated
+ * In [710]: Merged with 709:b6fc98eecc6f
+ * In [712]: circuits: Updated listed keywords picked up by setuptools.
+ * In [713]: core: (docs) Updated module's doc string.
+ * In [714]: core: (docs) Updated doc strings for Event
+ * In [715]: core: (docs) Updated doc strings for Error Event
+ * In [716]: core: (docs) Updated doc strings for Started, Stopped, Registered and Unregistered Events. NEW: Started and Stopped both take 1 argument (component).
+ * In [717]: core: (docs) Some minor spelling adjustments of terms used in doc strings.
+ * In [718]: core: (docs) Updated doc string of Manager.push
+ * In [719]: core: (docs) Updated doc string of Manager.flush
+ * In [720]: core: (docs) Updated doc string of Manager.send
+ * In [721]: core: Started and Stopped both now take a single argument. (component,) - The component being started/stopped.
+ * In [722]: core: (docs) Updated doc string for BaseComponent.unregister
+ * In [724]: core: (docs) Updated coc string example of handler
+ * In [725]: core: (docs) Added deprecated note of the use of type in kwargs for handler(...) - planend to be deprecated in favor of filter in 1.2
+ * In [726]: core: (docs) Added deprecated note for the use of listener(...) - planned to be deprecated in 1.2 in favor of handlers
+ * In [727]: core: (docs) Updated doc string for HandlersType (metaclass).
+ * In [728]: core: (docs) Updated doc string of Manager
+ * In [729]: core: (docs) Updated doc string for Manager.__len__
+ * In [730]: circuits: Added a sleep of 1s in the main doc string example so that at least it doesn't fail! :)
+ * In [731]: core: Renamed Manager.handlers(...) to _getHandlers (no need for a public interface to this).
+ * In [732]: core: (docs) Documented the return values and types of the (Optional) operator convenience functions.
+ * In [733]: core: (docs) Updated doc string of BaseComponent
+ * In [734]: core: (docs) Updated doc string of BaseComponent.__call__
+ * In [735]: core: (docs) Updated doc string of BaseComponent.register
+ * In [736]: core: (docs) Removed most of the doc string from Component (most of this is already documented).
+ * In [737]: core: (docs) Fixed indentation
+ * In [738]: core: (docs) Remoevd superfluous documentation on channel.
+ * In [740]: bridge: (docs) Updated module doc string.
+ * In [741]: bridge: Removed __all__ (not needed).
+ * In [742]: bridge: Switched to using handler (listener is deprecated).
+ * In [743]: core: (docs) Fixed example handler usage in handler doc string.
+ * In [746]: docs: Added missing epydoc generated files
+ * In [747]: tools: (docs) Updated doc string for graph(x)
+ * In [748]: tools: (docs) Updated doc string for inspect(x)
+ * In [749]: tools: (docs) Fixed typo
+ * In [751]: tools: (docs) Updated doc string for reprhandler
+ * In [753]: tools: Changed the way graph(x) displays the registered components to look more like a structured wiki list
+ * In [754]: docs/Performance: Updated status
+ * In [755]: docs/graphs: Updated
+ * In [756]: Makefile: Ignore circuits.version in generated docs
+ * In [758]: circuits: (blanket chnage) Switched to @handler everywhere. Removed import of circuits.core in favor of just circuits (with the exception of lib.web.core which needs access to the core.BaseComponent)
+ * In [759]: docs/graphs: Updated
+ * In [760]: docs/graphs: Updated
+ * In [761]: lib.web.webob: Set scheme to Reqeust.scheme (default: 'http') if an empty scheme is passed in. Possible as a lot of HTTP requests can be a plain old 'GET /'
+ * In [762]: lib.web.webob: Set self.remote for Request objects only if self.sock is not None (it's None when dealing with we are served from a WSGI server, eg: Apache + mdo_wsgo).
+ * In [763]: lib.web.webob: Set self.script_name to self.base for all Request objects. (I'm not sure if there are any other cases where script_name should be different - except in the case of being served by another WSGI server, eg: Apache + mod_wsgi - but that's handled by the Application Component).
+ * In [764]: lib.web.wsgi: Switched to using @handler (@listener is deprecated).
+ * In [765]: lib.web.wsgI: Added in extra imports we need.
+ * In [766]: lib.web.wsgi: Simplified Component registration in Application Component and removed reference to dispatcher.
+ * In [767]: lib.web.wsgI: Parse the SERVER_PROTOCOL, because we get it as 'HTTP/x.y' - we want (x, y). Pass in None for sock to Request object creation.
+ * In [768]: lib.web.wsgi: Pass in environ["wsgi.url_scheme"] to Request as the scheme.
+ * In [769]: lib.web.wsgI: Pass in the parsed protocol.
+ * In [770]: lib.web.wsgi: Build Host object for Request.remote from environ["REMOTE_ADDR"] and environ["REMOTE_PORT"].
+ * In [771]: lib.web.wsgi: Fixed creation of Response object (needs a reference to the request object). Added in a default response header 'X-Powered-By'.
+ * In [772]: lib.web.wsgi: Fixed Application request/response and error handling. (NOTE: This is almost identical code to that of HTTP's - Should refactor this into a single Component).
+ * In [773]: lib.web.wsgi: Pass in SERVER_NAME and SERVER_PORT to Middleware loaded apps.
+ * In [774]: lib.web.wsgi: Pass in wsgi.version, wsgi.errors, wsgi.multithread, wsgi.multiprocess, and wsgi.run_once values to the environ for the Middleware loaded app.
+ * In [775]: lib.web.wsgi: Fixed typo (weird way of spelling 'status').
+ * In [776]: lib.web.servers: Changed default channel for BaseServer (and Server) and child components to 'web'.
+ * In [777]: lib.web.servers: Simplified Server properties.
+ * In [778]: lib.web: Import wsgi as a module. Import tools too. Removed import of Application, Middleware, Filter from wsgi.
+ * In [779]: lib.web.wsgi: Renamed Middleware to Gateway (will deprecated Middlware in 1.2)
+ * In [780]: lib.web: Added deprecation note about the direct import of Application, Middleware and Filter into the circuits.web namespace. Post 1.2 this will be deprecated in favour of simply importnig wsgi.
+ * In [781]: lib.web.wsgi: Replaced Middleware alias with an equivilant function to display an appropiate warning about the deprecation of Middleware post 1.2
+ * In [782]: lib.web.wsgI: Fixed type, it's not Gateway :)
+ * In [784]: lib.web: Removed Filter. (I'm not sure this Component works, is used or useful!).
+ * In [785]: lib.web.wsgi: Removed Filter (I'm not sure this works, is used or is useful!)
+ * In [786]: lib.web.dispatchers: Modified the DefaultDispatcher's behavior such that if the channel that was match for a particular URI happens to be a 'request' channel (plain old web request handlers), then create a basic Request Event Object based only on the request and response data (nothing else). Otherwise proceed with the normal behavior of creating a Request Event Object with proper *args, **kwargs.
+ * In [787]: lib.web.wsgi: Removed *args, **kwargs from Application constructor (if we need customization in future, we'll add it).
+ * In [788]: lib.web.wsgi: As Gateway Components are used in the context of either a BaseServer or Server, it must also listen on teh same default 'web' channel. Correct the channel appropriately if a custom path is given for the WSGI Application to be mounted on.
+ * In [789]: lib.web.wsgi: Renamed request, response instance variables to _request and _response respectively (no need for a public interface to these). Renamed event handlers as simply request/response (much more sense).
+ * In [790]: Backed out changeset 1123b4e86c96 - I souldn't code on little sleep :)
+ * In [791]: Merged with 5f898166ae4f
+ * In [792]: lib.web.dispatchers: The channel will in fact end with ":request" not be equal to "request" (targets).
+ * In [794]: lib.web.utils: Retabbed. Rewrite parseQueryString to use urlparse.parse_qs and use a list comprehension instead of a for loop
+ * In [795]: lib.web.dispatchers: Reuse the Request Event rather than recreate a new one.
+ * In [796]: lib.web.sessions: Switched to using @handler (@listener is deprecated)
+ * In [797]: lib.config: Switched to using @handler (@listener is deprecated)
+ * In [798]: lib.env: Switched to using @handler (@listener is deprecated)
+ * In [799]: lib.smtp: Switched to using @handler (@listener is deprecated)
+ * In [800]: lib.sockets: Switched to using @handler (@listener is deprecated)
+ * In [802]: debugger: Use type=True (filter=... is deprecated)
+ * In [803]: tests.test_core: Use type=True (filter=... is deprecated)
+ * In [804]: lib.sockets: Fixed capturing EWOUDLBLOCK and EAGAIN errors
+ * In [805]: lib.web.dispatchers: Greatly simplified the DefaultDispatcher's Request Handler to just return the result of sending the dispatched request to Controllers (if any were found). It's ok to return None here or return nothing at all (None) to give other Dispatchers a chance to do something with the request.
+ * In [806]: lib.web.dispatchers: Come to think of it, Dispatchers' Request Handlers should probably be filters.
+ * In [807]: lib.web.dispatchers: Removed unused imports.
+ * In [808]: lib.web.http: Fixed buffering of socket, request and response objects in cases where the entire body hasn't been received yet.
+ * In [809]: lib.web.http: Don't try/except th sending of the request, let the outter try do this, just check if v is not NOne, if it is return a 404.
+ * In [811]: lib.irc: Fixed source so that we send the entire source as split by sourceSplit (nick, ident, host)
+ * In [812]: examples/irc.py: Fixed message handler to pass in the correct target (source[0])
+ * In [813]: ez_setpu.py: Removed - download the latest version from http://peak.telecommunity.com/dist/ez_setup.py isntead
+ * In [814]: lib.web.http: Removed server instance variable from HTTP (not used).
+ * In [815]: lib.web.servers: Added 'version' property to BaseServer.
+ * In [816]: lib.web.servers: Added ssl, scheme and host properties and rewrite the base property to use these.
+ * In [817]: lib.web.webob: Don't set the script_name of the Request object to the base of the server - this is wrong :)
+ * In [818]: lib.web.webob: Added 'X-Powered-By' default header to Response objects and changed 'Server' default header to use request.server.version property.
+ * In [819]: lib.web.wsgi: Fixed up a few issues with the WSGI environ being created and added a few missing pieces.
+ * In [820]: lib.web.wsgi: Removed default 'X-Powered-By' response header here as it's taken care of by the Response object(s).
+ * In [821]: lib.web.wsgi: Fixed start_response functions (added keyword argument exc_info).
+ * In [822]: lib.web.wsgi: Make 'environ' a private function '_createEnviron' (no need for public interface).
+ * In [823]: lib.web.dispatchers: No need to have a special case for channels ending n ":request".
+ * In [824]: lib.web.dispatchers: Added 'default' as the last channel to look for.
+ * In [825]: lib.web.dispatchers: Raise errors when sending the Request Event so the HTTP Component can pick it up.
+ * In [826]: lib.web.servers: Set a default Request.host that it Server.host
+ * In [827]: lib.web.webob: Default host for Request is ""
+ * In [828]: lib.web.webob: Set Response.cookie to Request.cookie and reuse the object rather than creating a new one to woryr about.
+ * In [829]: lib.web.wsgi: Set self.path in Gateway
+ * In [830]: lib.web.wsgi: Recalculate Request.script_name and Request.path based on the fact that the WSGI mounted via this Gateway may be mounted and rooted at a specific path. eg: Gateway(app, "/app")
+ * In [832]: core: Make it possible to 'override' inherited event handlers by specifying override=True in the @handler decorator  when defining custom event handlers.
+ * In [833]: lib.pollers: Completed implementation of Select, Poll and EPoll pollers
+ * In [834]: lib.sockets: Refactored to use the new Poller Components from lib.pollers
+ * In [835]: examples/echoserver.py: Just write the response backk to the client
+ * In [836]: examples/ircbot.py: Fixed this example due to lib.sockets refactor and changes in TCPClient (minor).
+ * In [837]: examples/telnet.py: Fixed import of stdin (Stdin was deprecated).
+ * In [838]: examples/telnet.py: Fixed TCPClient instantiation due to recent changes in lib.sockets.TCPClient (minor) due to new lib.pollers
+ * In [839]: examples/telnet.py: Added error handler to print errors, eg: "Connection Refused" :)
+ * In [840]: examples/udpclient.py: Fixed import of stdin from lib.io (Stdin was deprecated)
+ * In [841]: tests.test_sockets: Fixed TCPServer and TCPCLient test and half fixed UDPServer/UDPClient test (1 failure still :/)
+ * In [842]: lib.web.cgifs: readline() doesn't accept any argumetns\!
+ * In [843]: errors: Don't set a default 'Close' header for Response object - this is set by the server (and it must not be set for WSGI)
+ * In [844]: lib.web.webob: Fixed settnig of server_version in Response object
+ * In [846]: lib.web.servers: Make it possible to customize other things with the BaseServer and subclasses thereof and it's underlying Componetns (such as the poller used)
+ * In [847]: lib.web.utils: Fix for python-2.5 compatibility (2.5's urlparse module doesn't have parse_qs, cgi does though).
+ * In [848]: lib.pollers: Fixed epoll for python-2.5 compatibility. (Use the select26 library to get epoll support for 2.5 - otherwise the EPoll component is deleted).
+ * In [849]: lib.sockets: Removed unsed import of errno
+ * In [850]: lib.sockets: Removed unused import of select. Removed import of Poll and EPoll from lib.pollers (leave the default poller for Client/Server components to be Select).
+ * In [851]: lib.web.servers: (python-2.5 compatibility) Fixed docroot property to work with python-2.5 and added some documentation about it.
+ * In [853]: lib.pollers: It's possible that for Poll and EPoll pollers that an incoming event might occur whereby a Client/Server interested in it has already deregistered their interest altogether - So close it and return.
+ * In [854]: lib.web: Import the actual Components we want from errors (don't use from ... import *).
+ * In [855]: lib.web.dispatchers: Added 'index.xhtml' and 'index.htm" as additional static file defaults to look for in a DefaultDispatcher's docroot.
+ * In [856]: lib.web.http: Put an assertion guard around the type of v being returend. This should -never- occur!
+ * In [857]: lib.web.wsgi: Added missing import of NotFound from errors.
+ * In [858]: lib.web.wsgi: IT's not a WSGI Application'(deployed on another web server), s responsibility to "Close a Connection" by setting the "Close" header.
+ * In [859]: lib.web.wsgi: Fixed request and error handlers in wsgi.Application
+ * In [860]: lib.web.wsgi: Fixed path (and Component channel) setting in wsgi.Gateway (thanks aa_).
+ * In [861]: lib.web.wsgi: Set "wsgi.errors" to a File component that goes to /dev/null (for now) - not sure how to handle errors that occur in WSGI apps mounted via our Gateway :/
+ * In [862]: lib.core: Ignore any exceptions that might occur during sleep (eg: KeyboardInterrupt).
+ * In [863]: lib.core: Fixed exceptions thrown during shutdown when using processes. Turns out trying to terminate a process within a process isn't a very good idea (self._task will be None! duh!) :)
+ * In [864]: lib.pollers: Recreate our poller object if we are part of something that's started in either Process (P) or Thread (T) mode for EPoll.
+ * In [865]: core: Added a 2nd argument to the Started Event 'mode'. This is the mode in which the Component was started in. It is one of 'P' for Process mode, 'T' for Thread mode or None for Main/Normal.
+ * In [866]: core: Pass in an additional argument to the run function when a Component is started. Set this argument (mode) to 'P' if started in Process mode, 'T' if started in Thread mode, otherwise it defaults to None. Send this as part of the Started Event just before we go into our Event Loop.
+ * In [867]: core: (NEW) Added regsitered signal handlers for SIGINT, SIGHUP and SIGTERM. Added a new Event, Signal; which gets sent on any of SIGINT, SIGHUP or SIGTERM signals. If no Event Handler handles or filters the Signal Event, then the system is terminated cleanly. Upon system termination, all child threads and processes are also termianted.
+ * In [868]: cire: Set the default join timeout to 3 (when stopping).
+ * In [869]: core: Gah I'm an idiot, threads don't have a .stop() :P
+ * In [870]: lib.pollers: Fixed Poll/EPoll
+ * In [871]: core: Only setup signals when started in non-thread mode (apparently only the main thread can have registered posix signal handlers).
+ * In [872]: lib.web.dispatchers: Fixed args given to the Request event from vpath (the left over path).
+ * In [873]: lib.web.httpauth: Added HTTP Authentication library (borrowed from Cherrypy - which they borrowed from someone else\!)
+ * In [874]: lib.web.errors: Don't clear the response in HTTPError (Bad for Unauthorized error).
+ * In [875]: lib.web.errors: Don't need HTTPError or subclasses thereof to evaluate to False.
+ * In [876]: lib.web.errors: Added Unauthorized error (sends a 401).
+ * In [877]: lib.web.tools: Added basic_auth and digest_auth tools.
+ * In [878]: core: (NEW) Added the capability for Event Handlers to be created with a priority. That is, Event Handlers are registered with a Manager/Component and are sorted by their priority, then by whether or not they are a filter.
+ * In [879]: core: Preserve the structure of a component tree.
+ * In [880]: core: Removed this component from it's manager's parent's set of hidden components if it exists.
+ * In [881]: lib.pollers: Changed default TIMEOUT to be 1ms (0.001s). Removed a bit of useless code in Poll/EPoll constructors that multiplied the timeout by 1000 (what the hell for ? - what were those twisted guys smoking ?).
+ * In [882]: lib.web.dispatchers: Changed the default channel of the DefaultDispatcher to "web".
+ * In [883]: lib.web.http: Changed the default channel of HTTP to be "http". Updated all Events destined for a Server to "server". Set all Request events to go to "web" (by default).
+ * In [884]: lib.web.http: Changed TypeError raised for when the type of v is unhandled to an assertion.
+ * In [885]: tools: Added kill() function to destroy the entire structure of a component and it's children recursively
+ * In [886]: lib.web.servers: Changed the way TCPServer and HTTP get registered to ouse BaseServer (circuits.web).
+ * In [887]: Automated merge with http://hg.softcircuit.com.au/projects/circuits/
+ * In [888]: lib.web.servers: Forgot to remove this
+ * In [889]: lib.web.core: Forgot to update the ExposeType meteclass when 'type' had been deprecated from @handler. The checks were failing :/
+ * In [890]: docs/Contributing: Updated
+ * In [892]: core: Fixed sending of Registered and Unregistered evetns
+ * In [893]: Backed out changeset 2f6c72536609 (Half asleep here :/)
+ * In [894]: tools: (NEW) Added new tools root(x) to find the root of a component - ie: it's actual manager
+ * In [895]: lib.web.http: Fixed streaming
+ * In [896]: web.constants: Reduced default buffer size to 4KB
+ * In [897]: core: Put try/except/pass around exception handlers in Manager.run in case of unclean shutdowns
+ * In [898]: drivers: Greatly simplified this package and it's drivers. Removed auto loading crap :) Just load explicity
+ * In [899]: net.sockets: Rewrite tools
+ * In [900]: tools: Fixed walk and graph functions.
+ * In [901]: Imported circuits-dev-973:592956c5f436.patch
+ * In [902]: tools: Removed detail about hidden componnets in inspect tool as this is removed now
+ * In [903]: core: Fixed Manager._unregisterHandlers (Manager._remove not Manager.remove)
+ * In [904]: core: Better register/unregister functionality - ensures we register not only with our manager but the root manager but maintain the structure
+ * In [905]: Imported circuits-dev-980:04a88088235d.patch
+ * In [906]: core: _handlers may change as we're iterating - iteratore over a copy
+ * In [907]: tools: Removed initial component form being printed in detailed inspect report
+ * In [908]: core: Fixed sending of Unregistered event
+ * In [909]: core: Fixed Manager.unregister in the case where a Component's manager is it fact itself
+ * In [910]: tests.test_sockets: Fixed UDP test by fixing the channel
+ * In [911]: core: Use values() as the list can changed if we iter over it instead.
+ * In [912]: lib.web.tools: Fixed doc string of auth tools
+ * In [913]: lib.web: Renamed httpauth modules to _httpauth (excluding this form docs)
+
+
+
+
+
+
 == 1.0a2 ==
  Released:: 20081120 (''20th November 2008'')
  Revision:: [200]