1
<?xml version="1.0" encoding="ascii"?>
2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3
"DTD/xhtml1-transitional.dtd">
4
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6
<title>openid.consumer.discover</title>
7
<link rel="stylesheet" href="epydoc.css" type="text/css" />
8
<script type="text/javascript" src="epydoc.js"></script>
11
<body bgcolor="white" text="black" link="blue" vlink="#204080"
13
<!-- ==================== NAVIGATION BAR ==================== -->
14
<table class="navbar" border="0" width="100%" cellpadding="0"
15
bgcolor="#a0c0ff" cellspacing="0">
18
<th> <a
19
href="openid-module.html">Home</a> </th>
22
<th> <a
23
href="module-tree.html">Trees</a> </th>
26
<th> <a
27
href="identifier-index.html">Indices</a> </th>
30
<th> <a
31
href="help.html">Help</a> </th>
33
<!-- Project homepage -->
34
<th class="navbar" align="right" width="100%">
35
<table border="0" cellpadding="0" cellspacing="0">
36
<tr><th class="navbar" align="center"
37
><a class="navbar" target="_top" href="http://www.openidenabled.com/">Python-OpenID</a></th>
41
<table width="100%" cellpadding="0" cellspacing="0">
44
<span class="breadcrumbs">
45
<a href="openid-module.html">Package openid</a> ::
46
<a href="openid.consumer-module.html">Package consumer</a> ::
51
<table cellpadding="0" cellspacing="0">
52
<!-- hide/show private -->
53
<tr><td align="right"><span class="options"
54
>[<a href="frames.html" target="_top">frames</a
55
>] | <a href="openid.consumer.discover-pysrc.html"
56
target="_top">no frames</a>]</span></td></tr>
61
<h1 class="epydoc">Source Code for <a href="openid.consumer.discover-module.html">Module openid.consumer.discover</a></h1>
63
<tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment"># -*- test-case-name: openid.test.test_discover -*-</tt> </tt>
64
<tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"></tt> </tt>
65
<tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">urljr</tt> <tt class="py-keyword">import</tt> <tt class="py-name">fetchers</tt> </tt>
66
<tt class="py-lineno"> 4</tt> <tt class="py-line"> </tt>
67
<tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Package openid=openid-module.html"><a title="openid" class="py-name" href="#" onclick="return doclink('link-0', 'openid', 'link-0');">openid</a></tt></tt> <tt class="py-keyword">import</tt> <tt class="py-name">oidutil</tt> </tt>
68
<tt class="py-lineno"> 6</tt> <tt class="py-line"> </tt>
69
<tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"># If the Yadis library is available, use it. Otherwise, only use</tt> </tt>
70
<tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># old-style discovery.</tt> </tt>
71
<tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
72
<tt class="py-lineno"> 10</tt> <tt class="py-line"> <tt class="py-keyword">import</tt> <tt class="py-name">yadis</tt> </tt>
73
<tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-keyword">except</tt> <tt class="py-name">ImportError</tt><tt class="py-op">:</tt> </tt>
74
<tt class="py-lineno"> 12</tt> <tt class="py-line"> <tt id="link-1" class="py-name" targets="Variable openid.consumer.discover.yadis_available=openid.consumer.discover-module.html#yadis_available"><a title="openid.consumer.discover.yadis_available" class="py-name" href="#" onclick="return doclink('link-1', 'yadis_available', 'link-1');">yadis_available</a></tt></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
75
<tt class="py-lineno"> 13</tt> <tt class="py-line"> </tt>
76
<tt class="py-lineno"> 14</tt> <tt class="py-line"> <tt class="py-name">oidutil</tt><tt class="py-op">.</tt><tt class="py-name">log</tt><tt class="py-op">(</tt><tt class="py-string">'Consumer operating without Yadis support '</tt> </tt>
77
<tt class="py-lineno"> 15</tt> <tt class="py-line"> <tt class="py-string">'(failed to import Yadis library)'</tt><tt class="py-op">)</tt> </tt>
78
<tt class="py-lineno"> 16</tt> <tt class="py-line"> </tt>
79
<a name="DiscoveryFailure"></a><div id="DiscoveryFailure-def"><tt class="py-lineno"> 17</tt> <a class="py-toggle" href="#" id="DiscoveryFailure-toggle" onclick="return toggle('DiscoveryFailure');">-</a><tt class="py-line"> <tt class="py-keyword">class</tt> <a class="py-def-name" href="openid.consumer.discover.DiscoveryFailure-class.html">DiscoveryFailure</a><tt class="py-op">(</tt><tt class="py-base-class">RuntimeError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
80
</div><div id="DiscoveryFailure-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DiscoveryFailure-expanded"><tt class="py-lineno"> 18</tt> <tt class="py-line"> <tt class="py-docstring">"""A failure to discover an OpenID server.</tt> </tt>
81
<tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
82
<tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-docstring"> When the C{yadis} package is available, this is</tt> </tt>
83
<tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-docstring"> C{yadis.discover.DiscoveryFailure}."""</tt> </tt>
84
</div><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
85
<tt class="py-lineno"> 23</tt> <tt class="py-line"> <tt id="link-2" class="py-name"><a title="openid.consumer.discover.yadis_available" class="py-name" href="#" onclick="return doclink('link-2', 'yadis_available', 'link-1');">yadis_available</a></tt></tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
86
<tt class="py-lineno"> 24</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt class="py-name">yadis</tt><tt class="py-op">.</tt><tt class="py-name">etxrd</tt> <tt class="py-keyword">import</tt> <tt class="py-name">nsTag</tt><tt class="py-op">,</tt> <tt class="py-name">XRDSError</tt> </tt>
87
<tt class="py-lineno"> 25</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt class="py-name">yadis</tt><tt class="py-op">.</tt><tt class="py-name">services</tt> <tt class="py-keyword">import</tt> <tt class="py-name">applyFilter</tt> <tt class="py-name">as</tt> <tt class="py-name">extractServices</tt> </tt>
88
<tt class="py-lineno"> 26</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt class="py-name">yadis</tt><tt class="py-op">.</tt><tt id="link-3" class="py-name" targets="Module openid.consumer.discover=openid.consumer.discover-module.html"><a title="openid.consumer.discover" class="py-name" href="#" onclick="return doclink('link-3', 'discover', 'link-3');">discover</a></tt></tt> <tt class="py-keyword">import</tt> <tt id="link-4" class="py-name"><a title="openid.consumer.discover" class="py-name" href="#" onclick="return doclink('link-4', 'discover', 'link-3');">discover</a></tt></tt> <tt class="py-name">as</tt> <tt class="py-name">yadisDiscover</tt> </tt>
89
<tt class="py-lineno"> 27</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt class="py-name">yadis</tt><tt class="py-op">.</tt><tt id="link-5" class="py-name"><a title="openid.consumer.discover" class="py-name" href="#" onclick="return doclink('link-5', 'discover', 'link-3');">discover</a></tt></tt> <tt class="py-keyword">import</tt> <tt class="py-name">DiscoveryFailure</tt> </tt>
90
<tt class="py-lineno"> 28</tt> <tt class="py-line"> <tt class="py-keyword">from</tt> <tt class="py-name">yadis</tt> <tt class="py-keyword">import</tt> <tt class="py-name">xrires</tt><tt class="py-op">,</tt> <tt class="py-name">filters</tt> </tt>
91
<tt class="py-lineno"> 29</tt> <tt class="py-line"> </tt>
92
<tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-6" class="py-name"><a title="openid" class="py-name" href="#" onclick="return doclink('link-6', 'openid', 'link-0');">openid</a></tt></tt><tt class="py-op">.</tt><tt id="link-7" class="py-name" targets="Package openid.consumer=openid.consumer-module.html,Module openid.consumer.consumer=openid.consumer.consumer-module.html"><a title="openid.consumer
93
openid.consumer.consumer" class="py-name" href="#" onclick="return doclink('link-7', 'consumer', 'link-7');">consumer</a></tt></tt><tt class="py-op">.</tt><tt id="link-8" class="py-name" targets="Class Method openid.server.trustroot.TrustRoot.parse()=openid.server.trustroot.TrustRoot-class.html#parse"><a title="openid.server.trustroot.TrustRoot.parse" class="py-name" href="#" onclick="return doclink('link-8', 'parse', 'link-8');">parse</a></tt></tt> <tt class="py-keyword">import</tt> <tt class="py-name">openIDDiscover</tt> <tt class="py-name">as</tt> <tt class="py-name">parseOpenIDLinkRel</tt> </tt>
94
<tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-9" class="py-name"><a title="openid" class="py-name" href="#" onclick="return doclink('link-9', 'openid', 'link-0');">openid</a></tt></tt><tt class="py-op">.</tt><tt id="link-10" class="py-name"><a title="openid.consumer
95
openid.consumer.consumer" class="py-name" href="#" onclick="return doclink('link-10', 'consumer', 'link-7');">consumer</a></tt></tt><tt class="py-op">.</tt><tt id="link-11" class="py-name"><a title="openid.server.trustroot.TrustRoot.parse" class="py-name" href="#" onclick="return doclink('link-11', 'parse', 'link-8');">parse</a></tt></tt> <tt class="py-keyword">import</tt> <tt class="py-name">ParseError</tt> </tt>
96
<tt class="py-lineno"> 32</tt> <tt class="py-line"> </tt>
97
<tt class="py-lineno"> 33</tt> <tt class="py-line"><tt id="link-12" class="py-name" targets="Variable openid.consumer.discover.OPENID_1_0_NS=openid.consumer.discover-module.html#OPENID_1_0_NS"><a title="openid.consumer.discover.OPENID_1_0_NS" class="py-name" href="#" onclick="return doclink('link-12', 'OPENID_1_0_NS', 'link-12');">OPENID_1_0_NS</a></tt></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://openid.net/xmlns/1.0'</tt> </tt>
98
<tt class="py-lineno"> 34</tt> <tt class="py-line"><tt id="link-13" class="py-name" targets="Variable openid.consumer.discover.OPENID_1_2_TYPE=openid.consumer.discover-module.html#OPENID_1_2_TYPE"><a title="openid.consumer.discover.OPENID_1_2_TYPE" class="py-name" href="#" onclick="return doclink('link-13', 'OPENID_1_2_TYPE', 'link-13');">OPENID_1_2_TYPE</a></tt></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://openid.net/signon/1.2'</tt> </tt>
99
<tt class="py-lineno"> 35</tt> <tt class="py-line"><tt id="link-14" class="py-name" targets="Variable openid.consumer.discover.OPENID_1_1_TYPE=openid.consumer.discover-module.html#OPENID_1_1_TYPE"><a title="openid.consumer.discover.OPENID_1_1_TYPE" class="py-name" href="#" onclick="return doclink('link-14', 'OPENID_1_1_TYPE', 'link-14');">OPENID_1_1_TYPE</a></tt></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://openid.net/signon/1.1'</tt> </tt>
100
<tt class="py-lineno"> 36</tt> <tt class="py-line"><tt id="link-15" class="py-name" targets="Variable openid.consumer.discover.OPENID_1_0_TYPE=openid.consumer.discover-module.html#OPENID_1_0_TYPE"><a title="openid.consumer.discover.OPENID_1_0_TYPE" class="py-name" href="#" onclick="return doclink('link-15', 'OPENID_1_0_TYPE', 'link-15');">OPENID_1_0_TYPE</a></tt></tt> <tt class="py-op">=</tt> <tt class="py-string">'http://openid.net/signon/1.0'</tt> </tt>
101
<tt class="py-lineno"> 37</tt> <tt class="py-line"> </tt>
102
<a name="OpenIDServiceEndpoint"></a><div id="OpenIDServiceEndpoint-def"><tt class="py-lineno"> 38</tt> <a class="py-toggle" href="#" id="OpenIDServiceEndpoint-toggle" onclick="return toggle('OpenIDServiceEndpoint');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="openid.consumer.discover.OpenIDServiceEndpoint-class.html">OpenIDServiceEndpoint</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
103
</div><div id="OpenIDServiceEndpoint-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="OpenIDServiceEndpoint-expanded"><tt class="py-lineno"> 39</tt> <tt class="py-line"> <tt class="py-docstring">"""Object representing an OpenID service endpoint.</tt> </tt>
104
<tt class="py-lineno"> 40</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
105
<tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-docstring"> @ivar identity_url: the verified identifier.</tt> </tt>
106
<tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-docstring"> @ivar canonicalID: For XRI, the persistent identifier.</tt> </tt>
107
<tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
108
<tt class="py-lineno"> 44</tt> <tt class="py-line"> <tt id="link-16" class="py-name" targets="Variable openid.consumer.discover.OpenIDServiceEndpoint.openid_type_uris=openid.consumer.discover.OpenIDServiceEndpoint-class.html#openid_type_uris"><a title="openid.consumer.discover.OpenIDServiceEndpoint.openid_type_uris" class="py-name" href="#" onclick="return doclink('link-16', 'openid_type_uris', 'link-16');">openid_type_uris</a></tt></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt> </tt>
109
<tt class="py-lineno"> 45</tt> <tt class="py-line"> <tt id="link-17" class="py-name"><a title="openid.consumer.discover.OPENID_1_2_TYPE" class="py-name" href="#" onclick="return doclink('link-17', 'OPENID_1_2_TYPE', 'link-13');">OPENID_1_2_TYPE</a></tt></tt><tt class="py-op">,</tt> </tt>
110
<tt class="py-lineno"> 46</tt> <tt class="py-line"> <tt id="link-18" class="py-name"><a title="openid.consumer.discover.OPENID_1_1_TYPE" class="py-name" href="#" onclick="return doclink('link-18', 'OPENID_1_1_TYPE', 'link-14');">OPENID_1_1_TYPE</a></tt></tt><tt class="py-op">,</tt> </tt>
111
<tt class="py-lineno"> 47</tt> <tt class="py-line"> <tt id="link-19" class="py-name"><a title="openid.consumer.discover.OPENID_1_0_TYPE" class="py-name" href="#" onclick="return doclink('link-19', 'OPENID_1_0_TYPE', 'link-15');">OPENID_1_0_TYPE</a></tt></tt><tt class="py-op">,</tt> </tt>
112
<tt class="py-lineno"> 48</tt> <tt class="py-line"> <tt class="py-op">]</tt> </tt>
113
<tt class="py-lineno"> 49</tt> <tt class="py-line"> </tt>
114
<a name="OpenIDServiceEndpoint.__init__"></a><div id="OpenIDServiceEndpoint.__init__-def"><tt class="py-lineno"> 50</tt> <a class="py-toggle" href="#" id="OpenIDServiceEndpoint.__init__-toggle" onclick="return toggle('OpenIDServiceEndpoint.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="openid.consumer.discover.OpenIDServiceEndpoint-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
115
</div><div id="OpenIDServiceEndpoint.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="OpenIDServiceEndpoint.__init__-expanded"><tt class="py-lineno"> 51</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">identity_url</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
116
<tt class="py-lineno"> 52</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">server_url</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
117
<tt class="py-lineno"> 53</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">type_uris</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
118
<tt class="py-lineno"> 54</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">delegate</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
119
<tt class="py-lineno"> 55</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">canonicalID</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
120
<tt class="py-lineno"> 56</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">used_yadis</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> <tt class="py-comment"># whether this came from an XRDS</tt> </tt>
121
</div><tt class="py-lineno"> 57</tt> <tt class="py-line"> </tt>
122
<a name="OpenIDServiceEndpoint.usesExtension"></a><div id="OpenIDServiceEndpoint.usesExtension-def"><tt class="py-lineno"> 58</tt> <a class="py-toggle" href="#" id="OpenIDServiceEndpoint.usesExtension-toggle" onclick="return toggle('OpenIDServiceEndpoint.usesExtension');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="openid.consumer.discover.OpenIDServiceEndpoint-class.html#usesExtension">usesExtension</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">extension_uri</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
123
</div><div id="OpenIDServiceEndpoint.usesExtension-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="OpenIDServiceEndpoint.usesExtension-expanded"><tt class="py-lineno"> 59</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">extension_uri</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">type_uris</tt> </tt>
124
</div><tt class="py-lineno"> 60</tt> <tt class="py-line"> </tt>
125
<a name="OpenIDServiceEndpoint.parseService"></a><div id="OpenIDServiceEndpoint.parseService-def"><tt class="py-lineno"> 61</tt> <a class="py-toggle" href="#" id="OpenIDServiceEndpoint.parseService-toggle" onclick="return toggle('OpenIDServiceEndpoint.parseService');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="openid.consumer.discover.OpenIDServiceEndpoint-class.html#parseService">parseService</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">yadis_url</tt><tt class="py-op">,</tt> <tt class="py-param">uri</tt><tt class="py-op">,</tt> <tt class="py-param">type_uris</tt><tt class="py-op">,</tt> <tt class="py-param">service_element</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
126
</div><div id="OpenIDServiceEndpoint.parseService-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="OpenIDServiceEndpoint.parseService-expanded"><tt class="py-lineno"> 62</tt> <tt class="py-line"> <tt class="py-docstring">"""Set the state of this object based on the contents of the</tt> </tt>
127
<tt class="py-lineno"> 63</tt> <tt class="py-line"><tt class="py-docstring"> service element."""</tt> </tt>
128
<tt class="py-lineno"> 64</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">type_uris</tt> <tt class="py-op">=</tt> <tt class="py-name">type_uris</tt> </tt>
129
<tt class="py-lineno"> 65</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">identity_url</tt> <tt class="py-op">=</tt> <tt class="py-name">yadis_url</tt> </tt>
130
<tt class="py-lineno"> 66</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">server_url</tt> <tt class="py-op">=</tt> <tt class="py-name">uri</tt> </tt>
131
<tt class="py-lineno"> 67</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">delegate</tt> <tt class="py-op">=</tt> <tt id="link-20" class="py-name" targets="Function openid.consumer.discover.findDelegate()=openid.consumer.discover-module.html#findDelegate"><a title="openid.consumer.discover.findDelegate" class="py-name" href="#" onclick="return doclink('link-20', 'findDelegate', 'link-20');">findDelegate</a></tt></tt><tt class="py-op">(</tt><tt class="py-name">service_element</tt><tt class="py-op">)</tt> </tt>
132
<tt class="py-lineno"> 68</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">used_yadis</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
133
</div><tt class="py-lineno"> 69</tt> <tt class="py-line"> </tt>
134
<a name="OpenIDServiceEndpoint.getServerID"></a><div id="OpenIDServiceEndpoint.getServerID-def"><tt class="py-lineno"> 70</tt> <a class="py-toggle" href="#" id="OpenIDServiceEndpoint.getServerID-toggle" onclick="return toggle('OpenIDServiceEndpoint.getServerID');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="openid.consumer.discover.OpenIDServiceEndpoint-class.html#getServerID">getServerID</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
135
</div><div id="OpenIDServiceEndpoint.getServerID-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="OpenIDServiceEndpoint.getServerID-expanded"><tt class="py-lineno"> 71</tt> <tt class="py-line"> <tt class="py-docstring">"""Return the identifier that should be sent as the</tt> </tt>
136
<tt class="py-lineno"> 72</tt> <tt class="py-line"><tt class="py-docstring"> openid.identity_url parameter to the server."""</tt> </tt>
137
<tt class="py-lineno"> 73</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">delegate</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
138
<tt class="py-lineno"> 74</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">canonicalID</tt> <tt class="py-keyword">or</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">identity_url</tt> </tt>
139
<tt class="py-lineno"> 75</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
140
<tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">delegate</tt> </tt>
141
</div><tt class="py-lineno"> 77</tt> <tt class="py-line"> </tt>
142
<a name="OpenIDServiceEndpoint.fromBasicServiceEndpoint"></a><div id="OpenIDServiceEndpoint.fromBasicServiceEndpoint-def"><tt class="py-lineno"> 78</tt> <a class="py-toggle" href="#" id="OpenIDServiceEndpoint.fromBasicServiceEndpoint-toggle" onclick="return toggle('OpenIDServiceEndpoint.fromBasicServiceEndpoint');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="openid.consumer.discover.OpenIDServiceEndpoint-class.html#fromBasicServiceEndpoint">fromBasicServiceEndpoint</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">endpoint</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
143
</div><div id="OpenIDServiceEndpoint.fromBasicServiceEndpoint-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="OpenIDServiceEndpoint.fromBasicServiceEndpoint-expanded"><tt class="py-lineno"> 79</tt> <tt class="py-line"> <tt class="py-docstring">"""Create a new instance of this class from the endpoint</tt> </tt>
144
<tt class="py-lineno"> 80</tt> <tt class="py-line"><tt class="py-docstring"> object passed in.</tt> </tt>
145
<tt class="py-lineno"> 81</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
146
<tt class="py-lineno"> 82</tt> <tt class="py-line"><tt class="py-docstring"> @return: None or OpenIDServiceEndpoint for this endpoint object"""</tt> </tt>
147
<tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt class="py-name">type_uris</tt> <tt class="py-op">=</tt> <tt class="py-name">endpoint</tt><tt class="py-op">.</tt><tt class="py-name">matchTypes</tt><tt class="py-op">(</tt><tt class="py-name">cls</tt><tt class="py-op">.</tt><tt id="link-21" class="py-name"><a title="openid.consumer.discover.OpenIDServiceEndpoint.openid_type_uris" class="py-name" href="#" onclick="return doclink('link-21', 'openid_type_uris', 'link-16');">openid_type_uris</a></tt></tt><tt class="py-op">)</tt> </tt>
148
<tt class="py-lineno"> 84</tt> <tt class="py-line"> </tt>
149
<tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt class="py-comment"># If any Type URIs match and there is an endpoint URI</tt> </tt>
150
<tt class="py-lineno"> 86</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># specified, then this is an OpenID endpoint</tt> </tt>
151
<tt class="py-lineno"> 87</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">type_uris</tt> <tt class="py-keyword">and</tt> <tt class="py-name">endpoint</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
152
<tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-name">openid_endpoint</tt> <tt class="py-op">=</tt> <tt class="py-name">cls</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
153
<tt class="py-lineno"> 89</tt> <tt class="py-line"> <tt class="py-name">openid_endpoint</tt><tt class="py-op">.</tt><tt id="link-22" class="py-name" targets="Method openid.consumer.discover.OpenIDServiceEndpoint.parseService()=openid.consumer.discover.OpenIDServiceEndpoint-class.html#parseService"><a title="openid.consumer.discover.OpenIDServiceEndpoint.parseService" class="py-name" href="#" onclick="return doclink('link-22', 'parseService', 'link-22');">parseService</a></tt></tt><tt class="py-op">(</tt> </tt>
154
<tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-name">endpoint</tt><tt class="py-op">.</tt><tt class="py-name">yadis_url</tt><tt class="py-op">,</tt> </tt>
155
<tt class="py-lineno"> 91</tt> <tt class="py-line"> <tt class="py-name">endpoint</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">,</tt> </tt>
156
<tt class="py-lineno"> 92</tt> <tt class="py-line"> <tt class="py-name">endpoint</tt><tt class="py-op">.</tt><tt class="py-name">type_uris</tt><tt class="py-op">,</tt> </tt>
157
<tt class="py-lineno"> 93</tt> <tt class="py-line"> <tt class="py-name">endpoint</tt><tt class="py-op">.</tt><tt class="py-name">service_element</tt><tt class="py-op">)</tt> </tt>
158
<tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
159
<tt class="py-lineno"> 95</tt> <tt class="py-line"> <tt class="py-name">openid_endpoint</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
160
<tt class="py-lineno"> 96</tt> <tt class="py-line"> </tt>
161
<tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">openid_endpoint</tt> </tt>
162
</div><tt class="py-lineno"> 98</tt> <tt class="py-line"> </tt>
163
<tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt id="link-23" class="py-name" targets="Class Method openid.consumer.discover.OpenIDServiceEndpoint.fromBasicServiceEndpoint()=openid.consumer.discover.OpenIDServiceEndpoint-class.html#fromBasicServiceEndpoint"><a title="openid.consumer.discover.OpenIDServiceEndpoint.fromBasicServiceEndpoint" class="py-name" href="#" onclick="return doclink('link-23', 'fromBasicServiceEndpoint', 'link-23');">fromBasicServiceEndpoint</a></tt></tt> <tt class="py-op">=</tt> <tt class="py-name">classmethod</tt><tt class="py-op">(</tt><tt id="link-24" class="py-name"><a title="openid.consumer.discover.OpenIDServiceEndpoint.fromBasicServiceEndpoint" class="py-name" href="#" onclick="return doclink('link-24', 'fromBasicServiceEndpoint', 'link-23');">fromBasicServiceEndpoint</a></tt></tt><tt class="py-op">)</tt> </tt>
164
<tt class="py-lineno">100</tt> <tt class="py-line"> </tt>
165
<a name="OpenIDServiceEndpoint.fromHTML"></a><div id="OpenIDServiceEndpoint.fromHTML-def"><tt class="py-lineno">101</tt> <a class="py-toggle" href="#" id="OpenIDServiceEndpoint.fromHTML-toggle" onclick="return toggle('OpenIDServiceEndpoint.fromHTML');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="openid.consumer.discover.OpenIDServiceEndpoint-class.html#fromHTML">fromHTML</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">uri</tt><tt class="py-op">,</tt> <tt class="py-param">html</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
166
</div><div id="OpenIDServiceEndpoint.fromHTML-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="OpenIDServiceEndpoint.fromHTML-expanded"><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-docstring">"""Parse the given document as HTML looking for an OpenID <link</tt> </tt>
167
<tt class="py-lineno">103</tt> <tt class="py-line"><tt class="py-docstring"> rel=...></tt> </tt>
168
<tt class="py-lineno">104</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
169
<tt class="py-lineno">105</tt> <tt class="py-line"><tt class="py-docstring"> @raises: openid.consumer.parse.ParseError</tt> </tt>
170
<tt class="py-lineno">106</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
171
<tt class="py-lineno">107</tt> <tt class="py-line"> <tt class="py-name">delegate_url</tt><tt class="py-op">,</tt> <tt class="py-name">server_url</tt> <tt class="py-op">=</tt> <tt class="py-name">parseOpenIDLinkRel</tt><tt class="py-op">(</tt><tt class="py-name">html</tt><tt class="py-op">)</tt> </tt>
172
<tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-name">service</tt> <tt class="py-op">=</tt> <tt class="py-name">cls</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
173
<tt class="py-lineno">109</tt> <tt class="py-line"> <tt class="py-name">service</tt><tt class="py-op">.</tt><tt class="py-name">identity_url</tt> <tt class="py-op">=</tt> <tt class="py-name">uri</tt> </tt>
174
<tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-name">service</tt><tt class="py-op">.</tt><tt class="py-name">delegate</tt> <tt class="py-op">=</tt> <tt class="py-name">delegate_url</tt> </tt>
175
<tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-name">service</tt><tt class="py-op">.</tt><tt class="py-name">server_url</tt> <tt class="py-op">=</tt> <tt class="py-name">server_url</tt> </tt>
176
<tt class="py-lineno">112</tt> <tt class="py-line"> <tt class="py-name">service</tt><tt class="py-op">.</tt><tt class="py-name">type_uris</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt id="link-25" class="py-name"><a title="openid.consumer.discover.OPENID_1_0_TYPE" class="py-name" href="#" onclick="return doclink('link-25', 'OPENID_1_0_TYPE', 'link-15');">OPENID_1_0_TYPE</a></tt></tt><tt class="py-op">]</tt> </tt>
177
<tt class="py-lineno">113</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">service</tt> </tt>
178
</div><tt class="py-lineno">114</tt> <tt class="py-line"> </tt>
179
<tt class="py-lineno">115</tt> <tt class="py-line"> <tt id="link-26" class="py-name" targets="Class Method openid.consumer.discover.OpenIDServiceEndpoint.fromHTML()=openid.consumer.discover.OpenIDServiceEndpoint-class.html#fromHTML"><a title="openid.consumer.discover.OpenIDServiceEndpoint.fromHTML" class="py-name" href="#" onclick="return doclink('link-26', 'fromHTML', 'link-26');">fromHTML</a></tt></tt> <tt class="py-op">=</tt> <tt class="py-name">classmethod</tt><tt class="py-op">(</tt><tt id="link-27" class="py-name"><a title="openid.consumer.discover.OpenIDServiceEndpoint.fromHTML" class="py-name" href="#" onclick="return doclink('link-27', 'fromHTML', 'link-26');">fromHTML</a></tt></tt><tt class="py-op">)</tt> </tt>
180
</div><tt class="py-lineno">116</tt> <tt class="py-line"> </tt>
181
<a name="findDelegate"></a><div id="findDelegate-def"><tt class="py-lineno">117</tt> <a class="py-toggle" href="#" id="findDelegate-toggle" onclick="return toggle('findDelegate');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="openid.consumer.discover-module.html#findDelegate">findDelegate</a><tt class="py-op">(</tt><tt class="py-param">service_element</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
182
</div><div id="findDelegate-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="findDelegate-expanded"><tt class="py-lineno">118</tt> <tt class="py-line"> <tt class="py-docstring">"""Extract a openid:Delegate value from a Yadis Service element</tt> </tt>
183
<tt class="py-lineno">119</tt> <tt class="py-line"><tt class="py-docstring"> represented as an ElementTree Element object. If no delegate is</tt> </tt>
184
<tt class="py-lineno">120</tt> <tt class="py-line"><tt class="py-docstring"> found, returns None."""</tt> </tt>
185
<tt class="py-lineno">121</tt> <tt class="py-line"> <tt class="py-comment"># XXX: should this die if there is more than one delegate element?</tt> </tt>
186
<tt class="py-lineno">122</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">delegate_tag</tt> <tt class="py-op">=</tt> <tt class="py-name">nsTag</tt><tt class="py-op">(</tt><tt id="link-28" class="py-name"><a title="openid.consumer.discover.OPENID_1_0_NS" class="py-name" href="#" onclick="return doclink('link-28', 'OPENID_1_0_NS', 'link-12');">OPENID_1_0_NS</a></tt></tt><tt class="py-op">,</tt> <tt class="py-string">'Delegate'</tt><tt class="py-op">)</tt> </tt>
187
<tt class="py-lineno">123</tt> <tt class="py-line"> </tt>
188
<tt class="py-lineno">124</tt> <tt class="py-line"> <tt class="py-name">delegates</tt> <tt class="py-op">=</tt> <tt class="py-name">service_element</tt><tt class="py-op">.</tt><tt class="py-name">findall</tt><tt class="py-op">(</tt><tt class="py-name">delegate_tag</tt><tt class="py-op">)</tt> </tt>
189
<tt class="py-lineno">125</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">delegate_element</tt> <tt class="py-keyword">in</tt> <tt class="py-name">delegates</tt><tt class="py-op">:</tt> </tt>
190
<tt class="py-lineno">126</tt> <tt class="py-line"> <tt class="py-name">delegate</tt> <tt class="py-op">=</tt> <tt class="py-name">delegate_element</tt><tt class="py-op">.</tt><tt class="py-name">text</tt> </tt>
191
<tt class="py-lineno">127</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> </tt>
192
<tt class="py-lineno">128</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
193
<tt class="py-lineno">129</tt> <tt class="py-line"> <tt class="py-name">delegate</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
194
<tt class="py-lineno">130</tt> <tt class="py-line"> </tt>
195
<tt class="py-lineno">131</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">delegate</tt> </tt>
196
</div><tt class="py-lineno">132</tt> <tt class="py-line"> </tt>
197
<a name="discoverYadis"></a><div id="discoverYadis-def"><tt class="py-lineno">133</tt> <a class="py-toggle" href="#" id="discoverYadis-toggle" onclick="return toggle('discoverYadis');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="openid.consumer.discover-module.html#discoverYadis">discoverYadis</a><tt class="py-op">(</tt><tt class="py-param">uri</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
198
</div><div id="discoverYadis-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="discoverYadis-expanded"><tt class="py-lineno">134</tt> <tt class="py-line"> <tt class="py-docstring">"""Discover OpenID services for a URI. Tries Yadis and falls back</tt> </tt>
199
<tt class="py-lineno">135</tt> <tt class="py-line"><tt class="py-docstring"> on old-style <link rel='...'> discovery if Yadis fails.</tt> </tt>
200
<tt class="py-lineno">136</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
201
<tt class="py-lineno">137</tt> <tt class="py-line"><tt class="py-docstring"> @param uri: normalized identity URL</tt> </tt>
202
<tt class="py-lineno">138</tt> <tt class="py-line"><tt class="py-docstring"> @type uri: str</tt> </tt>
203
<tt class="py-lineno">139</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
204
<tt class="py-lineno">140</tt> <tt class="py-line"><tt class="py-docstring"> @return: (identity_url, services)</tt> </tt>
205
<tt class="py-lineno">141</tt> <tt class="py-line"><tt class="py-docstring"> @rtype: (str, list(OpenIDServiceEndpoint))</tt> </tt>
206
<tt class="py-lineno">142</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
207
<tt class="py-lineno">143</tt> <tt class="py-line"><tt class="py-docstring"> @raises: DiscoveryFailure</tt> </tt>
208
<tt class="py-lineno">144</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
209
<tt class="py-lineno">145</tt> <tt class="py-line"> <tt class="py-comment"># Might raise a yadis.discover.DiscoveryFailure if no document</tt> </tt>
210
<tt class="py-lineno">146</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># came back for that URI at all. I don't think falling back</tt> </tt>
211
<tt class="py-lineno">147</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># to OpenID 1.0 discovery on the same URL will help, so don't</tt> </tt>
212
<tt class="py-lineno">148</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># bother to catch it.</tt> </tt>
213
<tt class="py-lineno">149</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">response</tt> <tt class="py-op">=</tt> <tt class="py-name">yadisDiscover</tt><tt class="py-op">(</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt> </tt>
214
<tt class="py-lineno">150</tt> <tt class="py-line"> </tt>
215
<tt class="py-lineno">151</tt> <tt class="py-line"> <tt class="py-name">identity_url</tt> <tt class="py-op">=</tt> <tt class="py-name">response</tt><tt class="py-op">.</tt><tt class="py-name">normalized_uri</tt> </tt>
216
<tt class="py-lineno">152</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
217
<tt class="py-lineno">153</tt> <tt class="py-line"> <tt class="py-name">openid_services</tt> <tt class="py-op">=</tt> <tt class="py-name">extractServices</tt><tt class="py-op">(</tt> </tt>
218
<tt class="py-lineno">154</tt> <tt class="py-line"> <tt class="py-name">response</tt><tt class="py-op">.</tt><tt class="py-name">normalized_uri</tt><tt class="py-op">,</tt> <tt class="py-name">response</tt><tt class="py-op">.</tt><tt class="py-name">response_text</tt><tt class="py-op">,</tt> </tt>
219
<tt class="py-lineno">155</tt> <tt class="py-line"> <tt id="link-29" class="py-name" targets="Class openid.consumer.discover.OpenIDServiceEndpoint=openid.consumer.discover.OpenIDServiceEndpoint-class.html"><a title="openid.consumer.discover.OpenIDServiceEndpoint" class="py-name" href="#" onclick="return doclink('link-29', 'OpenIDServiceEndpoint', 'link-29');">OpenIDServiceEndpoint</a></tt></tt><tt class="py-op">)</tt> </tt>
220
<tt class="py-lineno">156</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">XRDSError</tt><tt class="py-op">:</tt> </tt>
221
<tt class="py-lineno">157</tt> <tt class="py-line"> <tt class="py-comment"># Does not parse as a Yadis XRDS file</tt> </tt>
222
<tt class="py-lineno">158</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">openid_services</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
223
<tt class="py-lineno">159</tt> <tt class="py-line"> </tt>
224
<tt class="py-lineno">160</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">openid_services</tt><tt class="py-op">:</tt> </tt>
225
<tt class="py-lineno">161</tt> <tt class="py-line"> <tt class="py-comment"># Either not an XRDS or there are no OpenID services.</tt> </tt>
226
<tt class="py-lineno">162</tt> <tt class="py-line"><tt class="py-comment"></tt> </tt>
227
<tt class="py-lineno">163</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">response</tt><tt class="py-op">.</tt><tt class="py-name">isXRDS</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
228
<tt class="py-lineno">164</tt> <tt class="py-line"> <tt class="py-comment"># if we got the Yadis content-type or followed the Yadis</tt> </tt>
229
<tt class="py-lineno">165</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># header, re-fetch the document without following the Yadis</tt> </tt>
230
<tt class="py-lineno">166</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># header, with no Accept header.</tt> </tt>
231
<tt class="py-lineno">167</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">return</tt> <tt id="link-30" class="py-name" targets="Function openid.consumer.discover.discoverNoYadis()=openid.consumer.discover-module.html#discoverNoYadis"><a title="openid.consumer.discover.discoverNoYadis" class="py-name" href="#" onclick="return doclink('link-30', 'discoverNoYadis', 'link-30');">discoverNoYadis</a></tt></tt><tt class="py-op">(</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt> </tt>
232
<tt class="py-lineno">168</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
233
<tt class="py-lineno">169</tt> <tt class="py-line"> <tt class="py-name">body</tt> <tt class="py-op">=</tt> <tt class="py-name">response</tt><tt class="py-op">.</tt><tt class="py-name">response_text</tt> </tt>
234
<tt class="py-lineno">170</tt> <tt class="py-line"> </tt>
235
<tt class="py-lineno">171</tt> <tt class="py-line"> <tt class="py-comment"># Try to parse the response as HTML to get OpenID 1.0/1.1</tt> </tt>
236
<tt class="py-lineno">172</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># <link rel="..."></tt> </tt>
237
<tt class="py-lineno">173</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
238
<tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-name">service</tt> <tt class="py-op">=</tt> <tt id="link-31" class="py-name"><a title="openid.consumer.discover.OpenIDServiceEndpoint" class="py-name" href="#" onclick="return doclink('link-31', 'OpenIDServiceEndpoint', 'link-29');">OpenIDServiceEndpoint</a></tt></tt><tt class="py-op">.</tt><tt id="link-32" class="py-name"><a title="openid.consumer.discover.OpenIDServiceEndpoint.fromHTML" class="py-name" href="#" onclick="return doclink('link-32', 'fromHTML', 'link-26');">fromHTML</a></tt></tt><tt class="py-op">(</tt><tt class="py-name">identity_url</tt><tt class="py-op">,</tt> <tt class="py-name">body</tt><tt class="py-op">)</tt> </tt>
239
<tt class="py-lineno">175</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ParseError</tt><tt class="py-op">:</tt> </tt>
240
<tt class="py-lineno">176</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> <tt class="py-comment"># Parsing failed, so return an empty list</tt> </tt>
241
<tt class="py-lineno">177</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
242
<tt class="py-lineno">178</tt> <tt class="py-line"> <tt class="py-name">openid_services</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">service</tt><tt class="py-op">]</tt> </tt>
243
<tt class="py-lineno">179</tt> <tt class="py-line"> </tt>
244
<tt class="py-lineno">180</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">identity_url</tt><tt class="py-op">,</tt> <tt class="py-name">openid_services</tt><tt class="py-op">)</tt> </tt>
245
</div><tt class="py-lineno">181</tt> <tt class="py-line"> </tt>
246
<tt class="py-lineno">182</tt> <tt class="py-line"> </tt>
247
<a name="discoverXRI"></a><div id="discoverXRI-def"><tt class="py-lineno">183</tt> <a class="py-toggle" href="#" id="discoverXRI-toggle" onclick="return toggle('discoverXRI');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="openid.consumer.discover-module.html#discoverXRI">discoverXRI</a><tt class="py-op">(</tt><tt class="py-param">iname</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
248
</div><div id="discoverXRI-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="discoverXRI-expanded"><tt class="py-lineno">184</tt> <tt class="py-line"> <tt class="py-name">endpoints</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
249
<tt class="py-lineno">185</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
250
<tt class="py-lineno">186</tt> <tt class="py-line"> <tt class="py-name">canonicalID</tt><tt class="py-op">,</tt> <tt class="py-name">services</tt> <tt class="py-op">=</tt> <tt class="py-name">xrires</tt><tt class="py-op">.</tt><tt class="py-name">ProxyResolver</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">query</tt><tt class="py-op">(</tt> </tt>
251
<tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-name">iname</tt><tt class="py-op">,</tt> <tt id="link-33" class="py-name"><a title="openid.consumer.discover.OpenIDServiceEndpoint" class="py-name" href="#" onclick="return doclink('link-33', 'OpenIDServiceEndpoint', 'link-29');">OpenIDServiceEndpoint</a></tt></tt><tt class="py-op">.</tt><tt id="link-34" class="py-name"><a title="openid.consumer.discover.OpenIDServiceEndpoint.openid_type_uris" class="py-name" href="#" onclick="return doclink('link-34', 'openid_type_uris', 'link-16');">openid_type_uris</a></tt></tt><tt class="py-op">)</tt> </tt>
252
<tt class="py-lineno">188</tt> <tt class="py-line"> <tt class="py-name">flt</tt> <tt class="py-op">=</tt> <tt class="py-name">filters</tt><tt class="py-op">.</tt><tt class="py-name">mkFilter</tt><tt class="py-op">(</tt><tt id="link-35" class="py-name"><a title="openid.consumer.discover.OpenIDServiceEndpoint" class="py-name" href="#" onclick="return doclink('link-35', 'OpenIDServiceEndpoint', 'link-29');">OpenIDServiceEndpoint</a></tt></tt><tt class="py-op">)</tt> </tt>
253
<tt class="py-lineno">189</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">service_element</tt> <tt class="py-keyword">in</tt> <tt class="py-name">services</tt><tt class="py-op">:</tt> </tt>
254
<tt class="py-lineno">190</tt> <tt class="py-line"> <tt class="py-name">endpoints</tt><tt class="py-op">.</tt><tt class="py-name">extend</tt><tt class="py-op">(</tt><tt class="py-name">flt</tt><tt class="py-op">.</tt><tt class="py-name">getServiceEndpoints</tt><tt class="py-op">(</tt><tt class="py-name">iname</tt><tt class="py-op">,</tt> <tt class="py-name">service_element</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
255
<tt class="py-lineno">191</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">XRDSError</tt><tt class="py-op">:</tt> </tt>
256
<tt class="py-lineno">192</tt> <tt class="py-line"> <tt class="py-name">oidutil</tt><tt class="py-op">.</tt><tt class="py-name">log</tt><tt class="py-op">(</tt><tt class="py-string">'xrds error on '</tt> <tt class="py-op">+</tt> <tt class="py-name">iname</tt><tt class="py-op">)</tt> </tt>
257
<tt class="py-lineno">193</tt> <tt class="py-line"> </tt>
258
<tt class="py-lineno">194</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">endpoint</tt> <tt class="py-keyword">in</tt> <tt class="py-name">endpoints</tt><tt class="py-op">:</tt> </tt>
259
<tt class="py-lineno">195</tt> <tt class="py-line"> <tt class="py-comment"># Is there a way to pass this through the filter to the endpoint</tt> </tt>
260
<tt class="py-lineno">196</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># constructor instead of tacking it on after?</tt> </tt>
261
<tt class="py-lineno">197</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">endpoint</tt><tt class="py-op">.</tt><tt class="py-name">canonicalID</tt> <tt class="py-op">=</tt> <tt class="py-name">canonicalID</tt> </tt>
262
<tt class="py-lineno">198</tt> <tt class="py-line"> </tt>
263
<tt class="py-lineno">199</tt> <tt class="py-line"> <tt class="py-comment"># FIXME: returned xri should probably be in some normal form</tt> </tt>
264
<tt class="py-lineno">200</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">return</tt> <tt class="py-name">iname</tt><tt class="py-op">,</tt> <tt class="py-name">endpoints</tt> </tt>
265
</div><tt class="py-lineno">201</tt> <tt class="py-line"> </tt>
266
<tt class="py-lineno">202</tt> <tt class="py-line"> </tt>
267
<a name="discoverNoYadis"></a><div id="discoverNoYadis-def"><tt class="py-lineno">203</tt> <a class="py-toggle" href="#" id="discoverNoYadis-toggle" onclick="return toggle('discoverNoYadis');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="openid.consumer.discover-module.html#discoverNoYadis">discoverNoYadis</a><tt class="py-op">(</tt><tt class="py-param">uri</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
268
</div><div id="discoverNoYadis-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="discoverNoYadis-expanded"><tt class="py-lineno">204</tt> <tt class="py-line"> <tt class="py-name">http_resp</tt> <tt class="py-op">=</tt> <tt class="py-name">fetchers</tt><tt class="py-op">.</tt><tt class="py-name">fetch</tt><tt class="py-op">(</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt> </tt>
269
<tt class="py-lineno">205</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">http_resp</tt><tt class="py-op">.</tt><tt id="link-36" class="py-name" targets="Variable openid.consumer.consumer.CancelResponse.status=openid.consumer.consumer.CancelResponse-class.html#status,Variable openid.consumer.consumer.FailureResponse.status=openid.consumer.consumer.FailureResponse-class.html#status,Variable openid.consumer.consumer.SetupNeededResponse.status=openid.consumer.consumer.SetupNeededResponse-class.html#status,Variable openid.consumer.consumer.SuccessResponse.status=openid.consumer.consumer.SuccessResponse-class.html#status"><a title="openid.consumer.consumer.CancelResponse.status
270
openid.consumer.consumer.FailureResponse.status
271
openid.consumer.consumer.SetupNeededResponse.status
272
openid.consumer.consumer.SuccessResponse.status" class="py-name" href="#" onclick="return doclink('link-36', 'status', 'link-36');">status</a></tt></tt> <tt class="py-op">!=</tt> <tt class="py-number">200</tt><tt class="py-op">:</tt> </tt>
273
<tt class="py-lineno">206</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">DiscoveryFailure</tt><tt class="py-op">(</tt> </tt>
274
<tt class="py-lineno">207</tt> <tt class="py-line"> <tt class="py-string">'HTTP Response status from identity URL host is not 200. '</tt> </tt>
275
<tt class="py-lineno">208</tt> <tt class="py-line"> <tt class="py-string">'Got status %r'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">http_resp</tt><tt class="py-op">.</tt><tt id="link-37" class="py-name"><a title="openid.consumer.consumer.CancelResponse.status
276
openid.consumer.consumer.FailureResponse.status
277
openid.consumer.consumer.SetupNeededResponse.status
278
openid.consumer.consumer.SuccessResponse.status" class="py-name" href="#" onclick="return doclink('link-37', 'status', 'link-36');">status</a></tt></tt><tt class="py-op">,</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">http_resp</tt><tt class="py-op">)</tt> </tt>
279
<tt class="py-lineno">209</tt> <tt class="py-line"> <tt class="py-name">identity_url</tt> <tt class="py-op">=</tt> <tt class="py-name">http_resp</tt><tt class="py-op">.</tt><tt class="py-name">final_url</tt> </tt>
280
<tt class="py-lineno">210</tt> <tt class="py-line"> </tt>
281
<tt class="py-lineno">211</tt> <tt class="py-line"> <tt class="py-comment"># Try to parse the response as HTML to get OpenID 1.0/1.1</tt> </tt>
282
<tt class="py-lineno">212</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># <link rel="..."></tt> </tt>
283
<tt class="py-lineno">213</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
284
<tt class="py-lineno">214</tt> <tt class="py-line"> <tt class="py-name">service</tt> <tt class="py-op">=</tt> <tt id="link-38" class="py-name"><a title="openid.consumer.discover.OpenIDServiceEndpoint" class="py-name" href="#" onclick="return doclink('link-38', 'OpenIDServiceEndpoint', 'link-29');">OpenIDServiceEndpoint</a></tt></tt><tt class="py-op">.</tt><tt id="link-39" class="py-name"><a title="openid.consumer.discover.OpenIDServiceEndpoint.fromHTML" class="py-name" href="#" onclick="return doclink('link-39', 'fromHTML', 'link-26');">fromHTML</a></tt></tt><tt class="py-op">(</tt><tt class="py-name">identity_url</tt><tt class="py-op">,</tt> <tt class="py-name">http_resp</tt><tt class="py-op">.</tt><tt class="py-name">body</tt><tt class="py-op">)</tt> </tt>
285
<tt class="py-lineno">215</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ParseError</tt><tt class="py-op">:</tt> </tt>
286
<tt class="py-lineno">216</tt> <tt class="py-line"> <tt class="py-name">openid_services</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
287
<tt class="py-lineno">217</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
288
<tt class="py-lineno">218</tt> <tt class="py-line"> <tt class="py-name">openid_services</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">service</tt><tt class="py-op">]</tt> </tt>
289
<tt class="py-lineno">219</tt> <tt class="py-line"> </tt>
290
<tt class="py-lineno">220</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">identity_url</tt><tt class="py-op">,</tt> <tt class="py-name">openid_services</tt> </tt>
291
</div><tt class="py-lineno">221</tt> <tt class="py-line"> </tt>
292
<tt class="py-lineno">222</tt> <tt class="py-line"><tt class="py-keyword">if</tt> <tt id="link-40" class="py-name"><a title="openid.consumer.discover.yadis_available" class="py-name" href="#" onclick="return doclink('link-40', 'yadis_available', 'link-1');">yadis_available</a></tt></tt><tt class="py-op">:</tt> </tt>
293
<tt class="py-lineno">223</tt> <tt class="py-line"> <tt id="link-41" class="py-name"><a title="openid.consumer.discover" class="py-name" href="#" onclick="return doclink('link-41', 'discover', 'link-3');">discover</a></tt></tt> <tt class="py-op">=</tt> <tt id="link-42" class="py-name" targets="Function openid.consumer.discover.discoverYadis()=openid.consumer.discover-module.html#discoverYadis"><a title="openid.consumer.discover.discoverYadis" class="py-name" href="#" onclick="return doclink('link-42', 'discoverYadis', 'link-42');">discoverYadis</a></tt></tt> </tt>
294
<tt class="py-lineno">224</tt> <tt class="py-line"><tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
295
<tt class="py-lineno">225</tt> <tt class="py-line"> <tt id="link-43" class="py-name"><a title="openid.consumer.discover" class="py-name" href="#" onclick="return doclink('link-43', 'discover', 'link-3');">discover</a></tt></tt> <tt class="py-op">=</tt> <tt id="link-44" class="py-name"><a title="openid.consumer.discover.discoverNoYadis" class="py-name" href="#" onclick="return doclink('link-44', 'discoverNoYadis', 'link-30');">discoverNoYadis</a></tt></tt> </tt>
296
<tt class="py-lineno">226</tt> <tt class="py-line"> </tt><script type="text/javascript">
298
expandto(location.href);
303
<!-- ==================== NAVIGATION BAR ==================== -->
304
<table class="navbar" border="0" width="100%" cellpadding="0"
305
bgcolor="#a0c0ff" cellspacing="0">
308
<th> <a
309
href="openid-module.html">Home</a> </th>
312
<th> <a
313
href="module-tree.html">Trees</a> </th>
316
<th> <a
317
href="identifier-index.html">Indices</a> </th>
320
<th> <a
321
href="help.html">Help</a> </th>
323
<!-- Project homepage -->
324
<th class="navbar" align="right" width="100%">
325
<table border="0" cellpadding="0" cellspacing="0">
326
<tr><th class="navbar" align="center"
327
><a class="navbar" target="_top" href="http://www.openidenabled.com/">Python-OpenID</a></th>
331
<table border="0" cellpadding="0" cellspacing="0" width="100%%">
333
<td align="left" class="footer">Generated by Epydoc
334
3.0alpha3 on Fri Dec 8 13:26:20 2006</td>
335
<td align="right" class="footer">
336
<a href="http://epydoc.sourceforge.net">http://epydoc.sourceforge.net</a>
341
<script type="text/javascript">
343
// Private objects are initially displayed (because if
344
// javascript is turned off then we want them to be
345
// visible); but by default, we want to hide them. So hide
346
// them unless we have a cookie that says to show them.