[Zope] Wrapping ZSQL method for XML-RPC access
peter sabaini
sabaini@inode.at
Fri, 02 Aug 2002 21:59:49 +0200
zsql methods expect keyword arguments, see eg. the python tutorial
http://python.org/doc/current/tut/tut.html, search for keyword arguments
for instance:
kw = {'emp_no' : 10095, 'emp_name' : 'john doe'}
zsql(**kw) # <-- equivalent to: zsql(emp_no=10095, emp_name="john doe")
cute, no? ;-)
cheers,
peter.
Erik Myllymaki wrote:
> Great - thanks for the tip:
>
> ------begin python script---------------
> items=[]
> zsql = getattr(context, sql_method)
> rs = zsql(emp_no=10095)
> names = rs.names()
> for item in rs:
> new_dict = {}
> k=0
> while k < len(item):
> new_dict[names[k]] = item[k]
> k=k+1
> items.append(new_dict)
>
> return items
> ----------end python script----------------
>
> Seems I have to explicitely name the parameters I am passing into the
> zsql_method though - any *magic* to get around this?
>
> My goal is a generic script I can wrap around any zsql method so I will need
> to pass the parameters in via a ist and parse...
>
> Thanks again.
>
> ----- Original Message -----
> From: "peter sabaini" <sabaini@inode.at>
> To: "Erik Myllymaki" <erik.myllymaki@starpointe.ca>
> Cc: <zope@zope.org>
> Sent: Friday, August 02, 2002 11:30 AM
> Subject: Re: [Zope] Wrapping ZSQL method for XML-RPC access
>
>
>
>>use the magic of python, specifically the getattr() builtin :-)
>>
>>ie. you'd use for example
>>
>>zsql = getattr(context, 'getSalesmen')
>># 'getSalesmen' could be any string you want
>># now call your zsql method in the usual way
>>rs = zsql(param='val')
>># do whatever youre going to do to your salesmen
>>
>>hth
>>peter.
>>
>>Erik Myllymaki wrote:
>>
>>>So, thanks to the archives, I see that ZSQL methods need to be wrapped
>>
> to
>
>>>get at them via XML-RPC. Modifying a snippet from a previous post, I got
>>
> the
>
>>>following Python Script:
>>>
>>>-------Begin script-------------------
>>>items=[]
>>>names = context.getSalesmen().names()
>>>for item in getSaleman():
>>> new_dict = {}
>>> k=0
>>> while k < len(item):
>>> new_dict[names[k]] = item[k]
>>> k=k+1
>>> items.append(new_dict)
>>>
>>>return items
>>>--------End script-----------------
>>>
>>>this gives me what I need for the "getSalesmen" ZSQL method.
>>>
>>>But I would like to use the script with any ZSQL Method. So, i will
>>
> need to
>
>>>pass in two parameters - the first a ZSQL Method name, and the second, a
>>>list of parameters.
>>>
>>>Problem is, I don't know how I would go about building and executing the
>>>statement:
>>>
>>> for item in getSalemen():
>>>
>>>if all I have is the string "getSalesmen" ?
>>>
>>>exec(), eval() ...
>>>
>>>TIA
>>>
>>>
>>>_______________________________________________
>>>Zope maillist - Zope@zope.org
>>>http://lists.zope.org/mailman/listinfo/zope
>>>** No cross posts or HTML encoding! **
>>>(Related lists -
>>> http://lists.zope.org/mailman/listinfo/zope-announce
>>> http://lists.zope.org/mailman/listinfo/zope-dev )
>>>
>>>
>>
>>
>
>
>