Accessing (Cloud) UiPath Orchestrator through Python

Python (6 Part Series)

1 Getting Started with Python: Writing Your First Program
2 Python: A Guide to Comments
2 more parts…
3 Python: Understanding Numbers and Basic Math Operations
4 Accessing (Cloud) UiPath Orchestrator through Python
5 Creating API Keys in Python: A Comprehensive Guide
6 Zip and Unzip in Python

Introduction

UiPath Orchestrator provides a platform for orchestrating robots, allowing users to manage and monitor their robotic process automation (RPA) deployments. This article presents a Python library that enables interaction with UiPath Orchestrator through its API. It covers authentication, retrieving assets, and handling responses. Additionally, note that the UiPath Orchestrator API offers more functions beyond retrieving assets.

Index

  • Authentication
  • Retrieving Assets

Authentication

To authenticate with UiPath Orchestrator, the library utilizes the provided credentials. The authentication process involves obtaining a token using the provided client ID and refresh token. Once authenticated, the token is stored for subsequent API requests.

Retrieving Assets

The library allows retrieving all assets stored in UiPath Orchestrator. It constructs the necessary API requests, including authentication headers and query parameters. The retrieved assets are then processed and returned as structured data. It’s important to note that get_assets() is one of the examples of functions available in the library.

More Functions

Beyond retrieving assets, there are additional functions to interact with UiPath Orchestrator’s API. These functions enable various operations such as managing robots, queues, processes, and more. Developers can explore the UiPath Orchestrator API documentation to discover the full range of functionalities available.

Code Examples

