Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "uipath_sdk"
version = "0.0.11"
version = "0.0.12"
description = "UiPath SDK"
readme = { file = "README.md", content-type = "text/markdown" }
requires-python = ">=3.10"
Expand Down
2 changes: 0 additions & 2 deletions src/uipath_sdk/_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
class Config(BaseModel):
base_url: str
secret: str
folder_id: str | None
debug: bool = False

@field_validator("base_url", mode="before")
@classmethod
Expand Down
29 changes: 29 additions & 0 deletions src/uipath_sdk/_folder_context.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from os import environ as env

from dotenv import load_dotenv

load_dotenv()


class FolderContext:
def __init__(self) -> None:
try:
self._folder_key: str | None = env["UIPATH_FOLDER_KEY"]
except KeyError:
self._folder_key = None

try:
self._folder_path: str | None = env["UIPATH_FOLDER_PATH"]
except KeyError:
self._folder_path = None

@property
def folder_headers(self) -> dict[str, str]:
if self._folder_key is not None:
return {"x-uipath-folderkey": self._folder_key}
elif self._folder_path is not None:
return {"X-uipath-folderpath": self._folder_path}
else:
raise ValueError(
"Folder key or path is not set (UIPATH_FOLDER_KEY or UIPATH_FOLDER_PATH)"
)
8 changes: 3 additions & 5 deletions src/uipath_sdk/_services/assets_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@

from httpx import Response

from .._folder_context import FolderContext
from .._models import UserAsset
from ._base_service import BaseService


class AssetsService(BaseService):
class AssetsService(BaseService, FolderContext):
def retrieve(
self,
assetName: str,
Expand Down Expand Up @@ -49,7 +50,4 @@ def update(

@property
def custom_headers(self) -> dict[str, str]:
if self._config.folder_id is None:
raise ValueError("Folder ID is required for Assets Service")

return {"x-uipath-organizationunitid": self._config.folder_id}
return self.folder_headers
8 changes: 3 additions & 5 deletions src/uipath_sdk/_services/processes_service.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
from httpx import Response

from .._folder_context import FolderContext
from ._base_service import BaseService


class ProcessesService(BaseService):
class ProcessesService(BaseService, FolderContext):
def invoke(self, release_key: str) -> Response:
endpoint = (
"/orchestrator_/odata/Jobs/UiPath.Server.Configuration.OData.StartJobs"
Expand All @@ -18,7 +19,4 @@ def invoke(self, release_key: str) -> Response:

@property
def custom_headers(self) -> dict[str, str]:
if self._config.folder_id is None:
raise ValueError("Folder ID is required for Processes Service")

return {"x-uipath-organizationunitid": self._config.folder_id}
return self.folder_headers
7 changes: 2 additions & 5 deletions src/uipath_sdk/_uipath_sdk.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,22 +20,19 @@ def __init__(
secret: str | None = None,
debug: bool = False,
) -> None:
base_url_value = base_url or env.get("UIPATH_BASE_URL")
base_url_value = base_url or env.get("UIPATH_URL")
secret_value = (
secret
or env.get("UNATTENDED_USER_ACCESS_TOKEN")
or env.get("UIPATH_ACCESS_TOKEN")
)
folder_id_value = env.get("UIPATH_FOLDER_ID")

self._config = Config(
base_url=base_url_value, # type: ignore
secret=secret_value, # type: ignore
folder_id=folder_id_value,
debug=debug,
)

setup_logging(self._config.debug)
setup_logging(debug)
log = getLogger("uipath")

log.debug("CONFIG:")
Expand Down
2 changes: 1 addition & 1 deletion src/uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.