[Pythonmac-SIG] appscript and XXXX - what is my app instance
returning?
has
hengist.podd at virgin.net
Wed Mar 30 16:06:45 CEST 2005
'me' wrote:
>I am having much fun with appscript and QuarkXpress6.x [...]
>Unfortunately, when you do get lost like I am. You're completely
>lost.
While appscript saves you from the vagaries of the AppleScript
language, it can't do anything about bugs and quirks in individual
applications' scripting interfaces.
>Would someone please share their method for
>figuring out what my app instance is returning,
>and how I can coerce that into a form I can utilize?
>[...]
>Quark = appscript.app('QuarkXpress')
>pw = Quark.documents[1].page_width #This is what I want
Remember that while appscript uses an OO-like syntax for convenience
it's not OO. It's a simple relational query builder plus RPC wrapper.
Ditto AppleScript, except it has an even thicker layer of syntactic
and semantic sugar on top. The downside of this is that it causes
quite a bit of confusion amongst users who assume that because it
looks like OO it will behave like it too.
(I've considered changing the syntax to avoid this problem, but
that'd impact badly on its ease of use. I'd rather keep the syntax
but make sure users know it's really just smoke and mirrors. Expect a
bigger health warning in the docs for the next release.)
> >>> type(pw)
><class 'appscript.specifier.Specifier'>
The line:
pw = Quark.documents[1].page_width
simply constructs a query (represented as an appscript Specifier
object) identifying the page_width property of the first document
element of the QXP application. To actually retrieve the value of
that property from the application, you have to send the application
an explicit 'get' command:
pw = Quark.documents[1].page_width.get()
> >>> pw.get()
> <_AE.AEDesc object at 0x1181c38>
This is a typical Quarkism: returning an opaque value that only it
understands instead of using a standard AE type. AEDesc is the
MacPython type used to hold raw Apple event data (in AS it'd appear
as <<data ...>>), and is returned here as appscript doesn't have a
suitable converter for it. If you're sending this value back to QXP,
no problem. If you want to manipulate it in your script, you'll need
to ask QXP to coerce it to a standard datatype (integer, float,
string, etc.) before returning it, e.g.:
pw.get(astype=k.Char)
Not sure which coercions are supported here, so you may need to
fiddle with it a bit. Good place to ask for QXP-specific advice would
be [e.g.] the MacScrpt mailing list
<http://listserv.dartmouth.edu/scripts/wa.exe?A0=macscrpt>.
HTH
has
--
http://freespace.virgin.net/hamish.sanderson/
More information about the Pythonmac-SIG
mailing list