<span>import</span> <span>base64</span>
<span>from</span> <span>dataclasses</span> <span>import</span> <span>dataclass</span>
<span>from</span> <span>datetime</span> <span>import</span> <span>datetime</span>
<span>import</span> <span>json</span>
<span>import</span> <span>logging</span>
<span>from</span> <span>pydantic</span> <span>import</span> <span>BaseModel</span><span>,</span> <span>Field</span><span>,</span> <span>TypeAdapter</span><span>,</span> <span>field_validator</span>
<span>from</span> <span>requests.sessions</span> <span>import</span> <span>Session</span>
<span>@dataclass</span>
<span>class</span> <span>Configuration</span><span>:</span>
<span>url_base</span><span>:</span> <span>str</span> <span>=</span> <span>None</span>
<span>url_auth</span><span>:</span> <span>str</span> <span>=</span> <span>None</span>
<span>client_id</span><span>:</span> <span>str</span> <span>=</span> <span>None</span>
<span>refresh_token</span><span>:</span> <span>str</span> <span>=</span> <span>None</span>
<span>token</span><span>:</span> <span>str</span> <span>=</span> <span>None</span>
<span>unit_id</span><span>:</span> <span>str</span> <span>=</span> <span>None</span>
<span>@dataclass</span>
<span>class</span> <span>Response</span><span>:</span>
<span>status_code</span><span>:</span> <span>int</span>
<span>content</span><span>:</span> <span>list</span> <span>|</span> <span>dict</span> <span>|</span> <span>str</span> <span>|</span> <span>None</span> <span>=</span> <span>None</span>
<span>class</span> <span>UiPath</span><span>(</span><span>object</span><span>):</span>
<span>def</span> <span>__init__</span><span>(</span><span>self</span><span>,</span> <span>credentials</span><span>:</span> <span>dict</span><span>)</span> <span>-></span> <span>None</span><span>:</span>
<span>"""</span><span> Initializes variables and performs authentication. Args: credentials (dict): Credentials from Fortanix. </span><span>"""</span>
<span>logging</span><span>.</span><span>basicConfig</span><span>(</span><span>level</span><span>=</span><span>logging</span><span>.</span><span>INFO</span><span>)</span>
<span>self</span><span>.</span><span>session</span><span>:</span> <span>Session</span> <span>=</span> <span>Session</span><span>()</span>
<span>self</span><span>.</span><span>__configuration</span> <span>=</span> <span>self</span><span>.</span><span>auth</span><span>(</span><span>credentials</span><span>=</span><span>credentials</span><span>)</span>
<span>def</span> <span>__del__</span><span>(</span><span>self</span><span>)</span> <span>-></span> <span>None</span><span>:</span>
<span>"""</span><span> Clean the house at the exit. </span><span>"""</span>
<span>logging</span><span>.</span><span>info</span><span>(</span><span>msg</span><span>=</span><span>"</span><span>Closes session</span><span>"</span><span>)</span>
<span>self</span><span>.</span><span>session</span><span>.</span><span>close</span><span>()</span>
<span>def</span> <span>is_auth</span><span>(</span><span>self</span><span>)</span> <span>-></span> <span>bool</span><span>:</span>
<span>"""</span><span> Checks whether authentication was successful. Returns: bool: If true, then authentication was successful. </span><span>"""</span>
<span>logging</span><span>.</span><span>info</span><span>(</span><span>msg</span><span>=</span><span>"</span><span>Gets authentication status</span><span>"</span><span>)</span>
<span>return</span> <span>False</span> <span>if</span> <span>self</span><span>.</span><span>__configuration</span><span>.</span><span>token</span> <span>is</span> <span>None</span> <span>else</span> <span>True</span>
<span>def</span> <span>auth</span><span>(</span><span>self</span><span>,</span> <span>credentials</span><span>:</span> <span>dict</span><span>)</span> <span>-></span> <span>Configuration</span><span>:</span>
<span>"""</span><span> Authenticate (On-Premise). Performs authentication process to obtain the token. Args: credentials (dict): Credentials from Fortanix. Returns: Configuration: Access configuration. </span><span>"""</span>
<span>logging</span><span>.</span><span>info</span><span>(</span><span>msg</span><span>=</span><span>"</span><span>Opens session</span><span>"</span><span>)</span>
<span>configuration</span> <span>=</span> <span>Configuration</span><span>()</span>
<span>configuration</span><span>.</span><span>client_id</span> <span>=</span> <span>credentials</span><span>[</span><span>"</span><span>custom_metadata</span><span>"</span><span>][</span><span>"</span><span>client_id</span><span>"</span><span>]</span>
<span>configuration</span><span>.</span><span>unit_id</span> <span>=</span> <span>credentials</span><span>[</span><span>"</span><span>custom_metadata</span><span>"</span><span>][</span><span>"</span><span>unit_id</span><span>"</span><span>]</span>
<span>configuration</span><span>.</span><span>url_base</span> <span>=</span> <span>credentials</span><span>[</span><span>"</span><span>custom_metadata</span><span>"</span><span>][</span><span>"</span><span>url_base</span><span>"</span><span>]</span>
<span>configuration</span><span>.</span><span>url_auth</span> <span>=</span> <span>credentials</span><span>[</span><span>"</span><span>custom_metadata</span><span>"</span><span>][</span><span>"</span><span>url_auth</span><span>"</span><span>]</span>
<span>configuration</span><span>.</span><span>refresh_token</span> <span>=</span> <span>base64</span><span>.</span><span>b64decode</span><span>(</span><span>credentials</span><span>[</span><span>"</span><span>value</span><span>"</span><span>]).</span><span>decode</span><span>(</span><span>"</span><span>utf-8</span><span>"</span><span>)</span>
<span>headers</span> <span>=</span> <span>{</span><span>"</span><span>Connection</span><span>"</span><span>:</span> <span>"</span><span>keep-alive</span><span>"</span><span>,</span> <span>"</span><span>Content-Type</span><span>"</span><span>:</span> <span>"</span><span>application/json</span><span>"</span><span>}</span>
<span>body</span> <span>=</span> <span>{</span><span>"</span><span>grant_type</span><span>"</span><span>:</span> <span>"</span><span>refresh_token</span><span>"</span><span>,</span> <span>"</span><span>client_id</span><span>"</span><span>:</span> <span>configuration</span><span>.</span><span>client_id</span><span>,</span>
<span>"</span><span>refresh_token</span><span>"</span><span>:</span> <span>configuration</span><span>.</span><span>refresh_token</span><span>}</span>
<span>response</span> <span>=</span> <span>self</span><span>.</span><span>session</span><span>.</span><span>post</span><span>(</span><span>url</span><span>=</span><span>configuration</span><span>.</span><span>url_auth</span><span>,</span> <span>json</span><span>=</span><span>body</span><span>,</span> <span>headers</span><span>=</span><span>headers</span><span>)</span>
<span>logging</span><span>.</span><span>info</span><span>(</span><span>msg</span><span>=</span><span>f</span><span>"</span><span>HTTP Status Code </span><span>{</span><span>response</span><span>.</span><span>status_code</span><span>}</span><span>"</span><span>)</span>
<span>if</span> <span>response</span><span>.</span><span>status_code</span> <span>==</span> <span>200</span><span>:</span>
<span>configuration</span><span>.</span><span>token</span> <span>=</span> <span>json</span><span>.</span><span>loads</span><span>(</span><span>response</span><span>.</span><span>content</span><span>.</span><span>decode</span><span>(</span><span>"</span><span>utf-8</span><span>"</span><span>))[</span><span>"</span><span>access_token</span><span>"</span><span>]</span>
<span>return</span> <span>configuration</span>
<span>def</span> <span>get_assets</span><span>(</span><span>self</span><span>,</span> <span>save_as</span><span>:</span> <span>str</span> <span>|</span> <span>None</span> <span>=</span> <span>None</span><span>)</span> <span>-></span> <span>Response</span><span>:</span>
<span>"""</span><span> Assets - Get all. Gets the UiPath Orchestrator assets. Args: save_as (str, optional): Name of the Json file that contains the request response. Returns: Response (dataclass): Asset information and response status. </span><span>"""</span>
<span>logging</span><span>.</span><span>info</span><span>(</span><span>msg</span><span>=</span><span>"</span><span>Gets a list of all assets</span><span>"</span><span>)</span>
<span>headers</span> <span>=</span> <span>{</span><span>"</span><span>Content-Type</span><span>"</span><span>:</span> <span>"</span><span>application/json</span><span>"</span><span>,</span> <span>"</span><span>Authorization</span><span>"</span><span>:</span> <span>"</span><span>Bearer </span><span>"</span> <span>+</span> <span>self</span><span>.</span><span>__configuration</span><span>.</span><span>token</span><span>,</span>
<span>"</span><span>X-UIPATH-OrganizationUnitID</span><span>"</span><span>:</span> <span>f</span><span>"</span><span>{</span><span>self</span><span>.</span><span>__configuration</span><span>.</span><span>unit_id</span><span>}</span><span>"</span><span>}</span>
<span>url_query</span> <span>=</span> <span>f</span><span>"</span><span>{</span><span>self</span><span>.</span><span>__configuration</span><span>.</span><span>url_base</span><span>}</span><span>odata/Assets</span><span>"</span>
<span>class</span> <span>DataStructure</span><span>(</span><span>BaseModel</span><span>):</span>
<span>Id</span><span>:</span> <span>int</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>Id</span><span>"</span><span>)</span>
<span>Name</span><span>:</span> <span>str</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>Name</span><span>"</span><span>)</span>
<span>ExternalName</span><span>:</span> <span>str</span> <span>|</span> <span>None</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>ExternalName</span><span>"</span><span>,</span> <span>default</span><span>=</span><span>None</span><span>)</span>
<span>HasDefaultValue</span><span>:</span> <span>bool</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>HasDefaultValue</span><span>"</span><span>)</span>
<span>Value</span><span>:</span> <span>str</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>Value</span><span>"</span><span>)</span>
<span>ValueScope</span><span>:</span> <span>str</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>ValueScope</span><span>"</span><span>)</span>
<span>ValueType</span><span>:</span> <span>str</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>ValueType</span><span>"</span><span>)</span>
<span>IntValue</span><span>:</span> <span>int</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>IntValue</span><span>"</span><span>)</span>
<span>StringValue</span><span>:</span> <span>str</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>StringValue</span><span>"</span><span>)</span>
<span>BoolValue</span><span>:</span> <span>bool</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>BoolValue</span><span>"</span><span>)</span>
<span>CredentialUsername</span><span>:</span> <span>str</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>CredentialUsername</span><span>"</span><span>)</span>
<span>CredentialStoreId</span><span>:</span> <span>int</span> <span>|</span> <span>None</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>CredentialStoreId</span><span>"</span><span>,</span> <span>default</span><span>=</span><span>None</span><span>)</span>
<span>CanBeDeleted</span><span>:</span> <span>bool</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>CanBeDeleted</span><span>"</span><span>)</span>
<span>Description</span><span>:</span> <span>str</span> <span>|</span> <span>None</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>Description</span><span>"</span><span>,</span> <span>default</span><span>=</span><span>None</span><span>)</span>
<span>alias_list</span> <span>=</span> <span>[</span><span>field</span><span>.</span><span>alias</span> <span>if</span> <span>field</span><span>.</span><span>alias</span> <span>is</span> <span>not</span> <span>None</span> <span>else</span> <span>field_name</span> <span>for</span> <span>field_name</span><span>,</span> <span>field</span> <span>in</span>
<span>DataStructure</span><span>.</span><span>model_fields</span><span>.</span><span>items</span><span>()]</span>
<span>params</span> <span>=</span> <span>{</span><span>"</span><span>$select</span><span>"</span><span>:</span> <span>"</span><span>,</span><span>"</span><span>.</span><span>join</span><span>(</span><span>alias_list</span><span>)}</span>
<span>response</span> <span>=</span> <span>self</span><span>.</span><span>session</span><span>.</span><span>get</span><span>(</span><span>url</span><span>=</span><span>url_query</span><span>,</span> <span>headers</span><span>=</span><span>headers</span><span>,</span> <span>params</span><span>=</span><span>params</span><span>,</span> <span>verify</span><span>=</span><span>True</span><span>)</span>
<span>logging</span><span>.</span><span>info</span><span>(</span><span>msg</span><span>=</span><span>f</span><span>"</span><span>HTTP Status Code </span><span>{</span><span>response</span><span>.</span><span>status_code</span><span>}</span><span>"</span><span>)</span>
<span>content</span> <span>=</span> <span>None</span>
<span>if</span> <span>response</span><span>.</span><span>status_code</span> <span>==</span> <span>200</span><span>:</span>
<span>if</span> <span>save_as</span> <span>is</span> <span>not</span> <span>None</span><span>:</span>
<span>with</span> <span>open</span><span>(</span><span>file</span><span>=</span><span>save_as</span><span>,</span> <span>mode</span><span>=</span><span>"</span><span>wb</span><span>"</span><span>)</span> <span>as</span> <span>file</span><span>:</span>
<span>file</span><span>.</span><span>write</span><span>(</span><span>response</span><span>.</span><span>content</span><span>)</span>
<span>content_raw</span> <span>=</span> <span>response</span><span>.</span><span>json</span><span>()[</span><span>"</span><span>value</span><span>"</span><span>]</span>
<span>content</span> <span>=</span> <span>[</span><span>dict</span><span>(</span><span>data</span><span>)</span> <span>for</span> <span>data</span> <span>in</span> <span>TypeAdapter</span><span>(</span><span>list</span><span>[</span><span>DataStructure</span><span>]).</span><span>validate_python</span><span>(</span><span>content_raw</span><span>)]</span>
<span>return</span> <span>Response</span><span>(</span><span>status_code</span><span>=</span><span>response</span><span>.</span><span>status_code</span><span>,</span> <span>content</span><span>=</span><span>content</span><span>)</span>
<span>import</span> <span>base64</span>
<span>from</span> <span>dataclasses</span> <span>import</span> <span>dataclass</span>
<span>from</span> <span>datetime</span> <span>import</span> <span>datetime</span>
<span>import</span> <span>json</span>
<span>import</span> <span>logging</span>
<span>from</span> <span>pydantic</span> <span>import</span> <span>BaseModel</span><span>,</span> <span>Field</span><span>,</span> <span>TypeAdapter</span><span>,</span> <span>field_validator</span>
<span>from</span> <span>requests.sessions</span> <span>import</span> <span>Session</span>


