[Pythonmac-SIG] creating PyObjC wrapper for ObjC framework?

Ronald Oussoren ronaldoussoren at mac.com
Sun Jan 13 15:24:43 CET 2008


On 10 Jan, 2008, at 18:00, has wrote:

> On 10 Jan 2008, at 06:54, Ronald Oussoren wrote:
>
>>> I'm trying to create a PyObjC wrapper for objc-appscript,
>>
>> Why?
>
> Partly just to know how, as one of objc-appscript's goals is to
> provide a foundation for implementing other appscript bridges, and
> this lets me explore the ins and outs.
>
>
> Partly so I can do casual testing in an interactive interpreter.
> (Yeah, I'm a slob.)

Using Python for unittest an interactive exploration is actually a  
major usecase for PyObjC, so don't feel to bad about this ;-)
>
> Partly because I've been toying with the idea of having objc-aem
> provide the basis for appscript support in Jonathan Wight's PyObjC-
> based 'Run Python Script' Automator action.
>
>
>>> and I'm
>>> wondering how to wrap methods that have NSError** arguments, e.g.:
>>
>> The easiest way is to mark the arguments as 'out' in the Objective-C
>> prototype (and then recompile), that way PyObjC will pick up the
>> right metadata from the ObjC runtime and you won't need the
>> bridgesupport file
>
> Ahh, too easy. Duh.

I keep trying to make it as easy as possible to create Objective-C  
code that is trivial to wrap using PyObjC, although documentation and  
advocacy is rather lacking :-(

>
>
>
>>> The logical thing would be to convert a returned NSError into a
>>> Python
>>> exception, but BridgeSupport's gen_bridge_metadata tool doesn't seem
>>> to provide any help here, simply flagging the argument as 'opaque'.
>>> Any advice on how to proceed (with or without using BS)?
>>
>> Don't try to convert the NSError to an exception, that would make
>> your wrapper complete different from other wrappers and hence more
>> likely to cause confusion for users.
>
>
> Okay. (Is this something that's changed since PyObjC 1.x, or is my
> memory just playing tricks?)

That's probably just your memory. NSException's are bridged to Python  
exceptions, that may cause the confusion.

Cocoa basicly has two ways to do structured error handling:

* Exceptions, which are basicly only used for handling programmer  
errors (trying to change a immutable dictionary
    raises an exception)

* NSErrors, which are used for everything else (OS Errors, running out  
of resources, ...)

* Several ancient API's use strings instead of NSErrors. (I know, this  
is item 3 in a 2 item list)

Python uses exceptions for all of these.

Ronald
>
>
> Thanks,
>
> has
> -- 
> http://appscript.sourceforge.net
> http://rb-appscript.rubyforge.org
>
> _______________________________________________
> Pythonmac-SIG maillist  -  Pythonmac-SIG at python.org
> http://mail.python.org/mailman/listinfo/pythonmac-sig

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2224 bytes
Desc: not available
Url : http://mail.python.org/pipermail/pythonmac-sig/attachments/20080113/4454fd1e/attachment.bin 


More information about the Pythonmac-SIG mailing list