Skip to content

Commit 4d1d621

Browse files
committed
deploy: 02705db
1 parent 1dd72fc commit 4d1d621

File tree

10 files changed

+97
-122
lines changed

10 files changed

+97
-122
lines changed

_modules/ete4/smartview/explorer.html

Lines changed: 10 additions & 29 deletions
Large diffs are not rendered by default.

_modules/ete4/smartview/faces.html

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ <h1>Source code for ete4.smartview.faces</h1><div class="highlight"><pre>
5858
<span class="kn">from</span><span class="w"> </span><span class="nn">math</span><span class="w"> </span><span class="kn">import</span> <span class="n">pi</span><span class="p">,</span> <span class="n">cos</span><span class="p">,</span> <span class="n">sin</span>
5959
<span class="kn">import</span><span class="w"> </span><span class="nn">re</span> <span class="c1"># so it can be used when evaluating expressions</span>
6060

61+
<span class="kn">from</span><span class="w"> </span><span class="nn">ete4.core.eval</span><span class="w"> </span><span class="kn">import</span> <span class="n">eval_on_node</span>
6162
<span class="kn">from</span><span class="w"> </span><span class="nn">.coordinates</span><span class="w"> </span><span class="kn">import</span> <span class="n">Size</span><span class="p">,</span> <span class="n">Box</span><span class="p">,</span> <span class="n">make_box</span>
6263
<span class="kn">from</span><span class="w"> </span><span class="nn">.</span><span class="w"> </span><span class="kn">import</span> <span class="n">graphics</span> <span class="k">as</span> <span class="n">gr</span>
6364

