@ -9,8 +9,9 @@ The features of the orchestrator is:
- Automatized robots control (customized algorithms, robots scheduling)
- Automatized robots control (customized algorithms, robots scheduling)
- Source code mega flexibility: Light Orchestrator architecture is good for own customization
- Source code mega flexibility: Light Orchestrator architecture is good for own customization
************************************
Global settings dict concept
Global settings dict concept
##################################
************************************
pyOpenRPA project is complex tool which consist of several executable modules such as Robot, Orchestrator, Studio,
pyOpenRPA project is complex tool which consist of several executable modules such as Robot, Orchestrator, Studio,
Because of module compexity, we use 1 init arg - inGSettings
Because of module compexity, we use 1 init arg - inGSettings
@ -18,9 +19,9 @@ inGSettings is a complex dictionary which has all reqired parameters for the mod
The description of the GSettings you can find in executable module details.
The description of the GSettings you can find in executable module details.
************************************
Orchestrator how to configure
Orchestrator how to configure
##################################
************************************
To init pyOpenRPA Orchestrator instance use script:
To init pyOpenRPA Orchestrator instance use script:
@ -31,12 +32,10 @@ Orchestrator.Orchestrator(inGSettings=gSettings) # Call the orchestrator def
gSettings structure
gSettings structure
:ref:`gSettingsTemplate`.
************************************
Orchestrator architecture
Orchestrator architecture
##################################
************************************
Orchestrator has several source code components:
Orchestrator has several source code components:
- User/robot activity consolidated queue single thread (Processor)
- User/robot activity consolidated queue single thread (Processor)
- User/robot activity asynchonus many threads (Processor)
- User/robot activity asynchonus many threads (Processor)
@ -49,16 +48,19 @@ Orchestrator has several source code components:
Below you can find more information about all of the component.
Below you can find more information about all of the component.
***************************
Component Processor
Component Processor
##################################
***************************
Sync - Append activity list to consolidated processor queue. Execution goes sequency by the activity list order
Sync - Append activity list to consolidated processor queue. Execution goes sequency by the activity list order
Async - Create New thread to execute the activity list
Async - Create New thread to execute the activity list
- Activity list
- Activity list
Liast of the activity item
List of the activity item
- Activity item
- Activity item
Activity item is universal mechanism to execute different algorythms from any sources.
Activity item is universal mechanism to execute different algorythms from any sources.
The core feature of the Activity is to call python defs with args and kwargs.
The core feature of the Activity is to call python defs with args and kwargs.
If you need to init do some activity you can write some python def, then create Activity item with current def.
If you need to init do some activity you can write some python def, then create Activity item with current def.
@ -66,16 +68,23 @@ ATTENTION: In some cases (such as web transmition), when you can't transmit pyth
?Why i cant transmit python def from the web
?Why i cant transmit python def from the web
Because the WEB space is not the Python executable space. Interaction between it spaces create by JSON protocol. So, we know than JSON apply int, float, str, bool, None, list, dict - that is all.
Because the WEB space is not the Python executable space. Interaction between it spaces create by JSON protocol. So, we know than JSON apply int, float, str, bool, None, list, dict - that is all.
{
"Def":"DefAliasTest", # def link or def alias (look gSettings["Processor"]["AliasDefDict"])
!WHENDEFALIASISREQUIRED!-DefaliasisrequiredwhenyoutrytocallPythondeffromtheOrchestratorWEBside(becauseyoucan't transmit Python def object out of the Python environment)
..code-block::python
# USAGE
frompyOpenRPAimportOrchestrator
defTestDef():
pass
lAliasStr=Orchestrator.ProcessorAliasDefCreate(
inGSettings=gSettings,
inDef=TestDef,
inAliasStr="TestDefAlias")
# Now you can call TestDef by the alias from var lAliasStr with help of ActivityItem (key Def = lAliasStr)
!WHENDEFALIASISREQUIRED!-DefaliasisrequiredwhenyoutrytocallPythondeffromtheOrchestratorWEBside(becauseyoucan't transmit Python def object out of the Python environment)
..code-block::python
# USAGE
frompyOpenRPAimportOrchestrator
defTestDef():
pass
Orchestrator.ProcessorAliasDefUpdate(
inGSettings=gSettings,
inDef=TestDef,
inAliasStr="TestDefAlias")
# Now you can call TestDef by the alias "TestDefAlias" with help of ActivityItem (key Def = "TestDefAlias")
else:raiseException(f"pyOpenRPA Exception: You can't use Orchestrator.ProcessorAliasDefUpdate with arg 'inDef' string value. inDef is '{inDef}', inAliasStr is '{inAliasStr}'")
else:raiseException(f"pyOpenRPA Exception: You can't use Orchestrator.ProcessorAliasDefUpdate with arg 'inDef' string value. inDef is '{inDef}', inAliasStr is '{inAliasStr}'")
<h1>1. Description<aclass="headerlink"href="#description"title="Permalink to this headline">¶</a></h1>
<p>pyOpenRPA Orchestrator is the executable process.</p>
<p>The features of the orchestrator is:
- Centralized/decentralized user control interface (applicable and for business users and for technical users). Web based, support desktop, tablet, phone.
- Automatized robots control (customized algorithms, robots scheduling)
- Source code mega flexibility: Light Orchestrator architecture is good for own customization</p>
<h2>Orchestrator architecture<aclass="headerlink"href="#orchestrator-architecture"title="Permalink to this headline">¶</a></h2>
<p>Orchestrator has several source code components:
- User/robot activity consolidated queue single thread (Processor)
- User/robot activity asynchonus many threads (Processor)
- Scheduler single thread (main)
- RDP keep active many thread
- Autocleaner single thread
- GUI keep active single thread
- HTTP web server single thread (create user socket threads)
-</p>
<p>Below you can find more information about all of the component.</p>
</div>
<divclass="section"id="component-processor">
<h2>Component Processor<aclass="headerlink"href="#component-processor"title="Permalink to this headline">¶</a></h2>
<p>Sync - Append activity list to consolidated processor queue. Execution goes sequency by the activity list order</p>
<p>Async - Create New thread to execute the activity list</p>
<ulclass="simple">
<li><p>Activity list</p></li>
</ul>
<p>List of the activity item</p>
<ulclass="simple">
<li><p>Activity item</p></li>
</ul>
<p>Activity item is universal mechanism to execute different algorythms from any sources.
The core feature of the Activity is to call python defs with args and kwargs.
If you need to init do some activity you can write some python def, then create Activity item with current def.
ATTENTION: In some cases (such as web transmition), when you can’t transmit python def as object you can use symbolic names for python defs. It is apply you to init all of you want from the web UI.</p>
<p>?Why i cant transmit python def from the web
Because the WEB space is not the Python executable space. Interaction between it spaces create by JSON protocol. So, we know than JSON apply int, float, str, bool, None, list, dict - that is all.</p>
<divclass="admonition note">
<pclass="admonition-title">Note</p>
<p>Example
{</p>
<blockquote>
<div><p>“Def”:”DefAliasTest”, # def link or def alias (look gSettings[“Processor”][“AliasDefDict”])
<h2>pyOpenRPA.Orchestrator.__Orchestrator__<aclass="headerlink"href="#pyopenrpa-orchestrator-orchestrator"title="Permalink to this headline">¶</a></h2>
- Centralized/decentralized user control interface (applicable and for business users and for technical users). Web based, support desktop, tablet, phone.
<divclass="highlight-python notranslate"><divclass="highlight"><pre><span></span><spanclass="c1"># EXAMPLE 1</span>
- Automatized robots control (customized algorithms, robots scheduling)
<h2>Orchestrator architecture<aclass="headerlink"href="#orchestrator-architecture"title="Permalink to this headline">¶</a></h2>
<p>Orchestrator has several source code components:
- User/robot activity consolidated queue single thread (Processor)
- User/robot activity asynchonus many threads (Processor)
- Scheduler single thread (main)
- RDP keep active many thread
- Autocleaner single thread
- GUI keep active single thread
- HTTP web server single thread (create user socket threads)
-</p>
<p>Below you can find more information about all of the component.</p>
</div>
<divclass="section"id="component-processor">
<h2>Component Processor<aclass="headerlink"href="#component-processor"title="Permalink to this headline">¶</a></h2>
<p>Sync - Append activity list to consolidated processor queue. Execution goes sequency by the activity list order</p>
<p>Async - Create New thread to execute the activity list</p>
<ulclass="simple">
<li><p>Activity list</p></li>
</ul>
<p>Liast of the activity item</p>
<ulclass="simple">
<li><p>Activity item</p></li>
</ul>
<p>Activity item is universal mechanism to execute different algorythms from any sources.
The core feature of the Activity is to call python defs with args and kwargs.
If you need to init do some activity you can write some python def, then create Activity item with current def.
ATTENTION: In some cases (such as web transmition), when you can’t transmit python def as object you can use symbolic names for python defs. It is apply you to init all of you want from the web UI.</p>
<p>?Why i cant transmit python def from the web
Because the WEB space is not the Python executable space. Interaction between it spaces create by JSON protocol. So, we know than JSON apply int, float, str, bool, None, list, dict - that is all.
{</p>
<blockquote>
<div><p>“Def”:”DefAliasTest”, # def link or def alias (look gSettings[“Processor”][“AliasDefDict”])
<spanid="pyopenrpa-orchestrator"></span><h2>pyOpenRPA Orchestrator<aclass="headerlink"href="#module-pyOpenRPA.Orchestrator.__Orchestrator__"title="Permalink to this headline">¶</a></h2>
<codeclass="sig-prename descclassname">pyOpenRPA.Orchestrator.__Orchestrator__.</code><codeclass="sig-name descname">AgentActivityItemAdd</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">inGSettings</span></em>, <emclass="sig-param"><spanclass="n">inHostNameStr</span></em>, <emclass="sig-param"><spanclass="n">inUserStr</span></em>, <emclass="sig-param"><spanclass="n">inActivityItemDict</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html#AgentActivityItemAdd"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#pyOpenRPA.Orchestrator.__Orchestrator__.AgentActivityItemAdd"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-prename descclassname">pyOpenRPA.Orchestrator.__Orchestrator__.</code><codeclass="sig-name descname">AgentActivityItemAdd</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">inGSettings</span></em>, <emclass="sig-param"><spanclass="n">inHostNameStr</span></em>, <emclass="sig-param"><spanclass="n">inUserStr</span></em>, <emclass="sig-param"><spanclass="n">inActivityItemDict</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html#AgentActivityItemAdd"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#pyOpenRPA.Orchestrator.__Orchestrator__.AgentActivityItemAdd"title="Permalink to this definition">¶</a></dt>
<dd><p>Add activity in AgentDict. Check if item is created</p>
<dd><p>Add activity in AgentDict. Check if item is created</p>
<codeclass="sig-prename descclassname">pyOpenRPA.Orchestrator.__Orchestrator__.</code><codeclass="sig-name descname">GSettingsKeyListValueAppend</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">inGSettings</span></em>, <emclass="sig-param"><spanclass="n">inValue</span></em>, <emclass="sig-param"><spanclass="n">inKeyList</span><spanclass="o">=</span><spanclass="default_value">None</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html#GSettingsKeyListValueAppend"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueAppend"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-prename descclassname">pyOpenRPA.Orchestrator.__Orchestrator__.</code><codeclass="sig-name descname">GSettingsKeyListValueAppend</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">inGSettings</span></em>, <emclass="sig-param"><spanclass="n">inValue</span></em>, <emclass="sig-param"><spanclass="n">inKeyList</span><spanclass="o">=</span><spanclass="default_value">None</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html#GSettingsKeyListValueAppend"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueAppend"title="Permalink to this definition">¶</a></dt>
<dd><p>Append value in GSettings by the key list</p>
<dd><p>Append value in GSettings by the key list</p>
<codeclass="sig-prename descclassname">pyOpenRPA.Orchestrator.__Orchestrator__.</code><codeclass="sig-name descname">GSettingsKeyListValueOperatorPlus</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">inGSettings</span></em>, <emclass="sig-param"><spanclass="n">inValue</span></em>, <emclass="sig-param"><spanclass="n">inKeyList</span><spanclass="o">=</span><spanclass="default_value">None</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html#GSettingsKeyListValueOperatorPlus"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueOperatorPlus"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-prename descclassname">pyOpenRPA.Orchestrator.__Orchestrator__.</code><codeclass="sig-name descname">GSettingsKeyListValueOperatorPlus</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">inGSettings</span></em>, <emclass="sig-param"><spanclass="n">inValue</span></em>, <emclass="sig-param"><spanclass="n">inKeyList</span><spanclass="o">=</span><spanclass="default_value">None</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html#GSettingsKeyListValueOperatorPlus"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueOperatorPlus"title="Permalink to this definition">¶</a></dt>
<dd><p>Operator plus value in GSettings by the key list</p>
<dd><p>Execute plus operation between 2 lists (1:inValue and 2:gSettings by the inKeyList)</p>
<codeclass="sig-prename descclassname">pyOpenRPA.Orchestrator.__Orchestrator__.</code><codeclass="sig-name descname">ProcessorAliasDefCreate</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">inGSettings</span></em>, <emclass="sig-param"><spanclass="n">inDef</span></em>, <emclass="sig-param"><spanclass="n">inAliasStr</span><spanclass="o">=</span><spanclass="default_value">None</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html#ProcessorAliasDefCreate"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefCreate"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-prename descclassname">pyOpenRPA.Orchestrator.__Orchestrator__.</code><codeclass="sig-name descname">ProcessorAliasDefCreate</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">inGSettings</span></em>, <emclass="sig-param"><spanclass="n">inDef</span></em>, <emclass="sig-param"><spanclass="n">inAliasStr</span><spanclass="o">=</span><spanclass="default_value">None</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html#ProcessorAliasDefCreate"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefCreate"title="Permalink to this definition">¶</a></dt>
<dd><p>Create alias for def (can be used in ActivityItem in field Def)</p>
<dd><p>Create alias for def (can be used in ActivityItem in field Def)
!WHEN DEF ALIAS IS REQUIRED! - Def alias is required when you try to call Python def from the Orchestrator WEB side (because you can’t transmit Python def object out of the Python environment)</p>
<codeclass="sig-prename descclassname">pyOpenRPA.Orchestrator.__Orchestrator__.</code><codeclass="sig-name descname">ProcessorAliasDefUpdate</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">inGSettings</span></em>, <emclass="sig-param"><spanclass="n">inDef</span></em>, <emclass="sig-param"><spanclass="n">inAliasStr</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html#ProcessorAliasDefUpdate"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefUpdate"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-prename descclassname">pyOpenRPA.Orchestrator.__Orchestrator__.</code><codeclass="sig-name descname">ProcessorAliasDefUpdate</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">inGSettings</span></em>, <emclass="sig-param"><spanclass="n">inDef</span></em>, <emclass="sig-param"><spanclass="n">inAliasStr</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html#ProcessorAliasDefUpdate"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefUpdate"title="Permalink to this definition">¶</a></dt>
<dd><p>Update alias for def (can be used in ActivityItem in field Def)</p>
<dd><p>Update alias for def (can be used in ActivityItem in field Def).
!WHEN DEF ALIAS IS REQUIRED! - Def alias is required when you try to call Python def from the Orchestrator WEB side (because you can’t transmit Python def object out of the Python environment)</p>
<spanclass="s2">"VersionStr"</span><spanclass="p">:</span><spanclass="kc">None</span><spanclass="p">,</span><spanclass="c1"># Will be filled in orchestrator,</span>
<spanclass="s2">"VersionStr"</span><spanclass="p">:</span><spanclass="kc">None</span><spanclass="p">,</span><spanclass="c1"># Will be filled in orchestrator,</span>
<ahref="04_HowToStart.html"class="btn btn-neutral float-right"title="4. How to start"accesskey="n"rel="next">Next <spanclass="fa fa-arrow-circle-right"aria-hidden="true"></span></a>
<h1>How to start<aclass="headerlink"href="#how-to-start"title="Permalink to this headline">¶</a></h1>
<h1>4. How to start<aclass="headerlink"href="#how-to-start"title="Permalink to this headline">¶</a></h1>
<p>Start configuration example</p>
<p>Start configuration example</p>
<divclass="highlight-default notranslate"><divclass="highlight"><pre><span></span><spanclass="kn">import</span><spanclass="nn">psutil</span><spanclass="o">,</span><spanclass="nn">datetime</span><spanclass="o">,</span><spanclass="nn">logging</span><spanclass="o">,</span><spanclass="nn">os</span><spanclass="o">,</span><spanclass="nn">sys</span><spanclass="c1"># stdout from logging</span>
<divclass="highlight-default notranslate"><divclass="highlight"><pre><span></span><spanclass="kn">import</span><spanclass="nn">psutil</span><spanclass="o">,</span><spanclass="nn">datetime</span><spanclass="o">,</span><spanclass="nn">logging</span><spanclass="o">,</span><spanclass="nn">os</span><spanclass="o">,</span><spanclass="nn">sys</span><spanclass="c1"># stdout from logging</span>
<spanclass="sd"> Create alias for def (can be used in ActivityItem in field Def)</span>
<spanclass="sd"> Create alias for def (can be used in ActivityItem in field Def)</span>
<spanclass="sd"> !WHEN DEF ALIAS IS REQUIRED! - Def alias is required when you try to call Python def from the Orchestrator WEB side (because you can't transmit Python def object out of the Python environment)</span>
<spanclass="sd"> .. code-block:: python</span>
<spanclass="sd"> # USAGE</span>
<spanclass="sd"> from pyOpenRPA import Orchestrator</span>
<spanclass="sd"> Update alias for def (can be used in ActivityItem in field Def)</span>
<spanclass="sd"> Update alias for def (can be used in ActivityItem in field Def).</span>
<spanclass="sd"> !WHEN DEF ALIAS IS REQUIRED! - Def alias is required when you try to call Python def from the Orchestrator WEB side (because you can't transmit Python def object out of the Python environment)</span>
<spanclass="sd"> .. code-block:: python</span>
<spanclass="sd"> # USAGE</span>
<spanclass="sd"> from pyOpenRPA import Orchestrator</span>
<spanclass="sd"> # Now you can call TestDef by the alias "TestDefAlias" with help of ActivityItem (key Def = "TestDefAlias")</span>
<spanclass="sd"> :param inGSettings: Global settings dict (singleton)</span>
<spanclass="sd"> :param inGSettings: Global settings dict (singleton)</span>
<spanclass="sd"> :param inDef:</span>
<spanclass="sd"> :param inDef: Def</span>
<spanclass="sd"> :param inAliasStr:</span>
<spanclass="sd"> :param inAliasStr: String alias for associated def</span>
<spanclass="k">else</span><spanclass="p">:</span><spanclass="k">raise</span><spanclass="ne">Exception</span><spanclass="p">(</span><spanclass="sa">f</span><spanclass="s2">"pyOpenRPA Exception: You can't use Orchestrator.ProcessorAliasDefUpdate with arg 'inDef' string value. inDef is '</span><spanclass="si">{</span><spanclass="n">inDef</span><spanclass="si">}</span><spanclass="s2">', inAliasStr is '</span><spanclass="si">{</span><spanclass="n">inAliasStr</span><spanclass="si">}</span><spanclass="s2">'"</span><spanclass="p">)</span>
<spanclass="k">else</span><spanclass="p">:</span><spanclass="k">raise</span><spanclass="ne">Exception</span><spanclass="p">(</span><spanclass="sa">f</span><spanclass="s2">"pyOpenRPA Exception: You can't use Orchestrator.ProcessorAliasDefUpdate with arg 'inDef' string value. inDef is '</span><spanclass="si">{</span><spanclass="n">inDef</span><spanclass="si">}</span><spanclass="s2">', inAliasStr is '</span><spanclass="si">{</span><spanclass="n">inAliasStr</span><spanclass="si">}</span><spanclass="s2">'"</span><spanclass="p">)</span>
<divclass="viewcode-block"id="ProcessIsStarted"><aclass="viewcode-back"href="../../../Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessIsStarted">[docs]</a><spanclass="k">def</span><spanclass="nf">ProcessIsStarted</span><spanclass="p">(</span><spanclass="n">inProcessNameWOExeStr</span><spanclass="p">):</span><spanclass="c1"># Check if process is started</span>
<divclass="viewcode-block"id="ProcessIsStarted"><aclass="viewcode-back"href="../../../Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessIsStarted">[docs]</a><spanclass="k">def</span><spanclass="nf">ProcessIsStarted</span><spanclass="p">(</span><spanclass="n">inProcessNameWOExeStr</span><spanclass="p">):</span><spanclass="c1"># Check if process is started</span>
<spanclass="sd">"""</span>
<spanclass="sd">"""</span>
<spanclass="sd"> Check if there is any running process that contains the given name processName.</span>
<spanclass="sd"> Check if there is any running process that contains the given name processName.</span>
<spanclass="sd"> Create new RDPSession in RobotRDPActive. Attention - activity will be ignored if key is exists</span>
<spanclass="sd"> Create new RDPSession in RobotRDPActive. Attention - activity will be ignored if key is exists</span>
<spanclass="sd"> 2 way of the use</span>
<spanclass="sd"> 2 way of the use</span>
@ -1009,7 +1128,7 @@
<spanclass="k">if</span><spanclass="n">inGSettings</span><spanclass="p">[</span><spanclass="s2">"Logger"</span><spanclass="p">]:</span><spanclass="n">inGSettings</span><spanclass="p">[</span><spanclass="s2">"Logger"</span><spanclass="p">]</span><spanclass="o">.</span><spanclass="n">warning</span><spanclass="p">(</span><spanclass="sa">f</span><spanclass="s2">"RDP session was not created because it is alredy exists in the RDPList. Use RDPSessionReconnect if you want to update RDP configuration."</span><spanclass="p">)</span>
<spanclass="k">if</span><spanclass="n">inGSettings</span><spanclass="p">[</span><spanclass="s2">"Logger"</span><spanclass="p">]:</span><spanclass="n">inGSettings</span><spanclass="p">[</span><spanclass="s2">"Logger"</span><spanclass="p">]</span><spanclass="o">.</span><spanclass="n">warning</span><spanclass="p">(</span><spanclass="sa">f</span><spanclass="s2">"RDP session was not created because it is alredy exists in the RDPList. Use RDPSessionReconnect if you want to update RDP configuration."</span><spanclass="p">)</span>
<spanclass="sd"> Disconnect the RDP session</span>
<spanclass="sd"> Disconnect the RDP session</span>
@ -1042,7 +1161,7 @@
<spanclass="n">Connector</span><spanclass="o">.</span><spanclass="n">SystemRDPWarningClickOk</span><spanclass="p">()</span><spanclass="c1"># Click all warning messages</span>
<spanclass="n">Connector</span><spanclass="o">.</span><spanclass="n">SystemRDPWarningClickOk</span><spanclass="p">()</span><spanclass="c1"># Click all warning messages</span>
<spanclass="sd"> Stop track the RDP session. Current def dont kill RDP session - only stop to track it (it can give )</span>
<spanclass="sd"> Stop track the RDP session. Current def dont kill RDP session - only stop to track it (it can give )</span>
@ -1085,7 +1204,7 @@
<spanclass="n">inGSettings</span><spanclass="p">[</span><spanclass="s2">"RobotRDPActive"</span><spanclass="p">][</span><spanclass="s2">"RDPList"</span><spanclass="p">]</span><spanclass="o">.</span><spanclass="n">pop</span><spanclass="p">(</span><spanclass="n">inRDPSessionKeyStr</span><spanclass="p">,</span><spanclass="kc">None</span><spanclass="p">)</span><spanclass="c1"># Remove item from RDPList</span>
<spanclass="n">inGSettings</span><spanclass="p">[</span><spanclass="s2">"RobotRDPActive"</span><spanclass="p">][</span><spanclass="s2">"RDPList"</span><spanclass="p">]</span><spanclass="o">.</span><spanclass="n">pop</span><spanclass="p">(</span><spanclass="n">inRDPSessionKeyStr</span><spanclass="p">,</span><spanclass="kc">None</span><spanclass="p">)</span><spanclass="c1"># Remove item from RDPList</span>
<spanclass="n">inGSettings</span><spanclass="p">[</span><spanclass="s2">"RobotRDPActive"</span><spanclass="p">][</span><spanclass="s2">"RDPList"</span><spanclass="p">]</span><spanclass="o">.</span><spanclass="n">pop</span><spanclass="p">(</span><spanclass="n">inRDPSessionKeyStr</span><spanclass="p">,</span><spanclass="kc">None</span><spanclass="p">)</span><spanclass="c1"># Remove item from RDPList</span>
<spanclass="n">inGSettings</span><spanclass="p">[</span><spanclass="s2">"RobotRDPActive"</span><spanclass="p">][</span><spanclass="s2">"RDPList"</span><spanclass="p">]</span><spanclass="o">.</span><spanclass="n">pop</span><spanclass="p">(</span><spanclass="n">inRDPSessionKeyStr</span><spanclass="p">,</span><spanclass="kc">None</span><spanclass="p">)</span><spanclass="c1"># Remove item from RDPList</span>
<spanclass="s2">"OutStr"</span><spanclass="p">:</span><spanclass="kc">None</span><spanclass="p">,</span><spanclass="c1"># Result string</span>
<spanclass="s2">"IsResponsibleBool"</span><spanclass="p">:</span><spanclass="kc">False</span><spanclass="c1"># Flag is RDP is responsible - works only when inModeStr = CROSSCHECK</span>
<spanclass="k">if</span><spanclass="n">inGSettings</span><spanclass="p">[</span><spanclass="s2">"Logger"</span><spanclass="p">]:</span><spanclass="n">inGSettings</span><spanclass="p">[</span><spanclass="s2">"Logger"</span><spanclass="p">]</span><spanclass="o">.</span><spanclass="n">warning</span><spanclass="p">(</span><spanclass="sa">f</span><spanclass="s2">"RDP def was called not from processor queue - activity will be append in the processor queue."</span><spanclass="p">)</span>
<spanclass="k">if</span><spanclass="n">inGSettings</span><spanclass="p">[</span><spanclass="s2">"Logger"</span><spanclass="p">]:</span><spanclass="n">inGSettings</span><spanclass="p">[</span><spanclass="s2">"Logger"</span><spanclass="p">]</span><spanclass="o">.</span><spanclass="n">warning</span><spanclass="p">(</span><spanclass="sa">f</span><spanclass="s2">"RDP def was called not from processor queue - activity will be append in the processor queue."</span><spanclass="p">)</span>
<spanclass="s2">"Def"</span><spanclass="p">:</span><spanclass="n">RDPSessionCMDRun</span><spanclass="p">,</span><spanclass="c1"># def link or def alias (look gSettings["Processor"]["AliasDefDict"])</span>
<spanclass="s2">"Def"</span><spanclass="p">:</span><spanclass="n">RDPSessionCMDRun</span><spanclass="p">,</span><spanclass="c1"># def link or def alias (look gSettings["Processor"]["AliasDefDict"])</span>
<spanclass="s2">"ArgGSettings"</span><spanclass="p">:</span><spanclass="s2">"inGSettings"</span><spanclass="p">,</span><spanclass="c1"># Name of GSettings attribute: str (ArgDict) or index (for ArgList)</span>
<spanclass="s2">"ArgGSettings"</span><spanclass="p">:</span><spanclass="s2">"inGSettings"</span><spanclass="p">,</span><spanclass="c1"># Name of GSettings attribute: str (ArgDict) or index (for ArgList)</span>
<spanclass="s2">"ArgLogger"</span><spanclass="p">:</span><spanclass="kc">None</span><spanclass="c1"># Name of GSettings attribute: str (ArgDict) or index (for ArgList)</span>
<spanclass="s2">"ArgLogger"</span><spanclass="p">:</span><spanclass="kc">None</span><spanclass="c1"># Name of GSettings attribute: str (ArgDict) or index (for ArgList)</span>
@ -9,8 +9,9 @@ The features of the orchestrator is:
- Automatized robots control (customized algorithms, robots scheduling)
- Automatized robots control (customized algorithms, robots scheduling)
- Source code mega flexibility: Light Orchestrator architecture is good for own customization
- Source code mega flexibility: Light Orchestrator architecture is good for own customization
************************************
Global settings dict concept
Global settings dict concept
##################################
************************************
pyOpenRPA project is complex tool which consist of several executable modules such as Robot, Orchestrator, Studio,
pyOpenRPA project is complex tool which consist of several executable modules such as Robot, Orchestrator, Studio,
Because of module compexity, we use 1 init arg - inGSettings
Because of module compexity, we use 1 init arg - inGSettings
@ -18,9 +19,9 @@ inGSettings is a complex dictionary which has all reqired parameters for the mod
The description of the GSettings you can find in executable module details.
The description of the GSettings you can find in executable module details.
************************************
Orchestrator how to configure
Orchestrator how to configure
##################################
************************************
To init pyOpenRPA Orchestrator instance use script:
To init pyOpenRPA Orchestrator instance use script:
@ -31,12 +32,10 @@ Orchestrator.Orchestrator(inGSettings=gSettings) # Call the orchestrator def
gSettings structure
gSettings structure
:ref:`gSettingsTemplate`.
************************************
Orchestrator architecture
Orchestrator architecture
##################################
************************************
Orchestrator has several source code components:
Orchestrator has several source code components:
- User/robot activity consolidated queue single thread (Processor)
- User/robot activity consolidated queue single thread (Processor)
- User/robot activity asynchonus many threads (Processor)
- User/robot activity asynchonus many threads (Processor)
@ -49,16 +48,19 @@ Orchestrator has several source code components:
Below you can find more information about all of the component.
Below you can find more information about all of the component.
***************************
Component Processor
Component Processor
##################################
***************************
Sync - Append activity list to consolidated processor queue. Execution goes sequency by the activity list order
Sync - Append activity list to consolidated processor queue. Execution goes sequency by the activity list order
Async - Create New thread to execute the activity list
Async - Create New thread to execute the activity list
- Activity list
- Activity list
Liast of the activity item
List of the activity item
- Activity item
- Activity item
Activity item is universal mechanism to execute different algorythms from any sources.
Activity item is universal mechanism to execute different algorythms from any sources.
The core feature of the Activity is to call python defs with args and kwargs.
The core feature of the Activity is to call python defs with args and kwargs.
If you need to init do some activity you can write some python def, then create Activity item with current def.
If you need to init do some activity you can write some python def, then create Activity item with current def.
@ -66,16 +68,23 @@ ATTENTION: In some cases (such as web transmition), when you can't transmit pyth
?Why i cant transmit python def from the web
?Why i cant transmit python def from the web
Because the WEB space is not the Python executable space. Interaction between it spaces create by JSON protocol. So, we know than JSON apply int, float, str, bool, None, list, dict - that is all.
Because the WEB space is not the Python executable space. Interaction between it spaces create by JSON protocol. So, we know than JSON apply int, float, str, bool, None, list, dict - that is all.
{
"Def":"DefAliasTest", # def link or def alias (look gSettings["Processor"]["AliasDefDict"])
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.AgentActivityItemAdd">AgentActivityItemAdd() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.AgentActivityItemAdd">AgentActivityItemAdd() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSCMD">AgentOSCMD() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSCMD">AgentOSCMD() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
</ul></td>
</ul></td>
<tdstyle="width: 33%; vertical-align: top;"><ul>
<tdstyle="width: 33%; vertical-align: top;"><ul>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileBinaryDataBase64StrCreate">AgentOSFileBinaryDataBase64StrCreate() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileBinaryDataBase64StrCreate">AgentOSFileBinaryDataBase64StrCreate() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileBinaryDataBytesCreate">AgentOSFileBinaryDataBytesCreate() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileBinaryDataBytesCreate">AgentOSFileBinaryDataBytesCreate() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileTextDataStrCreate">AgentOSFileTextDataStrCreate() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.AgentOSFileTextDataStrCreate">AgentOSFileTextDataStrCreate() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsAutocleaner">GSettingsAutocleaner() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsAutocleaner">GSettingsAutocleaner() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueAppend">GSettingsKeyListValueAppend() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueAppend">GSettingsKeyListValueAppend() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
</ul></td>
</ul></td>
<tdstyle="width: 33%; vertical-align: top;"><ul>
<tdstyle="width: 33%; vertical-align: top;"><ul>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueGet">GSettingsKeyListValueGet() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueGet">GSettingsKeyListValueGet() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueOperatorPlus">GSettingsKeyListValueOperatorPlus() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueOperatorPlus">GSettingsKeyListValueOperatorPlus() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueSet">GSettingsKeyListValueSet() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.GSettingsKeyListValueSet">GSettingsKeyListValueSet() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorRestart">OrchestratorRestart() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorRestart">OrchestratorRestart() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave">OrchestratorSessionSave() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave">OrchestratorSessionSave() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
</ul></td>
</ul></td>
<tdstyle="width: 33%; vertical-align: top;"><ul>
<tdstyle="width: 33%; vertical-align: top;"><ul>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.OSCMD">OSCMD() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.OSCMD">OSCMD() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.OSCredentialsVerify">OSCredentialsVerify() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.OSCredentialsVerify">OSCredentialsVerify() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessIsStarted">ProcessIsStarted() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessIsStarted">ProcessIsStarted() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessListGet">ProcessListGet() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessListGet">ProcessListGet() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorActivityItemAppend">ProcessorActivityItemAppend() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorActivityItemAppend">ProcessorActivityItemAppend() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorActivityItemCreate">ProcessorActivityItemCreate() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorActivityItemCreate">ProcessorActivityItemCreate() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefCreate">ProcessorAliasDefCreate() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefCreate">ProcessorAliasDefCreate() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefUpdate">ProcessorAliasDefUpdate() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessorAliasDefUpdate">ProcessorAliasDefUpdate() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
</ul></td>
</ul></td>
<tdstyle="width: 33%; vertical-align: top;"><ul>
<tdstyle="width: 33%; vertical-align: top;"><ul>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessStart">ProcessStart() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessStart">ProcessStart() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessStop">ProcessStop() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.ProcessStop">ProcessStop() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.PythonStart">PythonStart() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.PythonStart">PythonStart() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionCMDRun">RDPSessionCMDRun() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionCMDRun">RDPSessionCMDRun() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionConnect">RDPSessionConnect() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionConnect">RDPSessionConnect() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionDisconnect">RDPSessionDisconnect() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionDisconnect">RDPSessionDisconnect() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionDublicatesResolve">RDPSessionDublicatesResolve() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionDublicatesResolve">RDPSessionDublicatesResolve() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionFileStoredRecieve">RDPSessionFileStoredRecieve() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionFileStoredRecieve">RDPSessionFileStoredRecieve() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionFileStoredSend">RDPSessionFileStoredSend() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionFileStoredSend">RDPSessionFileStoredSend() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
</ul></td>
</ul></td>
<tdstyle="width: 33%; vertical-align: top;"><ul>
<tdstyle="width: 33%; vertical-align: top;"><ul>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionLogoff">RDPSessionLogoff() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionLogoff">RDPSessionLogoff() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionMonitorStop">RDPSessionMonitorStop() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionMonitorStop">RDPSessionMonitorStop() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionProcessStartIfNotRunning">RDPSessionProcessStartIfNotRunning() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionProcessStartIfNotRunning">RDPSessionProcessStartIfNotRunning() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionProcessStop">RDPSessionProcessStop() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionProcessStop">RDPSessionProcessStop() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionReconnect">RDPSessionReconnect() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionReconnect">RDPSessionReconnect() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionResponsibilityCheck">RDPSessionResponsibilityCheck() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPSessionResponsibilityCheck">RDPSessionResponsibilityCheck() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPTemplateCreate">RDPTemplateCreate() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.RDPTemplateCreate">RDPTemplateCreate() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.SchedulerActivityTimeAddWeekly">SchedulerActivityTimeAddWeekly() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.SchedulerActivityTimeAddWeekly">SchedulerActivityTimeAddWeekly() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.UACKeyListCheck">UACKeyListCheck() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.UACKeyListCheck">UACKeyListCheck() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
</ul></td>
</ul></td>
<tdstyle="width: 33%; vertical-align: top;"><ul>
<tdstyle="width: 33%; vertical-align: top;"><ul>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.UACSuperTokenUpdate">UACSuperTokenUpdate() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.UACSuperTokenUpdate">UACSuperTokenUpdate() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.UACUpdate">UACUpdate() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.UACUpdate">UACUpdate() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.WebCPUpdate">WebCPUpdate() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.WebCPUpdate">WebCPUpdate() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectDef">WebURLConnectDef() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectDef">WebURLConnectDef() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectFile">WebURLConnectFile() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectFile">WebURLConnectFile() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
</ul></td>
</ul></td>
<tdstyle="width: 33%; vertical-align: top;"><ul>
<tdstyle="width: 33%; vertical-align: top;"><ul>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectFolder">WebURLConnectFolder() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.WebURLConnectFolder">WebURLConnectFolder() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.WebUserInfoGet">WebUserInfoGet() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.WebUserInfoGet">WebUserInfoGet() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.WebUserIsSuperToken">WebUserIsSuperToken() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.WebUserIsSuperToken">WebUserIsSuperToken() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/Orchestrator.html#pyOpenRPA.Orchestrator.__Orchestrator__.WebUserUACHierarchyGet">WebUserUACHierarchyGet() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.WebUserUACHierarchyGet">WebUserUACHierarchyGet() (in module pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<liclass="toctree-l2"><aclass="reference internal"href="Orchestrator/01_Orchestrator.html#orchestrator-how-to-configure">Orchestrator how to configure</a></li>
- Centralized/decentralized user control interface (applicable and for business users and for technical users). Web based, support desktop, tablet, phone.
- Automatized robots control (customized algorithms, robots scheduling)
- Source code mega flexibility: Light Orchestrator architecture is good for own customization
## Global settings dict concept
pyOpenRPA project is complex tool which consist of several executable modules such as Robot, Orchestrator, Studio,
Because of module compexity, we use 1 init arg - inGSettings
inGSettings is a complex dictionary which has all reqired parameters for the module execution.
The description of the GSettings you can find in executable module details.
## Orchestrator how to configure
To init pyOpenRPA Orchestrator instance use script:
from pyOpenRPA import Orchestrator # Import orchestrator main
gSettings = SettingsTemplate.Create(inModeStr=”BASIC”) # Create GSettings with basic configuration
Orchestrator.Orchestrator(inGSettings=gSettings) # Call the orchestrator def
gSettings structure
## Orchestrator architecture
Orchestrator has several source code components:
- User/robot activity consolidated queue single thread (Processor)
- User/robot activity asynchonus many threads (Processor)
- Scheduler single thread (main)
- RDP keep active many thread
- Autocleaner single thread
- GUI keep active single thread
- HTTP web server single thread (create user socket threads)
-
Below you can find more information about all of the component.
## Component Processor
Sync - Append activity list to consolidated processor queue. Execution goes sequency by the activity list order
Async - Create New thread to execute the activity list
* Activity list
List of the activity item
* Activity item
Activity item is universal mechanism to execute different algorythms from any sources.
The core feature of the Activity is to call python defs with args and kwargs.
If you need to init do some activity you can write some python def, then create Activity item with current def.
ATTENTION: In some cases (such as web transmition), when you can’t transmit python def as object you can use symbolic names for python defs. It is apply you to init all of you want from the web UI.
?Why i cant transmit python def from the web
Because the WEB space is not the Python executable space. Interaction between it spaces create by JSON protocol. So, we know than JSON apply int, float, str, bool, None, list, dict - that is all.
**NOTE**: Example
{
> “Def”:”DefAliasTest”, # def link or def alias (look gSettings[“Processor”][“AliasDefDict”])
- Centralized/decentralized user control interface (applicable and for business users and for technical users). Web based, support desktop, tablet, phone.
# EXAMPLE 1
- Automatized robots control (customized algorithms, robots scheduling)
from pyOpenRPA import Orchestrator
- Source code mega flexibility: Light Orchestrator architecture is good for own customization
Because of module compexity, we use 1 init arg - inGSettings
inGSettings is a complex dictionary which has all reqired parameters for the module execution.
The description of the GSettings you can find in executable module details.
## Orchestrator how to configure
To init pyOpenRPA Orchestrator instance use script:
from pyOpenRPA import Orchestrator # Import orchestrator main
gSettings = SettingsTemplate.Create(inModeStr=”BASIC”) # Create GSettings with basic configuration
Orchestrator.Orchestrator(inGSettings=gSettings) # Call the orchestrator def
gSettings structure
gSettingsTemplate.
## Orchestrator architecture
Orchestrator has several source code components:
- User/robot activity consolidated queue single thread (Processor)
- User/robot activity asynchonus many threads (Processor)
- Scheduler single thread (main)
- RDP keep active many thread
- Autocleaner single thread
- GUI keep active single thread
- HTTP web server single thread (create user socket threads)
-
Below you can find more information about all of the component.
## Component Processor
Sync - Append activity list to consolidated processor queue. Execution goes sequency by the activity list order
Async - Create New thread to execute the activity list
* Activity list
Liast of the activity item
* Activity item
Activity item is universal mechanism to execute different algorythms from any sources.
The core feature of the Activity is to call python defs with args and kwargs.
If you need to init do some activity you can write some python def, then create Activity item with current def.
ATTENTION: In some cases (such as web transmition), when you can’t transmit python def as object you can use symbolic names for python defs. It is apply you to init all of you want from the web UI.
?Why i cant transmit python def from the web
Because the WEB space is not the Python executable space. Interaction between it spaces create by JSON protocol. So, we know than JSON apply int, float, str, bool, None, list, dict - that is all.
{
> “Def”:”DefAliasTest”, # def link or def alias (look gSettings[“Processor”][“AliasDefDict”])
Create alias for def (can be used in ActivityItem in field Def)
Create alias for def (can be used in ActivityItem in field Def)
!WHEN DEF ALIAS IS REQUIRED! - Def alias is required when you try to call Python def from the Orchestrator WEB side (because you can’t transmit Python def object out of the Python environment)
```
# USAGE
from pyOpenRPA import Orchestrator
def TestDef():
pass
lAliasStr = Orchestrator.ProcessorAliasDefCreate(
inGSettings = gSettings,
inDef = TestDef,
inAliasStr="TestDefAlias")
# Now you can call TestDef by the alias from var lAliasStr with help of ActivityItem (key Def = lAliasStr)
```
* **Parameters**
* **Parameters**
@ -517,21 +557,35 @@ Create alias for def (can be used in ActivityItem in field Def)
* **inGSettings** – Global settings dict (singleton)
* **inGSettings** – Global settings dict (singleton)
* **inDef** –
* **inDef** –Def
* **inAliasStr** –
* **inAliasStr** –String alias for associated def
* **Returns**
* **Returns**
str Alias
str Alias string (Alias can be regenerated if previous alias was occupied)
Update alias for def (can be used in ActivityItem in field Def)
Update alias for def (can be used in ActivityItem in field Def).
!WHEN DEF ALIAS IS REQUIRED! - Def alias is required when you try to call Python def from the Orchestrator WEB side (because you can’t transmit Python def object out of the Python environment)
```
# USAGE
from pyOpenRPA import Orchestrator
def TestDef():
pass
Orchestrator.ProcessorAliasDefUpdate(
inGSettings = gSettings,
inDef = TestDef,
inAliasStr="TestDefAlias")
# Now you can call TestDef by the alias "TestDefAlias" with help of ActivityItem (key Def = "TestDefAlias")
```
* **Parameters**
* **Parameters**
@ -540,16 +594,16 @@ Update alias for def (can be used in ActivityItem in field Def)
* **inGSettings** – Global settings dict (singleton)
* **inGSettings** – Global settings dict (singleton)
* **inDef** –
* **inDef** –Def
* **inAliasStr** –
* **inAliasStr** –String alias for associated def
* **Returns**
* **Returns**
str Alias
str Alias string
@ -597,13 +651,24 @@ Send command in RDP session
* **inCMDStr** –
* **inCMDStr** –
* **inModeStr** –
* **inModeStr** – Variants:
“LISTEN” - Get result of the cmd command in result;
“CROSSCHECK” - Check if the command was successufully sent
“RUN” - Run without crosscheck and get clipboard
* **Returns**
* **Returns**
True - CMD was executed successfully
# OLD > True - CMD was executed successfully
{
“OutStr”: <> # Result string
“IsResponsibleBool”: True|False # Flag is RDP is responsible - works only when inModeStr = CROSSCHECK