simulo 0.24.0__tar.gz → 0.24.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {simulo-0.24.0/src/simulo.egg-info → simulo-0.24.1}/PKG-INFO +1 -1
- {simulo-0.24.0 → simulo-0.24.1}/pyproject.toml +1 -1
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/cli.py +34 -3
- {simulo-0.24.0 → simulo-0.24.1/src/simulo.egg-info}/PKG-INFO +1 -1
- {simulo-0.24.0 → simulo-0.24.1}/MANIFEST.in +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/PYPI.md +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/setup.cfg +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/__init__.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/__init__.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/_entrypoint.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/_mounts.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/_runner.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/_secure_downloads.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/app.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/asset.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/asset_api.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/asset_package.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/asset_pins.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/builtin_aliases.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/bundle.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/cancel_api.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/config.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/credentials.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/discovery.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/export_api.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/export_bundle.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/facades.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/http.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/identity_api.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/jobs_api.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/learning.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/login.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/mode.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/outputs.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/packaging.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/preflight_api.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/preflight_render.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/registry.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/runtime.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/runtime_display.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/seed_ref.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/stub.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/submit_api.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/templates/__init__.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/templates/inference/app.py.tmpl +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/templates/inference/simuloignore.tmpl +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/templates/scenario/app.py.tmpl +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/templates/scenario/simuloignore.tmpl +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/templates/training/app.py.tmpl +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/templates/training/simuloignore.tmpl +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/view_fragment.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/view_session_api.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/_client/volume.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/callbacks.py +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo/py.typed +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo.egg-info/SOURCES.txt +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo.egg-info/dependency_links.txt +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo.egg-info/entry_points.txt +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo.egg-info/requires.txt +0 -0
- {simulo-0.24.0 → simulo-0.24.1}/src/simulo.egg-info/top_level.txt +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "simulo"
|
|
7
|
-
version = "0.24.
|
|
7
|
+
version = "0.24.1"
|
|
8
8
|
description = "Simulo SDK and CLI — define robotics simulation and training apps in Python and run them on the Simulo cloud."
|
|
9
9
|
readme = "PYPI.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -635,6 +635,19 @@ _MACHINE_UUID_RE = re.compile(
|
|
|
635
635
|
)
|
|
636
636
|
_MAX_CLI_ERROR_CHARS = 2048
|
|
637
637
|
|
|
638
|
+
#: Clean, human-worded renderings for account/organization state error codes
|
|
639
|
+
#: that reach the CLI verbatim from the wire (``code: message``) otherwise.
|
|
640
|
+
#: Shared between ``_safe_cli_error_text`` (the general path: ``jobs``,
|
|
641
|
+
#: ``cancel``, ``view``, ``run``, ``whoami``, ...) and ``_friendly_asset_error``
|
|
642
|
+
#: (the asset-catalog surface, which wraps errors in its own ``AssetApiHTTPError``
|
|
643
|
+
#: rather than ``http.HttpHTTPError``, so it cannot share the first function's
|
|
644
|
+
#: isinstance check) so a person sees the identical message regardless of which
|
|
645
|
+
#: command surfaced the error.
|
|
646
|
+
_ACCOUNT_SUSPENDED_MESSAGE = "Your Simulo account has been suspended. Contact Simulo support to restore access."
|
|
647
|
+
_ORGANIZATION_DEACTIVATED_MESSAGE = (
|
|
648
|
+
"This organization has been deactivated. Its owner can reactivate it from organization settings."
|
|
649
|
+
)
|
|
650
|
+
|
|
638
651
|
|
|
639
652
|
def _canonical_uuid_text(value: Any) -> Optional[str]:
|
|
640
653
|
"""Return one exact legacy UUID in canonical form, or ``None``."""
|
|
@@ -682,7 +695,13 @@ def _safe_cli_error_text(value: Any) -> str:
|
|
|
682
695
|
if (isinstance(value, http.HttpHTTPError) and value.code == "account_suspended") or (
|
|
683
696
|
isinstance(value, credentials.TokenRefreshError) and value.code == "account_suspended"
|
|
684
697
|
):
|
|
685
|
-
text =
|
|
698
|
+
text = _ACCOUNT_SUSPENDED_MESSAGE
|
|
699
|
+
elif isinstance(value, http.HttpHTTPError) and value.code == "organization_deactivated":
|
|
700
|
+
# Unlike suspension, deactivation never disables Cognito: a stale
|
|
701
|
+
# credential still refreshes fine, and it's the org-scoped API call
|
|
702
|
+
# that returns this 403. There is deliberately no
|
|
703
|
+
# ``credentials.TokenRefreshError`` counterpart here.
|
|
704
|
+
text = _ORGANIZATION_DEACTIVATED_MESSAGE
|
|
686
705
|
else:
|
|
687
706
|
text = str(value)
|
|
688
707
|
# A legacy UUID-prefix ambiguity is the one named compatibility exception
|
|
@@ -5729,9 +5748,21 @@ def _friendly_asset_error(exc: AssetApiHTTPError) -> str:
|
|
|
5729
5748
|
The server's message leads (it already speaks user language); the quota
|
|
5730
5749
|
case appends the catalog's required "two ways out" (delete or
|
|
5731
5750
|
upgrade). Unrecognized codes render as the standard ``code: message``.
|
|
5732
|
-
Every matched code is a shared interfaces constant, so a
|
|
5733
|
-
silently degrade this copy by drifting from a
|
|
5751
|
+
Every matched ``ASSET_*`` code is a shared interfaces constant, so a
|
|
5752
|
+
control-plane rename cannot silently degrade this copy by drifting from a
|
|
5753
|
+
hand-typed literal here. ``account_suspended`` and
|
|
5754
|
+
``organization_deactivated`` are the two exceptions: they are account/org
|
|
5755
|
+
states, not asset-catalog concepts, so they have no shared constant here
|
|
5756
|
+
either (``_safe_cli_error_text`` matches them the same way) — every asset
|
|
5757
|
+
command reaches ``AssetApiHTTPError`` instead of ``http.HttpHTTPError``
|
|
5758
|
+
(see ``asset_api._translate``), so it cannot share that function's
|
|
5759
|
+
isinstance-gated branches and needs its own. Render the identical
|
|
5760
|
+
hand-worded message either function would produce, not the raw code.
|
|
5734
5761
|
"""
|
|
5762
|
+
if exc.code == "account_suspended":
|
|
5763
|
+
return _ACCOUNT_SUSPENDED_MESSAGE
|
|
5764
|
+
if exc.code == "organization_deactivated":
|
|
5765
|
+
return _ORGANIZATION_DEACTIVATED_MESSAGE
|
|
5735
5766
|
if exc.code == ASSET_STORAGE_QUOTA_EXCEEDED_CODE:
|
|
5736
5767
|
return (
|
|
5737
5768
|
f"{exc.message}\n"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|