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
暂无评论内容