Skip to content

Commit f45f948

Browse files
refactor(platform): add uipath.platform.constants as the single source of truth (#1781)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 75bcef1 commit f45f948

91 files changed

Lines changed: 533 additions & 236 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

packages/uipath-platform/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "uipath-platform"
3-
version = "0.1.88"
3+
version = "0.1.89"
44
description = "HTTP client library for programmatic access to UiPath Platform"
55
readme = { file = "README.md", content-type = "text/markdown" }
66
requires-python = ">=3.11"

packages/uipath-platform/src/uipath/platform/__init__.py

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,33 @@
3434
```
3535
"""
3636

37-
from ._uipath import UiPath
38-
from .common import UiPathApiConfig, UiPathExecutionContext
37+
from typing import TYPE_CHECKING
38+
39+
if TYPE_CHECKING:
40+
from ._uipath import UiPath
41+
from .common import UiPathApiConfig, UiPathExecutionContext
3942

4043
__all__ = ["UiPathApiConfig", "UiPath", "UiPathExecutionContext"]
44+
45+
46+
def __getattr__(name: str):
47+
"""Resolve top-level exports on demand.
48+
49+
Keeps this package's ``__init__`` cheap so lightweight submodules such as
50+
``uipath.platform.constants`` can be imported without pulling in the
51+
``UiPath`` facade and the full service layer. The heavy import happens only
52+
when ``UiPath`` (or a config type) is actually accessed.
53+
"""
54+
if name == "UiPath":
55+
from ._uipath import UiPath
56+
57+
return UiPath
58+
if name in ("UiPathApiConfig", "UiPathExecutionContext"):
59+
from . import common
60+
61+
return getattr(common, name)
62+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
63+
64+
65+
def __dir__() -> list[str]:
66+
return sorted(__all__)

packages/uipath-platform/src/uipath/platform/action_center/_tasks_service.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,17 @@
55

66
from uipath.core.tracing import traced
77

8+
from uipath.platform.constants import (
9+
ENV_TENANT_ID,
10+
HEADER_TENANT_ID,
11+
)
12+
813
from ..common._base_service import BaseService
914
from ..common._bindings import resource_override
1015
from ..common._config import UiPathApiConfig, UiPathConfig
1116
from ..common._execution_context import UiPathExecutionContext
1217
from ..common._folder_context import FolderContext, header_folder
1318
from ..common._models import Endpoint, RequestSpec
14-
from ..common.constants import (
15-
ENV_TENANT_ID,
16-
HEADER_TENANT_ID,
17-
)
1819
from .task_schema import TaskSchema
1920
from .tasks import Task, TaskRecipient, TaskRecipientType
2021

packages/uipath-platform/src/uipath/platform/chat/_llm_gateway_service.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,13 @@
2222
from pydantic import BaseModel
2323
from uipath.core.tracing import traced
2424

25+
from uipath.platform.constants import HEADER_AGENTHUB_CONFIG
26+
2527
from ..common._base_service import BaseService
2628
from ..common._config import UiPathApiConfig
2729
from ..common._endpoints_manager import EndpointManager
2830
from ..common._execution_context import UiPathExecutionContext
2931
from ..common._models import Endpoint
30-
from ..common.constants import HEADER_AGENTHUB_CONFIG
3132
from .llm_gateway import (
3233
ChatCompletion,
3334
SpecificToolChoice,

packages/uipath-platform/src/uipath/platform/common/_base_service.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,15 @@
2020
stop_after_attempt,
2121
)
2222

23+
from uipath.platform.constants import HEADER_USER_AGENT
24+
2325
from ..errors import EnrichedException
2426
from ._config import UiPathApiConfig
2527
from ._execution_context import UiPathExecutionContext
2628
from ._http_config import get_httpx_client_kwargs
2729
from ._service_url_overrides import inject_routing_headers, resolve_service_url
2830
from ._url import UiPathUrl
2931
from ._user_agent import user_agent_value
30-
from .constants import HEADER_USER_AGENT
3132
from .retry import (
3233
MAX_RETRY_ATTEMPTS,
3334
is_retryable_platform_exception,

packages/uipath-platform/src/uipath/platform/common/_config.py

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ def __repr__(self) -> str:
3636

3737
@property
3838
def bindings_file_path(self) -> Path:
39-
from uipath.platform.common.constants import UIPATH_BINDINGS_FILE
39+
from uipath.platform.constants import UIPATH_BINDINGS_FILE
4040

4141
return Path(UIPATH_BINDINGS_FILE)
4242

4343
@property
4444
def config_file_path(self) -> Path:
45-
from uipath.platform.common.constants import (
45+
from uipath.platform.constants import (
4646
ENV_UIPATH_CONFIG_PATH,
4747
UIPATH_CONFIG_FILE,
4848
)
@@ -51,97 +51,97 @@ def config_file_path(self) -> Path:
5151

5252
@property
5353
def config_file_name(self) -> str:
54-
from uipath.platform.common.constants import UIPATH_CONFIG_FILE
54+
from uipath.platform.constants import UIPATH_CONFIG_FILE
5555

5656
return UIPATH_CONFIG_FILE
5757

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

6262
return os.getenv(ENV_UIPATH_PROJECT_ID, None)
6363

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

6868
return os.getenv(ENV_UIPATH_AGENT_ID) or self.project_id
6969

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

7474
return os.getenv(ENV_UIPATH_CLOUD_USER_ID, None)
7575

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

8080
return os.getenv(ENV_UIPATH_PROJECT_FILES_SOURCE, None)
8181

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

8686
return os.getenv(ENV_PROJECT_KEY, None)
8787

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

9292
return os.getenv(ENV_TENANT_NAME, None)
9393

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

9898
return os.getenv(ENV_TENANT_ID, None)
9999

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

104104
return os.getenv(ENV_ORGANIZATION_ID, None)
105105

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

110110
return os.getenv(ENV_BASE_URL, None)
111111

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

116116
return os.getenv(ENV_FOLDER_KEY, None)
117117

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

122122
return os.getenv(ENV_FOLDER_PATH, None)
123123

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

128128
return os.getenv(ENV_PROCESS_KEY, None)
129129

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

134134
return os.getenv(ENV_UIPATH_PROCESS_UUID, None)
135135

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

140140
return os.getenv(ENV_UIPATH_TRACE_ID, None)
141141

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

146146
return os.getenv(ENV_UIPATH_PROCESS_VERSION, None)
147147

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

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

156156
return os.getenv(ENV_JOB_KEY, None)
157157

158158
@property
159159
def has_legacy_eval_folder(self) -> bool:
160-
from uipath.platform.common.constants import LEGACY_EVAL_FOLDER
160+
from uipath.platform.constants import LEGACY_EVAL_FOLDER
161161

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

165165
@property
166166
def has_eval_folder(self) -> bool:
167-
from uipath.platform.common.constants import EVALS_FOLDER
167+
from uipath.platform.constants import EVALS_FOLDER
168168

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

172172
@property
173173
def entry_points_file_path(self) -> Path:
174-
from uipath.platform.common.constants import ENTRY_POINTS_FILE
174+
from uipath.platform.constants import ENTRY_POINTS_FILE
175175

176176
return Path(ENTRY_POINTS_FILE)
177177

178178
@property
179179
def uiproj_file_path(self) -> Path:
180-
from uipath.platform.common.constants import UIPROJ_FILE
180+
from uipath.platform.constants import UIPROJ_FILE
181181

182182
return Path(UIPROJ_FILE)
183183

184184
@property
185185
def studio_metadata_file_path(self) -> Path:
186-
from uipath.platform.common.constants import STUDIO_METADATA_FILE
186+
from uipath.platform.constants import STUDIO_METADATA_FILE
187187

188188
return Path(".uipath", STUDIO_METADATA_FILE)
189189

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

199199
@property
200200
def is_tracing_enabled(self) -> bool:
201-
from uipath.platform.common.constants import ENV_TRACING_ENABLED
201+
from uipath.platform.constants import ENV_TRACING_ENABLED
202202

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

packages/uipath-platform/src/uipath/platform/common/_execution_context.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from contextvars import ContextVar, Token
22
from os import environ as env
33

4-
from uipath.platform.common.constants import ENV_JOB_ID, ENV_JOB_KEY, ENV_ROBOT_KEY
4+
from uipath.platform.constants import ENV_JOB_ID, ENV_JOB_KEY, ENV_ROBOT_KEY
55

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

packages/uipath-platform/src/uipath/platform/common/_external_application_service.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55
import httpx
66
from httpx import HTTPStatusError
77

8+
from uipath.platform.constants import ENV_BASE_URL
9+
810
from ..errors import EnrichedException
911
from ..identity import IdentityService
1012
from .auth import TokenData
11-
from .constants import ENV_BASE_URL
1213

1314

1415
class ExternalApplicationService:

packages/uipath-platform/src/uipath/platform/common/_folder_context.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from os import environ as env
33
from typing import Any, Optional
44

5-
from uipath.platform.common.constants import (
5+
from uipath.platform.constants import (
66
ENV_FOLDER_KEY,
77
ENV_FOLDER_PATH,
88
HEADER_FOLDER_KEY,

packages/uipath-platform/src/uipath/platform/common/_http_config.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,9 @@ def get_httpx_client_kwargs(
6666
ca_bundle = get_ca_bundle_path()
6767
client_kwargs["verify"] = create_ssl_context(ca_bundle) if ca_bundle else False
6868

69+
from uipath.platform.constants import HEADER_LICENSING_CONTEXT
70+
6971
from ._config import UiPathConfig
70-
from .constants import HEADER_LICENSING_CONTEXT
7172

7273
merged_headers: Dict[str, str] = {}
7374
licensing_context = UiPathConfig.licensing_context

0 commit comments

Comments
 (0)