[mod_python] Patch - **args with Publisher

Gregory (Grisha) Trubetskoy grisha at modpython.org
Thu Jan 10 18:01:22 EST 2002


Thanks - someone already submitted a patch for this and version 3 will
behave this way.

On Fri, 11 Jan 2002, Jonathan Gardner wrote:

> I expected to be able to get all the script args with a piece of code like
> this:
>
> def scriptname(req, **args):
> 	...
>
> but instead I got none of them at all.
>
> Here is the patch that does what I expect. If I need to submit this
> differently, let me know.
>
> *** publisher.py	Mon Jul  9 21:54:40 2001
> --- /usr/local/lib/python2.0/site-packages/mod_python/publisher.py	Fri Jan 11
> 07:08:51 2002
> ***************
> *** 150,155 ****
> --- 150,157 ----
>           # and for that we need to get a list of them. There
>           # are a few options for callable objects here:
>
> +         # Whether or not there is a **args argument in the function list.
> +         has_keyarg = 0
>           if str(type(object)) == "<type 'instance'>":
>               # instances are callable when they have __call__()
>               object = object.__call__
> ***************
> *** 158,172 ****
>               # function
>               fc = object.func_code
>               expected = fc.co_varnames[0:fc.co_argcount]
>           elif hasattr(object, 'im_func'):
>               # method
>               fc = object.im_func.func_code
>               expected = fc.co_varnames[1:fc.co_argcount]
>
>           # remove unexpected args
> !         for name in args.keys():
> !             if name not in expected:
> !                 del args[name]
>
>           result = apply(object, (), args)
>
> --- 160,177 ----
>               # function
>               fc = object.func_code
>               expected = fc.co_varnames[0:fc.co_argcount]
> +             has_keyarg = fc.co_flags & 0x08
>           elif hasattr(object, 'im_func'):
>               # method
>               fc = object.im_func.func_code
>               expected = fc.co_varnames[1:fc.co_argcount]
> +             has_keyarg = fc.co_flags & 0x08
>
>           # remove unexpected args
> !         if not has_keyarg:
> !             for name in args.keys():
> !                 if name not in expected:
> !                     del args[name]
>
>           result = apply(object, (), args)
> _______________________________________________
> Mod_python mailing list
> Mod_python at modpython.org
> http://www.modpython.org/mailman/listinfo/mod_python
>




More information about the Mod_python mailing list