[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 )
>>>
>>>
>>
>>
> 
> 
>