Skip to content

Commit 6626d67

Browse files
authored
Extend the Integration document to cover the essential API (cloud-custodian#122)
This highlights the core features of the API that are essential for application integration.
1 parent 57ebbf3 commit 6626d67

39 files changed

+590
-168
lines changed

docs/build/doctrees/api.doctree

29.6 KB
Binary file not shown.
155 KB
Binary file not shown.

docs/build/doctrees/index.doctree

30 Bytes
Binary file not shown.
9.03 KB
Binary file not shown.
40 Bytes
Binary file not shown.
18.3 KB
Loading

docs/build/html/_modules/celpy/__init__.html

Lines changed: 58 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -114,20 +114,24 @@ <h1>Source code for celpy.__init__</h1><div class="highlight"><pre>
114114
<span class="k">class</span><span class="w"> </span><span class="nc">Runner</span><span class="p">(</span><span class="n">abc</span><span class="o">.</span><span class="n">ABC</span><span class="p">):</span>
115115
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Abstract runner for a compiled CEL program.</span>
116116

117-
<span class="sd"> The :py:class:`Environment` creates a :py:class:`Runner` to permit</span>
117+
<span class="sd"> The :py:class:`Environment` creates :py:class:`Runner` objects to permit</span>
118118
<span class="sd"> saving a ready-tp-evaluate, compiled CEL expression.</span>
119119
<span class="sd"> A :py:class:`Runner` will evaluate the AST in the context of a specific activation</span>
120120
<span class="sd"> with the provided variable values.</span>
121121

122-
<span class="sd"> A :py:class:`Runner` class provides</span>
123-
<span class="sd"> the ``tree_node_class`` attribute to define the type for tree nodes.</span>
124-
<span class="sd"> This class information is used by the :py:class:`Environment` to tailor the ``Lark`` instance created.</span>
125-
<span class="sd"> The class named by the ``tree_node_class`` can include specialized AST features</span>
126-
<span class="sd"> needed by a :py:class:`Runner` instance.</span>
122+
<span class="sd"> The py:meth:`Runner.evaluate` method is used to evaluate a CEL expression with a new data context.</span>
123+
124+
<span class="sd"> As an implementation detail, note that</span>
125+
<span class="sd"> each :py:class:`Runner` subclass definition includes</span>
126+
<span class="sd"> the ``tree_node_class`` attribute.</span>
127+
<span class="sd"> This attribute defines the type for Tree nodes that must be created by the :py:mod:`lark` parser.</span>
128+
<span class="sd"> This class information provided to the :py:class:`Environment` to tailor the :py:mod:`lark` parser.</span>
129+
<span class="sd"> The class named often includes specialized AST features</span>
130+
<span class="sd"> needed by the :py:class:`Runner` subclss.</span>
127131

128132
<span class="sd"> .. todo:: For a better fit with Go language expectations</span>
129133

130-
<span class="sd"> Consider addoing type adapter and type provider registries.</span>
134+
<span class="sd"> Consider adding type adapter and type provider registries.</span>
131135
<span class="sd"> This would permit distinct sources of protobuf message types.</span>
132136
<span class="sd"> &quot;&quot;&quot;</span>
133137

@@ -164,6 +168,8 @@ <h1>Source code for celpy.__init__</h1><div class="highlight"><pre>
164168
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
165169
<span class="sd"> Builds a new, working :py:class:`Activation` using the :py:class:`Environment` as defaults.</span>
166170
<span class="sd"> A Context will later be layered onto this for evaluation.</span>
171+
172+
<span class="sd"> This is used internally during evaluation.</span>
167173
<span class="sd"> &quot;&quot;&quot;</span>
168174
<span class="n">base_activation</span> <span class="o">=</span> <span class="n">Activation</span><span class="p">(</span>
169175
<span class="n">package</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">environment</span><span class="o">.</span><span class="n">package</span><span class="p">,</span>
@@ -180,9 +186,13 @@ <h1>Source code for celpy.__init__</h1><div class="highlight"><pre>
180186
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
181187
<span class="sd"> Given variable definitions in the :py:class:`celpy.evaluation.Context`, evaluate the given AST and return the resulting value.</span>
182188

183-
<span class="sd"> Generally, this should raise an :exc:`CELEvalError` for most kinds of ordinary problems.</span>
184-
<span class="sd"> It may raise an :exc:`CELUnsupportedError` for future features that aren&#39;t fully implemented.</span>
189+
<span class="sd"> Generally, this should raise an :exc:`celpy.evaluation.CELEvalError` for most kinds of ordinary problems.</span>
190+
<span class="sd"> It may raise an :exc:`celpy.evaluation.CELUnsupportedError` for future features that aren&#39;t fully implemented.</span>
185191
<span class="sd"> Any Python exception reflects a serious problem.</span>
192+
193+
<span class="sd"> :param activation: a :py:class:`celpy.evaluation.Context` object with variable values to use for this evaluation.</span>
194+
<span class="sd"> :returns: the computed value</span>
195+
<span class="sd"> :raises: :exc:`celpy.evaluation.CELEvalError` or :exc:`celpy.evaluation.CELUnsupportedError` for problems encounterd.</span>
186196
<span class="sd"> &quot;&quot;&quot;</span>
187197
<span class="o">...</span></div>
188198
</div>
@@ -305,11 +315,30 @@ <h1>Source code for celpy.__init__</h1><div class="highlight"><pre>
305315
<span class="k">class</span><span class="w"> </span><span class="nc">Environment</span><span class="p">:</span>
306316
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
307317
<span class="sd"> Contains the current evaluation context.</span>
308-
<span class="sd"> The :py:meth:`Environment.compile` method</span>
318+
319+
<span class="sd"> CEL integration starts by creating an :py:class:`Environment` object.</span>
320+
<span class="sd"> This can be initialized with three optional values:</span>
321+
322+
<span class="sd"> - A package name used to resolve variable names.</span>
323+
<span class="sd"> This is not generally required, but is sometimes helpful to provide an explicit namespace for variables.</span>
324+
325+
<span class="sd"> - Type annotations for variables.</span>
326+
<span class="sd"> This helps perform type conversions on external data.</span>
327+
328+
<span class="sd"> - The class of runner to use. By default an :py:class:`InterpretedRunner` is used.</span>
329+
<span class="sd"> The alternative is the :py:class:`CompiledRunner`.</span>
330+
<span class="sd"> Detailed performance benchmarks are still pending.</span>
331+
<span class="sd"> Detailed logging is available from the interpreted runner, to help debug external function bindings.</span>
332+
333+
<span class="sd"> Once the environment has been created, the :py:meth:`Environment.compile` method</span>
309334
<span class="sd"> compiles CEL text to create an AST.</span>
335+
<span class="sd"> This can be helpful for an application that needs to prepare error messages based on the AST.</span>
336+
<span class="sd"> An application can also optimize or transform the AST.</span>
310337

311338
<span class="sd"> The :py:meth:`Environment.program` method</span>
312-
<span class="sd"> packages the AST into a program ready for evaluation.</span>
339+
<span class="sd"> packages the AST into a :py:class:`Runnable` ready for evaluation.</span>
340+
<span class="sd"> At this time, external functions are bound to the CEL expression.</span>
341+
<span class="sd"> The :py:class:`Runnable` can be evaluated repeatedly with multiple inputs, avoiding the overheads of compiling for each input value.</span>
313342

314343
<span class="sd"> .. todo:: For a better fit with Go language expectations</span>
315344

@@ -364,7 +393,20 @@ <h1>Source code for celpy.__init__</h1><div class="highlight"><pre>
364393
<div class="viewcode-block" id="Environment.compile">
365394
<a class="viewcode-back" href="../../api.html#celpy.__init__.Environment.compile">[docs]</a>
366395
<span class="k">def</span><span class="w"> </span><span class="nf">compile</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Expression</span><span class="p">:</span>
367-
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Compile the CEL source. This can raise syntax error exceptions.&quot;&quot;&quot;</span>
396+
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
397+
<span class="sd"> Compiles the CEL source.</span>
398+
399+
<span class="sd"> Processing starts here by building an AST structure from the CEL text.</span>
400+
<span class="sd"> The AST is exposed for the rare case where an application needs to transform it or analyze it.</span>
401+
<span class="sd"> Generally, it&#39;s best to treat the AST object as opaque, and provide it to the :py:meth:`program` method.</span>
402+
403+
<span class="sd"> This can raise syntax error exceptions.</span>
404+
<span class="sd"> The exceptions contain line and character position information to help create easy-to-use error outputs.</span>
405+
406+
<span class="sd"> :param text: The CEL text to evaluate.</span>
407+
<span class="sd"> :returns: A :py:class:`lark.Tree` object describing the CEL expression.</span>
408+
<span class="sd"> :raises: :py:class:`celpy.celparser.CELParseError` exceptions for syntax errors.</span>
409+
<span class="sd"> &quot;&quot;&quot;</span>
368410
<span class="n">ast</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cel_parser</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
369411
<span class="k">return</span> <span class="n">ast</span></div>
370412

@@ -376,6 +418,9 @@ <h1>Source code for celpy.__init__</h1><div class="highlight"><pre>
376418
<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Runner</span><span class="p">:</span>
377419
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
378420
<span class="sd"> Transforms the AST into an executable :py:class:`Runner` object.</span>
421+
<span class="sd"> This will bind the given functions into the runnable object.</span>
422+
423+
<span class="sd"> The resulting object has a :py:meth:`Runner.evaluate` method that applies the CEL structure to input data to compute the final result.</span>
379424

380425
<span class="sd"> :param expr: The parse tree from :py:meth:`compile`.</span>
381426
<span class="sd"> :param functions: Any additional functions to be used by this CEL expression.</span>
@@ -422,7 +467,7 @@ <h1 class="logo"><a href="../../index.html">CEL in Python</a></h1>
422467
<li class="toctree-l1"><a class="reference internal" href="../../configuration.html">Configuration</a></li>
423468
<li class="toctree-l1"><a class="reference internal" href="../../integration.html">Application Integration</a></li>
424469
<li class="toctree-l1"><a class="reference internal" href="../../structure.html">Architecture and Design</a></li>
425-
<li class="toctree-l1"><a class="reference internal" href="../../api.html">API</a></li>
470+
<li class="toctree-l1"><a class="reference internal" href="../../api.html">API Reference</a></li>
426471
<li class="toctree-l1"><a class="reference internal" href="../../development.html">Development Tools</a></li>
427472
<li class="toctree-l1"><a class="reference internal" href="../../c7n_functions.html">C7N Functions Required</a></li>
428473
</ul>

docs/build/html/_modules/celpy/__main__.html

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -284,17 +284,14 @@ <h1>Source code for celpy.__main__</h1><div class="highlight"><pre>
284284
<span class="s2">&quot;st_atime&quot;</span><span class="p">:</span> <span class="n">celtypes</span><span class="o">.</span><span class="n">TimestampType</span><span class="p">(</span>
285285
<span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">status</span><span class="o">.</span><span class="n">st_atime</span><span class="p">)</span>
286286
<span class="p">),</span>
287-
<span class="s2">&quot;st_birthtime&quot;</span><span class="p">:</span> <span class="n">celtypes</span><span class="o">.</span><span class="n">TimestampType</span><span class="p">(</span>
288-
<span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">status</span><span class="o">.</span><span class="n">st_birthtime</span><span class="p">)</span>
289-
<span class="p">),</span>
290287
<span class="s2">&quot;st_ctime&quot;</span><span class="p">:</span> <span class="n">celtypes</span><span class="o">.</span><span class="n">TimestampType</span><span class="p">(</span>
291288
<span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">status</span><span class="o">.</span><span class="n">st_ctime</span><span class="p">)</span>
292289
<span class="p">),</span>
293-
<span class="s2">&quot;st_dev&quot;</span><span class="p">:</span> <span class="n">celtypes</span><span class="o">.</span><span class="n">IntType</span><span class="p">(</span><span class="n">status</span><span class="o">.</span><span class="n">st_dev</span><span class="p">),</span>
294-
<span class="s2">&quot;st_ino&quot;</span><span class="p">:</span> <span class="n">celtypes</span><span class="o">.</span><span class="n">IntType</span><span class="p">(</span><span class="n">status</span><span class="o">.</span><span class="n">st_ino</span><span class="p">),</span>
295290
<span class="s2">&quot;st_mtime&quot;</span><span class="p">:</span> <span class="n">celtypes</span><span class="o">.</span><span class="n">TimestampType</span><span class="p">(</span>
296291
<span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">status</span><span class="o">.</span><span class="n">st_mtime</span><span class="p">)</span>
297292
<span class="p">),</span>
293+
<span class="s2">&quot;st_dev&quot;</span><span class="p">:</span> <span class="n">celtypes</span><span class="o">.</span><span class="n">IntType</span><span class="p">(</span><span class="n">status</span><span class="o">.</span><span class="n">st_dev</span><span class="p">),</span>
294+
<span class="s2">&quot;st_ino&quot;</span><span class="p">:</span> <span class="n">celtypes</span><span class="o">.</span><span class="n">IntType</span><span class="p">(</span><span class="n">status</span><span class="o">.</span><span class="n">st_ino</span><span class="p">),</span>
298295
<span class="s2">&quot;st_nlink&quot;</span><span class="p">:</span> <span class="n">celtypes</span><span class="o">.</span><span class="n">IntType</span><span class="p">(</span><span class="n">status</span><span class="o">.</span><span class="n">st_nlink</span><span class="p">),</span>
299296
<span class="s2">&quot;st_size&quot;</span><span class="p">:</span> <span class="n">celtypes</span><span class="o">.</span><span class="n">IntType</span><span class="p">(</span><span class="n">status</span><span class="o">.</span><span class="n">st_size</span><span class="p">),</span>
300297
<span class="s2">&quot;group_access&quot;</span><span class="p">:</span> <span class="n">celtypes</span><span class="o">.</span><span class="n">BoolType</span><span class="p">(</span><span class="n">status</span><span class="o">.</span><span class="n">st_gid</span> <span class="o">==</span> <span class="n">os</span><span class="o">.</span><span class="n">getegid</span><span class="p">()),</span>
@@ -330,13 +327,16 @@ <h1>Source code for celpy.__main__</h1><div class="highlight"><pre>
330327
<span class="n">data</span><span class="p">[</span><span class="s2">&quot;x&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">celtypes</span><span class="o">.</span><span class="n">BoolType</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">X_OK</span><span class="p">))</span>
331328
<span class="k">try</span><span class="p">:</span>
332329
<span class="n">extra</span> <span class="o">=</span> <span class="p">{</span>
330+
<span class="s2">&quot;st_birthtime&quot;</span><span class="p">:</span> <span class="n">celtypes</span><span class="o">.</span><span class="n">TimestampType</span><span class="p">(</span>
331+
<span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">status</span><span class="o">.</span><span class="n">st_birthtime</span><span class="p">)</span>
332+
<span class="p">),</span>
333333
<span class="s2">&quot;st_blksize&quot;</span><span class="p">:</span> <span class="n">celtypes</span><span class="o">.</span><span class="n">IntType</span><span class="p">(</span><span class="n">status</span><span class="o">.</span><span class="n">st_blksize</span><span class="p">),</span>
334334
<span class="s2">&quot;st_blocks&quot;</span><span class="p">:</span> <span class="n">celtypes</span><span class="o">.</span><span class="n">IntType</span><span class="p">(</span><span class="n">status</span><span class="o">.</span><span class="n">st_blocks</span><span class="p">),</span>
335335
<span class="s2">&quot;st_flags&quot;</span><span class="p">:</span> <span class="n">celtypes</span><span class="o">.</span><span class="n">IntType</span><span class="p">(</span><span class="n">status</span><span class="o">.</span><span class="n">st_flags</span><span class="p">),</span>
336336
<span class="s2">&quot;st_rdev&quot;</span><span class="p">:</span> <span class="n">celtypes</span><span class="o">.</span><span class="n">IntType</span><span class="p">(</span><span class="n">status</span><span class="o">.</span><span class="n">st_rdev</span><span class="p">),</span>
337337
<span class="s2">&quot;st_gen&quot;</span><span class="p">:</span> <span class="n">celtypes</span><span class="o">.</span><span class="n">IntType</span><span class="p">(</span><span class="n">status</span><span class="o">.</span><span class="n">st_gen</span><span class="p">),</span>
338338
<span class="p">}</span>
339-
<span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span> <span class="c1"># pragma: no cover</span>
339+
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span> <span class="c1"># pragma: no cover</span>
340340
<span class="n">extra</span> <span class="o">=</span> <span class="p">{}</span>
341341
<span class="k">return</span> <span class="n">celtypes</span><span class="o">.</span><span class="n">MapType</span><span class="p">(</span><span class="n">data</span> <span class="o">|</span> <span class="n">extra</span><span class="p">)</span>
342342
<span class="k">except</span> <span class="ne">FileNotFoundError</span><span class="p">:</span>
@@ -650,7 +650,7 @@ <h1 class="logo"><a href="../../index.html">CEL in Python</a></h1>
650650
<li class="toctree-l1"><a class="reference internal" href="../../configuration.html">Configuration</a></li>
651651
<li class="toctree-l1"><a class="reference internal" href="../../integration.html">Application Integration</a></li>
652652
<li class="toctree-l1"><a class="reference internal" href="../../structure.html">Architecture and Design</a></li>
653-
<li class="toctree-l1"><a class="reference internal" href="../../api.html">API</a></li>
653+
<li class="toctree-l1"><a class="reference internal" href="../../api.html">API Reference</a></li>
654654
<li class="toctree-l1"><a class="reference internal" href="../../development.html">Development Tools</a></li>
655655
<li class="toctree-l1"><a class="reference internal" href="../../c7n_functions.html">C7N Functions Required</a></li>
656656
</ul>

0 commit comments

Comments
 (0)