trossen-cloud-cli 0.1.2__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.
Files changed (31) hide show
  1. trossen_cloud_cli-0.1.2/.github/workflows/publish.yml +53 -0
  2. trossen_cloud_cli-0.1.2/.gitignore +103 -0
  3. trossen_cloud_cli-0.1.2/LICENSE +29 -0
  4. trossen_cloud_cli-0.1.2/PKG-INFO +131 -0
  5. trossen_cloud_cli-0.1.2/README.md +95 -0
  6. trossen_cloud_cli-0.1.2/docs/configuration.md +54 -0
  7. trossen_cloud_cli-0.1.2/pyproject.toml +82 -0
  8. trossen_cloud_cli-0.1.2/src/trossen_cloud_cli/__init__.py +7 -0
  9. trossen_cloud_cli-0.1.2/src/trossen_cloud_cli/__main__.py +6 -0
  10. trossen_cloud_cli-0.1.2/src/trossen_cloud_cli/api_client.py +269 -0
  11. trossen_cloud_cli-0.1.2/src/trossen_cloud_cli/auth.py +172 -0
  12. trossen_cloud_cli-0.1.2/src/trossen_cloud_cli/cli.py +109 -0
  13. trossen_cloud_cli-0.1.2/src/trossen_cloud_cli/commands/__init__.py +1 -0
  14. trossen_cloud_cli-0.1.2/src/trossen_cloud_cli/commands/auth.py +41 -0
  15. trossen_cloud_cli-0.1.2/src/trossen_cloud_cli/commands/config.py +88 -0
  16. trossen_cloud_cli-0.1.2/src/trossen_cloud_cli/commands/datasets.py +505 -0
  17. trossen_cloud_cli-0.1.2/src/trossen_cloud_cli/commands/models.py +380 -0
  18. trossen_cloud_cli-0.1.2/src/trossen_cloud_cli/commands/training_jobs.py +349 -0
  19. trossen_cloud_cli-0.1.2/src/trossen_cloud_cli/config.py +125 -0
  20. trossen_cloud_cli-0.1.2/src/trossen_cloud_cli/download.py +178 -0
  21. trossen_cloud_cli-0.1.2/src/trossen_cloud_cli/output.py +58 -0
  22. trossen_cloud_cli-0.1.2/src/trossen_cloud_cli/progress.py +270 -0
  23. trossen_cloud_cli-0.1.2/src/trossen_cloud_cli/types.py +159 -0
  24. trossen_cloud_cli-0.1.2/src/trossen_cloud_cli/upload.py +696 -0
  25. trossen_cloud_cli-0.1.2/tests/__init__.py +1 -0
  26. trossen_cloud_cli-0.1.2/tests/test_api_endpoints.py +678 -0
  27. trossen_cloud_cli-0.1.2/tests/test_cli.py +106 -0
  28. trossen_cloud_cli-0.1.2/tests/test_config.py +151 -0
  29. trossen_cloud_cli-0.1.2/tests/test_progress.py +40 -0
  30. trossen_cloud_cli-0.1.2/tests/test_types.py +133 -0
  31. trossen_cloud_cli-0.1.2/tests/test_upload_scale.py +551 -0
