Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Html bobswift
<!doctype html>
<html lang="en">
<body>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.10.0" />
<title>universal_extension.universal_extension API documentation</title>
<meta name="description" content="" />
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
<style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;padding:0em 0em 0.75em 0em !important}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold;font-size:1.5em !important}.classes-title{padding:1em 0em 0em 0em !important;font-weight:bold !important}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;padding: 0px;font-size:.8em;line-height:1.4em}code{padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:none;font-weight:500;font-size:1.1em;padding:5px 10px;display:inline-block;min-width:40%}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{color:#00529B;background-color:#BDE5F8;border-left:solid 4px #3498db;line-height:18px;padding:5px;margin:0.5em 0em}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{color:#9F6000;background-color:#FEEFB3;border-left:solid 4px #ec8e00;line-height:18px;padding:5px;margin:0.5em 0em}.admonition.error,.admonition.danger,.admonition.caution{color:#D8000C;background-color:#FFD2D2;border-left:solid 4px #DB1924;line-height:18px;padding:5px;margin:0.5em 0em}pre{background-color:#eeffcc;word-wrap:break-word;border:1px solid #ac9;padding:5px}pre code{background:none}hr{width:95%}.thick-line{height:2.5px;border-width:0;color:gray;background-color:gray}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:100%;padding:0em}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<main>
<article id="content">
<section id="section-intro">
</section>
<section>
</section>
<section>
</section>
<section>
</section>
<section>
<h1 class="classes-title">Classes</h1>
<dl>
<dt id="universal_extension.universal_extension.RequestType"><code class="flex name class">
<span>class <span class="ident">RequestType</span></span>
</code></dt>
<dd>
<div class="desc"><p>Enum representing the type of work the Extension worker process will
be performing.</p>
<p>The value will be one of:</p>
<ul>
<li><code>EXTENSION_START</code></li>
<li><code>DYNAMIC_CHOICE</code></li>
<li><code>DYNAMIC_COMMAND</code></li>
</ul></div>
</dd>
<hr class="thick-line">
<dl>
<dt id="universal_extension.universal_extension.UniversalExtension"><code class="flex name class">
<span>class <span class="ident">UniversalExtension</span></span>
</code></dt>
<dd>
<div class="desc"><p>Base class for Stonebranch Universal Extension module implementations</p></div>
</dd>
<dd>
<h3>Class variables</h3>
<dl>
<dt id="universal_extension.universal_extension.UniversalExtension.ExtensionConfig"><code class="name"><span class="ident">ExtensionConfig</span></code></dt>
<dd>
<div class="desc"><p>A namedtuple that, as of API version 1.5.0, accepts an optional
<code>meter_provider</code> and <code>tracer_provider</code> which will be used to
initialize the Opentelemetry framework.</p>
<p>The value of <code>meter_provider</code> can either be <code>None</code> or an instance of
<code>MeterProvider</code> provided by the Opentelemetry library. Similarly, for
the <code>tracer_provider</code>, the value must either be <code>None</code> or an instance
of <code>TracerProvider</code>. The default arguments for both <code>meter_provider</code>
and <code>tracer_provider</code> is <code>None</code>.</p>
<h2 id="examples">Examples</h2>
<pre><code>>>> ec1 = ExtensionConfig()
>>> ec2 = ExtensionConfig(
...         meter_provider=MeterProvider(
...             resource=Resource.create({"attr1": "value1"})
...         )
...       )
</code></pre></div>
</dd>
</dl>
<hr>
<h3>Instance variables</h3>
<dl>
<dt id="universal_extension.universal_extension.UniversalExtension.uip"><code class="name"><span class="ident">uip</span></code></dt>
<dd>
<div class="desc"><p>can be used to access the following properties of an Extension task instance:</p>
<ul>
<li><strong><code>task_variables</code></strong> : <code>dict</code></li>
<li><strong><code>is_triggered</code></strong> : <code>bool</code></li>
<li><strong><code>trigger_id</code></strong> : <code>str</code></li>
<li><strong><code>instance_id</code></strong> : <code>str</code></li>
<li><strong><code>monitor_id</code></strong>
: <code>str</code></li>
</ul>
<p>Starting with API version 1.5.0, <code>uip</code> will also contain a property
called <code>request_type</code> that will be one of:</p>
<ul>
<li><strong><code>RequestType.EXTENSION_START</code></strong></li>
<li><strong><code>RequestType.DYNAMIC_CHOICE</code></strong></li>
<li><strong><code>RequestType.DYNAMIC_COMMAND</code></strong></li>
</ul>
<p>If the request type is a dynamic choice, there will be an additional
property called <code>choice_field_name</code> in <code>uip</code>. Similarly, for
dynamic command, the <code>dynamic_command_name</code> property will be defined.</p>
<h2 id="examples">Examples</h2>
<pre><code>>>> ops_task_id = self.uip.task_variables['ops_task_id']
>>> is_triggered = self.uip.is_triggered
>>> trigger_id = self.uip.trigger_id
>>> instance_id = self.uip.instance_id
>>> monitor_id = self.uip.monitor_id
</code></pre></div>
</dd>
<hr>
</dl>
<h3>Instance Methods</h3>
<dl>
<dt id="universal_extension.universal_extension.UniversalExtension.extension_start"><code class="name flex">
<span> <span class="ident">extension_start</span></span>(<span>self, fields)</span>
</code></dt>
<dd>
<div class="desc"><p>Serves as the starting point for work that will be performed for a task
instance. It must be implemented in the derived class.</p>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>fields</code></strong> : <code>dict</code></dt>
<dd>populated with field values from the associated task instance
launched in the Controller</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>ExtensionResult</code></dt>
<dd>once the work is done, an instance of ExtensionResult must be
returned. See the ExtensionResult documentation for a full list of
parameters that can be passed to the class constructor</dd>
</dl></div>
</dd>
<hr>
<dt id="universal_extension.universal_extension.UniversalExtension.extension_cancel"><code class="name flex">
<span> <span class="ident">extension_cancel</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"><p>Optional method that allows the Extension to do any cleanup work
before terminating. To use it, implement in the derived class.</p>
<h2 id="parameters">Parameters</h2>
<p>None </p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>None</code></dt>
</dl></div>
</dd>
<hr>
<dt id="universal_extension.universal_extension.UniversalExtension.update_extension_status"><code class="name flex">
<span> <span class="ident">update_extension_status</span></span>(<span>self, fields)</span>
</code></dt>
<dd>
<div class="desc"><p>Propagate state changes back to the associated extension instance in
the Controller.</p>
<ul>
<li>Can be called at any time by an Extension instance.
</li>
<li>Any/all output fields defined in the associated Extension Template
can be updated using this method.</li>
</ul>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>fields</code></strong> : <code>dict
</code></dt>
<dd>The fields parameter expects a dictionary of output fields to be
sent back to the controller for the associated Extension instance.
Field names are implementation dependent and correlate with the
Universal Template field names in the Controller's Template
definition for the associated task.</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>None </code></dt>
</dl>
<h2 id="examples">Examples</h2>
<pre><code>>>> fields = {"foo": "bar"}
>>> self.update_extension_status(fields)
</code></pre></div>
</dd>
<hr>
</dl>
</dd>
<h3>Class methods</h3>
<dl>
<dt id="universal_extension.universal_extension.UniversalExtension.extension_new"><code class="name flex">
<span> <span class="ident">extension_new</span></span>(<span>fields)</span>
</code></dt>
<dd>
<div class="desc"><p>Optional class method which, if implemented, will be run before the
Extension() class is initialized.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The <strong><code>cls</code></strong> class instance will have the <strong><code>uip</code></strong> context
when this method is called.</p>
</div>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>fields</code></strong> : <code>dict</code></dt>
<dd>Depending on the type of work (i.e. extension_start,
dynamic_choice_command, or dynamic_command) that will be executed,
the dictionary will be populated with the appropriate field values
from the selected in the Controller.</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>ExtensionConfig</code></dt>
<dd>An instance of ExtensionConfig</dd>
</dl></div>
</dd>
</dl>
</dl>
<hr class="thick-line">
</dl>
</section>
</article>
</main>
</body>
</html>

...