# Python Implementation in Guardian

## Overview <a href="#overview" id="overview"></a>

The Guardian platform now supports Python scripting within its Custom Logic blocks, expanding its flexibility and enabling developers to perform complex computations and logic more easily. This feature introduces a new Script Language selection option and includes enhancements to VC (Verifiable Credential) document schemas for better version tracking.

### 1. Custom Logic Block: Script Language Selection <a href="#id-1.-custom-logic-block-script-language-selection" id="id-1.-custom-logic-block-script-language-selection"></a>

A new dropdown setting has been added to the Custom Logic block in the Policy Editor, allowing users to select the desired scripting language.

**Configuration**

* **Field:** `Script Language`
* **Options:**
  * `JavaScript` *(default for backward compatibility)*
  * `Python` *(newly introduced)*

<figure><img src="/files/KfhkaIbHFWogyX3tYHcD" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/cC63MDhgYgDsBv1nVYP4" alt=""><figcaption></figcaption></figure>

### **Use Case**

Choose "Python" when you want to leverage Python’s expressive syntax and advanced computation libraries for policy logic.

### 2. Python Scripting Support <a href="#id-2.-python-scripting-support" id="id-2.-python-scripting-support"></a>

Guardian now supports Python as a language for defining business logic in Custom Logic blocks.

**Capabilities**

* Execute Python scripts directly as part of policy execution.
* Access context variables and input data in Python syntax.
* Perform conditional logic, calculations, or transformations using Python.

**Example**

```
pythonCopyEdit# Sample Python logic inside Custom Logic block
if document['type'] == 'Certificate':
    document['status'] = 'Verified'
```

> Python code is sandboxed and only has access to allowed libraries/packages pre-installed in the Guardian environment.

### 3. VC Document Schema Enhancement: `guardianVersion` <a href="#id-3.-vc-document-schema-enhancement-guardianversion" id="id-3.-vc-document-schema-enhancement-guardianversion"></a>

A new default field has been introduced in all Verifiable Credential document schemas: `guardianVersion`.

### **Purpose**

This field helps track the Guardian system version that was used to generate or interact with the VC. It is especially useful when managing backward compatibility and knowing which Python packages and versions were available during execution.

### **Field Details**

* **Field Name:** `guardianVersion`
* **Type:** `string`
* **Format:** Semantic versioning (e.g., `"3.4.1"`)
* **Automatically populated?** Yes

<figure><img src="/files/4PpzDkuJiBDVxgccTSUk" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}

* Ensure your logic is compatible with the version of Guardian being used, especially when importing Python packages.
* Python execution is subject to the limitations and security constraints defined in Guardian's runtime.
  {% endhint %}

### 4. Supported Python Libraries and its Versions

| Library Name | Version |
| :----------: | :-----: |
|     numpy    |  1.26.4 |
|     scipy    |  1.12.0 |
|     sympy    |   1.12  |
|    pandas    |  2.2.0  |
|     pint     |  0.25.1 |
|    duckdb    |  1.0.0  |
|  sqlalchemy  |  2.0.29 |
|    cftime    |  1.6.3  |
|  matplotlib  |  3.5.2  |
|    seaborn   |  0.13.2 |
|     bokeh    |  3.4.1  |
|    altair    |  5.3.0  |
|    cartopy   |  0.23.0 |
|    astropy   |  6.0.1  |
|  statsmodels |  0.14.2 |
|   networkx   |   3.3   |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.guardianservice.app/technical-information/users/standard-registry-users-schemas-and-policies/policies/python-implementation-in-guardian.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
