Important
PyPI publication pending – awaiting organization approval.
Feed will move MyGet → PyPI once approved.
UiPath Cloud Runners cannot consume from MyGet.
If you want access before PyPI is live, request interim package access.
Important
PyPI publication pending – awaiting organization approval.
Feed will move MyGet → PyPI once approved.
UiPath Cloud Runners cannot consume from MyGet.
If you want access before PyPI is live, request interim package access.
Status: Seeking Community Validation – Alpha v0.0.5 Released
Author: Christian Prior-Mamulyan
Date: 2025-10-28
Package: cprima-forge-uipath-extensions (Reference Implementation)
License: CC-BY-4.0
This is a Request for Comments. This RFC proposes a community extension pattern for filling SDK gaps and seeks feedback from UiPath Python developers. Does this approach solve real problems? What are the tradeoffs? What alternatives should be considered?
The official UiPath Python SDK covers ~15% of the Orchestrator API surface. Developers are left writing 150+ lines of manual OData calls, managing folder ID conversions, and juggling authentication headers for operations the SDK doesn't support.
Example gap: Context Grounding storage inspection
The cost: Hours wasted per developer, repeated across teams, no shared solutions.
Instead of waiting for official SDK updates or maintaining internal util folders, build community extension packages that:
sdk.api_client, inherit auth/retryThis RFC presents cprima-forge-uipath-extensions as a reference implementation of this pattern.
sdk.api_client for auth, retries, token managementTask: List files in Context Grounding storage bucket
# 150+ lines of manual code:
# 1. Lookup folder_id from folder_key (manual OData call)
# 2. Get index → extract bucket name
# 3. Find bucket_id (requires numeric folder_id in headers!)
# 4. List files (juggle both IDs, correct headers, pagination)
# + Error handling, retry logic, caching...Time: 2 hours to write, debug, test
from cpmf.uipath_ext import ContextGroundingExt
cg = ContextGroundingExt(sdk)
files = cg.list_bucket_files(
index_name="MyIndex",
folder_key=folder_key,
recursive=True
)Time: 2 minutes
The difference: Automated folder context, correct headers, caching, error handling—all inherited from the SDK.
Install from MyGet:
# Using pip:
pip install cprima-forge-uipath-extensions \
--extra-index-url https://www.myget.org/F/cprima-forge/python/
# Or with uv:
uv pip install cprima-forge-uipath-extensions \
--extra-index-url https://www.myget.org/F/cprima-forge/python/ \
--index-strategy unsafe-best-matchOr download from GitHub release: https://github.com/cprima-forge/uipath-extensions/releases/tag/v0.0.5
11 Extension Modules:
list_bucket_files, verify_file_indexed)list_files, get_bucket_info)Coverage: ~85% of missing Orchestrator API surface
from uipath import UiPath
from cpmf.uipath_ext import AssetsExt, JobsExt, FolderUtils
sdk = UiPath()
# Test asset listing
assets = AssetsExt(sdk)
asset_list = assets.list_assets(folder_key="your-folder-key")
# Test job statistics
jobs = JobsExt(sdk)
stats = jobs.get_job_statistics(
folder_key="your-folder-key",
process_name="YourProcess"
)
print(f"Assets: {len(asset_list)}, Job success rate: {stats['successful']}/{stats['total']}")This RFC seeks answers to:
sdk.api_client.request()?Alternatives to consider:
Which model serves developers best?
This library is fast-moving, community-driven code. Contributions are encouraged!
Quick start:
# 1. Fork the repository
# https://github.com/cprima-forge/uipath-extensions (click Fork)
# 2. Add your fork as a submodule in your project
git submodule add -b develop \
https://github.com/YOUR_USERNAME/uipath-extensions \
libs/uipath-extensions
# 3. Install in editable mode
cd libs/uipath-extensions
uv pip install -e .
# 4. Make improvements
git checkout -b feature/awesome-improvement
# ... edit code, add methods, fix bugs ...
git commit -am "feat: add awesome feature"
# 5. Push and open Pull Request
git push origin feature/awesome-improvement
# Open PR at: https://github.com/cprima-forge/uipath-extensions/compareHigh-value contributions:
Development guides:
Report issues:
Share ideas:
Answer validation questions:
Pattern: Composition over Inheritance
class ContextGroundingExt:
def __init__(self, sdk: UiPath):
self.sdk = sdk # Wrap, don't replace
def list_bucket_files(self, index_name, folder_key):
# Use sdk.api_client for authenticated requests
response = self.sdk.api_client.request("GET", endpoint, ...)
return response.json()Benefits:
.env configuration:
UIPATH_URL=https://cloud.uipath.com/<account>/<tenant>/orchestrator_/
UIPATH_CLIENT_ID=your-client-id
UIPATH_CLIENT_SECRET=your-client-secret
UIPATH_FOLDER_KEY=your-folder-guidCredentials retrieval:
.envUiPath uses two folder identifiers:
| Identifier | Type | Format | Used By |
|---|---|---|---|
folder_key |
GUID | 5ebb73c3-b114-... |
SDK + some OData |
folder_id |
Integer | 5083200 |
Buckets + raw API |
Extension solution: FolderUtils handles conversion and caches results.
from cpmf.uipath_ext import FolderUtils
folder_utils = FolderUtils(sdk)
folder_id = folder_utils.get_folder_id_from_key(folder_key) # CachedThis document and the associated package are released under the Creative Commons Attribution 4.0 International (CC-BY 4.0) license.
UiPath® is a registered trademark of UiPath, Inc.
This RFC and the cprima-forge-uipath-extensions package are independent community contributions and are not affiliated with, endorsed by, or supported by UiPath, Inc.
The goal: Build what developers actually need, not what we assume they need.
This RFC needs your input:
Respond via:
Let's solve this together.
If you made it until here: My PyPi organization request is currently pending. Comment here if you need a pointer to an unofficial PyPi package :)
Will publish to PyPi as soon as possible.