@@ -313,31 +314,11 @@ <h1>Source code for ete4.smartview.faces</h1><div class="highlight"><pre>
313314
<a class="viewcode-back" href="../../../reference/reference_smartview.html#ete4.smartview.faces.eval_as_str">[docs]</a>
314315
<span class="k">def</span><span class="w"> </span><span class="nf">eval_as_str</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
315316
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Return the given code evaluated on values related to the given node.&quot;&quot;&quot;</span>
316-
<span class="n">result</span> <span class="o">=</span> <span class="n">safer_eval</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="p">{</span>
317-
<span class="s1">&#39;node&#39;</span><span class="p">:</span> <span class="n">node</span><span class="p">,</span> <span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="s1">&#39;is_leaf&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">is_leaf</span><span class="p">,</span>
318-
<span class="s1">&#39;length&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">dist</span><span class="p">,</span> <span class="s1">&#39;dist&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">dist</span><span class="p">,</span> <span class="s1">&#39;d&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">dist</span><span class="p">,</span>
319-
<span class="s1">&#39;size&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="s1">&#39;dx&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">size</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s1">&#39;dy&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">size</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span>
320-
<span class="s1">&#39;support&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">support</span><span class="p">,</span>
321-
<span class="s1">&#39;properties&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">props</span><span class="p">,</span> <span class="s1">&#39;props&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">props</span><span class="p">,</span> <span class="s1">&#39;p&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">props</span><span class="p">,</span>
322-
<span class="s1">&#39;get&#39;</span><span class="p">:</span> <span class="nb">dict</span><span class="o">.</span><span class="n">get</span><span class="p">,</span> <span class="s1">&#39;split&#39;</span><span class="p">:</span> <span class="nb">str</span><span class="o">.</span><span class="n">split</span><span class="p">,</span>
323-
<span class="s1">&#39;children&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">children</span><span class="p">,</span> <span class="s1">&#39;ch&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">children</span><span class="p">,</span>
324-
<span class="s1">&#39;regex&#39;</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">,</span>
325-
<span class="s1">&#39;len&#39;</span><span class="p">:</span> <span class="nb">len</span><span class="p">,</span> <span class="s1">&#39;sum&#39;</span><span class="p">:</span> <span class="nb">sum</span><span class="p">,</span> <span class="s1">&#39;abs&#39;</span><span class="p">:</span> <span class="nb">abs</span><span class="p">,</span> <span class="s1">&#39;float&#39;</span><span class="p">:</span> <span class="nb">float</span><span class="p">,</span> <span class="s1">&#39;pi&#39;</span><span class="p">:</span> <span class="n">pi</span><span class="p">})</span>
317+
<span class="n">result</span> <span class="o">=</span> <span class="n">eval_on_node</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
326318
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">result</span><span class="p">)</span> <span class="k">if</span> <span class="n">result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span></div>
327319

328320

329321

330-
<div class="viewcode-block" id="safer_eval">
331-
<a class="viewcode-back" href="../../../reference/reference_smartview.html#ete4.smartview.faces.safer_eval">[docs]</a>
332-
<span class="k">def</span><span class="w"> </span><span class="nf">safer_eval</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
333-
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Return a safer version of eval(code, context).&quot;&quot;&quot;</span>
334-
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">code</span><span class="o">.</span><span class="n">co_names</span><span class="p">:</span>
335-
<span class="k">if</span> <span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">context</span><span class="p">:</span>
336-
<span class="k">raise</span> <span class="ne">SyntaxError</span><span class="p">(</span><span class="s1">&#39;invalid use of </span><span class="si">%r</span><span class="s1"> during evaluation&#39;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
337-
<span class="k">return</span> <span class="nb">eval</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="p">{</span><span class="s1">&#39;__builtins__&#39;</span><span class="p">:</span> <span class="p">{}},</span> <span class="n">context</span><span class="p">)</span></div>
338-
339-
340-
341322
<div class="viewcode-block" id="CircleFace">
342323
<a class="viewcode-back" href="../../../reference/reference_smartview.html#ete4.smartview.faces.CircleFace">[docs]</a>
343324
<span class="k">class</span><span class="w"> </span><span class="nc">CircleFace</span><span class="p">(</span><span class="n">Face</span><span class="p">):</span>

_modules/ete4/treematcher/treematcher.html

Lines changed: 2 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ <h1>Source code for ete4.treematcher.treematcher</h1><div class="highlight"><pre
4444
<span class="kn">import</span><span class="w"> </span><span class="nn">re</span>
4545

4646
<span class="kn">from</span><span class="w"> </span><span class="nn">ete4</span><span class="w"> </span><span class="kn">import</span> <span class="n">Tree</span>
47+
<span class="kn">from</span><span class="w"> </span><span class="nn">ete4.core.eval</span><span class="w"> </span><span class="kn">import</span> <span class="n">eval_on_node</span>
4748

4849

4950
<div class="viewcode-block" id="TreePattern">
@@ -108,32 +109,7 @@ <h1>Source code for ete4.treematcher.treematcher</h1><div class="highlight"><pre
108109
<span class="k">if</span> <span class="n">pattern</span><span class="o">.</span><span class="n">children</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">children</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="n">pattern</span><span class="o">.</span><span class="n">children</span><span class="p">):</span>
109110
<span class="k">return</span> <span class="kc">False</span> <span class="c1"># no match if there&#39;s not the same number of children</span>
110111

111-
<span class="n">context</span> <span class="o">=</span> <span class="n">context</span> <span class="ow">or</span> <span class="p">{}</span>
112-
<span class="n">context_base</span> <span class="o">=</span> <span class="p">{</span>
113-
<span class="s1">&#39;node&#39;</span><span class="p">:</span> <span class="n">node</span><span class="p">,</span>
114-
<span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">props</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;name&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">),</span> <span class="c1"># node.name could be None</span>
115-
<span class="s1">&#39;dist&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">dist</span><span class="p">,</span> <span class="s1">&#39;d&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">dist</span><span class="p">,</span>
116-
<span class="s1">&#39;support&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">support</span><span class="p">,</span> <span class="s1">&#39;sup&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">support</span><span class="p">,</span>
117-
<span class="s1">&#39;up&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">up</span><span class="p">,</span> <span class="s1">&#39;parent&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">up</span><span class="p">,</span>
118-
<span class="s1">&#39;children&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">children</span><span class="p">,</span> <span class="s1">&#39;ch&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">children</span><span class="p">,</span>
119-
<span class="s1">&#39;is_leaf&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">is_leaf</span><span class="p">,</span> <span class="s1">&#39;is_root&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">is_root</span><span class="p">,</span>
120-
<span class="s1">&#39;props&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">props</span><span class="p">,</span> <span class="s1">&#39;p&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">props</span><span class="p">,</span>
121-
<span class="s1">&#39;species&#39;</span><span class="p">:</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="s1">&#39;species&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">),</span> <span class="c1"># for PhyloTree</span>
122-
<span class="s1">&#39;get&#39;</span><span class="p">:</span> <span class="nb">dict</span><span class="o">.</span><span class="n">get</span><span class="p">,</span>
123-
<span class="s1">&#39;size&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="s1">&#39;dx&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">size</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s1">&#39;dy&#39;</span><span class="p">:</span> <span class="n">node</span><span class="o">.</span><span class="n">size</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span>
124-
<span class="s1">&#39;regex&#39;</span><span class="p">:</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">,</span>
125-
<span class="s1">&#39;startswith&#39;</span><span class="p">:</span> <span class="nb">str</span><span class="o">.</span><span class="n">startswith</span><span class="p">,</span> <span class="s1">&#39;endswith&#39;</span><span class="p">:</span> <span class="nb">str</span><span class="o">.</span><span class="n">endswith</span><span class="p">,</span>
126-
<span class="s1">&#39;upper&#39;</span><span class="p">:</span> <span class="nb">str</span><span class="o">.</span><span class="n">upper</span><span class="p">,</span> <span class="s1">&#39;lower&#39;</span><span class="p">:</span> <span class="nb">str</span><span class="o">.</span><span class="n">lower</span><span class="p">,</span> <span class="s1">&#39;split&#39;</span><span class="p">:</span> <span class="nb">str</span><span class="o">.</span><span class="n">split</span><span class="p">,</span>
127-
<span class="s1">&#39;any&#39;</span><span class="p">:</span> <span class="nb">any</span><span class="p">,</span> <span class="s1">&#39;all&#39;</span><span class="p">:</span> <span class="nb">all</span><span class="p">,</span> <span class="s1">&#39;len&#39;</span><span class="p">:</span> <span class="nb">len</span><span class="p">,</span>
128-
<span class="s1">&#39;sum&#39;</span><span class="p">:</span> <span class="nb">sum</span><span class="p">,</span> <span class="s1">&#39;abs&#39;</span><span class="p">:</span> <span class="nb">abs</span><span class="p">,</span> <span class="s1">&#39;float&#39;</span><span class="p">:</span> <span class="nb">float</span><span class="p">}</span>
129-
130-
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">context</span><span class="p">:</span>
131-
<span class="k">assert</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">context_base</span><span class="p">,</span> <span class="sa">f</span><span class="s1">&#39;colliding name: </span><span class="si">{</span><span class="n">k</span><span class="si">}</span><span class="s1">&#39;</span>
132-
133-
<span class="n">eval_context</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">context_base</span><span class="p">,</span> <span class="o">**</span><span class="n">context</span><span class="p">)</span> <span class="c1"># merge dicts</span>
134-
135-
<span class="n">evaluate</span> <span class="o">=</span> <span class="n">safer_eval</span> <span class="k">if</span> <span class="n">pattern</span><span class="o">.</span><span class="n">safer</span> <span class="k">else</span> <span class="nb">eval</span> <span class="c1"># risky business</span>
136-
<span class="k">if</span> <span class="ow">not</span> <span class="n">evaluate</span><span class="p">(</span><span class="n">pattern</span><span class="o">.</span><span class="n">props</span><span class="p">[</span><span class="s1">&#39;code&#39;</span><span class="p">],</span> <span class="n">eval_context</span><span class="p">):</span>
112+
<span class="k">if</span> <span class="ow">not</span> <span class="n">eval_on_node</span><span class="p">(</span><span class="n">pattern</span><span class="o">.</span><span class="n">props</span><span class="p">[</span><span class="s1">&#39;code&#39;</span><span class="p">],</span> <span class="n">node</span><span class="p">,</span> <span class="n">context</span><span class="p">,</span> <span class="n">pattern</span><span class="o">.</span><span class="n">safer</span><span class="p">):</span>
137113
<span class="k">return</span> <span class="kc">False</span> <span class="c1"># no match if the condition for this node if false</span>
138114

139115
<span class="k">if</span> <span class="ow">not</span> <span class="n">pattern</span><span class="o">.</span><span class="n">children</span><span class="p">:</span>
@@ -157,19 +133,6 @@ <h1>Source code for ete4.treematcher.treematcher</h1><div class="highlight"><pre
157133
<span class="k">if</span> <span class="n">match</span><span class="p">(</span><span class="n">pattern</span><span class="p">,</span> <span class="n">node</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
158134
<span class="k">yield</span> <span class="n">node</span></div>
159135

160-
161-
162-
<span class="c1"># Calling eval() directly in match() can be a security problem. Specially for</span>
163-
<span class="c1"># web services, we are better off using this following function:</span>
164-
<div class="viewcode-block" id="safer_eval">
165-
<a class="viewcode-back" href="../../../reference/reference_treematcher.html#ete4.treematcher.treematcher.safer_eval">[docs]</a>
166-
<span class="k">def</span><span class="w"> </span><span class="nf">safer_eval</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
167-
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Return a safer version of eval(code, context).&quot;&quot;&quot;</span>
168-
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">code</span><span class="o">.</span><span class="n">co_names</span><span class="p">:</span>
169-
<span class="k">if</span> <span class="n">name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">context</span><span class="p">:</span>
170-
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;invalid use of </span><span class="si">%r</span><span class="s1"> during evaluation&#39;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
171-
<span class="k">return</span> <span class="nb">eval</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="p">{</span><span class="s1">&#39;__builtins__&#39;</span><span class="p">:</span> <span class="p">{}},</span> <span class="n">context</span><span class="p">)</span></div>
172-
173136
</pre></div>
174137

175138
</div>

0 commit comments

Comments
 (0)