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 packages/uipath-platform/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "uipath-platform"
version = "0.1.88"
version = "0.1.89"
description = "HTTP client library for programmatic access to UiPath Platform"
readme = { file = "README.md", content-type = "text/markdown" }
requires-python = ">=3.11"
Expand Down
30 changes: 28 additions & 2 deletions packages/uipath-platform/src/uipath/platform/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,33 @@
```
"""

from ._uipath import UiPath
from .common import UiPathApiConfig, UiPathExecutionContext
from typing import TYPE_CHECKING

if TYPE_CHECKING:
from ._uipath import UiPath
from .common import UiPathApiConfig, UiPathExecutionContext

__all__ = ["UiPathApiConfig", "UiPath", "UiPathExecutionContext"]


def __getattr__(name: str):
"""Resolve top-level exports on demand.

Keeps this package's ``__init__`` cheap so lightweight submodules such as
``uipath.platform.constants`` can be imported without pulling in the
``UiPath`` facade and the full service layer. The heavy import happens only
when ``UiPath`` (or a config type) is actually accessed.
"""
if name == "UiPath":
from ._uipath import UiPath

return UiPath
if name in ("UiPathApiConfig", "UiPathExecutionContext"):
from . import common

return getattr(common, name)
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")


def __dir__() -> list[str]:
return sorted(__all__)
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,17 @@

from uipath.core.tracing import traced

from uipath.platform.constants import (
ENV_TENANT_ID,
HEADER_TENANT_ID,
)

from ..common._base_service import BaseService
from ..common._bindings import resource_override
from ..common._config import UiPathApiConfig, UiPathConfig
from ..common._execution_context import UiPathExecutionContext
from ..common._folder_context import FolderContext, header_folder
from ..common._models import Endpoint, RequestSpec
from ..common.constants import (
ENV_TENANT_ID,
HEADER_TENANT_ID,
)
from .task_schema import TaskSchema
from .tasks import Task, TaskRecipient, TaskRecipientType

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,13 @@
from pydantic import BaseModel
from uipath.core.tracing import traced

from uipath.platform.constants import HEADER_AGENTHUB_CONFIG

from ..common._base_service import BaseService
from ..common._config import UiPathApiConfig
from ..common._endpoints_manager import EndpointManager
from ..common._execution_context import UiPathExecutionContext
from ..common._models import Endpoint
from ..common.constants import HEADER_AGENTHUB_CONFIG
from .llm_gateway import (
ChatCompletion,
SpecificToolChoice,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,15 @@
stop_after_attempt,
)

from uipath.platform.constants import HEADER_USER_AGENT

from ..errors import EnrichedException
from ._config import UiPathApiConfig
from ._execution_context import UiPathExecutionContext
from ._http_config import get_httpx_client_kwargs
from ._service_url_overrides import inject_routing_headers, resolve_service_url
from ._url import UiPathUrl
from ._user_agent import user_agent_value
from .constants import HEADER_USER_AGENT
from .retry import (
MAX_RETRY_ATTEMPTS,
is_retryable_platform_exception,
Expand Down
50 changes: 25 additions & 25 deletions packages/uipath-platform/src/uipath/platform/common/_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,13 @@ def __repr__(self) -> str:

@property
def bindings_file_path(self) -> Path:
from uipath.platform.common.constants import UIPATH_BINDINGS_FILE
from uipath.platform.constants import UIPATH_BINDINGS_FILE

return Path(UIPATH_BINDINGS_FILE)

@property
def config_file_path(self) -> Path:
from uipath.platform.common.constants import (
from uipath.platform.constants import (
ENV_UIPATH_CONFIG_PATH,
UIPATH_CONFIG_FILE,
)
Expand All @@ -51,97 +51,97 @@ def config_file_path(self) -> Path:

@property
def config_file_name(self) -> str:
from uipath.platform.common.constants import UIPATH_CONFIG_FILE
from uipath.platform.constants import UIPATH_CONFIG_FILE

return UIPATH_CONFIG_FILE

@property
def project_id(self) -> str | None:
from uipath.platform.common.constants import ENV_UIPATH_PROJECT_ID
from uipath.platform.constants import ENV_UIPATH_PROJECT_ID

return os.getenv(ENV_UIPATH_PROJECT_ID, None)

@property
def agent_id(self) -> str | None:
from uipath.platform.common.constants import ENV_UIPATH_AGENT_ID
from uipath.platform.constants import ENV_UIPATH_AGENT_ID

return os.getenv(ENV_UIPATH_AGENT_ID) or self.project_id

@property
def cloud_user_id(self) -> str | None:
from uipath.platform.common.constants import ENV_UIPATH_CLOUD_USER_ID
from uipath.platform.constants import ENV_UIPATH_CLOUD_USER_ID

return os.getenv(ENV_UIPATH_CLOUD_USER_ID, None)

@property
def project_files_source(self) -> str | None:
from uipath.platform.common.constants import ENV_UIPATH_PROJECT_FILES_SOURCE
from uipath.platform.constants import ENV_UIPATH_PROJECT_FILES_SOURCE

return os.getenv(ENV_UIPATH_PROJECT_FILES_SOURCE, None)

@property
def project_key(self) -> str | None:
from uipath.platform.common.constants import ENV_PROJECT_KEY
from uipath.platform.constants import ENV_PROJECT_KEY

return os.getenv(ENV_PROJECT_KEY, None)

@property
def tenant_name(self) -> str | None:
from uipath.platform.common.constants import ENV_TENANT_NAME
from uipath.platform.constants import ENV_TENANT_NAME

return os.getenv(ENV_TENANT_NAME, None)

@property
def tenant_id(self) -> str | None:
from uipath.platform.common.constants import ENV_TENANT_ID
from uipath.platform.constants import ENV_TENANT_ID

return os.getenv(ENV_TENANT_ID, None)

@property
def organization_id(self) -> str | None:
from uipath.platform.common.constants import ENV_ORGANIZATION_ID
from uipath.platform.constants import ENV_ORGANIZATION_ID

return os.getenv(ENV_ORGANIZATION_ID, None)

@property
def base_url(self) -> str | None:
from uipath.platform.common.constants import ENV_BASE_URL
from uipath.platform.constants import ENV_BASE_URL

return os.getenv(ENV_BASE_URL, None)

@property
def folder_key(self) -> str | None:
from uipath.platform.common.constants import ENV_FOLDER_KEY
from uipath.platform.constants import ENV_FOLDER_KEY

return os.getenv(ENV_FOLDER_KEY, None)

@property
def folder_path(self) -> str | None:
from uipath.platform.common.constants import ENV_FOLDER_PATH
from uipath.platform.constants import ENV_FOLDER_PATH

return os.getenv(ENV_FOLDER_PATH, None)

@property
def process_key(self) -> str | None:
from uipath.platform.common.constants import ENV_PROCESS_KEY
from uipath.platform.constants import ENV_PROCESS_KEY

return os.getenv(ENV_PROCESS_KEY, None)

@property
def process_uuid(self) -> str | None:
from uipath.platform.common.constants import ENV_UIPATH_PROCESS_UUID
from uipath.platform.constants import ENV_UIPATH_PROCESS_UUID

return os.getenv(ENV_UIPATH_PROCESS_UUID, None)

@property
def trace_id(self) -> str | None:
from uipath.platform.common.constants import ENV_UIPATH_TRACE_ID
from uipath.platform.constants import ENV_UIPATH_TRACE_ID

return os.getenv(ENV_UIPATH_TRACE_ID, None)

@property
def process_version(self) -> str | None:
from uipath.platform.common.constants import ENV_UIPATH_PROCESS_VERSION
from uipath.platform.constants import ENV_UIPATH_PROCESS_VERSION

return os.getenv(ENV_UIPATH_PROCESS_VERSION, None)

Expand All @@ -151,39 +151,39 @@ def is_studio_project(self) -> bool:

@property
def job_key(self) -> str | None:
from uipath.platform.common.constants import ENV_JOB_KEY
from uipath.platform.constants import ENV_JOB_KEY

return os.getenv(ENV_JOB_KEY, None)

@property
def has_legacy_eval_folder(self) -> bool:
from uipath.platform.common.constants import LEGACY_EVAL_FOLDER
from uipath.platform.constants import LEGACY_EVAL_FOLDER

eval_path = Path(os.getcwd()) / LEGACY_EVAL_FOLDER
return eval_path.exists() and eval_path.is_dir()

@property
def has_eval_folder(self) -> bool:
from uipath.platform.common.constants import EVALS_FOLDER
from uipath.platform.constants import EVALS_FOLDER

coded_eval_path = Path(os.getcwd()) / EVALS_FOLDER
return coded_eval_path.exists() and coded_eval_path.is_dir()

@property
def entry_points_file_path(self) -> Path:
from uipath.platform.common.constants import ENTRY_POINTS_FILE
from uipath.platform.constants import ENTRY_POINTS_FILE

return Path(ENTRY_POINTS_FILE)

@property
def uiproj_file_path(self) -> Path:
from uipath.platform.common.constants import UIPROJ_FILE
from uipath.platform.constants import UIPROJ_FILE

return Path(UIPROJ_FILE)

@property
def studio_metadata_file_path(self) -> Path:
from uipath.platform.common.constants import STUDIO_METADATA_FILE
from uipath.platform.constants import STUDIO_METADATA_FILE

return Path(".uipath", STUDIO_METADATA_FILE)

Expand All @@ -198,7 +198,7 @@ def is_rooted_to_debug_job(self) -> bool:

@property
def is_tracing_enabled(self) -> bool:
from uipath.platform.common.constants import ENV_TRACING_ENABLED
from uipath.platform.constants import ENV_TRACING_ENABLED

return os.getenv(ENV_TRACING_ENABLED, "true").lower() == "true"

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from contextvars import ContextVar, Token
from os import environ as env

from uipath.platform.common.constants import ENV_JOB_ID, ENV_JOB_KEY, ENV_ROBOT_KEY
from uipath.platform.constants import ENV_JOB_ID, ENV_JOB_KEY, ENV_ROBOT_KEY

_execution_source: ContextVar[str | None] = ContextVar("execution_source", default=None)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@
import httpx
from httpx import HTTPStatusError

from uipath.platform.constants import ENV_BASE_URL

from ..errors import EnrichedException
from ..identity import IdentityService
from .auth import TokenData
from .constants import ENV_BASE_URL


class ExternalApplicationService:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from os import environ as env
from typing import Any, Optional

from uipath.platform.common.constants import (
from uipath.platform.constants import (
ENV_FOLDER_KEY,
ENV_FOLDER_PATH,
HEADER_FOLDER_KEY,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,9 @@ def get_httpx_client_kwargs(
ca_bundle = get_ca_bundle_path()
client_kwargs["verify"] = create_ssl_context(ca_bundle) if ca_bundle else False

from uipath.platform.constants import HEADER_LICENSING_CONTEXT

from ._config import UiPathConfig
from .constants import HEADER_LICENSING_CONTEXT

merged_headers: Dict[str, str] = {}
licensing_context = UiPathConfig.licensing_context
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from uipath.platform.constants import HEADER_JOB_KEY

from ._config import UiPathConfig
from .constants import HEADER_JOB_KEY


def header_job_key() -> dict[str, str]:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,12 @@

import os

from uipath.platform.constants import (
HEADER_INTERNAL_ACCOUNT_ID,
HEADER_INTERNAL_TENANT_ID,
)

from ._config import UiPathConfig
from .constants import HEADER_INTERNAL_ACCOUNT_ID, HEADER_INTERNAL_TENANT_ID


def resolve_service_url(endpoint_path: str) -> str | None:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from pydantic import BaseModel, ConfigDict, Field
from uipath.core.serialization import serialize_json

from .constants import (
from uipath.platform.constants import (
ENV_FOLDER_KEY,
ENV_JOB_KEY,
ENV_ORGANIZATION_ID,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import importlib

from .constants import HEADER_USER_AGENT
from uipath.platform.constants import HEADER_USER_AGENT


def user_agent_value(specific_component: str) -> str:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from pydantic import BaseModel

from uipath.platform.common.constants import (
from uipath.platform.constants import (
ENV_BASE_URL,
ENV_UIPATH_ACCESS_TOKEN,
ENV_UNATTENDED_USER_ACCESS_TOKEN,
Expand Down
Loading
Loading