|
| 1 | +# Changelog |
| 2 | + |
| 3 | +## v0.5.1 |
| 4 | + |
| 5 | +### New features |
| 6 | + |
| 7 | +- **Projects module** (`ds.projects`): list, inspect, and access files in DesignSafe projects |
| 8 | + - `ds.projects.list()`: returns a DataFrame of all projects you have access to |
| 9 | + - `ds.projects.get("PRJ-XXXX")`: get full project metadata (title, PI, DOIs, keywords, team, systemId) |
| 10 | + - `ds.projects.files("PRJ-XXXX")`: list files in a project as a DataFrame |
| 11 | + - PRJ number to Tapis UUID resolution via DesignSafe portal API (`/api/projects/v2/`) |
| 12 | +- **NHERI-Published and NEES storage support**: `ds.files.to_uri()` and `ds.files.to_path()` now handle `/NHERI-Published/` (`designsafe.storage.published`) and `/NEES/` (`nees.public`) paths |
| 13 | +- **`ds.jobs.job(uuid)`**: get a `SubmittedJob` object for an existing job by UUID |
| 14 | + |
| 15 | +### Fixes |
| 16 | + |
| 17 | +- Fix `ds.files.list()` failing on root paths (e.g., `tapis://designsafe.storage.community/`) where the parsed path was empty |
| 18 | +- Fix project PRJ resolution: replaced broken Tapis system description search with DesignSafe portal API lookup |
| 19 | + |
| 20 | +### Documentation |
| 21 | + |
| 22 | +- New `docs/projects.md` with full API reference and "How it works" section |
| 23 | +- Updated `docs/files.md` with NHERI-Published and NEES path formats |
| 24 | +- Added development section to `docs/installation.md` (dev branch install, editable install, pre-commit hook, running tests) |
| 25 | + |
| 26 | +### Developer experience |
| 27 | + |
| 28 | +- Added `scripts/pre-commit` hook: auto-formats with `ruff format` and blocks commits failing `ruff check` |
| 29 | +- Added `examples/files.ipynb` and `examples/projects.ipynb` |
| 30 | + |
| 31 | +## v0.5.0 |
| 32 | + |
| 33 | +### New features |
| 34 | + |
| 35 | +- **PyLauncher parameter sweeps** (`ds.jobs.parametric_sweep`): generate and submit parameter sweeps |
| 36 | + - `ds.jobs.parametric_sweep.generate()`: generate `runsList.txt` and `call_pylauncher.py`, or preview as DataFrame |
| 37 | + - `ds.jobs.parametric_sweep.submit()`: submit sweep jobs to TACC |
| 38 | +- **`ds.jobs.list()`**: list jobs with optional filtering by app_id and status, returns DataFrame by default |
| 39 | +- **Auto-TMS credentials**: `DSClient()` automatically sets up TMS credentials on TACC execution systems at init |
| 40 | +- **Ruff**: switched from black to ruff for formatting and linting |
| 41 | + |
| 42 | +### API changes |
| 43 | + |
| 44 | +- Renamed methods for brevity: `ds.jobs.generate()` (was `generate_job_info`), `ds.jobs.submit()` (was `submit_job`) |
| 45 | +- `ds.jobs.list()` supports `output="df"` (default), `"list"`, or `"raw"` |
| 46 | +- Added `ds.files.to_uri()` and `ds.files.to_path()` for path translation |
| 47 | + |
| 48 | +### Infrastructure |
| 49 | + |
| 50 | +- Migrated from Poetry to uv + hatchling |
| 51 | +- Migrated docs from mkdocs to Jupyter Book v2 (MyST) |
| 52 | +- Added TMS credential management (`ds.systems.establish_credentials()`, `check_credentials()`, `revoke_credentials()`) |
0 commit comments