<span>@dataclass</span>
<span>class</span> <span>Configuration</span><span>:</span>
    <span>url_base</span><span>:</span> <span>str</span> <span>=</span> <span>None</span>
    <span>url_auth</span><span>:</span> <span>str</span> <span>=</span> <span>None</span>
    <span>client_id</span><span>:</span> <span>str</span> <span>=</span> <span>None</span>
    <span>refresh_token</span><span>:</span> <span>str</span> <span>=</span> <span>None</span>
    <span>token</span><span>:</span> <span>str</span> <span>=</span> <span>None</span>
    <span>unit_id</span><span>:</span> <span>str</span> <span>=</span> <span>None</span>


<span>@dataclass</span>
<span>class</span> <span>Response</span><span>:</span>
    <span>status_code</span><span>:</span> <span>int</span>
    <span>content</span><span>:</span> <span>list</span> <span>|</span> <span>dict</span> <span>|</span> <span>str</span> <span>|</span> <span>None</span> <span>=</span> <span>None</span>


<span>class</span> <span>UiPath</span><span>(</span><span>object</span><span>):</span>
    <span>def</span> <span>__init__</span><span>(</span><span>self</span><span>,</span> <span>credentials</span><span>:</span> <span>dict</span><span>)</span> <span>-></span> <span>None</span><span>:</span>
        <span>"""</span><span> Initializes variables and performs authentication. Args: credentials (dict): Credentials from Fortanix. </span><span>"""</span>
        <span>logging</span><span>.</span><span>basicConfig</span><span>(</span><span>level</span><span>=</span><span>logging</span><span>.</span><span>INFO</span><span>)</span>
        <span>self</span><span>.</span><span>session</span><span>:</span> <span>Session</span> <span>=</span> <span>Session</span><span>()</span>
        <span>self</span><span>.</span><span>__configuration</span> <span>=</span> <span>self</span><span>.</span><span>auth</span><span>(</span><span>credentials</span><span>=</span><span>credentials</span><span>)</span>

    <span>def</span> <span>__del__</span><span>(</span><span>self</span><span>)</span> <span>-></span> <span>None</span><span>:</span>
        <span>"""</span><span> Clean the house at the exit. </span><span>"""</span>
        <span>logging</span><span>.</span><span>info</span><span>(</span><span>msg</span><span>=</span><span>"</span><span>Closes session</span><span>"</span><span>)</span>
        <span>self</span><span>.</span><span>session</span><span>.</span><span>close</span><span>()</span>

    <span>def</span> <span>is_auth</span><span>(</span><span>self</span><span>)</span> <span>-></span> <span>bool</span><span>:</span>
        <span>"""</span><span> Checks whether authentication was successful. Returns: bool: If true, then authentication was successful. </span><span>"""</span>
        <span>logging</span><span>.</span><span>info</span><span>(</span><span>msg</span><span>=</span><span>"</span><span>Gets authentication status</span><span>"</span><span>)</span>
        <span>return</span> <span>False</span> <span>if</span> <span>self</span><span>.</span><span>__configuration</span><span>.</span><span>token</span> <span>is</span> <span>None</span> <span>else</span> <span>True</span>

    <span>def</span> <span>auth</span><span>(</span><span>self</span><span>,</span> <span>credentials</span><span>:</span> <span>dict</span><span>)</span> <span>-></span> <span>Configuration</span><span>:</span>
        <span>"""</span><span> Authenticate (On-Premise). Performs authentication process to obtain the token. Args: credentials (dict): Credentials from Fortanix. Returns: Configuration: Access configuration. </span><span>"""</span>
        <span>logging</span><span>.</span><span>info</span><span>(</span><span>msg</span><span>=</span><span>"</span><span>Opens session</span><span>"</span><span>)</span>
        <span>configuration</span> <span>=</span> <span>Configuration</span><span>()</span>
        <span>configuration</span><span>.</span><span>client_id</span> <span>=</span> <span>credentials</span><span>[</span><span>"</span><span>custom_metadata</span><span>"</span><span>][</span><span>"</span><span>client_id</span><span>"</span><span>]</span>
        <span>configuration</span><span>.</span><span>unit_id</span> <span>=</span> <span>credentials</span><span>[</span><span>"</span><span>custom_metadata</span><span>"</span><span>][</span><span>"</span><span>unit_id</span><span>"</span><span>]</span>
        <span>configuration</span><span>.</span><span>url_base</span> <span>=</span> <span>credentials</span><span>[</span><span>"</span><span>custom_metadata</span><span>"</span><span>][</span><span>"</span><span>url_base</span><span>"</span><span>]</span>
        <span>configuration</span><span>.</span><span>url_auth</span> <span>=</span> <span>credentials</span><span>[</span><span>"</span><span>custom_metadata</span><span>"</span><span>][</span><span>"</span><span>url_auth</span><span>"</span><span>]</span>
        <span>configuration</span><span>.</span><span>refresh_token</span> <span>=</span> <span>base64</span><span>.</span><span>b64decode</span><span>(</span><span>credentials</span><span>[</span><span>"</span><span>value</span><span>"</span><span>]).</span><span>decode</span><span>(</span><span>"</span><span>utf-8</span><span>"</span><span>)</span>
        <span>headers</span> <span>=</span> <span>{</span><span>"</span><span>Connection</span><span>"</span><span>:</span> <span>"</span><span>keep-alive</span><span>"</span><span>,</span> <span>"</span><span>Content-Type</span><span>"</span><span>:</span> <span>"</span><span>application/json</span><span>"</span><span>}</span>
        <span>body</span> <span>=</span> <span>{</span><span>"</span><span>grant_type</span><span>"</span><span>:</span> <span>"</span><span>refresh_token</span><span>"</span><span>,</span> <span>"</span><span>client_id</span><span>"</span><span>:</span> <span>configuration</span><span>.</span><span>client_id</span><span>,</span>
                <span>"</span><span>refresh_token</span><span>"</span><span>:</span> <span>configuration</span><span>.</span><span>refresh_token</span><span>}</span>
        <span>response</span> <span>=</span> <span>self</span><span>.</span><span>session</span><span>.</span><span>post</span><span>(</span><span>url</span><span>=</span><span>configuration</span><span>.</span><span>url_auth</span><span>,</span> <span>json</span><span>=</span><span>body</span><span>,</span> <span>headers</span><span>=</span><span>headers</span><span>)</span>
        <span>logging</span><span>.</span><span>info</span><span>(</span><span>msg</span><span>=</span><span>f</span><span>"</span><span>HTTP Status Code </span><span>{</span><span>response</span><span>.</span><span>status_code</span><span>}</span><span>"</span><span>)</span>
        <span>if</span> <span>response</span><span>.</span><span>status_code</span> <span>==</span> <span>200</span><span>:</span>
            <span>configuration</span><span>.</span><span>token</span> <span>=</span> <span>json</span><span>.</span><span>loads</span><span>(</span><span>response</span><span>.</span><span>content</span><span>.</span><span>decode</span><span>(</span><span>"</span><span>utf-8</span><span>"</span><span>))[</span><span>"</span><span>access_token</span><span>"</span><span>]</span>
            <span>return</span> <span>configuration</span>

    <span>def</span> <span>get_assets</span><span>(</span><span>self</span><span>,</span> <span>save_as</span><span>:</span> <span>str</span> <span>|</span> <span>None</span> <span>=</span> <span>None</span><span>)</span> <span>-></span> <span>Response</span><span>:</span>
        <span>"""</span><span> Assets - Get all. Gets the UiPath Orchestrator assets. Args: save_as (str, optional): Name of the Json file that contains the request response. Returns: Response (dataclass): Asset information and response status. </span><span>"""</span>
        <span>logging</span><span>.</span><span>info</span><span>(</span><span>msg</span><span>=</span><span>"</span><span>Gets a list of all assets</span><span>"</span><span>)</span>
        <span>headers</span> <span>=</span> <span>{</span><span>"</span><span>Content-Type</span><span>"</span><span>:</span> <span>"</span><span>application/json</span><span>"</span><span>,</span> <span>"</span><span>Authorization</span><span>"</span><span>:</span> <span>"</span><span>Bearer </span><span>"</span> <span>+</span> <span>self</span><span>.</span><span>__configuration</span><span>.</span><span>token</span><span>,</span>
                   <span>"</span><span>X-UIPATH-OrganizationUnitID</span><span>"</span><span>:</span> <span>f</span><span>"</span><span>{</span><span>self</span><span>.</span><span>__configuration</span><span>.</span><span>unit_id</span><span>}</span><span>"</span><span>}</span>
        <span>url_query</span> <span>=</span> <span>f</span><span>"</span><span>{</span><span>self</span><span>.</span><span>__configuration</span><span>.</span><span>url_base</span><span>}</span><span>odata/Assets</span><span>"</span>

        <span>class</span> <span>DataStructure</span><span>(</span><span>BaseModel</span><span>):</span>
            <span>Id</span><span>:</span> <span>int</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>Id</span><span>"</span><span>)</span>
            <span>Name</span><span>:</span> <span>str</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>Name</span><span>"</span><span>)</span>
            <span>ExternalName</span><span>:</span> <span>str</span> <span>|</span> <span>None</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>ExternalName</span><span>"</span><span>,</span> <span>default</span><span>=</span><span>None</span><span>)</span>
            <span>HasDefaultValue</span><span>:</span> <span>bool</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>HasDefaultValue</span><span>"</span><span>)</span>
            <span>Value</span><span>:</span> <span>str</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>Value</span><span>"</span><span>)</span>
            <span>ValueScope</span><span>:</span> <span>str</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>ValueScope</span><span>"</span><span>)</span>
            <span>ValueType</span><span>:</span> <span>str</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>ValueType</span><span>"</span><span>)</span>
            <span>IntValue</span><span>:</span> <span>int</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>IntValue</span><span>"</span><span>)</span>
            <span>StringValue</span><span>:</span> <span>str</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>StringValue</span><span>"</span><span>)</span>
            <span>BoolValue</span><span>:</span> <span>bool</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>BoolValue</span><span>"</span><span>)</span>
            <span>CredentialUsername</span><span>:</span> <span>str</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>CredentialUsername</span><span>"</span><span>)</span>
            <span>CredentialStoreId</span><span>:</span> <span>int</span> <span>|</span> <span>None</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>CredentialStoreId</span><span>"</span><span>,</span> <span>default</span><span>=</span><span>None</span><span>)</span>
            <span>CanBeDeleted</span><span>:</span> <span>bool</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>CanBeDeleted</span><span>"</span><span>)</span>
            <span>Description</span><span>:</span> <span>str</span> <span>|</span> <span>None</span> <span>=</span> <span>Field</span><span>(</span><span>alias</span><span>=</span><span>"</span><span>Description</span><span>"</span><span>,</span> <span>default</span><span>=</span><span>None</span><span>)</span>

        <span>alias_list</span> <span>=</span> <span>[</span><span>field</span><span>.</span><span>alias</span> <span>if</span> <span>field</span><span>.</span><span>alias</span> <span>is</span> <span>not</span> <span>None</span> <span>else</span> <span>field_name</span> <span>for</span> <span>field_name</span><span>,</span> <span>field</span> <span>in</span>
                      <span>DataStructure</span><span>.</span><span>model_fields</span><span>.</span><span>items</span><span>()]</span>
        <span>params</span> <span>=</span> <span>{</span><span>"</span><span>$select</span><span>"</span><span>:</span> <span>"</span><span>,</span><span>"</span><span>.</span><span>join</span><span>(</span><span>alias_list</span><span>)}</span>
        <span>response</span> <span>=</span> <span>self</span><span>.</span><span>session</span><span>.</span><span>get</span><span>(</span><span>url</span><span>=</span><span>url_query</span><span>,</span> <span>headers</span><span>=</span><span>headers</span><span>,</span> <span>params</span><span>=</span><span>params</span><span>,</span> <span>verify</span><span>=</span><span>True</span><span>)</span>
        <span>logging</span><span>.</span><span>info</span><span>(</span><span>msg</span><span>=</span><span>f</span><span>"</span><span>HTTP Status Code </span><span>{</span><span>response</span><span>.</span><span>status_code</span><span>}</span><span>"</span><span>)</span>
        <span>content</span> <span>=</span> <span>None</span>
        <span>if</span> <span>response</span><span>.</span><span>status_code</span> <span>==</span> <span>200</span><span>:</span>
            <span>if</span> <span>save_as</span> <span>is</span> <span>not</span> <span>None</span><span>:</span>
                <span>with</span> <span>open</span><span>(</span><span>file</span><span>=</span><span>save_as</span><span>,</span> <span>mode</span><span>=</span><span>"</span><span>wb</span><span>"</span><span>)</span> <span>as</span> <span>file</span><span>:</span>
                    <span>file</span><span>.</span><span>write</span><span>(</span><span>response</span><span>.</span><span>content</span><span>)</span>
            <span>content_raw</span> <span>=</span> <span>response</span><span>.</span><span>json</span><span>()[</span><span>"</span><span>value</span><span>"</span><span>]</span>
            <span>content</span> <span>=</span> <span>[</span><span>dict</span><span>(</span><span>data</span><span>)</span> <span>for</span> <span>data</span> <span>in</span> <span>TypeAdapter</span><span>(</span><span>list</span><span>[</span><span>DataStructure</span><span>]).</span><span>validate_python</span><span>(</span><span>content_raw</span><span>)]</span>

        <span>return</span> <span>Response</span><span>(</span><span>status_code</span><span>=</span><span>response</span><span>.</span><span>status_code</span><span>,</span> <span>content</span><span>=</span><span>content</span><span>)</span>
