List Info

Thread: How to fathom appscript




How to fathom appscript
user name
2006-12-18 23:11:27
Hi,

I'm new to appscript (and relatively new to python) and I'm
having
trouble fathoming out how to determine what can be done with
each type
of object.

For example,

itunes = app('iTunes')
x =
itunes.sources.first.playlists[its.name.contains('MyName')]

This code fetches any playlists containing the string
'MyName'. But I
want an exact match. Using 'equals' rather than 'contains'
doesn't
work. How do I find out which operations its.name supports?
And more
generally, what is possible in other similar situations with
different
objects?

I also want to do what the following code suggests:

x =
itunes.sources.first.playlist_folders[its.name.equals('MyFol
der')]
y = itunes.sources.first.playlists[its.parent.equals(x)]

Is this possible?

Many thanks,
Hamish
_______________________________________________
Pythonmac-SIG maillist  -  Pythonmac-SIGpython.org
http://mail.python.org/mailman/listinfo/pythonmac-sig
How to fathom appscript
user name
2006-12-19 00:20:54
On Mon, Dec 18, 2006 at 11:11:27PM +0000, Hamish Allan
wrote:
> itunes = app('iTunes')
> x =
itunes.sources.first.playlists[its.name.contains('MyName')]
> 
> This code fetches any playlists containing the string
'MyName'. But I
> want an exact match. Using 'equals' rather than
'contains' doesn't
> work.

You just use '==' instead.

In [4]: itunes.sources.first.playlists[its.name ==
'Stations']()
Out[4]:
[app(u'/Applications/iTunes.app').sources.ID(41).user_playli
sts.ID(1936)]

But in this case, you don't need to.

In [6]: itunes.sources.first.playlists['Stations']()
Out[6]:
app(u'/Applications/iTunes.app').sources.ID(41).user_playlis
ts.ID(1936)

Most objects support multiple reference forms, as you'll see
if you
look at their documentation.

> How do I find out which operations its.name supports?
And more
> generally, what is possible in other similar situations
with different
> objects?

Use .help().  So, for example, you can see that the
playlists can be
referenced by index, name or ID:

In [7]: itunes.sources.first.playlists.help()
============================================================
==================
Appscript Help (-t)

Reference:
app(u'/Applications/iTunes.app').sources.first.playlists

------------------------------------------------------------
------------------
Description of reference

Element: playlists -- by index, name, id
[...]

Note the reference forms above.

It also helps to view the scripting dictionary, either using
appscript's tools for doing so in a Web browser, or just
with Script
Editor (as I normally do).

> I also want to do what the following code suggests:
> 
> x =
itunes.sources.first.playlist_folders[its.name.equals('MyFol
der')]

You want 'folder_playlists' not 'playlist_folders'.  So
again it's
pretty simple:

In [15]:
itunes.sources.first.folder_playlists['Statistics']()
Out[15]:
app(u'/Applications/iTunes.app').sources.ID(41).folder_playl
ists.ID(122340)

> y =
itunes.sources.first.playlists[its.parent.equals(x)]

Unfortunately here you run into a problem, as Apple didn't
fully
implement terminology for 'folder playlists', but you can
view the
scripting dictionary to figure it out.  'parent', while a
property of
playlists, isn't always set.  So the only thing I could
figure out was
to iterate through them in Python:

In [45]: stats_id =
itunes.folder_playlists['Statistics'].id()
In [46]: [p for p in itunes.user_playlists() if
p.parent.exists()
   ....:  and p.parent.id() == stats_id]
Out[46]: 
[app(u'/Applications/iTunes.app').sources.ID(41).user_playli
sts.ID(1032),
 app(u'/Applications/iTunes.app').sources.ID(41).user_playli
sts.ID(1158),
 app(u'/Applications/iTunes.app').sources.ID(41).user_playli
sts.ID(1060)]

-- 
Nicholas Riley <njrileyuiuc.edu> | <http://www.uiu
c.edu/ph/www/njriley>
_______________________________________________
Pythonmac-SIG maillist  -  Pythonmac-SIGpython.org
http://mail.python.org/mailman/listinfo/pythonmac-sig
[1-2]

about | contact  Other archives ( Real Estate discussion Medical topics )