A.M. Kuchling wrote:
> On Fri, Jan 09, 2004 at 04:26:26PM -0500, Graham Fawcett wrote:
>
>>conference? And what would you like to work on? I recall some talk of a
>>refactored Publisher some time ago; are there other such projects on the
>>back-burners?
>
> There's the 1.0 roadmap I posted some time ago; I should dust it off and try
> to get working on it again. That might be a good sprint candidate. Can
> anyone think of other useful Quixote projects? Is there any form framework
> stuff that would need doing? Holding a BoF is worthwhile, too.
For dissucssion, I hunted down the 1.0 roadmap (Mar 13, 2003):
http://article.gmane.org/gmane.comp.web.quixote.user/1306
excerpted in full, below. The brief ensuing discussion concerned the
Publisher proposal, forms and PTL dependencies, and customizable URL
traversal.
Perhaps the Web Container Interface proposed on Web-SIG might have
frozen by March. If so, implementing the WCI might be a worthy (and
relatively easy) 1.0 feature.
-- G
Long ago, A.M. Kuchling wrote:
> For a while the only thing preventing us from stamping the magic 1.0
> version number on Quixote was a vague desire to refactor the
> quixote.publish.Publisher class. Yesterday David, Neil, and I sat
> down to actually discuss what to do.
>
> Publisher is a large bear of a class, around 275 lines of code. When
> you want to connect Quixote to a new infrastructure such as Medusa, or
> SCGI, or Twisted, you have to subclass Publisher to customize it.
> This used to be very messy, but I cleaned things up a bit writing
> medusa_http.py. The need to subclass still makes the required driver
> script for a Quixote application a bit more complicated than it should
> be.
>
> Publisher does a number of things, such as logging, creating request
> objects, and traversing the namespace based on the URL. The goal for
> the future version of Publisher is to let the user specify objects
> that will handle these tasks instead of having to subclass.
> Session management will also be done by an object.
>
> For example, the driver for Quixote-via-CGI might look something like:
>
> logger = LoggingObject()
> publisher = Publisher('application.ui',
> log = logger,
> request = CGIRequester(),
> # default session manager does nothing
> )
> publisher.run()
>
> (I just came up with the name 'Requester' for the class; it may be
> something different in the actual 1.0 code.)
>
> Publisher.run() will then do something like:
>
> def run (self):
> # Loop ends when there are no more requests
> for request in self.requester:
> self.do_request(request)
>
> (Again, details subject to change...)
>
> The application can be changed to work with SCGI by using
> SCGIRequester instead of CGIRequester. You can turn off logging by
> specifying a NullLogger instance that does nothing. You can supply
> your own session manager.
>
> Note that the traversal process is not on the list of customizable
> things. Therefore, one of my first jobs will be to remove that logic
> from the Publisher class. I doubt anyone is overriding these methods
> to customize the traversal process, so this change seems safe for 0.6.
>
> It's not yet clear how to do this and keep existing code running, but
> we'll certainly try. Do any of you have your own subclasses of
> Publisher? If so, I'd like to know about them and, if possible, get
> copies of them.
>
> Plan of action:
>
> For 0.6b4:
>
> * Factor traverse_url() and get_component() out of the Publisher
> class. (Mostly done at this writing; I need to check why
> _q_exception_handler doesn't seem to be working.)
>
> * Release 0.6b4 very soon -- today, tomorrow? This will then
> become 0.6final. (Really, this time. Hey, stop laughing!)
>
> For 1.0:
> * Factor out the logging and request-building interfaces from
> Publisher.
>
> * Factor out the session management interface from
> SessionPublisher. SessionPublisher will become a near-trivial
> subclass of Publisher; Publisher will default to using
> a null session manager while SessionPublisher will default
> to the current in-memory session storage.
>
> * Include NullLogger, NullSessionManager, and sensible default
> implementations. Include CGIRequester, SCGIRequester,
> FastCGIRequester.
>
> * Release 1.0, and then hopefully we can leave it alone.
>
> I'd like to see 1.0 done soon, perhaps in time for PyCon, but we'll
> see how it goes. Watch the -checkins list to follow the activity.
>
> Comments welcome.
>
> --amk (www.amk.ca)
> I never think twice about anything; takes too much time.
> -- Sanders, in "Kinda"