comparison docs.html @ 24:c2c369402a2e

Added more docs, fixed edge cases.
author Atul Varma <varmaa@toolness.com>
date Thu, 10 Sep 2009 22:32:45 -0700
parents 7cbbec55aef6
children 351819baecd1
comparison
equal deleted inserted replaced
23:7cbbec55aef6 24:c2c369402a2e
11 <div class="document" id="pydertron"> 11 <div class="document" id="pydertron">
12 <h1 class="title">Pydertron</h1> 12 <h1 class="title">Pydertron</h1>
13 <p>Pydertron is a high-level wrapper for <a class="reference" href="http://code.google.com/p/pydermonkey">Pydermonkey</a> that 13 <p>Pydertron is a high-level wrapper for <a class="reference" href="http://code.google.com/p/pydermonkey">Pydermonkey</a> that
14 provides convenient, secure object wrapping between JS and Python 14 provides convenient, secure object wrapping between JS and Python
15 space.</p> 15 space.</p>
16 <p>Note that Pydertron is just one example of a high-level interface
17 between Python and JavaScript: it assumes, for instance, that the JS
18 code it executes isn't trusted, which affects the nature of the
19 inter-language interaction.</p>
20 <div class="section">
21 <h1><a id="the-basics" name="the-basics">The Basics</a></h1>
16 <p>The <tt class="docutils literal"><span class="pre">JsSandbox</span></tt> class encapsulates a JavaScript runtime, context, global 22 <p>The <tt class="docutils literal"><span class="pre">JsSandbox</span></tt> class encapsulates a JavaScript runtime, context, global
17 object, and a simple <a class="reference" href="http://wiki.commonjs.org/wiki/CommonJS/Modules/SecurableModules">SecurableModule</a> implementation that complies 23 object, and a simple <a class="reference" href="http://wiki.commonjs.org/wiki/CommonJS/Modules/SecurableModules">SecurableModule</a> implementation that complies
18 with the <a class="reference" href="http://wiki.commonjs.org/wiki/CommonJS">CommonJS</a> standard. It also provides a high-level bridge between 24 with the <a class="reference" href="http://wiki.commonjs.org/wiki/CommonJS">CommonJS</a> standard. It also provides a high-level bridge between
19 Python and JavaScript so that you don't need to deal with any of the 25 Python and JavaScript so that you don't need to deal with any of the
20 low-level details of the Pydermonkey API.</p> 26 low-level details of the Pydermonkey API.</p>
88 File &quot;&lt;string&gt;&quot;, line 1, in foo 94 File &quot;&lt;string&gt;&quot;, line 1, in foo
89 ReferenceError: bar is not defined 95 ReferenceError: bar is not defined
90 -1 96 -1
91 </pre> 97 </pre>
92 </blockquote> 98 </blockquote>
93 <p>Note that the traceback displayed is actually referring to 99 <p>Note that the traceback displayed is actually referring to JavaScript
94 JavaScript code: one of Pydertron's helpful conveniences is that 100 code: one of Pydertron's aims is to make debugging JS code as much
95 it makes debugging JS code as much like debugging Python code as 101 like debugging Python code as possible.</p>
96 possible.</p> 102 </div>
103 <div class="section">
104 <h1><a id="exceptions" name="exceptions">Exceptions</a></h1>
105 <p>Any exceptions raised by wrapped Python functions need to be of type
106 <tt class="docutils literal"><span class="pre">pydermonkey.error</span></tt> to be propagated into calling JavaScript code;
107 if they're not, then for security purposes, the entire JavaScript call
108 stack is unrolled.</p>
109 <p>For example, here's a function that's bound to fail:</p>
110 <blockquote>
111 <pre class="doctest-block">
112 &gt;&gt;&gt; &#64;jsexposed
113 ... def fail():
114 ... o()
115 &gt;&gt;&gt; sandbox.root.fail = fail
116 </pre>
117 </blockquote>
118 <p>Now, even though the following JS code calls the function in a
119 try-catch block, the JS code doesn't catch anything and its execution
120 is simply halted:</p>
121 <blockquote>
122 <pre class="doctest-block">
123 &gt;&gt;&gt; sandbox.run_script(&quot;try { fail(); } catch (e) {}&quot;,
124 ... stderr=sys.stdout) #doctest: +ELLIPSIS
125 An internal error occurred.
126 Traceback (most recent call last):
127 ...
128 NameError: global name 'o' is not defined
129 -1
130 </pre>
131 </blockquote>
132 <p>Note that a <tt class="docutils literal"><span class="pre">KeyboardInterrupt</span></tt> triggered while JS is executing will
133 have similar effect.</p>
134 </div>
97 </div> 135 </div>
98 <div class="footer"> 136 <div class="footer">
99 <hr class="footer" /> 137 <hr class="footer" />
100 <a class="reference" href="docs.txt">View document source</a>. 138 <a class="reference" href="docs.txt">View document source</a>.
101 139