...
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>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> <h3>Methods<<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> <hr class="thick-line"> </dl> </dl> </section> </article> </main> </body> </html> |
...