import base64 from dataclasses import dataclass from datetime import datetime import json import logging from pydantic import BaseModel, Field, TypeAdapter, field_validator from requests.sessions import Session @dataclass class Configuration: url_base: str = None url_auth: str = None client_id: str = None refresh_token: str = None token: str = None unit_id: str = None @dataclass class Response: status_code: int content: list | dict | str | None = None class UiPath(object): def __init__(self, credentials: dict) -> None: """ Initializes variables and performs authentication. Args: credentials (dict): Credentials from Fortanix. """ logging.basicConfig(level=logging.INFO) self.session: Session = Session() self.__configuration = self.auth(credentials=credentials) def __del__(self) -> None: """ Clean the house at the exit. """ logging.info(msg="Closes session") self.session.close() def is_auth(self) -> bool: """ Checks whether authentication was successful. Returns: bool: If true, then authentication was successful. """ logging.info(msg="Gets authentication status") return False if self.__configuration.token is None else True def auth(self, credentials: dict) -> Configuration: """ Authenticate (On-Premise). Performs authentication process to obtain the token. Args: credentials (dict): Credentials from Fortanix. Returns: Configuration: Access configuration. """ logging.info(msg="Opens session") configuration = Configuration() configuration.client_id = credentials["custom_metadata"]["client_id"] configuration.unit_id = credentials["custom_metadata"]["unit_id"] configuration.url_base = credentials["custom_metadata"]["url_base"] configuration.url_auth = credentials["custom_metadata"]["url_auth"] configuration.refresh_token = base64.b64decode(credentials["value"]).decode("utf-8") headers = {"Connection": "keep-alive", "Content-Type": "application/json"} body = {"grant_type": "refresh_token", "client_id": configuration.client_id, "refresh_token": configuration.refresh_token} response = self.session.post(url=configuration.url_auth, json=body, headers=headers) logging.info(msg=f"HTTP Status Code {response.status_code}") if response.status_code == 200: configuration.token = json.loads(response.content.decode("utf-8"))["access_token"] return configuration def get_assets(self, save_as: str | None = None) -> Response: """ Assets - Get all. Gets the UiPath Orchestrator assets. Args: save_as (str, optional): Name of the Json file that contains the request response. Returns: Response (dataclass): Asset information and response status. """ logging.info(msg="Gets a list of all assets") headers = {"Content-Type": "application/json", "Authorization": "Bearer " + self.__configuration.token, "X-UIPATH-OrganizationUnitID": f"{self.__configuration.unit_id}"} url_query = f"{self.__configuration.url_base}odata/Assets" class DataStructure(BaseModel): Id: int = Field(alias="Id") Name: str = Field(alias="Name") ExternalName: str | None = Field(alias="ExternalName", default=None) HasDefaultValue: bool = Field(alias="HasDefaultValue") Value: str = Field(alias="Value") ValueScope: str = Field(alias="ValueScope") ValueType: str = Field(alias="ValueType") IntValue: int = Field(alias="IntValue") StringValue: str = Field(alias="StringValue") BoolValue: bool = Field(alias="BoolValue") CredentialUsername: str = Field(alias="CredentialUsername") CredentialStoreId: int | None = Field(alias="CredentialStoreId", default=None) CanBeDeleted: bool = Field(alias="CanBeDeleted") Description: str | None = Field(alias="Description", default=None) alias_list = [field.alias if field.alias is not None else field_name for field_name, field in DataStructure.model_fields.items()] params = {"$select": ",".join(alias_list)} response = self.session.get(url=url_query, headers=headers, params=params, verify=True) logging.info(msg=f"HTTP Status Code {response.status_code}") content = None if response.status_code == 200: if save_as is not None: with open(file=save_as, mode="wb") as file: file.write(response.content) content_raw = response.json()["value"] content = [dict(data) for data in TypeAdapter(list[DataStructure]).validate_python(content_raw)] return Response(status_code=response.status_code, content=content)

Enter fullscreen mode Exit fullscreen mode

Conclusion

This Python library provides a convenient interface for accessing UiPath Orchestrator’s API. By handling authentication and providing methods to retrieve assets, it simplifies integration with UiPath’s automation platform. Developers can utilize this library to build custom automation solutions and manage their robotic processes efficiently. Additionally, the library offers more functions beyond retrieving assets, enabling a wide range of interactions with UiPath Orchestrator.

Python (6 Part Series)

1 Getting Started with Python: Writing Your First Program
2 Python: A Guide to Comments
2 more parts…
3 Python: Understanding Numbers and Basic Math Operations
4 Accessing (Cloud) UiPath Orchestrator through Python
5 Creating API Keys in Python: A Comprehensive Guide
6 Zip and Unzip in Python

原文链接:Accessing (Cloud) UiPath Orchestrator through Python

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
I'm not lazy, I'm on energy saving mode.
我不懒,我只是开启了节能模式
评论 抢沙发

请登录后发表评论

    暂无评论内容