@@ -0,0 +1,53 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ release_tag:
7
+ description: "Release tag to publish (e.g. v0.1.1)"
8
+ required: true
9
+ type: string
10
+ index:
11
+ description: "PyPI index to publish to"
12
+ required: true
13
+ type: choice
14
+ options:
15
+ - testpypi
16
+ - pypi
17
+ default: testpypi
18
+
19
+ jobs:
20
+ build:
21
+ runs-on: ubuntu-latest
22
+ steps:
23
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
24
+ with:
25
+ ref: ${{ inputs.release_tag }}
26
+
27
+ - name: Install uv
28
+ uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0
29
+
30
+ - name: Build package
31
+ run: uv build
32
+
33
+ - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
34
+ with:
35
+ name: dist
36
+ path: dist/
37
+
38
+ publish:
39
+ needs: build
40
+ runs-on: ubuntu-latest
41
+ environment: ${{ inputs.index }}
42
+ permissions:
43
+ id-token: write
44
+ steps:
45
+ - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
46
+ with:
47
+ name: dist
48
+ path: dist/
49
+
50
+ - name: Publish to PyPI
51
+ uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
52
+ with:
53
+ repository-url: ${{ inputs.index == 'testpypi' && 'https://test.pypi.org/legacy/' || 'https://upload.pypi.org/legacy/' }}
@@ -0,0 +1,103 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ *.manifest
31
+ *.spec
32
+
33
+ # Installer logs
34
+ pip-log.txt
35
+ pip-delete-this-directory.txt
36
+
37
+ # Unit test / coverage reports
38
+ htmlcov/
39
+ .tox/
40
+ .nox/
41
+ .coverage
42
+ .coverage.*
43
+ .cache
44
+ nosetests.xml
45
+ coverage.xml
46
+ *.cover
47
+ *.py,cover
48
+ .hypothesis/
49
+ .pytest_cache/
50
+
51
+ # Translations
52
+ *.mo
53
+ *.pot
54
+
55
+ # Environments
56
+ .env
57
+ .venv
58
+ env/
59
+ venv/
60
+ ENV/
61
+ env.bak/
62
+ venv.bak/
63
+
64
+ # Spyder project settings
65
+ .spyderproject
66
+ .spyproject
67
+
68
+ # Rope project settings
69
+ .ropeproject
70
+
71
+ # mkdocs documentation
72
+ /site
73
+
74
+ # mypy
75
+ .mypy_cache/
76
+ .dmypy.json
77
+ dmypy.json
78
+
79
+ # Pyre type checker
80
+ .pyre/
81
+
82
+ # pytype static type analyzer
83
+ .pytype/
84
+
85
+ # Cython debug symbols
86
+ cython_debug/
87
+
88
+ # IDE
89
+ .idea/
90
+ .vscode/
91
+ *.swp
92
+ *.swo
93
+ *~
94
+
95
+ # OS
96
+ .DS_Store
97
+ Thumbs.db
98
+
99
+ # Project specific
100
+ .trossen/
101
+ *.log
102
+ data/
103
+ .claude/
@@ -0,0 +1,29 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2026, Trossen Robotics
4
+ All rights reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are met:
8
+
9
+ 1. Redistributions of source code must retain the above copyright notice, this
10
+ list of conditions and the following disclaimer.
11
+
12
+ 2. Redistributions in binary form must reproduce the above copyright notice,
13
+ this list of conditions and the following disclaimer in the documentation
14
+ and/or other materials provided with the distribution.
15
+
16
+ 3. Neither the name of the copyright holder nor the names of its
17
+ contributors may be used to endorse or promote products derived from
18
+ this software without specific prior written permission.
19
+
20
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,131 @@
1
+ Metadata-Version: 2.4
2
+ Name: trossen_cloud_cli
3
+ Version: 0.1.2
4
+ Summary: CLI for interacting with Trossen Cloud APIs
5
+ Project-URL: Homepage, https://github.com/TrossenRobotics/trossen_cloud_cli
6
+ Project-URL: Repository, https://github.com/TrossenRobotics/trossen_cloud_cli
7
+ Project-URL: Issues, https://github.com/TrossenRobotics/trossen_cloud_cli/issues
8
+ Author: Trossen Robotics
9
+ License-Expression: BSD-3-Clause
10
+ License-File: LICENSE
11
+ Keywords: cli,cloud,datasets,models,robotics,trossen
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: Science/Research
16
+ Classifier: License :: OSI Approved :: BSD License
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Scientific/Engineering
21
+ Requires-Python: >=3.11
22
+ Requires-Dist: httpx>=0.25.0
23
+ Requires-Dist: huggingface-hub>=0.20.0
24
+ Requires-Dist: keyring>=24.0.0
25
+ Requires-Dist: pydantic>=2.0.0
26
+ Requires-Dist: rich>=13.0.0
27
+ Requires-Dist: tomli-w>=1.0.0
28
+ Requires-Dist: typer>=0.9.0
29
+ Provides-Extra: dev
30
+ Requires-Dist: mypy>=1.0.0; extra == 'dev'
31
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
32
+ Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
33
+ Requires-Dist: pytest>=7.0.0; extra == 'dev'
34
+ Requires-Dist: ruff>=0.1.0; extra == 'dev'
35
+ Description-Content-Type: text/markdown
36
+
37
+ # trossen_cloud_cli
38
+
39
+ CLI for interacting with Trossen Cloud datasets, models, and training jobs.
40
+
41
+ ## Installation
42
+
43
+ Requires Python 3.11+.
44
+
45
+ ```bash
46
+ uv tool install trossen-cloud-cli
47
+ ```
48
+
49
+ Or with pipx:
50
+
51
+ ```bash
52
+ pipx install trossen-cloud-cli
53
+ ```
54
+
55
+ Or with pip:
56
+
57
+ ```bash
58
+ pip install trossen-cloud-cli
59
+ ```
60
+
61
+ ## Authentication
62
+
63
+ Create an API token in the Trossen Cloud web UI, then:
64
+
65
+ ```bash
66
+ # Directly provide your token
67
+ trc auth login --token <your-api-token>
68
+
69
+ # Or receive a password prompt
70
+ trc auth login
71
+
72
+ # Check authentication status
73
+ trc auth status
74
+ ```
75
+
76
+ The token is stored securely in your OS keyring.
77
+
78
+ ## Usage
79
+
80
+ ### Datasets
81
+
82
+ ```bash
83
+ # Upload a local dataset
84
+ trc dataset upload ./my-data --name my-dataset --type lerobot
85
+
86
+ # Download a dataset
87
+ trc dataset download <dataset-id> ./output
88
+
89
+ # Browse and manage
90
+ trc dataset list --mine
91
+ trc dataset info <dataset-id>
92
+ trc dataset view <user>/<name>
93
+ trc dataset update <dataset-id> --name new-name --privacy public
94
+ trc dataset delete <dataset-id>
95
+ ```
96
+
97
+ ### Models
98
+
99
+ ```bash
100
+ # Upload a model
101
+ trc model upload ./my-model --name my-model
102
+
103
+ # Download a model
104
+ trc model download <model-id> ./output
105
+
106
+ # Browse and manage
107
+ trc model list --mine
108
+ trc model info <model-id>
109
+ trc model view <user>/<name>
110
+ trc model update <model-id> --name new-name
111
+ trc model delete <model-id>
112
+ ```
113
+
114
+ ### Training Jobs
115
+
116
+ ```bash
117
+ # Create a training job
118
+ trc training-job create --name my-job --base-model-id <id> --dataset-id <id>
119
+
120
+ # Monitor and manage
121
+ trc training-job list
122
+ trc training-job info <job-id>
123
+ trc training-job cancel <job-id>
124
+ trc training-job models <job-id>
125
+ ```
126
+
127
+ Run `trc usage` to see a quick-reference of all commands, or `trc <command> --help` for detailed help on any command.
128
+
129
+ ## Configuration
130
+
131
+ Transfer settings (chunk sizes, concurrency) can be tuned via `trc config`. See [docs/configuration.md](docs/configuration.md) for details.
@@ -0,0 +1,95 @@
1
+ # trossen_cloud_cli
2
+
3
+ CLI for interacting with Trossen Cloud datasets, models, and training jobs.
4
+
5
+ ## Installation
6
+
7
+ Requires Python 3.11+.
8
+
9
+ ```bash
10
+ uv tool install trossen-cloud-cli
11
+ ```
12
+
13
+ Or with pipx:
14
+
15
+ ```bash
16
+ pipx install trossen-cloud-cli
17
+ ```
18
+
19
+ Or with pip:
20
+
21
+ ```bash
22
+ pip install trossen-cloud-cli
23
+ ```
24
+
25
+ ## Authentication
26
+
27
+ Create an API token in the Trossen Cloud web UI, then:
28
+
29
+ ```bash
30
+ # Directly provide your token
31
+ trc auth login --token <your-api-token>
32
+
33
+ # Or receive a password prompt
34
+ trc auth login
35
+
36
+ # Check authentication status
37
+ trc auth status
38
+ ```
39
+
40
+ The token is stored securely in your OS keyring.
41
+
42
+ ## Usage
43
+
44
+ ### Datasets
45
+
46
+ ```bash
47
+ # Upload a local dataset
48
+ trc dataset upload ./my-data --name my-dataset --type lerobot
49
+
50
+ # Download a dataset
51
+ trc dataset download <dataset-id> ./output
52
+
53
+ # Browse and manage
54
+ trc dataset list --mine
55
+ trc dataset info <dataset-id>
56
+ trc dataset view <user>/<name>
57
+ trc dataset update <dataset-id> --name new-name --privacy public
58
+ trc dataset delete <dataset-id>
59
+ ```
60
+
61
+ ### Models
62
+
63
+ ```bash
64
+ # Upload a model
65
+ trc model upload ./my-model --name my-model
66
+
67
+ # Download a model
68
+ trc model download <model-id> ./output
69
+
70
+ # Browse and manage
71
+ trc model list --mine
72
+ trc model info <model-id>
73
+ trc model view <user>/<name>
74
+ trc model update <model-id> --name new-name
75
+ trc model delete <model-id>
76
+ ```
77
+
78
+ ### Training Jobs
79
+
80
+ ```bash
81
+ # Create a training job
82
+ trc training-job create --name my-job --base-model-id <id> --dataset-id <id>
83
+
84
+ # Monitor and manage
85
+ trc training-job list
86
+ trc training-job info <job-id>
87
+ trc training-job cancel <job-id>
88
+ trc training-job models <job-id>
89
+ ```
90
+
91
+ Run `trc usage` to see a quick-reference of all commands, or `trc <command> --help` for detailed help on any command.
92
+
93
+ ## Configuration
94
+
95
+ Transfer settings (chunk sizes, concurrency) can be tuned via `trc config`. See [docs/configuration.md](docs/configuration.md) for details.
@@ -0,0 +1,54 @@
1
+ # Configuration
2
+
3
+ The `trc` CLI stores configuration in `~/.trossen/trossen_cloud_cli/config.toml`. Manage it with the `trc config` commands.
4
+
5
+ ## View current settings
6
+
7
+ ```bash
8
+ trc config show
9
+ ```
10
+
11
+ ## Set a value
12
+
13
+ ```bash
14
+ trc config set <key> <value>
15
+ ```
16
+
17
+ ### Available keys
18
+
19
+ | Key | Default | Description |
20
+ |-----|---------|-------------|
21
+ | `upload.chunk_size_mb` | 50 | Size of each multipart upload chunk in MB |
22
+ | `upload.parallel_parts` | 6 | Max concurrent parts per file upload |
23
+ | `upload.parallel_files` | 32 | Max concurrent file uploads |
24
+ | `download.parallel_files` | 16 | Max concurrent file downloads |
25
+ | `download.stream_chunk_size` | 65536 | Download stream buffer size in bytes |
26
+
27
+ ### Examples
28
+
29
+ ```bash
30
+ # Larger chunks for high-bandwidth connections
31
+ trc config set upload.chunk_size_mb 100
32
+
33
+ # More parallel uploads
34
+ trc config set upload.parallel_files 64
35
+
36
+ # Increase download concurrency
37
+ trc config set download.parallel_files 32
38
+ ```
39
+
40
+ ## Reset to defaults
41
+
42
+ ```bash
43
+ trc config reset # prompts for confirmation
44
+ trc config reset --force # no prompt
45
+ ```
46
+
47
+ ## Environment variables
48
+
49
+ These override stored configuration and cannot be set via `trc config`:
50
+
51
+ | Variable | Description |
52
+ |----------|-------------|
53
+ | `TROSSEN_API_URL` | Override the API endpoint |
54
+ | `TROSSEN_TOKEN` | Override the stored auth token |
@@ -0,0 +1,82 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "trossen_cloud_cli"
7
+ version = "0.1.2"
8
+ description = "CLI for interacting with Trossen Cloud APIs"
9
+ readme = "README.md"
10
+ requires-python = ">=3.11"
11
+ license = "BSD-3-Clause"
12
+ authors = [
13
+ { name = "Trossen Robotics" }
14
+ ]
15
+ keywords = [
16
+ "robotics",
17
+ "cli",
18
+ "trossen",
19
+ "cloud",
20
+ "datasets",
21
+ "models",
22
+ ]
23
+ dependencies = [
24
+ "httpx>=0.25.0",
25
+ "huggingface_hub>=0.20.0",
26
+ "keyring>=24.0.0",
27
+ "pydantic>=2.0.0",
28
+ "rich>=13.0.0",
29
+ "tomli-w>=1.0.0",
30
+ "typer>=0.9.0",
31
+ ]
32
+ classifiers = [
33
+ "Development Status :: 4 - Beta",
34
+ "Environment :: Console",
35
+ "Intended Audience :: Developers",
36
+ "Intended Audience :: Science/Research",
37
+ "License :: OSI Approved :: BSD License",
38
+ "Programming Language :: Python :: 3.11",
39
+ "Programming Language :: Python :: 3.12",
40
+ "Programming Language :: Python :: 3.13",
41
+ "Topic :: Scientific/Engineering",
42
+ ]
43
+
44
+ [project.urls]
45
+ Homepage = "https://github.com/TrossenRobotics/trossen_cloud_cli"
46
+ Repository = "https://github.com/TrossenRobotics/trossen_cloud_cli"
47
+ Issues = "https://github.com/TrossenRobotics/trossen_cloud_cli/issues"
48
+
49
+ [project.optional-dependencies]
50
+ dev = [
51
+ "mypy>=1.0.0",
52
+ "pytest-asyncio>=0.21.0",
53
+ "pytest-cov>=4.0.0",
54
+ "pytest>=7.0.0",
55
+ "ruff>=0.1.0",
56
+ ]
57
+
58
+ [project.scripts]
59
+ trc = "trossen_cloud_cli.cli:app"
60
+
61
+ [tool.hatch.build]
62
+ exclude = [
63
+ "CLAUDE.md",
64
+ ".claude/",
65
+ "Makefile",
66
+ "uv.lock",
67
+ ]
68
+
69
+ [tool.hatch.build.targets.wheel]
70
+ packages = ["src/trossen_cloud_cli"]
71
+
72
+ [tool.pytest.ini_options]
73
+ asyncio_mode = "auto"
74
+ testpaths = ["tests"]
75
+
76
+ [tool.ruff]
77
+ line-length = 100
78
+ target-version = "py311"
79
+
80
+ [tool.ruff.lint]
81
+ select = ["E", "F", "I", "N", "W", "UP"]
82
+ ignore = ["E501"]
@@ -0,0 +1,7 @@
1
+ """Trossen CLI - A Python CLI for Trossen Cloud."""
2
+
3
+ __version__ = "0.1.0"
4
+
5
+ from .cli import app
6
+
7
+ __all__ = ["app", "__version__"]
@@ -0,0 +1,6 @@
1
+ """Entry point for running as a module: python -m trossen_cloud_cli"""
2
+
3
+ from .cli import main
4
+
5
+ if __name__ == "__main__":
6
+ main()