Re: [Zope] Core Session Tracking kudos & namespaces
The advantage of the last form (below), is that you can use acquisition, and don't need to know whether the variable came from the session or from elsewhere. If you *really* want it to come from the session only, you can always add the "only" tag to the dtml-with call. In conjunction with this, it might be nice to have a special call that sets the variable, if defined by acquisition, in the session. Something like <dtml-call "sessionmanager.getSessionData.set('a')"> would set "a" to the acquired value for "a", leave it undefined if not defined, and not change it if it was not acquirable elsewhere (the acquired value would take precedence over the session value). Even better would be if I could just say <dtml-call "SESSION.set('a')">. Bob --- Chris McDonough <chrism@digicool.com> wrote:
A potential rhythm, however, might look like:
<dtml-with sessionmanager> <dtml-with getSessionData> <dtml-call "set('a', 'b')"> </dtml-with> </dtml-with>
and
<dtml-with sessionmanager> <dtml-with getSessionData> <dtml-var a> </dtml-with> </dtml-with>
I sorta like it the original way now that I've written that down. :-) It's easier to explain, AFAICS.
__________________________________________________ Do You Yahoo!? Yahoo! Photos - Share your holiday photos online! http://photos.yahoo.com/
Bob, Responding to both of your messages in this one... Actually, in the current implementation, session data objects are not acquirers, so the syntax you're advocating won't do what you think it might. Currently, nothing would be acquired, and the <dtml-var a> call will fail inside of a "with sessiondatamanager" even if we did have a __getattr__ interface to session data objects. This could be changed. We could make data objects acquirers. I can see the rationale for something like this, where you want to "fall through" to a default acquired value. Session data object interaction with acquisition was something I didn't think about at all. I'm glad you've brought it up. Note that it's also possible to do something like: <dtml-let bar=amethodcall> <dtml-with sessiondatamanager> <dtml-with getSessionData> <dtml-var "get('foo', bar)"> </dtml-with> </dtml-with> </dtml-let> Which will return the rendering of bar (which is itself the result of 'amethodcall') if a value for 'foo' cannot be found. This is way more verbose than just acquiring 'amethodcall', but it's very understandable. Currently, I'm leaning towards leaving it explicit both in syntax (explicit set and get methods) and semantics (no acquisition), because we've gotten in a lot of trouble in the past when attempting to do likeminded magical things -- like making all common Zope objects acquisition-implicit. And although acquisition isn't that magical, it can sure blow up on you when you don't know what you're doing. Murphy's law says that this will happen to every newbie, and I'll be left holding the bag. ;-) As for some of your other points: The current interface is very verbose. I'm just not sure that's such a bad thing. :-) You can do something like: <dtml-call "sessiondatamgr.getSessionData().set('aname', 'avalue')"> ... if you don't want to do all the <dtml-with>s and -lets. God help me though, I am thinking of aliasing the __call__ method of a session data manager to getSessionData, so that this would work: <dtml-with sessiondatamgr> <dtml-call "set('aname', 'avalue')"> </dtml-with> or this: <dtml-call "sessiondatamgr().set('aname', 'avalue')"> This might be explainable. It reminds me however of a similar feature of the catalog that is very hard to explain (the aliasing of searchResults to __call__), and it makes me want to not do it. If I do do it, getSessionData will disappear from the interface, and there will only be one way to do it (via a session data manager's __call__). I'm not sure I understand your desire to do: <dtml-call "sessiondatamanager.set('a')"> I particularly don't understand what would end up getting rendered if (as per your syntax) you subsequently did: <dtml-var "sessiondatamanager.a"> I sympathize with the need to convert all your scripts over to use sessioning from hidden form-field encoding and the like... I'd really appreciate some input as to what kinds of problems you're trying to solve with sessioning, because this implementation was done sort of clean-room style and thus may lack real-world practicality. I haven't used it as a component in any development personally. Having some real examples of conversion work or initial implementation work to chew on might help me markedly improve the implementation. Some of my arguments may be an overreaction to past problems, and you may need to straighten me out with some examples of how making session data objects acquirers and making the interface less verbose could help more than it could hurt in a real-world app. Thanks much for all the input! - C ----- Original Message ----- From: "Bob Sidebotham" <bob_sidebotham@yahoo.com> To: "Chris McDonough" <chrism@digicool.com>; <zope@zope.org> Sent: Tuesday, January 02, 2001 11:55 PM Subject: Re: [Zope] Core Session Tracking kudos & namespaces
The advantage of the last form (below), is that you can use acquisition, and don't need to know whether the variable came from the session or from elsewhere. If you *really* want it to come from the session only, you can always add the "only" tag to the dtml-with call.
In conjunction with this, it might be nice to have a special call that sets the variable, if defined by acquisition, in the session. Something like <dtml-call "sessionmanager.getSessionData.set('a')"> would set "a" to the acquired value for "a", leave it undefined if not defined, and not change it if it was not acquirable elsewhere (the acquired value would take precedence over the session value).
Even better would be if I could just say <dtml-call "SESSION.set('a')">.
Bob
--- Chris McDonough <chrism@digicool.com> wrote:
A potential rhythm, however, might look like:
<dtml-with sessionmanager> <dtml-with getSessionData> <dtml-call "set('a', 'b')"> </dtml-with> </dtml-with>
and
<dtml-with sessionmanager> <dtml-with getSessionData> <dtml-var a> </dtml-with> </dtml-with>
I sorta like it the original way now that I've written that down. :-) It's easier to explain, AFAICS.
__________________________________________________ Do You Yahoo!? Yahoo! Photos - Share your holiday photos online! http://photos.yahoo.com/
participants (2)
-
Bob Sidebotham -
Chris McDonough