Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

updated for latest release

  • Loading branch information...
commit 4c83684b756df1f64ead4ec709fceb90ed590d90 1 parent a4e1ebf
williams.tyler authored
View
1  INSTALL
@@ -2,3 +2,4 @@ As per usual python routine, the following should get you setup:
$ python setup.py build
$ python setup.py install
+
View
8 README
@@ -1,8 +1,8 @@
-Welcome to pyechonest, a python wrapper around the Beta Echo Nest API (v4).
+Welcome to pyechonest, a python wrapper around the Echo Nest API (v4).
-This wrapper should allow you to get started using the Beta Echo Nest API quickly and easily. The only requirement is a developer API key, which you can get for free from http://developer.echonest.com/account/register/.
+This wrapper should allow you to get started using the Echo Nest API quickly and easily. The only requirement is a developer API key, which you can get for free from http://developer.echonest.com/account/register/.
-For documentation questions, please refer to the official beta api docs, which are available at http://beta.developer.echonest.com/.
+For documentation questions, please refer to the official api docs, which are available at http://developer.echonest.com/.
IMPORTANT: You must let pyechonest know about your API key before you use it. There are two ways to let pyechonest know about your API key:
@@ -27,7 +27,7 @@ Examples:
Get an artist from their Musicbrainz ID:
>>> from pyechonest import artist
>>> a = artist.Artist('musicbrainz:artist:a74b1b7f-71a5-4011-9441-d0b5e4122711')
- >>> print a.name
+ >>> print a.name
Get the top hottt artists:
>>> from pyechonest import artist
View
2  doc/pyechonest.__init__.html
@@ -8,7 +8,7 @@
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong><a href="pyechonest.html"><font color="#ffffff">pyechonest</font></a>.__init__</strong></big></big></font></td
><td align=right valign=bottom
-><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="/pyechonest/__init__.py">/pyechonest/__init__.py</a></font></td></tr></table>
+><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:/Users/tylerw/Documents/echonest/projects/pyechonest/branches/wiry-wildebeest/pyechonest/__init__.py">/Users/tylerw/Documents/echonest/projects/pyechonest/branches/wiry-wildebeest/pyechonest/__init__.py</a></font></td></tr></table>
<p><tt>Copyright&nbsp;(c)&nbsp;2010&nbsp;The&nbsp;Echo&nbsp;Nest.&nbsp;All&nbsp;rights&nbsp;reserved.<br>
Created&nbsp;by&nbsp;Tyler&nbsp;Williams&nbsp;on&nbsp;2009-06-25.</tt></p>
<p>
View
120 doc/pyechonest.artist.html
@@ -8,11 +8,11 @@
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong><a href="pyechonest.html"><font color="#ffffff">pyechonest</font></a>.artist</strong></big></big></font></td
><td align=right valign=bottom
-><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="/pyechonest/artist.py">/pyechonest/artist.py</a></font></td></tr></table>
+><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:/Users/tylerw/Documents/echonest/projects/pyechonest/branches/wiry-wildebeest/pyechonest/artist.py">/Users/tylerw/Documents/echonest/projects/pyechonest/branches/wiry-wildebeest/pyechonest/artist.py</a></font></td></tr></table>
<p><tt>Copyright&nbsp;(c)&nbsp;2010&nbsp;The&nbsp;Echo&nbsp;Nest.&nbsp;All&nbsp;rights&nbsp;reserved.<br>
Created&nbsp;by&nbsp;Tyler&nbsp;Williams&nbsp;on&nbsp;2010-04-25.<br>
&nbsp;<br>
-The&nbsp;<a href="#Artist">Artist</a>&nbsp;module&nbsp;loosely&nbsp;covers&nbsp;<a href="http://beta.developer.echonest.com/artist.html">http://beta.developer.echonest.com/artist.html</a><br>
+The&nbsp;<a href="#Artist">Artist</a>&nbsp;module&nbsp;loosely&nbsp;covers&nbsp;<a href="http://developer.echonest.com/docs/v4/artist.html">http://developer.echonest.com/docs/v4/artist.html</a><br>
Refer&nbsp;to&nbsp;the&nbsp;official&nbsp;api&nbsp;documentation&nbsp;if&nbsp;you&nbsp;are&nbsp;unsure&nbsp;about&nbsp;something.</tt></p>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
@@ -21,8 +21,9 @@
<font color="#ffffff" face="helvetica, arial"><big><strong>Modules</strong></big></font></td></tr>
<tr><td bgcolor="#aa55cc"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
-<td width="100%"><table width="100%" summary="list"><tr><td width="25%" valign=top><a href="pyechonest.util.html">pyechonest.util</a><br>
-</td><td width="25%" valign=top></td><td width="25%" valign=top></td><td width="25%" valign=top></td></tr></table></td></tr></table><p>
+<td width="100%"><table width="100%" summary="list"><tr><td width="25%" valign=top><a href="pyechonest.song.html">pyechonest.song</a><br>
+</td><td width="25%" valign=top><a href="pyechonest.util.html">pyechonest.util</a><br>
+</td><td width="25%" valign=top></td><td width="25%" valign=top></td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ee77aa">
<td colspan=3 valign=bottom>&nbsp;<br>
@@ -71,8 +72,6 @@
<dd><a href="pyechonest.artist.html#Artist">Artist</a></dd>
<dd><a href="pyechonest.proxies.html#ArtistProxy">pyechonest.proxies.ArtistProxy</a></dd>
<dd><a href="pyechonest.proxies.html#GenericProxy">pyechonest.proxies.GenericProxy</a></dd>
-<dd><a href="pyechonest.util.html#attrdict">pyechonest.util.attrdict</a></dd>
-<dd><a href="__builtin__.html#dict">__builtin__.dict</a></dd>
<dd><a href="__builtin__.html#object">__builtin__.object</a></dd>
</dl>
<hr>
@@ -104,7 +103,7 @@
Returns:<br>
&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;list&nbsp;of&nbsp;biography&nbsp;document&nbsp;Result&nbsp;objects</tt></dd></dl>
-<dl><dt><a name="Artist-get_blogs"><strong>get_blogs</strong></a>(self, results<font color="#909090">=15</font>, start<font color="#909090">=0</font>, cache<font color="#909090">=True</font>)</dt><dd><tt>Get&nbsp;a&nbsp;list&nbsp;of&nbsp;blog&nbsp;articles&nbsp;related&nbsp;to&nbsp;an&nbsp;artist<br>
+<dl><dt><a name="Artist-get_blogs"><strong>get_blogs</strong></a>(self, results<font color="#909090">=15</font>, start<font color="#909090">=0</font>, cache<font color="#909090">=True</font>, high_relevance<font color="#909090">=False</font>)</dt><dd><tt>Get&nbsp;a&nbsp;list&nbsp;of&nbsp;blog&nbsp;articles&nbsp;related&nbsp;to&nbsp;an&nbsp;artist<br>
Args:<br>
&nbsp;&nbsp;&nbsp;&nbsp;cache:&nbsp;A&nbsp;boolean&nbsp;indicating&nbsp;whether&nbsp;or&nbsp;not&nbsp;the&nbsp;cached&nbsp;value&nbsp;should&nbsp;be&nbsp;used&nbsp;(if&nbsp;available).&nbsp;Defaults&nbsp;to&nbsp;True.<br>
&nbsp;&nbsp;&nbsp;&nbsp;results:&nbsp;An&nbsp;integer&nbsp;number&nbsp;of&nbsp;results&nbsp;to&nbsp;return<br>
@@ -148,7 +147,7 @@
Returns:<br>
&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;list&nbsp;of&nbsp;image&nbsp;document&nbsp;Result&nbsp;objects</tt></dd></dl>
-<dl><dt><a name="Artist-get_news"><strong>get_news</strong></a>(self, results<font color="#909090">=15</font>, start<font color="#909090">=0</font>, cache<font color="#909090">=True</font>)</dt><dd><tt>Get&nbsp;a&nbsp;list&nbsp;of&nbsp;news&nbsp;articles&nbsp;found&nbsp;on&nbsp;the&nbsp;web&nbsp;related&nbsp;to&nbsp;an&nbsp;artist<br>
+<dl><dt><a name="Artist-get_news"><strong>get_news</strong></a>(self, results<font color="#909090">=15</font>, start<font color="#909090">=0</font>, cache<font color="#909090">=True</font>, high_relevance<font color="#909090">=False</font>)</dt><dd><tt>Get&nbsp;a&nbsp;list&nbsp;of&nbsp;news&nbsp;articles&nbsp;found&nbsp;on&nbsp;the&nbsp;web&nbsp;related&nbsp;to&nbsp;an&nbsp;artist<br>
&nbsp;<br>
Args:<br>
&nbsp;&nbsp;&nbsp;&nbsp;cache:&nbsp;A&nbsp;boolean&nbsp;indicating&nbsp;whether&nbsp;or&nbsp;not&nbsp;the&nbsp;cached&nbsp;value&nbsp;should&nbsp;be&nbsp;used&nbsp;(if&nbsp;available).&nbsp;Defaults&nbsp;to&nbsp;True.<br>
@@ -167,7 +166,7 @@
Returns:<br>
&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;list&nbsp;of&nbsp;review&nbsp;document&nbsp;Result&nbsp;objects</tt></dd></dl>
-<dl><dt><a name="Artist-get_similar"><strong>get_similar</strong></a>(self, results<font color="#909090">=15</font>, start<font color="#909090">=0</font>, cache<font color="#909090">=True</font>, max_familiarity<font color="#909090">=None</font>, min_familiarity<font color="#909090">=None</font>, max_hotttnesss<font color="#909090">=None</font>, min_hotttnesss<font color="#909090">=None</font>)</dt><dd><tt>Return&nbsp;similar&nbsp;artists&nbsp;to&nbsp;this&nbsp;one<br>
+<dl><dt><a name="Artist-get_similar"><strong>get_similar</strong></a>(self, results<font color="#909090">=15</font>, start<font color="#909090">=0</font>, buckets<font color="#909090">=None</font>, limit<font color="#909090">=False</font>, cache<font color="#909090">=True</font>, max_familiarity<font color="#909090">=None</font>, min_familiarity<font color="#909090">=None</font>, max_hotttnesss<font color="#909090">=None</font>, min_hotttnesss<font color="#909090">=None</font>, min_results<font color="#909090">=None</font>, reverse<font color="#909090">=False</font>)</dt><dd><tt>Return&nbsp;similar&nbsp;artists&nbsp;to&nbsp;this&nbsp;one<br>
&nbsp;<br>
Args:<br>
&nbsp;&nbsp;&nbsp;&nbsp;cache:&nbsp;A&nbsp;boolean&nbsp;indicating&nbsp;whether&nbsp;or&nbsp;not&nbsp;the&nbsp;cached&nbsp;value&nbsp;should&nbsp;be&nbsp;used&nbsp;(if&nbsp;available).&nbsp;Defaults&nbsp;to&nbsp;True.<br>
@@ -177,9 +176,18 @@
&nbsp;&nbsp;&nbsp;&nbsp;min_familiarity:&nbsp;A&nbsp;float&nbsp;specifying&nbsp;the&nbsp;min&nbsp;familiarity&nbsp;of&nbsp;artists&nbsp;to&nbsp;search&nbsp;for<br>
&nbsp;&nbsp;&nbsp;&nbsp;max_hotttnesss:&nbsp;A&nbsp;float&nbsp;specifying&nbsp;the&nbsp;max&nbsp;hotttnesss&nbsp;of&nbsp;artists&nbsp;to&nbsp;search&nbsp;for<br>
&nbsp;&nbsp;&nbsp;&nbsp;min_hotttnesss:&nbsp;A&nbsp;float&nbsp;specifying&nbsp;the&nbsp;max&nbsp;hotttnesss&nbsp;of&nbsp;artists&nbsp;to&nbsp;search&nbsp;for<br>
+&nbsp;&nbsp;&nbsp;&nbsp;reverse:&nbsp;A&nbsp;boolean&nbsp;indicating&nbsp;whether&nbsp;or&nbsp;not&nbsp;to&nbsp;return&nbsp;dissimilar&nbsp;artists&nbsp;(wrecommender).&nbsp;Defaults&nbsp;to&nbsp;False.<br>
Returns:<br>
&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;list&nbsp;of&nbsp;similar&nbsp;<a href="#Artist">Artist</a>&nbsp;objects</tt></dd></dl>
+<dl><dt><a name="Artist-get_songs"><strong>get_songs</strong></a>(self, cache<font color="#909090">=True</font>)</dt><dd><tt>Get&nbsp;the&nbsp;songs&nbsp;associated&nbsp;with&nbsp;an&nbsp;artist<br>
+&nbsp;<br>
+Args:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cache:&nbsp;A&nbsp;boolean&nbsp;indicating&nbsp;whether&nbsp;or&nbsp;not&nbsp;the&nbsp;cached&nbsp;value&nbsp;should&nbsp;be&nbsp;used&nbsp;(if&nbsp;available).&nbsp;Defaults&nbsp;to&nbsp;True.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<br>
+Results:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;list&nbsp;of&nbsp;Song&nbsp;objects</tt></dd></dl>
+
<dl><dt><a name="Artist-get_terms"><strong>get_terms</strong></a>(self, sort<font color="#909090">='weight'</font>, cache<font color="#909090">=True</font>)</dt><dd><tt>Get&nbsp;the&nbsp;terms&nbsp;associated&nbsp;with&nbsp;an&nbsp;artist<br>
&nbsp;<br>
Args:<br>
@@ -304,9 +312,19 @@
&nbsp;&nbsp;&nbsp;&nbsp;min_familiarity:&nbsp;A&nbsp;float&nbsp;specifying&nbsp;the&nbsp;min&nbsp;familiarity&nbsp;of&nbsp;artists&nbsp;to&nbsp;search&nbsp;for<br>
&nbsp;&nbsp;&nbsp;&nbsp;max_hotttnesss:&nbsp;A&nbsp;float&nbsp;specifying&nbsp;the&nbsp;max&nbsp;hotttnesss&nbsp;of&nbsp;artists&nbsp;to&nbsp;search&nbsp;for<br>
&nbsp;&nbsp;&nbsp;&nbsp;min_hotttnesss:&nbsp;A&nbsp;float&nbsp;specifying&nbsp;the&nbsp;max&nbsp;hotttnesss&nbsp;of&nbsp;artists&nbsp;to&nbsp;search&nbsp;for<br>
+&nbsp;&nbsp;&nbsp;&nbsp;reverse:&nbsp;A&nbsp;boolean&nbsp;indicating&nbsp;whether&nbsp;or&nbsp;not&nbsp;to&nbsp;return&nbsp;dissimilar&nbsp;artists&nbsp;(wrecommender).&nbsp;Defaults&nbsp;to&nbsp;False.<br>
Returns:<br>
&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;list&nbsp;of&nbsp;similar&nbsp;Artist&nbsp;objects</tt></dd>
</dl>
+<dl><dt><strong>songs</strong></dt>
+<dd><tt>Get&nbsp;the&nbsp;songs&nbsp;associated&nbsp;with&nbsp;an&nbsp;artist<br>
+&nbsp;<br>
+Args:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cache:&nbsp;A&nbsp;boolean&nbsp;indicating&nbsp;whether&nbsp;or&nbsp;not&nbsp;the&nbsp;cached&nbsp;value&nbsp;should&nbsp;be&nbsp;used&nbsp;(if&nbsp;available).&nbsp;Defaults&nbsp;to&nbsp;True.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<br>
+Results:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;list&nbsp;of&nbsp;Song&nbsp;objects</tt></dd>
+</dl>
<dl><dt><strong>terms</strong></dt>
<dd><tt>Get&nbsp;the&nbsp;terms&nbsp;associated&nbsp;with&nbsp;an&nbsp;artist<br>
&nbsp;<br>
@@ -342,87 +360,13 @@
<dl><dt><a name="Artist-get_attribute"><strong>get_attribute</strong></a>(self, *args, **kwargs)</dt></dl>
<hr>
-Data descriptors inherited from <a href="pyechonest.util.html#attrdict">pyechonest.util.attrdict</a>:<br>
+Data descriptors inherited from <a href="pyechonest.proxies.html#GenericProxy">pyechonest.proxies.GenericProxy</a>:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>dictionary&nbsp;for&nbsp;instance&nbsp;variables&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
-<hr>
-Methods inherited from <a href="__builtin__.html#dict">__builtin__.dict</a>:<br>
-<dl><dt><a name="Artist-__cmp__"><strong>__cmp__</strong></a>(...)</dt><dd><tt>x.<a href="#Artist-__cmp__">__cmp__</a>(y)&nbsp;&lt;==&gt;&nbsp;cmp(x,y)</tt></dd></dl>
-
-<dl><dt><a name="Artist-__contains__"><strong>__contains__</strong></a>(...)</dt><dd><tt>D.<a href="#Artist-__contains__">__contains__</a>(k)&nbsp;-&gt;&nbsp;True&nbsp;if&nbsp;D&nbsp;has&nbsp;a&nbsp;key&nbsp;k,&nbsp;else&nbsp;False</tt></dd></dl>
-
-<dl><dt><a name="Artist-__delitem__"><strong>__delitem__</strong></a>(...)</dt><dd><tt>x.<a href="#Artist-__delitem__">__delitem__</a>(y)&nbsp;&lt;==&gt;&nbsp;del&nbsp;x[y]</tt></dd></dl>
-
-<dl><dt><a name="Artist-__eq__"><strong>__eq__</strong></a>(...)</dt><dd><tt>x.<a href="#Artist-__eq__">__eq__</a>(y)&nbsp;&lt;==&gt;&nbsp;x==y</tt></dd></dl>
-
-<dl><dt><a name="Artist-__ge__"><strong>__ge__</strong></a>(...)</dt><dd><tt>x.<a href="#Artist-__ge__">__ge__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&gt;=y</tt></dd></dl>
-
-<dl><dt><a name="Artist-__getattribute__"><strong>__getattribute__</strong></a>(...)</dt><dd><tt>x.<a href="#Artist-__getattribute__">__getattribute__</a>('name')&nbsp;&lt;==&gt;&nbsp;x.name</tt></dd></dl>
-
-<dl><dt><a name="Artist-__getitem__"><strong>__getitem__</strong></a>(...)</dt><dd><tt>x.<a href="#Artist-__getitem__">__getitem__</a>(y)&nbsp;&lt;==&gt;&nbsp;x[y]</tt></dd></dl>
-
-<dl><dt><a name="Artist-__gt__"><strong>__gt__</strong></a>(...)</dt><dd><tt>x.<a href="#Artist-__gt__">__gt__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&gt;y</tt></dd></dl>
-
-<dl><dt><a name="Artist-__iter__"><strong>__iter__</strong></a>(...)</dt><dd><tt>x.<a href="#Artist-__iter__">__iter__</a>()&nbsp;&lt;==&gt;&nbsp;iter(x)</tt></dd></dl>
-
-<dl><dt><a name="Artist-__le__"><strong>__le__</strong></a>(...)</dt><dd><tt>x.<a href="#Artist-__le__">__le__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&lt;=y</tt></dd></dl>
-
-<dl><dt><a name="Artist-__len__"><strong>__len__</strong></a>(...)</dt><dd><tt>x.<a href="#Artist-__len__">__len__</a>()&nbsp;&lt;==&gt;&nbsp;len(x)</tt></dd></dl>
-
-<dl><dt><a name="Artist-__lt__"><strong>__lt__</strong></a>(...)</dt><dd><tt>x.<a href="#Artist-__lt__">__lt__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&lt;y</tt></dd></dl>
-
-<dl><dt><a name="Artist-__ne__"><strong>__ne__</strong></a>(...)</dt><dd><tt>x.<a href="#Artist-__ne__">__ne__</a>(y)&nbsp;&lt;==&gt;&nbsp;x!=y</tt></dd></dl>
-
-<dl><dt><a name="Artist-__setitem__"><strong>__setitem__</strong></a>(...)</dt><dd><tt>x.<a href="#Artist-__setitem__">__setitem__</a>(i,&nbsp;y)&nbsp;&lt;==&gt;&nbsp;x[i]=y</tt></dd></dl>
-
-<dl><dt><a name="Artist-__sizeof__"><strong>__sizeof__</strong></a>(...)</dt><dd><tt>D.<a href="#Artist-__sizeof__">__sizeof__</a>()&nbsp;-&gt;&nbsp;size&nbsp;of&nbsp;D&nbsp;in&nbsp;memory,&nbsp;in&nbsp;bytes</tt></dd></dl>
-
-<dl><dt><a name="Artist-clear"><strong>clear</strong></a>(...)</dt><dd><tt>D.<a href="#Artist-clear">clear</a>()&nbsp;-&gt;&nbsp;None.&nbsp;&nbsp;Remove&nbsp;all&nbsp;items&nbsp;from&nbsp;D.</tt></dd></dl>
-
-<dl><dt><a name="Artist-copy"><strong>copy</strong></a>(...)</dt><dd><tt>D.<a href="#Artist-copy">copy</a>()&nbsp;-&gt;&nbsp;a&nbsp;shallow&nbsp;copy&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="Artist-get"><strong>get</strong></a>(...)</dt><dd><tt>D.<a href="#Artist-get">get</a>(k[,d])&nbsp;-&gt;&nbsp;D[k]&nbsp;if&nbsp;k&nbsp;in&nbsp;D,&nbsp;else&nbsp;d.&nbsp;&nbsp;d&nbsp;defaults&nbsp;to&nbsp;None.</tt></dd></dl>
-
-<dl><dt><a name="Artist-has_key"><strong>has_key</strong></a>(...)</dt><dd><tt>D.<a href="#Artist-has_key">has_key</a>(k)&nbsp;-&gt;&nbsp;True&nbsp;if&nbsp;D&nbsp;has&nbsp;a&nbsp;key&nbsp;k,&nbsp;else&nbsp;False</tt></dd></dl>
-
-<dl><dt><a name="Artist-items"><strong>items</strong></a>(...)</dt><dd><tt>D.<a href="#Artist-items">items</a>()&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;D's&nbsp;(key,&nbsp;value)&nbsp;pairs,&nbsp;as&nbsp;2-tuples</tt></dd></dl>
-
-<dl><dt><a name="Artist-iteritems"><strong>iteritems</strong></a>(...)</dt><dd><tt>D.<a href="#Artist-iteritems">iteritems</a>()&nbsp;-&gt;&nbsp;an&nbsp;iterator&nbsp;over&nbsp;the&nbsp;(key,&nbsp;value)&nbsp;items&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="Artist-iterkeys"><strong>iterkeys</strong></a>(...)</dt><dd><tt>D.<a href="#Artist-iterkeys">iterkeys</a>()&nbsp;-&gt;&nbsp;an&nbsp;iterator&nbsp;over&nbsp;the&nbsp;keys&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="Artist-itervalues"><strong>itervalues</strong></a>(...)</dt><dd><tt>D.<a href="#Artist-itervalues">itervalues</a>()&nbsp;-&gt;&nbsp;an&nbsp;iterator&nbsp;over&nbsp;the&nbsp;values&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="Artist-keys"><strong>keys</strong></a>(...)</dt><dd><tt>D.<a href="#Artist-keys">keys</a>()&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;D's&nbsp;keys</tt></dd></dl>
-
-<dl><dt><a name="Artist-pop"><strong>pop</strong></a>(...)</dt><dd><tt>D.<a href="#Artist-pop">pop</a>(k[,d])&nbsp;-&gt;&nbsp;v,&nbsp;remove&nbsp;specified&nbsp;key&nbsp;and&nbsp;return&nbsp;the&nbsp;corresponding&nbsp;value.<br>
-If&nbsp;key&nbsp;is&nbsp;not&nbsp;found,&nbsp;d&nbsp;is&nbsp;returned&nbsp;if&nbsp;given,&nbsp;otherwise&nbsp;KeyError&nbsp;is&nbsp;raised</tt></dd></dl>
-
-<dl><dt><a name="Artist-popitem"><strong>popitem</strong></a>(...)</dt><dd><tt>D.<a href="#Artist-popitem">popitem</a>()&nbsp;-&gt;&nbsp;(k,&nbsp;v),&nbsp;remove&nbsp;and&nbsp;return&nbsp;some&nbsp;(key,&nbsp;value)&nbsp;pair&nbsp;as&nbsp;a<br>
-2-tuple;&nbsp;but&nbsp;raise&nbsp;KeyError&nbsp;if&nbsp;D&nbsp;is&nbsp;empty.</tt></dd></dl>
-
-<dl><dt><a name="Artist-setdefault"><strong>setdefault</strong></a>(...)</dt><dd><tt>D.<a href="#Artist-setdefault">setdefault</a>(k[,d])&nbsp;-&gt;&nbsp;D.<a href="#Artist-get">get</a>(k,d),&nbsp;also&nbsp;set&nbsp;D[k]=d&nbsp;if&nbsp;k&nbsp;not&nbsp;in&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="Artist-update"><strong>update</strong></a>(...)</dt><dd><tt>D.<a href="#Artist-update">update</a>(E,&nbsp;**F)&nbsp;-&gt;&nbsp;None.&nbsp;&nbsp;Update&nbsp;D&nbsp;from&nbsp;dict/iterable&nbsp;E&nbsp;and&nbsp;F.<br>
-If&nbsp;E&nbsp;has&nbsp;a&nbsp;.<a href="#Artist-keys">keys</a>()&nbsp;method,&nbsp;does:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;k&nbsp;in&nbsp;E:&nbsp;D[k]&nbsp;=&nbsp;E[k]<br>
-If&nbsp;E&nbsp;lacks&nbsp;.<a href="#Artist-keys">keys</a>()&nbsp;method,&nbsp;does:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(k,&nbsp;v)&nbsp;in&nbsp;E:&nbsp;D[k]&nbsp;=&nbsp;v<br>
-In&nbsp;either&nbsp;case,&nbsp;this&nbsp;is&nbsp;followed&nbsp;by:&nbsp;for&nbsp;k&nbsp;in&nbsp;F:&nbsp;D[k]&nbsp;=&nbsp;F[k]</tt></dd></dl>
-
-<dl><dt><a name="Artist-values"><strong>values</strong></a>(...)</dt><dd><tt>D.<a href="#Artist-values">values</a>()&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;D's&nbsp;values</tt></dd></dl>
-
-<hr>
-Data and other attributes inherited from <a href="__builtin__.html#dict">__builtin__.dict</a>:<br>
-<dl><dt><strong>__hash__</strong> = None</dl>
-
-<dl><dt><strong>__new__</strong> = &lt;built-in method __new__ of type object at 0x1001222a0&gt;<dd><tt>T.<a href="#Artist-__new__">__new__</a>(S,&nbsp;...)&nbsp;-&gt;&nbsp;a&nbsp;new&nbsp;object&nbsp;with&nbsp;type&nbsp;S,&nbsp;a&nbsp;subtype&nbsp;of&nbsp;T</tt></dl>
-
-<dl><dt><strong>fromkeys</strong> = &lt;built-in method fromkeys of type object at 0x10102b5d0&gt;<dd><tt>dict.<a href="#Artist-fromkeys">fromkeys</a>(S[,v])&nbsp;-&gt;&nbsp;New&nbsp;dict&nbsp;with&nbsp;keys&nbsp;from&nbsp;S&nbsp;and&nbsp;values&nbsp;equal&nbsp;to&nbsp;v.<br>
-v&nbsp;defaults&nbsp;to&nbsp;None.</tt></dl>
-
</td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#eeaa77">
@@ -436,7 +380,7 @@
&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;the&nbsp;name&nbsp;of&nbsp;an&nbsp;artist<br>
&nbsp;&nbsp;&nbsp;&nbsp;description:&nbsp;A&nbsp;string&nbsp;describing&nbsp;the&nbsp;artist<br>
&nbsp;&nbsp;&nbsp;&nbsp;results:&nbsp;An&nbsp;integer&nbsp;number&nbsp;of&nbsp;results&nbsp;to&nbsp;return<br>
-&nbsp;&nbsp;&nbsp;&nbsp;buckets:&nbsp;A&nbsp;list&nbsp;of&nbsp;strings&nbsp;specifying&nbsp;which&nbsp;buck<br>
+&nbsp;&nbsp;&nbsp;&nbsp;buckets:&nbsp;A&nbsp;list&nbsp;of&nbsp;strings&nbsp;specifying&nbsp;which&nbsp;buckets&nbsp;to&nbsp;retrieve<br>
&nbsp;&nbsp;&nbsp;&nbsp;limit:&nbsp;A&nbsp;boolean&nbsp;indicating&nbsp;whether&nbsp;or&nbsp;not&nbsp;to&nbsp;limit&nbsp;the&nbsp;results&nbsp;to&nbsp;one&nbsp;of&nbsp;the&nbsp;id&nbsp;spaces&nbsp;specified&nbsp;in&nbsp;buckets<br>
&nbsp;&nbsp;&nbsp;&nbsp;fuzzy_match:&nbsp;A&nbsp;boolean&nbsp;indicating&nbsp;whether&nbsp;or&nbsp;not&nbsp;to&nbsp;search&nbsp;for&nbsp;similar&nbsp;sounding&nbsp;matches&nbsp;(only&nbsp;works&nbsp;with&nbsp;name)<br>
&nbsp;&nbsp;&nbsp;&nbsp;max_familiarity:&nbsp;A&nbsp;float&nbsp;specifying&nbsp;the&nbsp;max&nbsp;familiarity&nbsp;of&nbsp;artists&nbsp;to&nbsp;search&nbsp;for<br>
@@ -452,8 +396,10 @@
&nbsp;&nbsp;&nbsp;&nbsp;id:&nbsp;An&nbsp;artist&nbsp;id&nbsp;or&nbsp;list&nbsp;of&nbsp;ids<br>
&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;An&nbsp;artist&nbsp;name&nbsp;or&nbsp;list&nbsp;of&nbsp;names<br>
&nbsp;&nbsp;&nbsp;&nbsp;results:&nbsp;An&nbsp;integer&nbsp;number&nbsp;of&nbsp;results&nbsp;to&nbsp;return<br>
+&nbsp;&nbsp;&nbsp;&nbsp;buckets:&nbsp;A&nbsp;list&nbsp;of&nbsp;strings&nbsp;specifying&nbsp;which&nbsp;buckets&nbsp;to&nbsp;retrieve<br>
+&nbsp;&nbsp;&nbsp;&nbsp;limit:&nbsp;A&nbsp;boolean&nbsp;indicating&nbsp;whether&nbsp;or&nbsp;not&nbsp;to&nbsp;limit&nbsp;the&nbsp;results&nbsp;to&nbsp;one&nbsp;of&nbsp;the&nbsp;id&nbsp;spaces&nbsp;specified&nbsp;in&nbsp;buckets<br>
&nbsp;&nbsp;&nbsp;&nbsp;start:&nbsp;An&nbsp;integer&nbsp;starting&nbsp;value&nbsp;for&nbsp;the&nbsp;result&nbsp;set<br>
-&nbsp;&nbsp;&nbsp;&nbsp;buckets:&nbsp;A&nbsp;list&nbsp;of&nbsp;strings&nbsp;specifying&nbsp;which&nbsp;buck<br>
+&nbsp;&nbsp;&nbsp;&nbsp;buckets:&nbsp;A&nbsp;list&nbsp;of&nbsp;strings&nbsp;specifying&nbsp;which&nbsp;buckets&nbsp;to&nbsp;retrieve<br>
&nbsp;&nbsp;&nbsp;&nbsp;limit:&nbsp;A&nbsp;boolean&nbsp;indicating&nbsp;whether&nbsp;or&nbsp;not&nbsp;to&nbsp;limit&nbsp;the&nbsp;results&nbsp;to&nbsp;one&nbsp;of&nbsp;the&nbsp;id&nbsp;spaces&nbsp;specified&nbsp;in&nbsp;buckets<br>
&nbsp;&nbsp;&nbsp;&nbsp;max_familiarity:&nbsp;A&nbsp;float&nbsp;specifying&nbsp;the&nbsp;max&nbsp;familiarity&nbsp;of&nbsp;artists&nbsp;to&nbsp;search&nbsp;for<br>
&nbsp;&nbsp;&nbsp;&nbsp;min_familiarity:&nbsp;A&nbsp;float&nbsp;specifying&nbsp;the&nbsp;min&nbsp;familiarity&nbsp;of&nbsp;artists&nbsp;to&nbsp;search&nbsp;for<br>
@@ -466,7 +412,7 @@
Args:<br>
&nbsp;&nbsp;&nbsp;&nbsp;results:&nbsp;An&nbsp;integer&nbsp;number&nbsp;of&nbsp;results&nbsp;to&nbsp;return<br>
&nbsp;&nbsp;&nbsp;&nbsp;start:&nbsp;An&nbsp;integer&nbsp;starting&nbsp;value&nbsp;for&nbsp;the&nbsp;result&nbsp;set<br>
-&nbsp;&nbsp;&nbsp;&nbsp;buckets:&nbsp;A&nbsp;list&nbsp;of&nbsp;strings&nbsp;specifying&nbsp;which&nbsp;buck<br>
+&nbsp;&nbsp;&nbsp;&nbsp;buckets:&nbsp;A&nbsp;list&nbsp;of&nbsp;strings&nbsp;specifying&nbsp;which&nbsp;buckets&nbsp;to&nbsp;retrieve<br>
&nbsp;&nbsp;&nbsp;&nbsp;limit:&nbsp;A&nbsp;boolean&nbsp;indicating&nbsp;whether&nbsp;or&nbsp;not&nbsp;to&nbsp;limit&nbsp;the&nbsp;results&nbsp;to&nbsp;one&nbsp;of&nbsp;the&nbsp;id&nbsp;spaces&nbsp;specified&nbsp;in&nbsp;buckets<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
Returns:<br>
View
6 doc/pyechonest.config.html
@@ -8,7 +8,7 @@
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong><a href="pyechonest.html"><font color="#ffffff">pyechonest</font></a>.config</strong></big></big> (version 4.2)</font></td
><td align=right valign=bottom
-><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="/pyechonest/config.py">/pyechonest/config.py</a></font></td></tr></table>
+><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:/Users/tylerw/Documents/echonest/projects/pyechonest/branches/wiry-wildebeest/pyechonest/config.py">/Users/tylerw/Documents/echonest/projects/pyechonest/branches/wiry-wildebeest/pyechonest/config.py</a></font></td></tr></table>
<p><tt>Copyright&nbsp;(c)&nbsp;2010&nbsp;The&nbsp;Echo&nbsp;Nest.&nbsp;All&nbsp;rights&nbsp;reserved.<br>
Created&nbsp;by&nbsp;Tyler&nbsp;Williams&nbsp;on&nbsp;2010-04-25.<br>
&nbsp;<br>
@@ -35,9 +35,9 @@
<strong>CACHE</strong> = True<br>
<strong>CALL_TIMEOUT</strong> = 10<br>
<strong>CODEGEN_BINARY_OVERRIDE</strong> = None<br>
-<strong>ECHO_NEST_API_KEY</strong> = ''<br>
+<strong>ECHO_NEST_API_KEY</strong> = None<br>
<strong>HTTP_USER_AGENT</strong> = 'PyEchonest'<br>
<strong>MP3_BITRATE</strong> = 128<br>
<strong>TRACE_API_CALLS</strong> = False<br>
-<strong>__version__</strong> = '$Revision: 4.2 $'</td></tr></table>
+<strong>__version__</strong> = '4.2'</td></tr></table>
</body></html>
View
2  doc/pyechonest.html
@@ -8,7 +8,7 @@
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong>pyechonest</strong></big></big></font></td
><td align=right valign=bottom
-><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="/pyechonest/__init__.py">/pyechonest/__init__.py</a></font></td></tr></table>
+><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:/Users/tylerw/Documents/echonest/projects/pyechonest/branches/wiry-wildebeest/pyechonest/__init__.py">/Users/tylerw/Documents/echonest/projects/pyechonest/branches/wiry-wildebeest/pyechonest/__init__.py</a></font></td></tr></table>
<p><tt>Copyright&nbsp;(c)&nbsp;2010&nbsp;The&nbsp;Echo&nbsp;Nest.&nbsp;All&nbsp;rights&nbsp;reserved.<br>
Created&nbsp;by&nbsp;Tyler&nbsp;Williams&nbsp;on&nbsp;2009-06-25.</tt></p>
<p>
View
333 doc/pyechonest.proxies.html
@@ -8,7 +8,7 @@
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong><a href="pyechonest.html"><font color="#ffffff">pyechonest</font></a>.proxies</strong></big></big></font></td
><td align=right valign=bottom
-><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="/pyechonest/proxies.py">/pyechonest/proxies.py</a></font></td></tr></table>
+><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:/Users/tylerw/Documents/echonest/projects/pyechonest/branches/wiry-wildebeest/pyechonest/proxies.py">/Users/tylerw/Documents/echonest/projects/pyechonest/branches/wiry-wildebeest/pyechonest/proxies.py</a></font></td></tr></table>
<p><tt>Copyright&nbsp;(c)&nbsp;2010&nbsp;The&nbsp;Echo&nbsp;Nest.&nbsp;All&nbsp;rights&nbsp;reserved.<br>
Created&nbsp;by&nbsp;Tyler&nbsp;Williams&nbsp;on&nbsp;2010-04-25.</tt></p>
<p>
@@ -27,7 +27,7 @@
<tr><td bgcolor="#ee77aa"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl>
-<dt><font face="helvetica, arial"><a href="pyechonest.util.html#attrdict">pyechonest.util.attrdict</a>(<a href="__builtin__.html#dict">__builtin__.dict</a>)
+<dt><font face="helvetica, arial"><a href="__builtin__.html#object">__builtin__.object</a>
</font></dt><dd>
<dl>
<dt><font face="helvetica, arial"><a href="pyechonest.proxies.html#GenericProxy">GenericProxy</a>
@@ -51,8 +51,6 @@
<td width="100%"><dl><dt>Method resolution order:</dt>
<dd><a href="pyechonest.proxies.html#ArtistProxy">ArtistProxy</a></dd>
<dd><a href="pyechonest.proxies.html#GenericProxy">GenericProxy</a></dd>
-<dd><a href="pyechonest.util.html#attrdict">pyechonest.util.attrdict</a></dd>
-<dd><a href="__builtin__.html#dict">__builtin__.dict</a></dd>
<dd><a href="__builtin__.html#object">__builtin__.object</a></dd>
</dl>
<hr>
@@ -62,192 +60,33 @@
<dl><dt><a name="ArtistProxy-get_attribute"><strong>get_attribute</strong></a>(self, *args, **kwargs)</dt></dl>
<hr>
-Data descriptors inherited from <a href="pyechonest.util.html#attrdict">pyechonest.util.attrdict</a>:<br>
+Data descriptors inherited from <a href="pyechonest.proxies.html#GenericProxy">GenericProxy</a>:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>dictionary&nbsp;for&nbsp;instance&nbsp;variables&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
-<hr>
-Methods inherited from <a href="__builtin__.html#dict">__builtin__.dict</a>:<br>
-<dl><dt><a name="ArtistProxy-__cmp__"><strong>__cmp__</strong></a>(...)</dt><dd><tt>x.<a href="#ArtistProxy-__cmp__">__cmp__</a>(y)&nbsp;&lt;==&gt;&nbsp;cmp(x,y)</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-__contains__"><strong>__contains__</strong></a>(...)</dt><dd><tt>D.<a href="#ArtistProxy-__contains__">__contains__</a>(k)&nbsp;-&gt;&nbsp;True&nbsp;if&nbsp;D&nbsp;has&nbsp;a&nbsp;key&nbsp;k,&nbsp;else&nbsp;False</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-__delitem__"><strong>__delitem__</strong></a>(...)</dt><dd><tt>x.<a href="#ArtistProxy-__delitem__">__delitem__</a>(y)&nbsp;&lt;==&gt;&nbsp;del&nbsp;x[y]</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-__eq__"><strong>__eq__</strong></a>(...)</dt><dd><tt>x.<a href="#ArtistProxy-__eq__">__eq__</a>(y)&nbsp;&lt;==&gt;&nbsp;x==y</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-__ge__"><strong>__ge__</strong></a>(...)</dt><dd><tt>x.<a href="#ArtistProxy-__ge__">__ge__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&gt;=y</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-__getattribute__"><strong>__getattribute__</strong></a>(...)</dt><dd><tt>x.<a href="#ArtistProxy-__getattribute__">__getattribute__</a>('name')&nbsp;&lt;==&gt;&nbsp;x.name</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-__getitem__"><strong>__getitem__</strong></a>(...)</dt><dd><tt>x.<a href="#ArtistProxy-__getitem__">__getitem__</a>(y)&nbsp;&lt;==&gt;&nbsp;x[y]</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-__gt__"><strong>__gt__</strong></a>(...)</dt><dd><tt>x.<a href="#ArtistProxy-__gt__">__gt__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&gt;y</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-__iter__"><strong>__iter__</strong></a>(...)</dt><dd><tt>x.<a href="#ArtistProxy-__iter__">__iter__</a>()&nbsp;&lt;==&gt;&nbsp;iter(x)</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-__le__"><strong>__le__</strong></a>(...)</dt><dd><tt>x.<a href="#ArtistProxy-__le__">__le__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&lt;=y</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-__len__"><strong>__len__</strong></a>(...)</dt><dd><tt>x.<a href="#ArtistProxy-__len__">__len__</a>()&nbsp;&lt;==&gt;&nbsp;len(x)</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-__lt__"><strong>__lt__</strong></a>(...)</dt><dd><tt>x.<a href="#ArtistProxy-__lt__">__lt__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&lt;y</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-__ne__"><strong>__ne__</strong></a>(...)</dt><dd><tt>x.<a href="#ArtistProxy-__ne__">__ne__</a>(y)&nbsp;&lt;==&gt;&nbsp;x!=y</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-__repr__"><strong>__repr__</strong></a>(...)</dt><dd><tt>x.<a href="#ArtistProxy-__repr__">__repr__</a>()&nbsp;&lt;==&gt;&nbsp;repr(x)</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-__setitem__"><strong>__setitem__</strong></a>(...)</dt><dd><tt>x.<a href="#ArtistProxy-__setitem__">__setitem__</a>(i,&nbsp;y)&nbsp;&lt;==&gt;&nbsp;x[i]=y</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-__sizeof__"><strong>__sizeof__</strong></a>(...)</dt><dd><tt>D.<a href="#ArtistProxy-__sizeof__">__sizeof__</a>()&nbsp;-&gt;&nbsp;size&nbsp;of&nbsp;D&nbsp;in&nbsp;memory,&nbsp;in&nbsp;bytes</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-clear"><strong>clear</strong></a>(...)</dt><dd><tt>D.<a href="#ArtistProxy-clear">clear</a>()&nbsp;-&gt;&nbsp;None.&nbsp;&nbsp;Remove&nbsp;all&nbsp;items&nbsp;from&nbsp;D.</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-copy"><strong>copy</strong></a>(...)</dt><dd><tt>D.<a href="#ArtistProxy-copy">copy</a>()&nbsp;-&gt;&nbsp;a&nbsp;shallow&nbsp;copy&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-get"><strong>get</strong></a>(...)</dt><dd><tt>D.<a href="#ArtistProxy-get">get</a>(k[,d])&nbsp;-&gt;&nbsp;D[k]&nbsp;if&nbsp;k&nbsp;in&nbsp;D,&nbsp;else&nbsp;d.&nbsp;&nbsp;d&nbsp;defaults&nbsp;to&nbsp;None.</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-has_key"><strong>has_key</strong></a>(...)</dt><dd><tt>D.<a href="#ArtistProxy-has_key">has_key</a>(k)&nbsp;-&gt;&nbsp;True&nbsp;if&nbsp;D&nbsp;has&nbsp;a&nbsp;key&nbsp;k,&nbsp;else&nbsp;False</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-items"><strong>items</strong></a>(...)</dt><dd><tt>D.<a href="#ArtistProxy-items">items</a>()&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;D's&nbsp;(key,&nbsp;value)&nbsp;pairs,&nbsp;as&nbsp;2-tuples</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-iteritems"><strong>iteritems</strong></a>(...)</dt><dd><tt>D.<a href="#ArtistProxy-iteritems">iteritems</a>()&nbsp;-&gt;&nbsp;an&nbsp;iterator&nbsp;over&nbsp;the&nbsp;(key,&nbsp;value)&nbsp;items&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-iterkeys"><strong>iterkeys</strong></a>(...)</dt><dd><tt>D.<a href="#ArtistProxy-iterkeys">iterkeys</a>()&nbsp;-&gt;&nbsp;an&nbsp;iterator&nbsp;over&nbsp;the&nbsp;keys&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-itervalues"><strong>itervalues</strong></a>(...)</dt><dd><tt>D.<a href="#ArtistProxy-itervalues">itervalues</a>()&nbsp;-&gt;&nbsp;an&nbsp;iterator&nbsp;over&nbsp;the&nbsp;values&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-keys"><strong>keys</strong></a>(...)</dt><dd><tt>D.<a href="#ArtistProxy-keys">keys</a>()&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;D's&nbsp;keys</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-pop"><strong>pop</strong></a>(...)</dt><dd><tt>D.<a href="#ArtistProxy-pop">pop</a>(k[,d])&nbsp;-&gt;&nbsp;v,&nbsp;remove&nbsp;specified&nbsp;key&nbsp;and&nbsp;return&nbsp;the&nbsp;corresponding&nbsp;value.<br>
-If&nbsp;key&nbsp;is&nbsp;not&nbsp;found,&nbsp;d&nbsp;is&nbsp;returned&nbsp;if&nbsp;given,&nbsp;otherwise&nbsp;KeyError&nbsp;is&nbsp;raised</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-popitem"><strong>popitem</strong></a>(...)</dt><dd><tt>D.<a href="#ArtistProxy-popitem">popitem</a>()&nbsp;-&gt;&nbsp;(k,&nbsp;v),&nbsp;remove&nbsp;and&nbsp;return&nbsp;some&nbsp;(key,&nbsp;value)&nbsp;pair&nbsp;as&nbsp;a<br>
-2-tuple;&nbsp;but&nbsp;raise&nbsp;KeyError&nbsp;if&nbsp;D&nbsp;is&nbsp;empty.</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-setdefault"><strong>setdefault</strong></a>(...)</dt><dd><tt>D.<a href="#ArtistProxy-setdefault">setdefault</a>(k[,d])&nbsp;-&gt;&nbsp;D.<a href="#ArtistProxy-get">get</a>(k,d),&nbsp;also&nbsp;set&nbsp;D[k]=d&nbsp;if&nbsp;k&nbsp;not&nbsp;in&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-update"><strong>update</strong></a>(...)</dt><dd><tt>D.<a href="#ArtistProxy-update">update</a>(E,&nbsp;**F)&nbsp;-&gt;&nbsp;None.&nbsp;&nbsp;Update&nbsp;D&nbsp;from&nbsp;dict/iterable&nbsp;E&nbsp;and&nbsp;F.<br>
-If&nbsp;E&nbsp;has&nbsp;a&nbsp;.<a href="#ArtistProxy-keys">keys</a>()&nbsp;method,&nbsp;does:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;k&nbsp;in&nbsp;E:&nbsp;D[k]&nbsp;=&nbsp;E[k]<br>
-If&nbsp;E&nbsp;lacks&nbsp;.<a href="#ArtistProxy-keys">keys</a>()&nbsp;method,&nbsp;does:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(k,&nbsp;v)&nbsp;in&nbsp;E:&nbsp;D[k]&nbsp;=&nbsp;v<br>
-In&nbsp;either&nbsp;case,&nbsp;this&nbsp;is&nbsp;followed&nbsp;by:&nbsp;for&nbsp;k&nbsp;in&nbsp;F:&nbsp;D[k]&nbsp;=&nbsp;F[k]</tt></dd></dl>
-
-<dl><dt><a name="ArtistProxy-values"><strong>values</strong></a>(...)</dt><dd><tt>D.<a href="#ArtistProxy-values">values</a>()&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;D's&nbsp;values</tt></dd></dl>
-
-<hr>
-Data and other attributes inherited from <a href="__builtin__.html#dict">__builtin__.dict</a>:<br>
-<dl><dt><strong>__hash__</strong> = None</dl>
-
-<dl><dt><strong>__new__</strong> = &lt;built-in method __new__ of type object at 0x1001222a0&gt;<dd><tt>T.<a href="#ArtistProxy-__new__">__new__</a>(S,&nbsp;...)&nbsp;-&gt;&nbsp;a&nbsp;new&nbsp;object&nbsp;with&nbsp;type&nbsp;S,&nbsp;a&nbsp;subtype&nbsp;of&nbsp;T</tt></dl>
-
-<dl><dt><strong>fromkeys</strong> = &lt;built-in method fromkeys of type object at 0x101026f60&gt;<dd><tt>dict.<a href="#ArtistProxy-fromkeys">fromkeys</a>(S[,v])&nbsp;-&gt;&nbsp;New&nbsp;dict&nbsp;with&nbsp;keys&nbsp;from&nbsp;S&nbsp;and&nbsp;values&nbsp;equal&nbsp;to&nbsp;v.<br>
-v&nbsp;defaults&nbsp;to&nbsp;None.</tt></dl>
-
</td></tr></table> <p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom>&nbsp;<br>
-<font color="#000000" face="helvetica, arial"><a name="GenericProxy">class <strong>GenericProxy</strong></a>(<a href="pyechonest.util.html#attrdict">pyechonest.util.attrdict</a>)</font></td></tr>
+<font color="#000000" face="helvetica, arial"><a name="GenericProxy">class <strong>GenericProxy</strong></a>(<a href="__builtin__.html#object">__builtin__.object</a>)</font></td></tr>
<tr><td bgcolor="#ffc8d8"><tt>&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
-<td width="100%"><dl><dt>Method resolution order:</dt>
-<dd><a href="pyechonest.proxies.html#GenericProxy">GenericProxy</a></dd>
-<dd><a href="pyechonest.util.html#attrdict">pyechonest.util.attrdict</a></dd>
-<dd><a href="__builtin__.html#dict">__builtin__.dict</a></dd>
-<dd><a href="__builtin__.html#object">__builtin__.object</a></dd>
-</dl>
-<hr>
-Methods defined here:<br>
+<td width="100%">Methods defined here:<br>
<dl><dt><a name="GenericProxy-__init__"><strong>__init__</strong></a>(self)</dt></dl>
<dl><dt><a name="GenericProxy-get_attribute"><strong>get_attribute</strong></a>(self, method_name, **kwargs)</dt></dl>
<hr>
-Data descriptors inherited from <a href="pyechonest.util.html#attrdict">pyechonest.util.attrdict</a>:<br>
+Data descriptors defined here:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>dictionary&nbsp;for&nbsp;instance&nbsp;variables&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
-<hr>
-Methods inherited from <a href="__builtin__.html#dict">__builtin__.dict</a>:<br>
-<dl><dt><a name="GenericProxy-__cmp__"><strong>__cmp__</strong></a>(...)</dt><dd><tt>x.<a href="#GenericProxy-__cmp__">__cmp__</a>(y)&nbsp;&lt;==&gt;&nbsp;cmp(x,y)</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-__contains__"><strong>__contains__</strong></a>(...)</dt><dd><tt>D.<a href="#GenericProxy-__contains__">__contains__</a>(k)&nbsp;-&gt;&nbsp;True&nbsp;if&nbsp;D&nbsp;has&nbsp;a&nbsp;key&nbsp;k,&nbsp;else&nbsp;False</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-__delitem__"><strong>__delitem__</strong></a>(...)</dt><dd><tt>x.<a href="#GenericProxy-__delitem__">__delitem__</a>(y)&nbsp;&lt;==&gt;&nbsp;del&nbsp;x[y]</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-__eq__"><strong>__eq__</strong></a>(...)</dt><dd><tt>x.<a href="#GenericProxy-__eq__">__eq__</a>(y)&nbsp;&lt;==&gt;&nbsp;x==y</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-__ge__"><strong>__ge__</strong></a>(...)</dt><dd><tt>x.<a href="#GenericProxy-__ge__">__ge__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&gt;=y</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-__getattribute__"><strong>__getattribute__</strong></a>(...)</dt><dd><tt>x.<a href="#GenericProxy-__getattribute__">__getattribute__</a>('name')&nbsp;&lt;==&gt;&nbsp;x.name</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-__getitem__"><strong>__getitem__</strong></a>(...)</dt><dd><tt>x.<a href="#GenericProxy-__getitem__">__getitem__</a>(y)&nbsp;&lt;==&gt;&nbsp;x[y]</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-__gt__"><strong>__gt__</strong></a>(...)</dt><dd><tt>x.<a href="#GenericProxy-__gt__">__gt__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&gt;y</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-__iter__"><strong>__iter__</strong></a>(...)</dt><dd><tt>x.<a href="#GenericProxy-__iter__">__iter__</a>()&nbsp;&lt;==&gt;&nbsp;iter(x)</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-__le__"><strong>__le__</strong></a>(...)</dt><dd><tt>x.<a href="#GenericProxy-__le__">__le__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&lt;=y</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-__len__"><strong>__len__</strong></a>(...)</dt><dd><tt>x.<a href="#GenericProxy-__len__">__len__</a>()&nbsp;&lt;==&gt;&nbsp;len(x)</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-__lt__"><strong>__lt__</strong></a>(...)</dt><dd><tt>x.<a href="#GenericProxy-__lt__">__lt__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&lt;y</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-__ne__"><strong>__ne__</strong></a>(...)</dt><dd><tt>x.<a href="#GenericProxy-__ne__">__ne__</a>(y)&nbsp;&lt;==&gt;&nbsp;x!=y</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-__repr__"><strong>__repr__</strong></a>(...)</dt><dd><tt>x.<a href="#GenericProxy-__repr__">__repr__</a>()&nbsp;&lt;==&gt;&nbsp;repr(x)</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-__setitem__"><strong>__setitem__</strong></a>(...)</dt><dd><tt>x.<a href="#GenericProxy-__setitem__">__setitem__</a>(i,&nbsp;y)&nbsp;&lt;==&gt;&nbsp;x[i]=y</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-__sizeof__"><strong>__sizeof__</strong></a>(...)</dt><dd><tt>D.<a href="#GenericProxy-__sizeof__">__sizeof__</a>()&nbsp;-&gt;&nbsp;size&nbsp;of&nbsp;D&nbsp;in&nbsp;memory,&nbsp;in&nbsp;bytes</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-clear"><strong>clear</strong></a>(...)</dt><dd><tt>D.<a href="#GenericProxy-clear">clear</a>()&nbsp;-&gt;&nbsp;None.&nbsp;&nbsp;Remove&nbsp;all&nbsp;items&nbsp;from&nbsp;D.</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-copy"><strong>copy</strong></a>(...)</dt><dd><tt>D.<a href="#GenericProxy-copy">copy</a>()&nbsp;-&gt;&nbsp;a&nbsp;shallow&nbsp;copy&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-get"><strong>get</strong></a>(...)</dt><dd><tt>D.<a href="#GenericProxy-get">get</a>(k[,d])&nbsp;-&gt;&nbsp;D[k]&nbsp;if&nbsp;k&nbsp;in&nbsp;D,&nbsp;else&nbsp;d.&nbsp;&nbsp;d&nbsp;defaults&nbsp;to&nbsp;None.</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-has_key"><strong>has_key</strong></a>(...)</dt><dd><tt>D.<a href="#GenericProxy-has_key">has_key</a>(k)&nbsp;-&gt;&nbsp;True&nbsp;if&nbsp;D&nbsp;has&nbsp;a&nbsp;key&nbsp;k,&nbsp;else&nbsp;False</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-items"><strong>items</strong></a>(...)</dt><dd><tt>D.<a href="#GenericProxy-items">items</a>()&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;D's&nbsp;(key,&nbsp;value)&nbsp;pairs,&nbsp;as&nbsp;2-tuples</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-iteritems"><strong>iteritems</strong></a>(...)</dt><dd><tt>D.<a href="#GenericProxy-iteritems">iteritems</a>()&nbsp;-&gt;&nbsp;an&nbsp;iterator&nbsp;over&nbsp;the&nbsp;(key,&nbsp;value)&nbsp;items&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-iterkeys"><strong>iterkeys</strong></a>(...)</dt><dd><tt>D.<a href="#GenericProxy-iterkeys">iterkeys</a>()&nbsp;-&gt;&nbsp;an&nbsp;iterator&nbsp;over&nbsp;the&nbsp;keys&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-itervalues"><strong>itervalues</strong></a>(...)</dt><dd><tt>D.<a href="#GenericProxy-itervalues">itervalues</a>()&nbsp;-&gt;&nbsp;an&nbsp;iterator&nbsp;over&nbsp;the&nbsp;values&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-keys"><strong>keys</strong></a>(...)</dt><dd><tt>D.<a href="#GenericProxy-keys">keys</a>()&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;D's&nbsp;keys</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-pop"><strong>pop</strong></a>(...)</dt><dd><tt>D.<a href="#GenericProxy-pop">pop</a>(k[,d])&nbsp;-&gt;&nbsp;v,&nbsp;remove&nbsp;specified&nbsp;key&nbsp;and&nbsp;return&nbsp;the&nbsp;corresponding&nbsp;value.<br>
-If&nbsp;key&nbsp;is&nbsp;not&nbsp;found,&nbsp;d&nbsp;is&nbsp;returned&nbsp;if&nbsp;given,&nbsp;otherwise&nbsp;KeyError&nbsp;is&nbsp;raised</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-popitem"><strong>popitem</strong></a>(...)</dt><dd><tt>D.<a href="#GenericProxy-popitem">popitem</a>()&nbsp;-&gt;&nbsp;(k,&nbsp;v),&nbsp;remove&nbsp;and&nbsp;return&nbsp;some&nbsp;(key,&nbsp;value)&nbsp;pair&nbsp;as&nbsp;a<br>
-2-tuple;&nbsp;but&nbsp;raise&nbsp;KeyError&nbsp;if&nbsp;D&nbsp;is&nbsp;empty.</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-setdefault"><strong>setdefault</strong></a>(...)</dt><dd><tt>D.<a href="#GenericProxy-setdefault">setdefault</a>(k[,d])&nbsp;-&gt;&nbsp;D.<a href="#GenericProxy-get">get</a>(k,d),&nbsp;also&nbsp;set&nbsp;D[k]=d&nbsp;if&nbsp;k&nbsp;not&nbsp;in&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-update"><strong>update</strong></a>(...)</dt><dd><tt>D.<a href="#GenericProxy-update">update</a>(E,&nbsp;**F)&nbsp;-&gt;&nbsp;None.&nbsp;&nbsp;Update&nbsp;D&nbsp;from&nbsp;dict/iterable&nbsp;E&nbsp;and&nbsp;F.<br>
-If&nbsp;E&nbsp;has&nbsp;a&nbsp;.<a href="#GenericProxy-keys">keys</a>()&nbsp;method,&nbsp;does:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;k&nbsp;in&nbsp;E:&nbsp;D[k]&nbsp;=&nbsp;E[k]<br>
-If&nbsp;E&nbsp;lacks&nbsp;.<a href="#GenericProxy-keys">keys</a>()&nbsp;method,&nbsp;does:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(k,&nbsp;v)&nbsp;in&nbsp;E:&nbsp;D[k]&nbsp;=&nbsp;v<br>
-In&nbsp;either&nbsp;case,&nbsp;this&nbsp;is&nbsp;followed&nbsp;by:&nbsp;for&nbsp;k&nbsp;in&nbsp;F:&nbsp;D[k]&nbsp;=&nbsp;F[k]</tt></dd></dl>
-
-<dl><dt><a name="GenericProxy-values"><strong>values</strong></a>(...)</dt><dd><tt>D.<a href="#GenericProxy-values">values</a>()&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;D's&nbsp;values</tt></dd></dl>
-
-<hr>
-Data and other attributes inherited from <a href="__builtin__.html#dict">__builtin__.dict</a>:<br>
-<dl><dt><strong>__hash__</strong> = None</dl>
-
-<dl><dt><strong>__new__</strong> = &lt;built-in method __new__ of type object at 0x1001222a0&gt;<dd><tt>T.<a href="#GenericProxy-__new__">__new__</a>(S,&nbsp;...)&nbsp;-&gt;&nbsp;a&nbsp;new&nbsp;object&nbsp;with&nbsp;type&nbsp;S,&nbsp;a&nbsp;subtype&nbsp;of&nbsp;T</tt></dl>
-
-<dl><dt><strong>fromkeys</strong> = &lt;built-in method fromkeys of type object at 0x1002b15f0&gt;<dd><tt>dict.<a href="#GenericProxy-fromkeys">fromkeys</a>(S[,v])&nbsp;-&gt;&nbsp;New&nbsp;dict&nbsp;with&nbsp;keys&nbsp;from&nbsp;S&nbsp;and&nbsp;values&nbsp;equal&nbsp;to&nbsp;v.<br>
-v&nbsp;defaults&nbsp;to&nbsp;None.</tt></dl>
-
</td></tr></table> <p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
@@ -258,8 +97,6 @@
<td width="100%"><dl><dt>Method resolution order:</dt>
<dd><a href="pyechonest.proxies.html#SongProxy">SongProxy</a></dd>
<dd><a href="pyechonest.proxies.html#GenericProxy">GenericProxy</a></dd>
-<dd><a href="pyechonest.util.html#attrdict">pyechonest.util.attrdict</a></dd>
-<dd><a href="__builtin__.html#dict">__builtin__.dict</a></dd>
<dd><a href="__builtin__.html#object">__builtin__.object</a></dd>
</dl>
<hr>
@@ -269,89 +106,13 @@
<dl><dt><a name="SongProxy-get_attribute"><strong>get_attribute</strong></a>(self, *args, **kwargs)</dt></dl>
<hr>
-Data descriptors inherited from <a href="pyechonest.util.html#attrdict">pyechonest.util.attrdict</a>:<br>
+Data descriptors inherited from <a href="pyechonest.proxies.html#GenericProxy">GenericProxy</a>:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>dictionary&nbsp;for&nbsp;instance&nbsp;variables&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
-<hr>
-Methods inherited from <a href="__builtin__.html#dict">__builtin__.dict</a>:<br>
-<dl><dt><a name="SongProxy-__cmp__"><strong>__cmp__</strong></a>(...)</dt><dd><tt>x.<a href="#SongProxy-__cmp__">__cmp__</a>(y)&nbsp;&lt;==&gt;&nbsp;cmp(x,y)</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-__contains__"><strong>__contains__</strong></a>(...)</dt><dd><tt>D.<a href="#SongProxy-__contains__">__contains__</a>(k)&nbsp;-&gt;&nbsp;True&nbsp;if&nbsp;D&nbsp;has&nbsp;a&nbsp;key&nbsp;k,&nbsp;else&nbsp;False</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-__delitem__"><strong>__delitem__</strong></a>(...)</dt><dd><tt>x.<a href="#SongProxy-__delitem__">__delitem__</a>(y)&nbsp;&lt;==&gt;&nbsp;del&nbsp;x[y]</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-__eq__"><strong>__eq__</strong></a>(...)</dt><dd><tt>x.<a href="#SongProxy-__eq__">__eq__</a>(y)&nbsp;&lt;==&gt;&nbsp;x==y</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-__ge__"><strong>__ge__</strong></a>(...)</dt><dd><tt>x.<a href="#SongProxy-__ge__">__ge__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&gt;=y</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-__getattribute__"><strong>__getattribute__</strong></a>(...)</dt><dd><tt>x.<a href="#SongProxy-__getattribute__">__getattribute__</a>('name')&nbsp;&lt;==&gt;&nbsp;x.name</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-__getitem__"><strong>__getitem__</strong></a>(...)</dt><dd><tt>x.<a href="#SongProxy-__getitem__">__getitem__</a>(y)&nbsp;&lt;==&gt;&nbsp;x[y]</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-__gt__"><strong>__gt__</strong></a>(...)</dt><dd><tt>x.<a href="#SongProxy-__gt__">__gt__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&gt;y</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-__iter__"><strong>__iter__</strong></a>(...)</dt><dd><tt>x.<a href="#SongProxy-__iter__">__iter__</a>()&nbsp;&lt;==&gt;&nbsp;iter(x)</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-__le__"><strong>__le__</strong></a>(...)</dt><dd><tt>x.<a href="#SongProxy-__le__">__le__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&lt;=y</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-__len__"><strong>__len__</strong></a>(...)</dt><dd><tt>x.<a href="#SongProxy-__len__">__len__</a>()&nbsp;&lt;==&gt;&nbsp;len(x)</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-__lt__"><strong>__lt__</strong></a>(...)</dt><dd><tt>x.<a href="#SongProxy-__lt__">__lt__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&lt;y</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-__ne__"><strong>__ne__</strong></a>(...)</dt><dd><tt>x.<a href="#SongProxy-__ne__">__ne__</a>(y)&nbsp;&lt;==&gt;&nbsp;x!=y</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-__repr__"><strong>__repr__</strong></a>(...)</dt><dd><tt>x.<a href="#SongProxy-__repr__">__repr__</a>()&nbsp;&lt;==&gt;&nbsp;repr(x)</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-__setitem__"><strong>__setitem__</strong></a>(...)</dt><dd><tt>x.<a href="#SongProxy-__setitem__">__setitem__</a>(i,&nbsp;y)&nbsp;&lt;==&gt;&nbsp;x[i]=y</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-__sizeof__"><strong>__sizeof__</strong></a>(...)</dt><dd><tt>D.<a href="#SongProxy-__sizeof__">__sizeof__</a>()&nbsp;-&gt;&nbsp;size&nbsp;of&nbsp;D&nbsp;in&nbsp;memory,&nbsp;in&nbsp;bytes</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-clear"><strong>clear</strong></a>(...)</dt><dd><tt>D.<a href="#SongProxy-clear">clear</a>()&nbsp;-&gt;&nbsp;None.&nbsp;&nbsp;Remove&nbsp;all&nbsp;items&nbsp;from&nbsp;D.</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-copy"><strong>copy</strong></a>(...)</dt><dd><tt>D.<a href="#SongProxy-copy">copy</a>()&nbsp;-&gt;&nbsp;a&nbsp;shallow&nbsp;copy&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-get"><strong>get</strong></a>(...)</dt><dd><tt>D.<a href="#SongProxy-get">get</a>(k[,d])&nbsp;-&gt;&nbsp;D[k]&nbsp;if&nbsp;k&nbsp;in&nbsp;D,&nbsp;else&nbsp;d.&nbsp;&nbsp;d&nbsp;defaults&nbsp;to&nbsp;None.</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-has_key"><strong>has_key</strong></a>(...)</dt><dd><tt>D.<a href="#SongProxy-has_key">has_key</a>(k)&nbsp;-&gt;&nbsp;True&nbsp;if&nbsp;D&nbsp;has&nbsp;a&nbsp;key&nbsp;k,&nbsp;else&nbsp;False</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-items"><strong>items</strong></a>(...)</dt><dd><tt>D.<a href="#SongProxy-items">items</a>()&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;D's&nbsp;(key,&nbsp;value)&nbsp;pairs,&nbsp;as&nbsp;2-tuples</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-iteritems"><strong>iteritems</strong></a>(...)</dt><dd><tt>D.<a href="#SongProxy-iteritems">iteritems</a>()&nbsp;-&gt;&nbsp;an&nbsp;iterator&nbsp;over&nbsp;the&nbsp;(key,&nbsp;value)&nbsp;items&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-iterkeys"><strong>iterkeys</strong></a>(...)</dt><dd><tt>D.<a href="#SongProxy-iterkeys">iterkeys</a>()&nbsp;-&gt;&nbsp;an&nbsp;iterator&nbsp;over&nbsp;the&nbsp;keys&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-itervalues"><strong>itervalues</strong></a>(...)</dt><dd><tt>D.<a href="#SongProxy-itervalues">itervalues</a>()&nbsp;-&gt;&nbsp;an&nbsp;iterator&nbsp;over&nbsp;the&nbsp;values&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-keys"><strong>keys</strong></a>(...)</dt><dd><tt>D.<a href="#SongProxy-keys">keys</a>()&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;D's&nbsp;keys</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-pop"><strong>pop</strong></a>(...)</dt><dd><tt>D.<a href="#SongProxy-pop">pop</a>(k[,d])&nbsp;-&gt;&nbsp;v,&nbsp;remove&nbsp;specified&nbsp;key&nbsp;and&nbsp;return&nbsp;the&nbsp;corresponding&nbsp;value.<br>
-If&nbsp;key&nbsp;is&nbsp;not&nbsp;found,&nbsp;d&nbsp;is&nbsp;returned&nbsp;if&nbsp;given,&nbsp;otherwise&nbsp;KeyError&nbsp;is&nbsp;raised</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-popitem"><strong>popitem</strong></a>(...)</dt><dd><tt>D.<a href="#SongProxy-popitem">popitem</a>()&nbsp;-&gt;&nbsp;(k,&nbsp;v),&nbsp;remove&nbsp;and&nbsp;return&nbsp;some&nbsp;(key,&nbsp;value)&nbsp;pair&nbsp;as&nbsp;a<br>
-2-tuple;&nbsp;but&nbsp;raise&nbsp;KeyError&nbsp;if&nbsp;D&nbsp;is&nbsp;empty.</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-setdefault"><strong>setdefault</strong></a>(...)</dt><dd><tt>D.<a href="#SongProxy-setdefault">setdefault</a>(k[,d])&nbsp;-&gt;&nbsp;D.<a href="#SongProxy-get">get</a>(k,d),&nbsp;also&nbsp;set&nbsp;D[k]=d&nbsp;if&nbsp;k&nbsp;not&nbsp;in&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-update"><strong>update</strong></a>(...)</dt><dd><tt>D.<a href="#SongProxy-update">update</a>(E,&nbsp;**F)&nbsp;-&gt;&nbsp;None.&nbsp;&nbsp;Update&nbsp;D&nbsp;from&nbsp;dict/iterable&nbsp;E&nbsp;and&nbsp;F.<br>
-If&nbsp;E&nbsp;has&nbsp;a&nbsp;.<a href="#SongProxy-keys">keys</a>()&nbsp;method,&nbsp;does:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;k&nbsp;in&nbsp;E:&nbsp;D[k]&nbsp;=&nbsp;E[k]<br>
-If&nbsp;E&nbsp;lacks&nbsp;.<a href="#SongProxy-keys">keys</a>()&nbsp;method,&nbsp;does:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(k,&nbsp;v)&nbsp;in&nbsp;E:&nbsp;D[k]&nbsp;=&nbsp;v<br>
-In&nbsp;either&nbsp;case,&nbsp;this&nbsp;is&nbsp;followed&nbsp;by:&nbsp;for&nbsp;k&nbsp;in&nbsp;F:&nbsp;D[k]&nbsp;=&nbsp;F[k]</tt></dd></dl>
-
-<dl><dt><a name="SongProxy-values"><strong>values</strong></a>(...)</dt><dd><tt>D.<a href="#SongProxy-values">values</a>()&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;D's&nbsp;values</tt></dd></dl>
-
-<hr>
-Data and other attributes inherited from <a href="__builtin__.html#dict">__builtin__.dict</a>:<br>
-<dl><dt><strong>__hash__</strong> = None</dl>
-
-<dl><dt><strong>__new__</strong> = &lt;built-in method __new__ of type object at 0x1001222a0&gt;<dd><tt>T.<a href="#SongProxy-__new__">__new__</a>(S,&nbsp;...)&nbsp;-&gt;&nbsp;a&nbsp;new&nbsp;object&nbsp;with&nbsp;type&nbsp;S,&nbsp;a&nbsp;subtype&nbsp;of&nbsp;T</tt></dl>
-
-<dl><dt><strong>fromkeys</strong> = &lt;built-in method fromkeys of type object at 0x101027310&gt;<dd><tt>dict.<a href="#SongProxy-fromkeys">fromkeys</a>(S[,v])&nbsp;-&gt;&nbsp;New&nbsp;dict&nbsp;with&nbsp;keys&nbsp;from&nbsp;S&nbsp;and&nbsp;values&nbsp;equal&nbsp;to&nbsp;v.<br>
-v&nbsp;defaults&nbsp;to&nbsp;None.</tt></dl>
-
</td></tr></table> <p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
@@ -362,8 +123,6 @@
<td width="100%"><dl><dt>Method resolution order:</dt>
<dd><a href="pyechonest.proxies.html#TrackProxy">TrackProxy</a></dd>
<dd><a href="pyechonest.proxies.html#GenericProxy">GenericProxy</a></dd>
-<dd><a href="pyechonest.util.html#attrdict">pyechonest.util.attrdict</a></dd>
-<dd><a href="__builtin__.html#dict">__builtin__.dict</a></dd>
<dd><a href="__builtin__.html#object">__builtin__.object</a></dd>
</dl>
<hr>
@@ -377,88 +136,12 @@
<dl><dt><a name="TrackProxy-get_attribute"><strong>get_attribute</strong></a>(self, method_name, **kwargs)</dt></dl>
<hr>
-Data descriptors inherited from <a href="pyechonest.util.html#attrdict">pyechonest.util.attrdict</a>:<br>
+Data descriptors inherited from <a href="pyechonest.proxies.html#GenericProxy">GenericProxy</a>:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>dictionary&nbsp;for&nbsp;instance&nbsp;variables&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
-<hr>
-Methods inherited from <a href="__builtin__.html#dict">__builtin__.dict</a>:<br>
-<dl><dt><a name="TrackProxy-__cmp__"><strong>__cmp__</strong></a>(...)</dt><dd><tt>x.<a href="#TrackProxy-__cmp__">__cmp__</a>(y)&nbsp;&lt;==&gt;&nbsp;cmp(x,y)</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-__contains__"><strong>__contains__</strong></a>(...)</dt><dd><tt>D.<a href="#TrackProxy-__contains__">__contains__</a>(k)&nbsp;-&gt;&nbsp;True&nbsp;if&nbsp;D&nbsp;has&nbsp;a&nbsp;key&nbsp;k,&nbsp;else&nbsp;False</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-__delitem__"><strong>__delitem__</strong></a>(...)</dt><dd><tt>x.<a href="#TrackProxy-__delitem__">__delitem__</a>(y)&nbsp;&lt;==&gt;&nbsp;del&nbsp;x[y]</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-__eq__"><strong>__eq__</strong></a>(...)</dt><dd><tt>x.<a href="#TrackProxy-__eq__">__eq__</a>(y)&nbsp;&lt;==&gt;&nbsp;x==y</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-__ge__"><strong>__ge__</strong></a>(...)</dt><dd><tt>x.<a href="#TrackProxy-__ge__">__ge__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&gt;=y</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-__getattribute__"><strong>__getattribute__</strong></a>(...)</dt><dd><tt>x.<a href="#TrackProxy-__getattribute__">__getattribute__</a>('name')&nbsp;&lt;==&gt;&nbsp;x.name</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-__getitem__"><strong>__getitem__</strong></a>(...)</dt><dd><tt>x.<a href="#TrackProxy-__getitem__">__getitem__</a>(y)&nbsp;&lt;==&gt;&nbsp;x[y]</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-__gt__"><strong>__gt__</strong></a>(...)</dt><dd><tt>x.<a href="#TrackProxy-__gt__">__gt__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&gt;y</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-__iter__"><strong>__iter__</strong></a>(...)</dt><dd><tt>x.<a href="#TrackProxy-__iter__">__iter__</a>()&nbsp;&lt;==&gt;&nbsp;iter(x)</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-__le__"><strong>__le__</strong></a>(...)</dt><dd><tt>x.<a href="#TrackProxy-__le__">__le__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&lt;=y</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-__len__"><strong>__len__</strong></a>(...)</dt><dd><tt>x.<a href="#TrackProxy-__len__">__len__</a>()&nbsp;&lt;==&gt;&nbsp;len(x)</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-__lt__"><strong>__lt__</strong></a>(...)</dt><dd><tt>x.<a href="#TrackProxy-__lt__">__lt__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&lt;y</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-__ne__"><strong>__ne__</strong></a>(...)</dt><dd><tt>x.<a href="#TrackProxy-__ne__">__ne__</a>(y)&nbsp;&lt;==&gt;&nbsp;x!=y</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-__repr__"><strong>__repr__</strong></a>(...)</dt><dd><tt>x.<a href="#TrackProxy-__repr__">__repr__</a>()&nbsp;&lt;==&gt;&nbsp;repr(x)</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-__setitem__"><strong>__setitem__</strong></a>(...)</dt><dd><tt>x.<a href="#TrackProxy-__setitem__">__setitem__</a>(i,&nbsp;y)&nbsp;&lt;==&gt;&nbsp;x[i]=y</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-__sizeof__"><strong>__sizeof__</strong></a>(...)</dt><dd><tt>D.<a href="#TrackProxy-__sizeof__">__sizeof__</a>()&nbsp;-&gt;&nbsp;size&nbsp;of&nbsp;D&nbsp;in&nbsp;memory,&nbsp;in&nbsp;bytes</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-clear"><strong>clear</strong></a>(...)</dt><dd><tt>D.<a href="#TrackProxy-clear">clear</a>()&nbsp;-&gt;&nbsp;None.&nbsp;&nbsp;Remove&nbsp;all&nbsp;items&nbsp;from&nbsp;D.</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-copy"><strong>copy</strong></a>(...)</dt><dd><tt>D.<a href="#TrackProxy-copy">copy</a>()&nbsp;-&gt;&nbsp;a&nbsp;shallow&nbsp;copy&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-get"><strong>get</strong></a>(...)</dt><dd><tt>D.<a href="#TrackProxy-get">get</a>(k[,d])&nbsp;-&gt;&nbsp;D[k]&nbsp;if&nbsp;k&nbsp;in&nbsp;D,&nbsp;else&nbsp;d.&nbsp;&nbsp;d&nbsp;defaults&nbsp;to&nbsp;None.</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-has_key"><strong>has_key</strong></a>(...)</dt><dd><tt>D.<a href="#TrackProxy-has_key">has_key</a>(k)&nbsp;-&gt;&nbsp;True&nbsp;if&nbsp;D&nbsp;has&nbsp;a&nbsp;key&nbsp;k,&nbsp;else&nbsp;False</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-items"><strong>items</strong></a>(...)</dt><dd><tt>D.<a href="#TrackProxy-items">items</a>()&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;D's&nbsp;(key,&nbsp;value)&nbsp;pairs,&nbsp;as&nbsp;2-tuples</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-iteritems"><strong>iteritems</strong></a>(...)</dt><dd><tt>D.<a href="#TrackProxy-iteritems">iteritems</a>()&nbsp;-&gt;&nbsp;an&nbsp;iterator&nbsp;over&nbsp;the&nbsp;(key,&nbsp;value)&nbsp;items&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-iterkeys"><strong>iterkeys</strong></a>(...)</dt><dd><tt>D.<a href="#TrackProxy-iterkeys">iterkeys</a>()&nbsp;-&gt;&nbsp;an&nbsp;iterator&nbsp;over&nbsp;the&nbsp;keys&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-itervalues"><strong>itervalues</strong></a>(...)</dt><dd><tt>D.<a href="#TrackProxy-itervalues">itervalues</a>()&nbsp;-&gt;&nbsp;an&nbsp;iterator&nbsp;over&nbsp;the&nbsp;values&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-keys"><strong>keys</strong></a>(...)</dt><dd><tt>D.<a href="#TrackProxy-keys">keys</a>()&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;D's&nbsp;keys</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-pop"><strong>pop</strong></a>(...)</dt><dd><tt>D.<a href="#TrackProxy-pop">pop</a>(k[,d])&nbsp;-&gt;&nbsp;v,&nbsp;remove&nbsp;specified&nbsp;key&nbsp;and&nbsp;return&nbsp;the&nbsp;corresponding&nbsp;value.<br>
-If&nbsp;key&nbsp;is&nbsp;not&nbsp;found,&nbsp;d&nbsp;is&nbsp;returned&nbsp;if&nbsp;given,&nbsp;otherwise&nbsp;KeyError&nbsp;is&nbsp;raised</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-popitem"><strong>popitem</strong></a>(...)</dt><dd><tt>D.<a href="#TrackProxy-popitem">popitem</a>()&nbsp;-&gt;&nbsp;(k,&nbsp;v),&nbsp;remove&nbsp;and&nbsp;return&nbsp;some&nbsp;(key,&nbsp;value)&nbsp;pair&nbsp;as&nbsp;a<br>
-2-tuple;&nbsp;but&nbsp;raise&nbsp;KeyError&nbsp;if&nbsp;D&nbsp;is&nbsp;empty.</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-setdefault"><strong>setdefault</strong></a>(...)</dt><dd><tt>D.<a href="#TrackProxy-setdefault">setdefault</a>(k[,d])&nbsp;-&gt;&nbsp;D.<a href="#TrackProxy-get">get</a>(k,d),&nbsp;also&nbsp;set&nbsp;D[k]=d&nbsp;if&nbsp;k&nbsp;not&nbsp;in&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-update"><strong>update</strong></a>(...)</dt><dd><tt>D.<a href="#TrackProxy-update">update</a>(E,&nbsp;**F)&nbsp;-&gt;&nbsp;None.&nbsp;&nbsp;Update&nbsp;D&nbsp;from&nbsp;dict/iterable&nbsp;E&nbsp;and&nbsp;F.<br>
-If&nbsp;E&nbsp;has&nbsp;a&nbsp;.<a href="#TrackProxy-keys">keys</a>()&nbsp;method,&nbsp;does:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;k&nbsp;in&nbsp;E:&nbsp;D[k]&nbsp;=&nbsp;E[k]<br>
-If&nbsp;E&nbsp;lacks&nbsp;.<a href="#TrackProxy-keys">keys</a>()&nbsp;method,&nbsp;does:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(k,&nbsp;v)&nbsp;in&nbsp;E:&nbsp;D[k]&nbsp;=&nbsp;v<br>
-In&nbsp;either&nbsp;case,&nbsp;this&nbsp;is&nbsp;followed&nbsp;by:&nbsp;for&nbsp;k&nbsp;in&nbsp;F:&nbsp;D[k]&nbsp;=&nbsp;F[k]</tt></dd></dl>
-
-<dl><dt><a name="TrackProxy-values"><strong>values</strong></a>(...)</dt><dd><tt>D.<a href="#TrackProxy-values">values</a>()&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;D's&nbsp;values</tt></dd></dl>
-
-<hr>
-Data and other attributes inherited from <a href="__builtin__.html#dict">__builtin__.dict</a>:<br>
-<dl><dt><strong>__hash__</strong> = None</dl>
-
-<dl><dt><strong>__new__</strong> = &lt;built-in method __new__ of type object at 0x1001222a0&gt;<dd><tt>T.<a href="#TrackProxy-__new__">__new__</a>(S,&nbsp;...)&nbsp;-&gt;&nbsp;a&nbsp;new&nbsp;object&nbsp;with&nbsp;type&nbsp;S,&nbsp;a&nbsp;subtype&nbsp;of&nbsp;T</tt></dl>
-
-<dl><dt><strong>fromkeys</strong> = &lt;built-in method fromkeys of type object at 0x1010276c0&gt;<dd><tt>dict.<a href="#TrackProxy-fromkeys">fromkeys</a>(S[,v])&nbsp;-&gt;&nbsp;New&nbsp;dict&nbsp;with&nbsp;keys&nbsp;from&nbsp;S&nbsp;and&nbsp;values&nbsp;equal&nbsp;to&nbsp;v.<br>
-v&nbsp;defaults&nbsp;to&nbsp;None.</tt></dl>
-
</td></tr></table></td></tr></table>
</body></html>
View
7 doc/pyechonest.results.html
@@ -8,7 +8,7 @@
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong><a href="pyechonest.html"><font color="#ffffff">pyechonest</font></a>.results</strong></big></big></font></td
><td align=right valign=bottom
-><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="/pyechonest/results.py">/pyechonest/results.py</a></font></td></tr></table>
+><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:/Users/tylerw/Documents/echonest/projects/pyechonest/branches/wiry-wildebeest/pyechonest/results.py">/Users/tylerw/Documents/echonest/projects/pyechonest/branches/wiry-wildebeest/pyechonest/results.py</a></font></td></tr></table>
<p><tt>Copyright&nbsp;(c)&nbsp;2010&nbsp;The&nbsp;Echo&nbsp;Nest.&nbsp;All&nbsp;rights&nbsp;reserved.<br>
Created&nbsp;by&nbsp;Tyler&nbsp;Williams&nbsp;on&nbsp;2010-04-25.</tt></p>
<p>
@@ -19,8 +19,7 @@
<tr><td bgcolor="#aa55cc"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><table width="100%" summary="list"><tr><td width="25%" valign=top><a href="logging.html">logging</a><br>
-</td><td width="25%" valign=top><a href="pyechonest.util.html">pyechonest.util</a><br>
-</td><td width="25%" valign=top></td><td width="25%" valign=top></td></tr></table></td></tr></table><p>
+</td><td width="25%" valign=top></td><td width="25%" valign=top></td><td width="25%" valign=top></td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ee77aa">
<td colspan=3 valign=bottom>&nbsp;<br>
@@ -140,7 +139,7 @@
<dl><dt><strong>__new__</strong> = &lt;built-in method __new__ of type object at 0x1001222a0&gt;<dd><tt>T.<a href="#Result-__new__">__new__</a>(S,&nbsp;...)&nbsp;-&gt;&nbsp;a&nbsp;new&nbsp;object&nbsp;with&nbsp;type&nbsp;S,&nbsp;a&nbsp;subtype&nbsp;of&nbsp;T</tt></dl>
-<dl><dt><strong>fromkeys</strong> = &lt;built-in method fromkeys of type object at 0x1002b1190&gt;<dd><tt>dict.<a href="#Result-fromkeys">fromkeys</a>(S[,v])&nbsp;-&gt;&nbsp;New&nbsp;dict&nbsp;with&nbsp;keys&nbsp;from&nbsp;S&nbsp;and&nbsp;values&nbsp;equal&nbsp;to&nbsp;v.<br>
+<dl><dt><strong>fromkeys</strong> = &lt;built-in method fromkeys of type object at 0x1014022e0&gt;<dd><tt>dict.<a href="#Result-fromkeys">fromkeys</a>(S[,v])&nbsp;-&gt;&nbsp;New&nbsp;dict&nbsp;with&nbsp;keys&nbsp;from&nbsp;S&nbsp;and&nbsp;values&nbsp;equal&nbsp;to&nbsp;v.<br>
v&nbsp;defaults&nbsp;to&nbsp;None.</tt></dl>
</td></tr></table></td></tr></table><p>
View
82 doc/pyechonest.song.html
@@ -8,11 +8,11 @@
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong><a href="pyechonest.html"><font color="#ffffff">pyechonest</font></a>.song</strong></big></big></font></td
><td align=right valign=bottom
-><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="/pyechonest/song.py">/pyechonest/song.py</a></font></td></tr></table>
+><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:/Users/tylerw/Documents/echonest/projects/pyechonest/branches/wiry-wildebeest/pyechonest/song.py">/Users/tylerw/Documents/echonest/projects/pyechonest/branches/wiry-wildebeest/pyechonest/song.py</a></font></td></tr></table>
<p><tt>Copyright&nbsp;(c)&nbsp;2010&nbsp;The&nbsp;Echo&nbsp;Nest.&nbsp;All&nbsp;rights&nbsp;reserved.<br>
Created&nbsp;by&nbsp;Tyler&nbsp;Williams&nbsp;on&nbsp;2010-04-25.<br>
&nbsp;<br>
-The&nbsp;<a href="#Song">Song</a>&nbsp;module&nbsp;loosely&nbsp;covers&nbsp;<a href="http://beta.developer.echonest.com/song.html">http://beta.developer.echonest.com/song.html</a><br>
+The&nbsp;<a href="#Song">Song</a>&nbsp;module&nbsp;loosely&nbsp;covers&nbsp;<a href="http://developer.echonest.com/docs/v4/song.html">http://developer.echonest.com/docs/v4/song.html</a><br>
Refer&nbsp;to&nbsp;the&nbsp;official&nbsp;api&nbsp;documentation&nbsp;if&nbsp;you&nbsp;are&nbsp;unsure&nbsp;about&nbsp;something.</tt></p>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
@@ -66,8 +66,6 @@
<dd><a href="pyechonest.song.html#Song">Song</a></dd>
<dd><a href="pyechonest.proxies.html#SongProxy">pyechonest.proxies.SongProxy</a></dd>
<dd><a href="pyechonest.proxies.html#GenericProxy">pyechonest.proxies.GenericProxy</a></dd>
-<dd><a href="pyechonest.util.html#attrdict">pyechonest.util.attrdict</a></dd>
-<dd><a href="__builtin__.html#dict">__builtin__.dict</a></dd>
<dd><a href="__builtin__.html#object">__builtin__.object</a></dd>
</dl>
<hr>
@@ -178,87 +176,13 @@
<dl><dt><a name="Song-get_attribute"><strong>get_attribute</strong></a>(self, *args, **kwargs)</dt></dl>
<hr>
-Data descriptors inherited from <a href="pyechonest.util.html#attrdict">pyechonest.util.attrdict</a>:<br>
+Data descriptors inherited from <a href="pyechonest.proxies.html#GenericProxy">pyechonest.proxies.GenericProxy</a>:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>dictionary&nbsp;for&nbsp;instance&nbsp;variables&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
-<hr>
-Methods inherited from <a href="__builtin__.html#dict">__builtin__.dict</a>:<br>
-<dl><dt><a name="Song-__cmp__"><strong>__cmp__</strong></a>(...)</dt><dd><tt>x.<a href="#Song-__cmp__">__cmp__</a>(y)&nbsp;&lt;==&gt;&nbsp;cmp(x,y)</tt></dd></dl>
-
-<dl><dt><a name="Song-__contains__"><strong>__contains__</strong></a>(...)</dt><dd><tt>D.<a href="#Song-__contains__">__contains__</a>(k)&nbsp;-&gt;&nbsp;True&nbsp;if&nbsp;D&nbsp;has&nbsp;a&nbsp;key&nbsp;k,&nbsp;else&nbsp;False</tt></dd></dl>
-
-<dl><dt><a name="Song-__delitem__"><strong>__delitem__</strong></a>(...)</dt><dd><tt>x.<a href="#Song-__delitem__">__delitem__</a>(y)&nbsp;&lt;==&gt;&nbsp;del&nbsp;x[y]</tt></dd></dl>
-
-<dl><dt><a name="Song-__eq__"><strong>__eq__</strong></a>(...)</dt><dd><tt>x.<a href="#Song-__eq__">__eq__</a>(y)&nbsp;&lt;==&gt;&nbsp;x==y</tt></dd></dl>
-
-<dl><dt><a name="Song-__ge__"><strong>__ge__</strong></a>(...)</dt><dd><tt>x.<a href="#Song-__ge__">__ge__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&gt;=y</tt></dd></dl>
-
-<dl><dt><a name="Song-__getattribute__"><strong>__getattribute__</strong></a>(...)</dt><dd><tt>x.<a href="#Song-__getattribute__">__getattribute__</a>('name')&nbsp;&lt;==&gt;&nbsp;x.name</tt></dd></dl>
-
-<dl><dt><a name="Song-__getitem__"><strong>__getitem__</strong></a>(...)</dt><dd><tt>x.<a href="#Song-__getitem__">__getitem__</a>(y)&nbsp;&lt;==&gt;&nbsp;x[y]</tt></dd></dl>
-
-<dl><dt><a name="Song-__gt__"><strong>__gt__</strong></a>(...)</dt><dd><tt>x.<a href="#Song-__gt__">__gt__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&gt;y</tt></dd></dl>
-
-<dl><dt><a name="Song-__iter__"><strong>__iter__</strong></a>(...)</dt><dd><tt>x.<a href="#Song-__iter__">__iter__</a>()&nbsp;&lt;==&gt;&nbsp;iter(x)</tt></dd></dl>
-
-<dl><dt><a name="Song-__le__"><strong>__le__</strong></a>(...)</dt><dd><tt>x.<a href="#Song-__le__">__le__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&lt;=y</tt></dd></dl>
-
-<dl><dt><a name="Song-__len__"><strong>__len__</strong></a>(...)</dt><dd><tt>x.<a href="#Song-__len__">__len__</a>()&nbsp;&lt;==&gt;&nbsp;len(x)</tt></dd></dl>
-
-<dl><dt><a name="Song-__lt__"><strong>__lt__</strong></a>(...)</dt><dd><tt>x.<a href="#Song-__lt__">__lt__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&lt;y</tt></dd></dl>
-
-<dl><dt><a name="Song-__ne__"><strong>__ne__</strong></a>(...)</dt><dd><tt>x.<a href="#Song-__ne__">__ne__</a>(y)&nbsp;&lt;==&gt;&nbsp;x!=y</tt></dd></dl>
-
-<dl><dt><a name="Song-__setitem__"><strong>__setitem__</strong></a>(...)</dt><dd><tt>x.<a href="#Song-__setitem__">__setitem__</a>(i,&nbsp;y)&nbsp;&lt;==&gt;&nbsp;x[i]=y</tt></dd></dl>
-
-<dl><dt><a name="Song-__sizeof__"><strong>__sizeof__</strong></a>(...)</dt><dd><tt>D.<a href="#Song-__sizeof__">__sizeof__</a>()&nbsp;-&gt;&nbsp;size&nbsp;of&nbsp;D&nbsp;in&nbsp;memory,&nbsp;in&nbsp;bytes</tt></dd></dl>
-
-<dl><dt><a name="Song-clear"><strong>clear</strong></a>(...)</dt><dd><tt>D.<a href="#Song-clear">clear</a>()&nbsp;-&gt;&nbsp;None.&nbsp;&nbsp;Remove&nbsp;all&nbsp;items&nbsp;from&nbsp;D.</tt></dd></dl>
-
-<dl><dt><a name="Song-copy"><strong>copy</strong></a>(...)</dt><dd><tt>D.<a href="#Song-copy">copy</a>()&nbsp;-&gt;&nbsp;a&nbsp;shallow&nbsp;copy&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="Song-get"><strong>get</strong></a>(...)</dt><dd><tt>D.<a href="#Song-get">get</a>(k[,d])&nbsp;-&gt;&nbsp;D[k]&nbsp;if&nbsp;k&nbsp;in&nbsp;D,&nbsp;else&nbsp;d.&nbsp;&nbsp;d&nbsp;defaults&nbsp;to&nbsp;None.</tt></dd></dl>
-
-<dl><dt><a name="Song-has_key"><strong>has_key</strong></a>(...)</dt><dd><tt>D.<a href="#Song-has_key">has_key</a>(k)&nbsp;-&gt;&nbsp;True&nbsp;if&nbsp;D&nbsp;has&nbsp;a&nbsp;key&nbsp;k,&nbsp;else&nbsp;False</tt></dd></dl>
-
-<dl><dt><a name="Song-items"><strong>items</strong></a>(...)</dt><dd><tt>D.<a href="#Song-items">items</a>()&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;D's&nbsp;(key,&nbsp;value)&nbsp;pairs,&nbsp;as&nbsp;2-tuples</tt></dd></dl>
-
-<dl><dt><a name="Song-iteritems"><strong>iteritems</strong></a>(...)</dt><dd><tt>D.<a href="#Song-iteritems">iteritems</a>()&nbsp;-&gt;&nbsp;an&nbsp;iterator&nbsp;over&nbsp;the&nbsp;(key,&nbsp;value)&nbsp;items&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="Song-iterkeys"><strong>iterkeys</strong></a>(...)</dt><dd><tt>D.<a href="#Song-iterkeys">iterkeys</a>()&nbsp;-&gt;&nbsp;an&nbsp;iterator&nbsp;over&nbsp;the&nbsp;keys&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="Song-itervalues"><strong>itervalues</strong></a>(...)</dt><dd><tt>D.<a href="#Song-itervalues">itervalues</a>()&nbsp;-&gt;&nbsp;an&nbsp;iterator&nbsp;over&nbsp;the&nbsp;values&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="Song-keys"><strong>keys</strong></a>(...)</dt><dd><tt>D.<a href="#Song-keys">keys</a>()&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;D's&nbsp;keys</tt></dd></dl>
-
-<dl><dt><a name="Song-pop"><strong>pop</strong></a>(...)</dt><dd><tt>D.<a href="#Song-pop">pop</a>(k[,d])&nbsp;-&gt;&nbsp;v,&nbsp;remove&nbsp;specified&nbsp;key&nbsp;and&nbsp;return&nbsp;the&nbsp;corresponding&nbsp;value.<br>
-If&nbsp;key&nbsp;is&nbsp;not&nbsp;found,&nbsp;d&nbsp;is&nbsp;returned&nbsp;if&nbsp;given,&nbsp;otherwise&nbsp;KeyError&nbsp;is&nbsp;raised</tt></dd></dl>
-
-<dl><dt><a name="Song-popitem"><strong>popitem</strong></a>(...)</dt><dd><tt>D.<a href="#Song-popitem">popitem</a>()&nbsp;-&gt;&nbsp;(k,&nbsp;v),&nbsp;remove&nbsp;and&nbsp;return&nbsp;some&nbsp;(key,&nbsp;value)&nbsp;pair&nbsp;as&nbsp;a<br>
-2-tuple;&nbsp;but&nbsp;raise&nbsp;KeyError&nbsp;if&nbsp;D&nbsp;is&nbsp;empty.</tt></dd></dl>
-
-<dl><dt><a name="Song-setdefault"><strong>setdefault</strong></a>(...)</dt><dd><tt>D.<a href="#Song-setdefault">setdefault</a>(k[,d])&nbsp;-&gt;&nbsp;D.<a href="#Song-get">get</a>(k,d),&nbsp;also&nbsp;set&nbsp;D[k]=d&nbsp;if&nbsp;k&nbsp;not&nbsp;in&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="Song-update"><strong>update</strong></a>(...)</dt><dd><tt>D.<a href="#Song-update">update</a>(E,&nbsp;**F)&nbsp;-&gt;&nbsp;None.&nbsp;&nbsp;Update&nbsp;D&nbsp;from&nbsp;dict/iterable&nbsp;E&nbsp;and&nbsp;F.<br>
-If&nbsp;E&nbsp;has&nbsp;a&nbsp;.<a href="#Song-keys">keys</a>()&nbsp;method,&nbsp;does:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;k&nbsp;in&nbsp;E:&nbsp;D[k]&nbsp;=&nbsp;E[k]<br>
-If&nbsp;E&nbsp;lacks&nbsp;.<a href="#Song-keys">keys</a>()&nbsp;method,&nbsp;does:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(k,&nbsp;v)&nbsp;in&nbsp;E:&nbsp;D[k]&nbsp;=&nbsp;v<br>
-In&nbsp;either&nbsp;case,&nbsp;this&nbsp;is&nbsp;followed&nbsp;by:&nbsp;for&nbsp;k&nbsp;in&nbsp;F:&nbsp;D[k]&nbsp;=&nbsp;F[k]</tt></dd></dl>
-
-<dl><dt><a name="Song-values"><strong>values</strong></a>(...)</dt><dd><tt>D.<a href="#Song-values">values</a>()&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;D's&nbsp;values</tt></dd></dl>
-
-<hr>
-Data and other attributes inherited from <a href="__builtin__.html#dict">__builtin__.dict</a>:<br>
-<dl><dt><strong>__hash__</strong> = None</dl>
-
-<dl><dt><strong>__new__</strong> = &lt;built-in method __new__ of type object at 0x1001222a0&gt;<dd><tt>T.<a href="#Song-__new__">__new__</a>(S,&nbsp;...)&nbsp;-&gt;&nbsp;a&nbsp;new&nbsp;object&nbsp;with&nbsp;type&nbsp;S,&nbsp;a&nbsp;subtype&nbsp;of&nbsp;T</tt></dl>
-
-<dl><dt><strong>fromkeys</strong> = &lt;built-in method fromkeys of type object at 0x101029700&gt;<dd><tt>dict.<a href="#Song-fromkeys">fromkeys</a>(S[,v])&nbsp;-&gt;&nbsp;New&nbsp;dict&nbsp;with&nbsp;keys&nbsp;from&nbsp;S&nbsp;and&nbsp;values&nbsp;equal&nbsp;to&nbsp;v.<br>
-v&nbsp;defaults&nbsp;to&nbsp;None.</tt></dl>
-
</td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#eeaa77">
View
82 doc/pyechonest.track.html
@@ -8,7 +8,7 @@
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong><a href="pyechonest.html"><font color="#ffffff">pyechonest</font></a>.track</strong></big></big></font></td
><td align=right valign=bottom
-><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="/pyechonest/track.py">/pyechonest/track.py</a></font></td></tr></table>
+><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:/Users/tylerw/Documents/echonest/projects/pyechonest/branches/wiry-wildebeest/pyechonest/track.py">/Users/tylerw/Documents/echonest/projects/pyechonest/branches/wiry-wildebeest/pyechonest/track.py</a></font></td></tr></table>
<p></p>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
@@ -71,7 +71,7 @@
start_of_fade_out&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;float<br>
status&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.&nbsp;'complete'<br>
tatums&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;list&nbsp;of&nbsp;dicts<br>
-tempo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;float<br>
+tempo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;flat<br>
tempo_confidence&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;float<br>
title&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.&nbsp;'Interiors'&nbsp;or&nbsp;None<br>&nbsp;</tt></td></tr>
<tr><td>&nbsp;</td>
@@ -79,8 +79,6 @@
<dd><a href="pyechonest.track.html#Track">Track</a></dd>
<dd><a href="pyechonest.proxies.html#TrackProxy">pyechonest.proxies.TrackProxy</a></dd>
<dd><a href="pyechonest.proxies.html#GenericProxy">pyechonest.proxies.GenericProxy</a></dd>
-<dd><a href="pyechonest.util.html#attrdict">pyechonest.util.attrdict</a></dd>
-<dd><a href="__builtin__.html#dict">__builtin__.dict</a></dd>
<dd><a href="__builtin__.html#object">__builtin__.object</a></dd>
</dl>
<hr>
@@ -100,87 +98,13 @@
<dl><dt><a name="Track-get_attribute"><strong>get_attribute</strong></a>(self, method_name, **kwargs)</dt></dl>
<hr>
-Data descriptors inherited from <a href="pyechonest.util.html#attrdict">pyechonest.util.attrdict</a>:<br>
+Data descriptors inherited from <a href="pyechonest.proxies.html#GenericProxy">pyechonest.proxies.GenericProxy</a>:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>dictionary&nbsp;for&nbsp;instance&nbsp;variables&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
-<hr>
-Methods inherited from <a href="__builtin__.html#dict">__builtin__.dict</a>:<br>
-<dl><dt><a name="Track-__cmp__"><strong>__cmp__</strong></a>(...)</dt><dd><tt>x.<a href="#Track-__cmp__">__cmp__</a>(y)&nbsp;&lt;==&gt;&nbsp;cmp(x,y)</tt></dd></dl>
-
-<dl><dt><a name="Track-__contains__"><strong>__contains__</strong></a>(...)</dt><dd><tt>D.<a href="#Track-__contains__">__contains__</a>(k)&nbsp;-&gt;&nbsp;True&nbsp;if&nbsp;D&nbsp;has&nbsp;a&nbsp;key&nbsp;k,&nbsp;else&nbsp;False</tt></dd></dl>
-
-<dl><dt><a name="Track-__delitem__"><strong>__delitem__</strong></a>(...)</dt><dd><tt>x.<a href="#Track-__delitem__">__delitem__</a>(y)&nbsp;&lt;==&gt;&nbsp;del&nbsp;x[y]</tt></dd></dl>
-
-<dl><dt><a name="Track-__eq__"><strong>__eq__</strong></a>(...)</dt><dd><tt>x.<a href="#Track-__eq__">__eq__</a>(y)&nbsp;&lt;==&gt;&nbsp;x==y</tt></dd></dl>
-
-<dl><dt><a name="Track-__ge__"><strong>__ge__</strong></a>(...)</dt><dd><tt>x.<a href="#Track-__ge__">__ge__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&gt;=y</tt></dd></dl>
-
-<dl><dt><a name="Track-__getattribute__"><strong>__getattribute__</strong></a>(...)</dt><dd><tt>x.<a href="#Track-__getattribute__">__getattribute__</a>('name')&nbsp;&lt;==&gt;&nbsp;x.name</tt></dd></dl>
-
-<dl><dt><a name="Track-__getitem__"><strong>__getitem__</strong></a>(...)</dt><dd><tt>x.<a href="#Track-__getitem__">__getitem__</a>(y)&nbsp;&lt;==&gt;&nbsp;x[y]</tt></dd></dl>
-
-<dl><dt><a name="Track-__gt__"><strong>__gt__</strong></a>(...)</dt><dd><tt>x.<a href="#Track-__gt__">__gt__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&gt;y</tt></dd></dl>
-
-<dl><dt><a name="Track-__iter__"><strong>__iter__</strong></a>(...)</dt><dd><tt>x.<a href="#Track-__iter__">__iter__</a>()&nbsp;&lt;==&gt;&nbsp;iter(x)</tt></dd></dl>
-
-<dl><dt><a name="Track-__le__"><strong>__le__</strong></a>(...)</dt><dd><tt>x.<a href="#Track-__le__">__le__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&lt;=y</tt></dd></dl>
-
-<dl><dt><a name="Track-__len__"><strong>__len__</strong></a>(...)</dt><dd><tt>x.<a href="#Track-__len__">__len__</a>()&nbsp;&lt;==&gt;&nbsp;len(x)</tt></dd></dl>
-
-<dl><dt><a name="Track-__lt__"><strong>__lt__</strong></a>(...)</dt><dd><tt>x.<a href="#Track-__lt__">__lt__</a>(y)&nbsp;&lt;==&gt;&nbsp;x&lt;y</tt></dd></dl>
-
-<dl><dt><a name="Track-__ne__"><strong>__ne__</strong></a>(...)</dt><dd><tt>x.<a href="#Track-__ne__">__ne__</a>(y)&nbsp;&lt;==&gt;&nbsp;x!=y</tt></dd></dl>
-
-<dl><dt><a name="Track-__setitem__"><strong>__setitem__</strong></a>(...)</dt><dd><tt>x.<a href="#Track-__setitem__">__setitem__</a>(i,&nbsp;y)&nbsp;&lt;==&gt;&nbsp;x[i]=y</tt></dd></dl>
-
-<dl><dt><a name="Track-__sizeof__"><strong>__sizeof__</strong></a>(...)</dt><dd><tt>D.<a href="#Track-__sizeof__">__sizeof__</a>()&nbsp;-&gt;&nbsp;size&nbsp;of&nbsp;D&nbsp;in&nbsp;memory,&nbsp;in&nbsp;bytes</tt></dd></dl>
-
-<dl><dt><a name="Track-clear"><strong>clear</strong></a>(...)</dt><dd><tt>D.<a href="#Track-clear">clear</a>()&nbsp;-&gt;&nbsp;None.&nbsp;&nbsp;Remove&nbsp;all&nbsp;items&nbsp;from&nbsp;D.</tt></dd></dl>
-
-<dl><dt><a name="Track-copy"><strong>copy</strong></a>(...)</dt><dd><tt>D.<a href="#Track-copy">copy</a>()&nbsp;-&gt;&nbsp;a&nbsp;shallow&nbsp;copy&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="Track-get"><strong>get</strong></a>(...)</dt><dd><tt>D.<a href="#Track-get">get</a>(k[,d])&nbsp;-&gt;&nbsp;D[k]&nbsp;if&nbsp;k&nbsp;in&nbsp;D,&nbsp;else&nbsp;d.&nbsp;&nbsp;d&nbsp;defaults&nbsp;to&nbsp;None.</tt></dd></dl>
-
-<dl><dt><a name="Track-has_key"><strong>has_key</strong></a>(...)</dt><dd><tt>D.<a href="#Track-has_key">has_key</a>(k)&nbsp;-&gt;&nbsp;True&nbsp;if&nbsp;D&nbsp;has&nbsp;a&nbsp;key&nbsp;k,&nbsp;else&nbsp;False</tt></dd></dl>
-
-<dl><dt><a name="Track-items"><strong>items</strong></a>(...)</dt><dd><tt>D.<a href="#Track-items">items</a>()&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;D's&nbsp;(key,&nbsp;value)&nbsp;pairs,&nbsp;as&nbsp;2-tuples</tt></dd></dl>
-
-<dl><dt><a name="Track-iteritems"><strong>iteritems</strong></a>(...)</dt><dd><tt>D.<a href="#Track-iteritems">iteritems</a>()&nbsp;-&gt;&nbsp;an&nbsp;iterator&nbsp;over&nbsp;the&nbsp;(key,&nbsp;value)&nbsp;items&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="Track-iterkeys"><strong>iterkeys</strong></a>(...)</dt><dd><tt>D.<a href="#Track-iterkeys">iterkeys</a>()&nbsp;-&gt;&nbsp;an&nbsp;iterator&nbsp;over&nbsp;the&nbsp;keys&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="Track-itervalues"><strong>itervalues</strong></a>(...)</dt><dd><tt>D.<a href="#Track-itervalues">itervalues</a>()&nbsp;-&gt;&nbsp;an&nbsp;iterator&nbsp;over&nbsp;the&nbsp;values&nbsp;of&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="Track-keys"><strong>keys</strong></a>(...)</dt><dd><tt>D.<a href="#Track-keys">keys</a>()&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;D's&nbsp;keys</tt></dd></dl>
-
-<dl><dt><a name="Track-pop"><strong>pop</strong></a>(...)</dt><dd><tt>D.<a href="#Track-pop">pop</a>(k[,d])&nbsp;-&gt;&nbsp;v,&nbsp;remove&nbsp;specified&nbsp;key&nbsp;and&nbsp;return&nbsp;the&nbsp;corresponding&nbsp;value.<br>
-If&nbsp;key&nbsp;is&nbsp;not&nbsp;found,&nbsp;d&nbsp;is&nbsp;returned&nbsp;if&nbsp;given,&nbsp;otherwise&nbsp;KeyError&nbsp;is&nbsp;raised</tt></dd></dl>
-
-<dl><dt><a name="Track-popitem"><strong>popitem</strong></a>(...)</dt><dd><tt>D.<a href="#Track-popitem">popitem</a>()&nbsp;-&gt;&nbsp;(k,&nbsp;v),&nbsp;remove&nbsp;and&nbsp;return&nbsp;some&nbsp;(key,&nbsp;value)&nbsp;pair&nbsp;as&nbsp;a<br>
-2-tuple;&nbsp;but&nbsp;raise&nbsp;KeyError&nbsp;if&nbsp;D&nbsp;is&nbsp;empty.</tt></dd></dl>
-
-<dl><dt><a name="Track-setdefault"><strong>setdefault</strong></a>(...)</dt><dd><tt>D.<a href="#Track-setdefault">setdefault</a>(k[,d])&nbsp;-&gt;&nbsp;D.<a href="#Track-get">get</a>(k,d),&nbsp;also&nbsp;set&nbsp;D[k]=d&nbsp;if&nbsp;k&nbsp;not&nbsp;in&nbsp;D</tt></dd></dl>
-
-<dl><dt><a name="Track-update"><strong>update</strong></a>(...)</dt><dd><tt>D.<a href="#Track-update">update</a>(E,&nbsp;**F)&nbsp;-&gt;&nbsp;None.&nbsp;&nbsp;Update&nbsp;D&nbsp;from&nbsp;dict/iterable&nbsp;E&nbsp;and&nbsp;F.<br>
-If&nbsp;E&nbsp;has&nbsp;a&nbsp;.<a href="#Track-keys">keys</a>()&nbsp;method,&nbsp;does:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;k&nbsp;in&nbsp;E:&nbsp;D[k]&nbsp;=&nbsp;E[k]<br>
-If&nbsp;E&nbsp;lacks&nbsp;.<a href="#Track-keys">keys</a>()&nbsp;method,&nbsp;does:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(k,&nbsp;v)&nbsp;in&nbsp;E:&nbsp;D[k]&nbsp;=&nbsp;v<br>
-In&nbsp;either&nbsp;case,&nbsp;this&nbsp;is&nbsp;followed&nbsp;by:&nbsp;for&nbsp;k&nbsp;in&nbsp;F:&nbsp;D[k]&nbsp;=&nbsp;F[k]</tt></dd></dl>
-
-<dl><dt><a name="Track-values"><strong>values</strong></a>(...)</dt><dd><tt>D.<a href="#Track-values">values</a>()&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;D's&nbsp;values</tt></dd></dl>
-
-<hr>
-Data and other attributes inherited from <a href="__builtin__.html#dict">__builtin__.dict</a>:<br>
-<dl><dt><strong>__hash__</strong> = None</dl>
-
-<dl><dt><strong>__new__</strong> = &lt;built-in method __new__ of type object at 0x1001222a0&gt;<dd><tt>T.<a href="#Track-__new__">__new__</a>(S,&nbsp;...)&nbsp;-&gt;&nbsp;a&nbsp;new&nbsp;object&nbsp;with&nbsp;type&nbsp;S,&nbsp;a&nbsp;subtype&nbsp;of&nbsp;T</tt></dl>
-
-<dl><dt><strong>fromkeys</strong> = &lt;built-in method fromkeys of type object at 0x101028660&gt;<dd><tt>dict.<a href="#Track-fromkeys">fromkeys</a>(S[,v])&nbsp;-&gt;&nbsp;New&nbsp;dict&nbsp;with&nbsp;keys&nbsp;from&nbsp;S&nbsp;and&nbsp;values&nbsp;equal&nbsp;to&nbsp;v.<br>
-v&nbsp;defaults&nbsp;to&nbsp;None.</tt></dl>
-
</td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#eeaa77">
View
55 doc/pyechonest.util.html
@@ -8,7 +8,7 @@
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong><a href="pyechonest.html"><font color="#ffffff">pyechonest</font></a>.util</strong></big></big></font></td
><td align=right valign=bottom
-><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="/pyechonest/util.py">/pyechonest/util.py</a></font></td></tr></table>
+><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:/Users/tylerw/Documents/echonest/projects/pyechonest/branches/wiry-wildebeest/pyechonest/util.py">/Users/tylerw/Documents/echonest/projects/pyechonest/branches/wiry-wildebeest/pyechonest/util.py</a></font></td></tr></table>
<p><tt>Copyright&nbsp;(c)&nbsp;2010&nbsp;The&nbsp;Echo&nbsp;Nest.&nbsp;All&nbsp;rights&nbsp;reserved.<br>
Created&nbsp;by&nbsp;Tyler&nbsp;Williams&nbsp;on&nbsp;2010-04-25.<br>
&nbsp;<br>
@@ -46,6 +46,12 @@
<dt><font face="helvetica, arial"><a href="pyechonest.util.html#attrdict">attrdict</a>
</font></dt></dl>
</dd>
+<dt><font face="helvetica, arial"><a href="__builtin__.html#object">__builtin__.object</a>
+</font></dt><dd>
+<dl>
+<dt><font face="helvetica, arial"><a href="pyechonest.util.html#memoize">memoize</a>
+</font></dt></dl>
+</dd>
<dt><font face="helvetica, arial"><a href="exceptions.html#Exception">exceptions.Exception</a>(<a href="exceptions.html#BaseException">exceptions.BaseException</a>)
</font></dt><dd>
<dl>
@@ -83,7 +89,7 @@
</dl>
<hr>
Data and other attributes inherited from <a href="exceptions.html#Exception">exceptions.Exception</a>:<br>
-<dl><dt><strong>__new__</strong> = &lt;built-in method __new__ of type object at 0x100119f80&gt;<dd><tt>T.<a href="#EchoNestAPIError-__new__">__new__</a>(S,&nbsp;...)&nbsp;-&gt;&nbsp;a&nbsp;new&nbsp;object&nbsp;with&nbsp;type&nbsp;S,&nbsp;a&nbsp;subtype&nbsp;of&nbsp;T</tt></dl>
+<dl><dt><strong>__new__</strong> = &lt;built-in method __new__ of type object at 0x100119f80&gt;<dd><tt>T.<a href="#EchoNestAPIError-__new__">__new__</a>(S,&nbsp;...)&nbsp;-&gt;&nbsp;a&nbsp;new&nbsp;<a href="__builtin__.html#object">object</a>&nbsp;with&nbsp;type&nbsp;S,&nbsp;a&nbsp;subtype&nbsp;of&nbsp;T</tt></dl>
<hr>
Methods inherited from <a href="exceptions.html#BaseException">exceptions.BaseException</a>:<br>
@@ -208,11 +214,38 @@
Data and other attributes inherited from <a href="__builtin__.html#dict">__builtin__.dict</a>:<br>
<dl><dt><strong>__hash__</strong> = None</dl>
-<dl><dt><strong>__new__</strong> = &lt;built-in method __new__ of type object at 0x1001222a0&gt;<dd><tt>T.<a href="#attrdict-__new__">__new__</a>(S,&nbsp;...)&nbsp;-&gt;&nbsp;a&nbsp;new&nbsp;object&nbsp;with&nbsp;type&nbsp;S,&nbsp;a&nbsp;subtype&nbsp;of&nbsp;T</tt></dl>
+<dl><dt><strong>__new__</strong> = &lt;built-in method __new__ of type object at 0x1001222a0&gt;<dd><tt>T.<a href="#attrdict-__new__">__new__</a>(S,&nbsp;...)&nbsp;-&gt;&nbsp;a&nbsp;new&nbsp;<a href="__builtin__.html#object">object</a>&nbsp;with&nbsp;type&nbsp;S,&nbsp;a&nbsp;subtype&nbsp;of&nbsp;T</tt></dl>
-<dl><dt><strong>fromkeys</strong> = &lt;built-in method fromkeys of type object at 0x101026400&gt;<dd><tt><a href="__builtin__.html#dict">dict</a>.<a href="#attrdict-fromkeys">fromkeys</a>(S[,v])&nbsp;-&gt;&nbsp;New&nbsp;<a href="__builtin__.html#dict">dict</a>&nbsp;with&nbsp;keys&nbsp;from&nbsp;S&nbsp;and&nbsp;values&nbsp;equal&nbsp;to&nbsp;v.<br>
+<dl><dt><strong>fromkeys</strong> = &lt;built-in method fromkeys of type object at 0x101401ec0&gt;<dd><tt><a href="__builtin__.html#dict">dict</a>.<a href="#attrdict-fromkeys">fromkeys</a>(S[,v])&nbsp;-&gt;&nbsp;New&nbsp;<a href="__builtin__.html#dict">dict</a>&nbsp;with&nbsp;keys&nbsp;from&nbsp;S&nbsp;and&nbsp;values&nbsp;equal&nbsp;to&nbsp;v.<br>
v&nbsp;defaults&nbsp;to&nbsp;None.</tt></dl>
+</td></tr></table> <p>
+<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
+<tr bgcolor="#ffc8d8">
+<td colspan=3 valign=bottom>&nbsp;<br>
+<font color="#000000" face="helvetica, arial"><a name="memoize">class <strong>memoize</strong></a>(<a href="__builtin__.html#object">__builtin__.object</a>)</font></td></tr>
+
+<tr bgcolor="#ffc8d8"><td rowspan=2><tt>&nbsp;&nbsp;&nbsp;</tt></td>
+<td colspan=2><tt>Caches&nbsp;the&nbsp;result&nbsp;of&nbsp;a&nbsp;class&nbsp;method&nbsp;inside&nbsp;the&nbsp;instance.<br>
+big&nbsp;ups&nbsp;to:&nbsp;<a href="http://eoyilmaz.blogspot.com/2009/09/python-function-decorators-caching.html">http://eoyilmaz.blogspot.com/2009/09/python-function-decorators-caching.html</a><br>&nbsp;</tt></td></tr>
+<tr><td>&nbsp;</td>
+<td width="100%">Methods defined here:<br>
+<dl><dt><a name="memoize-__call__"><strong>__call__</strong></a>(self, *args, **kwargs)</dt></dl>
+
+<dl><dt><a name="memoize-__get__"><strong>__get__</strong></a>(self, inst, cls)</dt></dl>
+
+<dl><dt><a name="memoize-__init__"><strong>__init__</strong></a>(self, method)</dt></dl>
+
+<dl><dt><a name="memoize-__repr__"><strong>__repr__</strong></a>(self)</dt><dd><tt>Return&nbsp;the&nbsp;function's&nbsp;representation</tt></dd></dl>
+
+<hr>
+Data descriptors defined here:<br>
+<dl><dt><strong>__dict__</strong></dt>
+<dd><tt>dictionary&nbsp;for&nbsp;instance&nbsp;variables&nbsp;(if&nbsp;defined)</tt></dd>
+</dl>
+<dl><dt><strong>__weakref__</strong></dt>
+<dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
+</dl>
</td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#eeaa77">
@@ -220,14 +253,14 @@
<font color="#ffffff" face="helvetica, arial"><big><strong>Functions</strong></big></font></td></tr>
<tr><td bgcolor="#eeaa77"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
-<td width="100%"><dl><dt><a name="-callm"><strong>callm</strong></a>(method, param_dict, POST<font color="#909090">=False</font>, socket_timeout<font color="#909090">=10</font>, data<font color="#909090">=None</font>)</dt><dd><tt>Call&nbsp;the&nbsp;api!&nbsp;<br>
+<td width="100%"><dl><dt><a name="-callm"><strong>callm</strong></a>(method, param_dict, POST<font color="#909090">=False</font>, socket_timeout<font color="#909090">=None</font>, data<font color="#909090">=None</font>)</dt><dd><tt>Call&nbsp;the&nbsp;api!&nbsp;<br>
Param_dict&nbsp;is&nbsp;a&nbsp;*regular*&nbsp;*python*&nbsp;*dictionary*&nbsp;so&nbsp;if&nbsp;you&nbsp;want&nbsp;to&nbsp;have&nbsp;multi-valued&nbsp;params<br>
put&nbsp;them&nbsp;in&nbsp;a&nbsp;list.<br>
&nbsp;<br>
**&nbsp;note,&nbsp;if&nbsp;we&nbsp;require&nbsp;2.6,&nbsp;we&nbsp;can&nbsp;get&nbsp;rid&nbsp;of&nbsp;this&nbsp;timeout&nbsp;munging.</tt></dd></dl>
<dl><dt><a name="-codegen"><strong>codegen</strong></a>(filename, start<font color="#909090">=0</font>, duration<font color="#909090">=30</font>)</dt></dl>
<dl><dt><a name="-get_successful_response"><strong>get_successful_response</strong></a>(raw_json)</dt></dl>
- <dl><dt><a name="-md5"><strong>md5</strong></a> = openssl_md5(...)</dt><dd><tt>Returns&nbsp;a&nbsp;md5&nbsp;hash&nbsp;object;&nbsp;optionally&nbsp;initialized&nbsp;with&nbsp;a&nbsp;string</tt></dd></dl>
+ <dl><dt><a name="-md5"><strong>md5</strong></a> = openssl_md5(...)</dt><dd><tt>Returns&nbsp;a&nbsp;md5&nbsp;hash&nbsp;<a href="__builtin__.html#object">object</a>;&nbsp;optionally&nbsp;initialized&nbsp;with&nbsp;a&nbsp;string</tt></dd></dl>
<dl><dt><a name="-postChunked"><strong>postChunked</strong></a>(host, selector, fields, files)</dt><dd><tt>Attempt&nbsp;to&nbsp;replace&nbsp;postMultipart()&nbsp;with&nbsp;nearly-identical&nbsp;interface.<br>
(The&nbsp;files&nbsp;tuple&nbsp;no&nbsp;longer&nbsp;requires&nbsp;the&nbsp;filename,&nbsp;and&nbsp;we&nbsp;only&nbsp;return<br>
the&nbsp;response&nbsp;body.)&nbsp;<br>
@@ -249,8 +282,10 @@
<tr><td bgcolor="#55aa55"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><strong>TYPENAMES</strong> = (('AR', 'artist'), ('SO', 'song'), ('RE', 'release'), ('TR', 'track'), ('PE', 'person'), ('DE', 'device'), ('LI', 'listener'), ('ED', 'editor'), ('TW', 'tweditor'))<br>
-<strong>foreign_regex</strong> = &lt;_sre.SRE_Pattern object at 0x101024cb0&gt;<br>
-<strong>logger</strong> = &lt;logging.Logger instance at 0x1007b7710&gt;<br>
-<strong>long_regex</strong> = &lt;_sre.SRE_Pattern object at 0x1010259e0&gt;<br>
-<strong>short_regex</strong> = &lt;_sre.SRE_Pattern object at 0x101012a40&gt;</td></tr></table>
+<strong>foreign_regex</strong> = &lt;_sre.SRE_Pattern object at 0x101016bb0&gt;<br>
+<strong>headers</strong> = [('User-Agent', 'Pyechonest 4.2')]<br>
+<strong>logger</strong> = &lt;logging.Logger instance at 0x10078c128&gt;<br>
+<strong>long_regex</strong> = &lt;_sre.SRE_Pattern object at 0x101017ce0&gt;<br>
+<strong>opener</strong> = &lt;urllib2.OpenerDirector instance at 0x100780bd8&gt;<br>
+<strong>short_regex</strong> = &lt;_sre.SRE_Pattern object at 0x101004c40&gt;</td></tr></table>
</body></html>
View
3  generate_dist.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+/usr/bin/env python setup.py bdist_egg
View
72 pyechonest/artist.py
@@ -5,13 +5,14 @@
Copyright (c) 2010 The Echo Nest. All rights reserved.
Created by Tyler Williams on 2010-04-25.
-The Artist module loosely covers http://beta.developer.echonest.com/artist.html
+The Artist module loosely covers http://developer.echonest.com/docs/v4/artist.html
Refer to the official api documentation if you are unsure about something.
"""
import util
from proxies import ArtistProxy
from results import Result
+import song
class Artist(ArtistProxy):
"""
@@ -108,7 +109,7 @@ def get_biographies(self, results=15, start=0, license='unknown', cache=True):
biographies = property(get_biographies)
- def get_blogs(self, results=15, start=0, cache=True):
+ def get_blogs(self, results=15, start=0, cache=True, high_relevance=False):
"""Get a list of blog articles related to an artist
Args:
cache: A boolean indicating whether or not the cached value should be used (if available). Defaults to True.
@@ -118,10 +119,11 @@ def get_blogs(self, results=15, start=0, cache=True):
Returns:
A list of blog document Result objects
"""
- if cache and ('blogs' in self.cache) and results==15 and start==0:
+ if cache and ('blogs' in self.cache) and results==15 and start==0 and not high_relevance:
return [Result('blogs', a) for a in self.cache['blogs']]
else:
- response = self.get_attribute('blogs', results=results, start=start)
+ high_relevance = 'true' if high_relevance else 'false'
+ response = self.get_attribute('blogs', results=results, start=start, high_relevance=high_relevance)
if results==15 and start==0:
self.cache['blogs'] = response['blogs']
return [Result('blogs', a) for a in response['blogs']]
@@ -166,7 +168,7 @@ def get_images(self, results=15, start=0, license='unknown', cache=True):
images = property(get_images)
- def get_news(self, results=15, start=0, cache=True):
+ def get_news(self, results=15, start=0, cache=True, high_relevance=False):
"""Get a list of news articles found on the web related to an artist
Args:
@@ -177,10 +179,11 @@ def get_news(self, results=15, start=0, cache=True):
Returns:
A list of news document Result objects
"""
- if cache and ('news' in self.cache) and results==15 and start==0:
+ if cache and ('news' in self.cache) and results==15 and start==0 and not high_relevance:
return [Result('news', a) for a in self.cache['news']]
else:
- response = self.get_attribute('news', results=results, start=start)
+ high_relevance = 'true' if high_relevance else 'false'
+ response = self.get_attribute('news', results=results, start=start, high_relevance=high_relevance)
if results==15 and start==0:
self.cache['news'] = response['news']
return [Result('news', a) for a in response['news']]
@@ -209,20 +212,19 @@ def get_reviews(self, results=15, start=0, cache=True):
reviews = property(get_reviews)
- def get_similar(self, results=15, start=0, buckets=None, limit=None, cache=True, max_familiarity=None, min_familiarity=None, \
- max_hotttnesss=None, min_hotttnesss=None):
+ def get_similar(self, results=15, start=0, buckets=None, limit=False, cache=True, max_familiarity=None, min_familiarity=None, \
+ max_hotttnesss=None, min_hotttnesss=None, min_results=None, reverse=False):
"""Return similar artists to this one
Args:
cache: A boolean indicating whether or not the cached value should be used (if available). Defaults to True.
results: An integer number of results to return
start: An integer starting value for the result set
- buckets: A list of strings specifying which buckets to retrieve
- limit: A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets
max_familiarity: A float specifying the max familiarity of artists to search for
min_familiarity: A float specifying the min familiarity of artists to search for
max_hotttnesss: A float specifying the max hotttnesss of artists to search for
min_hotttnesss: A float specifying the max hotttnesss of artists to search for
+ reverse: A boolean indicating whether or not to return dissimilar artists (wrecommender). Defaults to False.
Returns:
A list of similar Artist objects
"""
@@ -236,10 +238,14 @@ def get_similar(self, results=15, start=0, buckets=None, limit=None, cache=True,
kwargs['max_hotttnesss'] = max_hotttnesss
if min_hotttnesss:
kwargs['min_hotttnesss'] = min_hotttnesss
+ if min_results:
+ kwargs['min_results'] = min_results
if buckets:
kwargs['bucket'] = buckets
if limit:
kwargs['limit'] = 'true'
+ if reverse:
+ kwargs['reverse'] = 'true'
# we need this to fix up all the dict keys to be strings, not unicode objects
fix = lambda x : dict((str(k), v) for (k,v) in x.iteritems())
@@ -255,6 +261,30 @@ def get_similar(self, results=15, start=0, buckets=None, limit=None, cache=True,
similar = property(get_similar)
+ def get_songs(self, cache=True):
+ """Get the songs associated with an artist
+
+ Args:
+ cache: A boolean indicating whether or not the cached value should be used (if available). Defaults to True.
+
+ Results:
+ A list of Song objects
+ """
+ if cache and ('songs' in self.cache):
+ songs = []
+ for start in range(0,len(self.cache['songs']),10):
+ songs.extend(song.profile(self.cache['songs'][start:start+10]))
+ return songs
+ else:
+ response = self.get_attribute('songs')
+ self.cache['songs'] = response['songs']
+ songs = []
+ for start in range(0,len(self.cache['songs']),10):
+ songs.extend(song.profile(self.cache['songs'][start:start+10]))
+ return songs
+
+ songs = property(get_songs)
+
def get_terms(self, sort='weight', cache=True):
"""Get the terms associated with an artist
@@ -363,13 +393,13 @@ def search(name=None, description=None, results=15, buckets = None, limit=False,
kwargs['limit'] = 'true'
if fuzzy_match:
kwargs['fuzzy_match'] = 'true'
- if max_familiarity:
+ if max_familiarity is not None:
kwargs['max_familiarity'] = max_familiarity
- if min_familiarity:
+ if min_familiarity is not None:
kwargs['min_familiarity'] = min_familiarity
- if max_hotttnesss:
+ if max_hotttnesss is not None:
kwargs['max_hotttnesss'] = max_hotttnesss
- if min_hotttnesss:
+ if min_hotttnesss is not None:
kwargs['min_hotttnesss'] = min_hotttnesss
if sort:
kwargs['sort'] = sort
@@ -429,7 +459,7 @@ def top_terms(results=15):
return [Result('term', a_dict) for a_dict in result['response']['terms']]
-def similar(names=None, ids=None, start=0, results=15, buckets = None, limit=False, max_familiarity=None, min_familiarity=None,
+def similar(names=None, ids=None, start=0, results=15, buckets=None, limit=False, max_familiarity=None, min_familiarity=None,
max_hotttnesss=None, min_hotttnesss=None):
"""Return similar artists to this one
@@ -437,6 +467,8 @@ def similar(names=None, ids=None, start=0, results=15, buckets = None, limit=Fal
id: An artist id or list of ids
name: An artist name or list of names
results: An integer number of results to return
+ buckets: A list of strings specifying which buckets to retrieve
+ limit: A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets
start: An integer starting value for the result set
buckets: A list of strings specifying which buckets to retrieve
limit: A boolean indicating whether or not to limit the results to one of the id spaces specified in buckets
@@ -459,13 +491,13 @@ def similar(names=None, ids=None, start=0, results=15, buckets = None, limit=Fal
if not isinstance(names, list):
names = [names]
kwargs['name'] = names
- if max_familiarity:
+ if max_familiarity is not None:
kwargs['max_familiarity'] = max_familiarity
- if min_familiarity:
+ if min_familiarity is not None:
kwargs['min_familiarity'] = min_familiarity
- if max_hotttnesss:
+ if max_hotttnesss is not None:
kwargs['max_hotttnesss'] = max_hotttnesss
- if min_hotttnesss:
+ if min_hotttnesss is not None:
kwargs['min_hotttnesss'] = min_hotttnesss
if start:
kwargs['start'] = start
View
4 pyechonest/config.py
@@ -8,9 +8,7 @@
Global configuration variables for accessing the Echo Nest web API.
"""
-__version__ = "$Revision: 4.2 $"
-
-# $Source$
+__version__ = "4.2"
import os
View
11 pyechonest/proxies.py
@@ -7,15 +7,15 @@
"""
import util
-from util import attrdict
-class GenericProxy(attrdict):
+class GenericProxy(object):
def __init__(self):
self.cache = {}
def get_attribute(self, method_name, **kwargs):
result = util.callm("%s/%s" % (self.type, method_name), kwargs)
return result['response']
+
class ArtistProxy(GenericProxy):
@@ -39,7 +39,8 @@ def get_attribute(self, *args, **kwargs):
kwargs['id'] = self.id
else:
kwargs['name'] = self.id
- return super(ArtistProxy, self).get_attribute(*args, **kwargs)
+ return super(ArtistProxy, self).get_attribute(*args, **kwargs)
+
class SongProxy(GenericProxy):
def __init__(self, identifier, buckets = None, **kwargs):
@@ -52,6 +53,10 @@ def __init__(self, identifier, buckets = None, **kwargs):
# BAW -- this is debug output from identify that returns a track_id. i am not sure where else to access this..
if kwargs.has_key("track_id"):
self.track_id = kwargs["track_id"]
+ if kwargs.has_key("tag"):
+ self.tag = kwargs["tag"]
+ if kwargs.has_key("score"):
+ self.score = kwargs["score"]
# the following are integral to all song objects... the rest is up to you!
core_attrs = ['title', 'artist_name', 'artist_id']
View
1  pyechonest/results.py
@@ -6,7 +6,6 @@
Created by Tyler Williams on 2010-04-25.
"""
-import util
import logging
from util import attrdict
View
12 pyechonest/song.py
@@ -5,7 +5,7 @@
Copyright (c) 2010 The Echo Nest. All rights reserved.
Created by Tyler Williams on 2010-04-25.
-The Song module loosely covers http://beta.developer.echonest.com/song.html
+The Song module loosely covers http://developer.echonest.com/docs/v4/song.html
Refer to the official api documentation if you are unsure about something.
"""
@@ -155,7 +155,10 @@ def identify(filename=None, query_obj=None, code=None, artist=None, title=None,
has_data = False
if filename:
query_obj = util.codegen(filename, start=codegen_start, duration=codegen_duration)
-
+
+ if not isinstance(query_obj, list):
+ query_obj = [query_obj]
+
if code:
has_data = True
kwargs['code'] = code
@@ -173,15 +176,16 @@ def identify(filename=None, query_obj=None, code=None, artist=None, title=None,
# TODO -- this is a temp debug param should be taken out for release
if alt:
if query_obj:
- query_obj['alt'] = True
+ query_obj[0]['alt'] = True
- if query_obj:
+ if query_obj and any(query_obj):
has_data = True
kwargs['query'] = json.dumps(query_obj)
post = True
if has_data: