durusmail: quixote-users: Illegal Python Names cookbook recipe
Illegal Python Names cookbook recipe
2004-04-05
2004-04-05
2004-04-05
Bug fixes (was: Illegal Python Names cookbook recipe)
2004-04-07
2004-04-07
Bug fixes (was: Illegal Python Names cookbookrecipe)
2004-04-07
Patches for .7a3
2004-04-07
Re: Patches for .7a3
2004-04-08
StaticFile is broken (Quixote-0.7a3, scgi-1.2a2, Apache/1.3.27, FreeBSD 4.7)
2004-04-08
Re: Patches for .7a3
2004-04-21
2004-04-21
2004-04-06
2004-04-06
2004-04-06
2004-04-06
2004-04-06
2004-04-06
2004-04-06
2004-04-07
2004-04-07
2004-04-07
2004-04-07
2004-04-07
2004-04-07
2004-04-07
Re: Illegal Python Names cookbook recipe
2004-04-07
2004-04-07
2004-04-07
2004-04-07
2004-04-07
2004-04-07
2004-04-07
2004-04-07
2004-04-07
2004-04-07
2004-04-07
2004-04-07
2004-04-08
2004-04-07
2004-04-07
2004-04-07
2004-04-06
2004-04-05
2004-04-05
2004-04-05
Re: R: [Quixote-users] Illegal Python Names cookbook recipe
2004-04-06
Illegal Python Names cookbook recipe
Jason E. Sibre
2004-04-05
Great...  Now my ugly hack is immortalized! ;)

Seriously, it may be worth pointing out that all three techniques have the
same end result of adding the 'illegal-name' to the module's namespace.
Neil,  I had no ideal you could mutate globals() like that!  I thought the
dict so returned was to be considered read-only, in the "you can change it,
but your efforts will be discarded" sense...  Clever!  I guess I got that
idea from the vars() documentation...

I forgot all about _q_resolve(), as I never use it...  But being reminded of
it, I think that's your cleanest option, without considering the
modification of the _q_exports logic.

-----------

Another idea for modifying the _q_exports handling... Trying to have least
performance impact, least code changes to code that's already stable:

Add an Alias class (as a helper class) somewhere in Quixote (util?):

class Alias:
  def __init__(self, theAlias, resolvesTo):
    self.alias = resolvesTo
    self.resolvesTo = resolvesTo

  def __cmp__ (self, other):
    return cmp(self.alias, other)

Now, given: _q_exports = ['foo', 'bar', Alias('foo-bar', 'foo_bar')]
The existing publisher logic of:

if (component != "_q_index" and component not in container._q_exports):

will still work unchanged (although slightly slower when an Alias' __cmp__
function has to be called).  Meanwhile, inside the "else:" block of that
"if" (where Qx is about to give up, complaining that the object doesn't
exist in the namespace, but is in _q_exports), we do something like:

else:
    # Check to see if the _q_export entry was an alias pointing to
    # something else. (untested ... beware typos, etc)
    index = _q_exports.index(component)
    realComponent = getattr(_q_exports[index], 'resolvesTo', None)
    if realComponent:
        object = getattr(container, realComponent)
        setattr(container, component, object)
    else:
        # a non-existent attribute is in _q_exports,
        # and the container is not a module.  Give up.
        raise errors.TraversalError(
                private_msg=("%r in _q_exports list, "
                             "but not found in %r" % (component,
                                                      container)))else:
    #########

Or something like that...  Once resolved, it is permanently added to the
correct namespace so that future checks have similar performance to the
_q_resolve solution.

Actually, a more conprehensive analysis may reveal that the check should be
done sooner in the process, rather than at the last moment.

Jason











> -----Original Message-----
> From: quixote-users-bounces+jsibre=chironsys.com@mems-exchange.org
> [mailto:quixote-users-bounces+jsibre=chironsys.com@mems-exchange.org]On
> Behalf Of Kendall Clark
> Sent: Monday, April 05, 2004 3:12 PM
> To: quixote-users@mems-exchange.org
> Subject: [Quixote-users] Illegal Python Names cookbook recipe
>
>
> I wrote up a simple Cookbook recipe collecting the responses to my
> query earlier today about valid Python and URI component identifiers:
>
>       http://www.quixote.ca/qx/IllegalPythonNames
>
> I put in a bit of an argument near the end for changing the format of
> _q_exports from a list of strings to a list of strings and optional
> dictionaries (which I suspect can be implemented in a way that breaks
> no existing code). Some details in the recipe if you care about this
> issue.
>
> Thanks for the responses.
>
> Kendall Clark
>
>
> _______________________________________________
> Quixote-users mailing list
> Quixote-users@mems-exchange.org
> http://mail.mems-exchange.org/mailman/listinfo/quixote-users
>



reply