dapi 0.4.9__tar.gz → 0.5.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.
- dapi-0.5.1/.github/workflows/build-test.yml +24 -0
- dapi-0.5.1/.github/workflows/docs.yml +64 -0
- dapi-0.5.1/.github/workflows/pypi.yml +28 -0
- dapi-0.5.1/.gitignore +183 -0
- dapi-0.5.1/AUTHORS.md +5 -0
- dapi-0.5.1/CHANGELOG.md +52 -0
- dapi-0.5.1/DesignSafe-Badge.svg +262 -0
- dapi-0.5.1/PKG-INFO +193 -0
- dapi-0.5.1/README.md +162 -0
- dapi-0.5.1/_config.yml +48 -0
- dapi-0.5.1/dapi/__init__.py +73 -0
- {dapi-0.4.9 → dapi-0.5.1}/dapi/apps.py +2 -2
- {dapi-0.4.9 → dapi-0.5.1}/dapi/client.py +350 -37
- {dapi-0.4.9 → dapi-0.5.1}/dapi/db/__init__.py +2 -1
- {dapi-0.4.9 → dapi-0.5.1}/dapi/db/accessor.py +5 -5
- {dapi-0.4.9 → dapi-0.5.1}/dapi/db/config.py +3 -3
- {dapi-0.4.9 → dapi-0.5.1}/dapi/db/db.py +9 -5
- {dapi-0.4.9 → dapi-0.5.1}/dapi/exceptions.py +23 -3
- {dapi-0.4.9 → dapi-0.5.1}/dapi/files.py +73 -77
- {dapi-0.4.9 → dapi-0.5.1}/dapi/jobs.py +154 -22
- dapi-0.5.1/dapi/launcher.py +134 -0
- dapi-0.5.1/dapi/projects.py +261 -0
- dapi-0.5.1/dapi/systems.py +358 -0
- dapi-0.5.1/dapi.png +0 -0
- dapi-0.5.1/docs/apps.md +79 -0
- dapi-0.5.1/docs/authentication.md +110 -0
- dapi-0.5.1/docs/database.md +216 -0
- dapi-0.5.1/docs/examples/apps.md +47 -0
- dapi-0.5.1/docs/examples/database.md +909 -0
- dapi-0.5.1/docs/examples/mpm.md +162 -0
- dapi-0.5.1/docs/examples/openfoam.md +211 -0
- dapi-0.5.1/docs/examples/opensees.md +307 -0
- dapi-0.5.1/docs/examples/pylauncher.md +131 -0
- dapi-0.5.1/docs/examples/pylauncher_opensees.md +77 -0
- dapi-0.5.1/docs/examples/tms_credentials.md +44 -0
- dapi-0.5.1/docs/examples.md +62 -0
- dapi-0.5.1/docs/favicon.ico +0 -0
- dapi-0.5.1/docs/files.md +100 -0
- dapi-0.5.1/docs/index.md +55 -0
- dapi-0.5.1/docs/installation.md +87 -0
- dapi-0.5.1/docs/jobs.md +445 -0
- dapi-0.5.1/docs/nheri.png +0 -0
- dapi-0.5.1/docs/projects.md +107 -0
- dapi-0.5.1/docs/quickstart.md +91 -0
- dapi-0.5.1/docs/stylesheets/extra.css +17 -0
- dapi-0.5.1/docs/systems.md +87 -0
- dapi-0.5.1/docs-api/apps.rst +6 -0
- dapi-0.5.1/docs-api/auth.rst +4 -0
- dapi-0.5.1/docs-api/client.rst +22 -0
- dapi-0.5.1/docs-api/conf.py +35 -0
- dapi-0.5.1/docs-api/database.rst +12 -0
- dapi-0.5.1/docs-api/exceptions.rst +7 -0
- dapi-0.5.1/docs-api/files.rst +12 -0
- dapi-0.5.1/docs-api/index.rst +18 -0
- dapi-0.5.1/docs-api/jobs.rst +34 -0
- dapi-0.5.1/docs-api/launcher.rst +4 -0
- dapi-0.5.1/docs-api/systems.rst +12 -0
- dapi-0.5.1/examples/apps.ipynb +298 -0
- dapi-0.5.1/examples/db.ipynb +180 -0
- dapi-0.5.1/examples/files.ipynb +410 -0
- dapi-0.5.1/examples/mpm/mpm-minimal.ipynb +466 -0
- dapi-0.5.1/examples/mpm/mpm.ipynb +876 -0
- dapi-0.5.1/examples/mpm/uniaxial_stress/entity_sets.json +13 -0
- dapi-0.5.1/examples/mpm/uniaxial_stress/mesh.txt +8 -0
- dapi-0.5.1/examples/mpm/uniaxial_stress/mpm.json +66 -0
- dapi-0.5.1/examples/mpm/uniaxial_stress/particles.txt +5 -0
- dapi-0.5.1/examples/mpm/uniaxial_stress/results.ipynb +56 -0
- dapi-0.5.1/examples/openfoam/DH1_run/0/U +46 -0
- dapi-0.5.1/examples/openfoam/DH1_run/0/boundary +29 -0
- dapi-0.5.1/examples/openfoam/DH1_run/0/k +45 -0
- dapi-0.5.1/examples/openfoam/DH1_run/0/nut +42 -0
- dapi-0.5.1/examples/openfoam/DH1_run/0/omega +45 -0
- dapi-0.5.1/examples/openfoam/DH1_run/0/p +42 -0
- dapi-0.5.1/examples/openfoam/DH1_run/constant/polyMesh/boundary +75 -0
- dapi-0.5.1/examples/openfoam/DH1_run/constant/polyMesh/faces.gz +0 -0
- dapi-0.5.1/examples/openfoam/DH1_run/constant/polyMesh/neighbour.gz +0 -0
- dapi-0.5.1/examples/openfoam/DH1_run/constant/polyMesh/owner.gz +0 -0
- dapi-0.5.1/examples/openfoam/DH1_run/constant/polyMesh/points.gz +0 -0
- dapi-0.5.1/examples/openfoam/DH1_run/constant/transportProperties +21 -0
- dapi-0.5.1/examples/openfoam/DH1_run/constant/turbulenceProperties +29 -0
- dapi-0.5.1/examples/openfoam/DH1_run/foam.foam +0 -0
- dapi-0.5.1/examples/openfoam/DH1_run/system/blockMeshDict +203 -0
- dapi-0.5.1/examples/openfoam/DH1_run/system/controlDict +74 -0
- dapi-0.5.1/examples/openfoam/DH1_run/system/decomposeParDict +47 -0
- dapi-0.5.1/examples/openfoam/DH1_run/system/fvSchemes +78 -0
- dapi-0.5.1/examples/openfoam/DH1_run/system/fvSolution +116 -0
- dapi-0.5.1/examples/openfoam/frame.png +0 -0
- dapi-0.5.1/examples/openfoam/mesh.png +0 -0
- dapi-0.5.1/examples/openfoam/openfoam-minimal.ipynb +534 -0
- dapi-0.5.1/examples/openfoam/openfoam.ipynb +998 -0
- dapi-0.5.1/examples/openfoam/paraview.png +0 -0
- dapi-0.5.1/examples/opensees/DS_input/Main_multiMotion.tcl +79 -0
- dapi-0.5.1/examples/opensees/DS_input/ProfileA.tcl +568 -0
- dapi-0.5.1/examples/opensees/DS_input/ProfileB.tcl +511 -0
- dapi-0.5.1/examples/opensees/DS_input/ProfileC.tcl +565 -0
- dapi-0.5.1/examples/opensees/DS_input/ProfileD.tcl +521 -0
- dapi-0.5.1/examples/opensees/DS_input/motion1.vel +6610 -0
- dapi-0.5.1/examples/opensees/DS_input/motion2.vel +3997 -0
- dapi-0.5.1/examples/opensees/DS_input/plotAcc.py +40 -0
- dapi-0.5.1/examples/opensees/DS_input/recordData.txt +2 -0
- dapi-0.5.1/examples/opensees/DS_input/respSpectra.py +70 -0
- dapi-0.5.1/examples/opensees/OpenSeesMP-dapi.ipynb +535 -0
- dapi-0.5.1/examples/opensees/multi-freeField.png +0 -0
- dapi-0.5.1/examples/projects.ipynb +1082 -0
- dapi-0.5.1/examples/pylauncher/pylauncher_opensees.ipynb +273 -0
- dapi-0.5.1/examples/pylauncher/pylauncher_sweep.ipynb +206 -0
- dapi-0.5.1/examples/tms_credentials.ipynb +141 -0
- dapi-0.5.1/myst.yml +50 -0
- dapi-0.5.1/pyproject.toml +58 -0
- dapi-0.5.1/scripts/pre-commit +15 -0
- dapi-0.5.1/tests/auth/test_auth.py +77 -0
- dapi-0.5.1/tests/db/test_db.py +63 -0
- dapi-0.5.1/tests/files/test_encoding_consistency.py +96 -0
- dapi-0.5.1/tests/files/test_uri_translation.py +116 -0
- dapi-0.5.1/tests/jobs/__init__.py +0 -0
- dapi-0.5.1/tests/jobs/test_archive_config.py +151 -0
- dapi-0.5.1/tests/jobs/test_dir_uri.py +88 -0
- dapi-0.5.1/tests/jobs/test_job_gen_jobinfo.py +180 -0
- dapi-0.5.1/tests/jobs/test_job_status.py +47 -0
- dapi-0.5.1/tests/jobs/test_list_jobs.py +185 -0
- dapi-0.5.1/tests/jobs/test_parametric_sweep.py +160 -0
- dapi-0.5.1/tests/jobs/test_runtime_summary.py +158 -0
- dapi-0.5.1/tests/projects/__init__.py +0 -0
- dapi-0.5.1/tests/projects/test_projects.py +197 -0
- dapi-0.5.1/tests/systems/test_credentials.py +299 -0
- dapi-0.4.9/AUTHORS.md +0 -4
- dapi-0.4.9/PKG-INFO +0 -183
- dapi-0.4.9/README.md +0 -151
- dapi-0.4.9/dapi/__init__.py +0 -99
- dapi-0.4.9/dapi/systems.py +0 -97
- dapi-0.4.9/pyproject.toml +0 -51
- {dapi-0.4.9 → dapi-0.5.1}/LICENSE.md +0 -0
- {dapi-0.4.9 → dapi-0.5.1}/dapi/auth.py +0 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: Build, Lint, and Test
|
|
2
|
+
|
|
3
|
+
on: [push, pull_request]
|
|
4
|
+
jobs:
|
|
5
|
+
ci:
|
|
6
|
+
strategy:
|
|
7
|
+
fail-fast: false
|
|
8
|
+
matrix:
|
|
9
|
+
python-version: ["3.13"]
|
|
10
|
+
os: [ubuntu-latest]
|
|
11
|
+
runs-on: ${{ matrix.os }}
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
- name: Install uv
|
|
15
|
+
uses: astral-sh/setup-uv@v4
|
|
16
|
+
- uses: actions/setup-python@v5
|
|
17
|
+
with:
|
|
18
|
+
python-version: ${{ matrix.python-version }}
|
|
19
|
+
- name: Install dependencies
|
|
20
|
+
run: uv pip install --system ".[dev]"
|
|
21
|
+
- name: Lint and format check
|
|
22
|
+
run: ruff format --check . && ruff check .
|
|
23
|
+
- name: Run tests
|
|
24
|
+
run: pytest tests/
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
name: deploy-docs
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
env:
|
|
10
|
+
BASE_URL: /${{ github.event.repository.name }}
|
|
11
|
+
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
pages: write
|
|
15
|
+
id-token: write
|
|
16
|
+
|
|
17
|
+
concurrency:
|
|
18
|
+
group: "pages"
|
|
19
|
+
cancel-in-progress: false
|
|
20
|
+
|
|
21
|
+
jobs:
|
|
22
|
+
build:
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
steps:
|
|
25
|
+
- uses: actions/checkout@v4
|
|
26
|
+
|
|
27
|
+
- name: Install uv
|
|
28
|
+
uses: astral-sh/setup-uv@v4
|
|
29
|
+
|
|
30
|
+
- uses: actions/setup-python@v5
|
|
31
|
+
with:
|
|
32
|
+
python-version: "3.13"
|
|
33
|
+
|
|
34
|
+
- name: Set up Node.js
|
|
35
|
+
uses: actions/setup-node@v4
|
|
36
|
+
with:
|
|
37
|
+
node-version: "22"
|
|
38
|
+
|
|
39
|
+
- name: Install dependencies
|
|
40
|
+
run: uv pip install --system ".[docs]"
|
|
41
|
+
|
|
42
|
+
# Build narrative docs (guides, examples) with Jupyter Book / MyST
|
|
43
|
+
- name: Build narrative docs
|
|
44
|
+
run: jupyter-book build --html
|
|
45
|
+
|
|
46
|
+
# Build API reference with Sphinx
|
|
47
|
+
- name: Build API docs
|
|
48
|
+
run: sphinx-build -b html docs-api _build/html/api
|
|
49
|
+
|
|
50
|
+
- name: Upload artifact
|
|
51
|
+
uses: actions/upload-pages-artifact@v3
|
|
52
|
+
with:
|
|
53
|
+
path: ./_build/html
|
|
54
|
+
|
|
55
|
+
deploy:
|
|
56
|
+
environment:
|
|
57
|
+
name: github-pages
|
|
58
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
59
|
+
runs-on: ubuntu-latest
|
|
60
|
+
needs: build
|
|
61
|
+
steps:
|
|
62
|
+
- name: Deploy to GitHub Pages
|
|
63
|
+
id: deployment
|
|
64
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
tags:
|
|
5
|
+
- 'v[0-9]+.[0-9]+.[0-9]+'
|
|
6
|
+
jobs:
|
|
7
|
+
pypi-publish:
|
|
8
|
+
name: Upload release to PyPI
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
environment:
|
|
11
|
+
name: pypi
|
|
12
|
+
url: https://pypi.org/p/dapi
|
|
13
|
+
permissions:
|
|
14
|
+
id-token: write
|
|
15
|
+
contents: read
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
- name: Install uv
|
|
19
|
+
uses: astral-sh/setup-uv@v4
|
|
20
|
+
- uses: actions/setup-python@v5
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.13"
|
|
23
|
+
- name: Build package
|
|
24
|
+
run: uv build
|
|
25
|
+
- name: Publish package distributions to PyPI
|
|
26
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
27
|
+
with:
|
|
28
|
+
verbose: true
|
dapi-0.5.1/.gitignore
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
# OS temp files
|
|
2
|
+
**/.DS_Store*
|
|
3
|
+
*~*
|
|
4
|
+
*#*
|
|
5
|
+
|
|
6
|
+
# Byte-compiled / optimized / DLL files
|
|
7
|
+
__pycache__/
|
|
8
|
+
*.py[cod]
|
|
9
|
+
*$py.class
|
|
10
|
+
|
|
11
|
+
# C extensions
|
|
12
|
+
*.so
|
|
13
|
+
|
|
14
|
+
# Distribution / packaging
|
|
15
|
+
.Python
|
|
16
|
+
build/
|
|
17
|
+
develop-eggs/
|
|
18
|
+
dist/
|
|
19
|
+
downloads/
|
|
20
|
+
eggs/
|
|
21
|
+
.eggs/
|
|
22
|
+
lib/
|
|
23
|
+
lib64/
|
|
24
|
+
parts/
|
|
25
|
+
sdist/
|
|
26
|
+
var/
|
|
27
|
+
wheels/
|
|
28
|
+
share/python-wheels/
|
|
29
|
+
*.egg-info/
|
|
30
|
+
.installed.cfg
|
|
31
|
+
*.egg
|
|
32
|
+
MANIFEST
|
|
33
|
+
|
|
34
|
+
# PyInstaller
|
|
35
|
+
# Usually these files are written by a python script from a template
|
|
36
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
37
|
+
*.manifest
|
|
38
|
+
*.spec
|
|
39
|
+
|
|
40
|
+
# Installer logs
|
|
41
|
+
pip-log.txt
|
|
42
|
+
pip-delete-this-directory.txt
|
|
43
|
+
|
|
44
|
+
# Unit test / coverage reports
|
|
45
|
+
htmlcov/
|
|
46
|
+
.tox/
|
|
47
|
+
.nox/
|
|
48
|
+
.coverage
|
|
49
|
+
.coverage.*
|
|
50
|
+
.cache
|
|
51
|
+
nosetests.xml
|
|
52
|
+
coverage.xml
|
|
53
|
+
*.cover
|
|
54
|
+
*.py,cover
|
|
55
|
+
.hypothesis/
|
|
56
|
+
.pytest_cache/
|
|
57
|
+
cover/
|
|
58
|
+
|
|
59
|
+
# Translations
|
|
60
|
+
*.mo
|
|
61
|
+
*.pot
|
|
62
|
+
|
|
63
|
+
# Django stuff:
|
|
64
|
+
*.log
|
|
65
|
+
local_settings.py
|
|
66
|
+
db.sqlite3
|
|
67
|
+
db.sqlite3-journal
|
|
68
|
+
|
|
69
|
+
# Flask stuff:
|
|
70
|
+
instance/
|
|
71
|
+
.webassets-cache
|
|
72
|
+
|
|
73
|
+
# Scrapy stuff:
|
|
74
|
+
.scrapy
|
|
75
|
+
|
|
76
|
+
# Sphinx documentation
|
|
77
|
+
docs/_build/
|
|
78
|
+
|
|
79
|
+
# PyBuilder
|
|
80
|
+
.pybuilder/
|
|
81
|
+
target/
|
|
82
|
+
|
|
83
|
+
# Jupyter Notebook
|
|
84
|
+
.ipynb_checkpoints
|
|
85
|
+
|
|
86
|
+
# IPython
|
|
87
|
+
profile_default/
|
|
88
|
+
ipython_config.py
|
|
89
|
+
|
|
90
|
+
# pyenv
|
|
91
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
92
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
93
|
+
# .python-version
|
|
94
|
+
|
|
95
|
+
# pipenv
|
|
96
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
97
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
98
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
99
|
+
# install all needed dependencies.
|
|
100
|
+
#Pipfile.lock
|
|
101
|
+
|
|
102
|
+
# poetry
|
|
103
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
104
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
105
|
+
# commonly ignored for libraries.
|
|
106
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
107
|
+
#poetry.lock
|
|
108
|
+
|
|
109
|
+
# pdm
|
|
110
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
111
|
+
#pdm.lock
|
|
112
|
+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
|
113
|
+
# in version control.
|
|
114
|
+
# https://pdm.fming.dev/#use-with-ide
|
|
115
|
+
.pdm.toml
|
|
116
|
+
|
|
117
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
118
|
+
__pypackages__/
|
|
119
|
+
|
|
120
|
+
# Celery stuff
|
|
121
|
+
celerybeat-schedule
|
|
122
|
+
celerybeat.pid
|
|
123
|
+
|
|
124
|
+
# SageMath parsed files
|
|
125
|
+
*.sage.py
|
|
126
|
+
|
|
127
|
+
# Environments
|
|
128
|
+
.env
|
|
129
|
+
.venv
|
|
130
|
+
env/
|
|
131
|
+
venv/
|
|
132
|
+
ENV/
|
|
133
|
+
env.bak/
|
|
134
|
+
venv.bak/
|
|
135
|
+
|
|
136
|
+
# Spyder project settings
|
|
137
|
+
.spyderproject
|
|
138
|
+
.spyproject
|
|
139
|
+
|
|
140
|
+
# Rope project settings
|
|
141
|
+
.ropeproject
|
|
142
|
+
|
|
143
|
+
# Jupyter Book build output
|
|
144
|
+
/_build/
|
|
145
|
+
/out/
|
|
146
|
+
|
|
147
|
+
# mkdocs documentation (legacy)
|
|
148
|
+
/site
|
|
149
|
+
|
|
150
|
+
# mypy
|
|
151
|
+
.mypy_cache/
|
|
152
|
+
.dmypy.json
|
|
153
|
+
dmypy.json
|
|
154
|
+
|
|
155
|
+
# Pyre type checker
|
|
156
|
+
.pyre/
|
|
157
|
+
|
|
158
|
+
# pytype static type analyzer
|
|
159
|
+
.pytype/
|
|
160
|
+
|
|
161
|
+
# Cython debug symbols
|
|
162
|
+
cython_debug/
|
|
163
|
+
|
|
164
|
+
# PyCharm
|
|
165
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
166
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
167
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
168
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
169
|
+
#.idea/
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
# IntelliJ / PyCharm artifacts
|
|
173
|
+
.idea/
|
|
174
|
+
|
|
175
|
+
# VS Code artifacts
|
|
176
|
+
.vscode/
|
|
177
|
+
|
|
178
|
+
# Logs and databases
|
|
179
|
+
*.log
|
|
180
|
+
*.sqlite
|
|
181
|
+
|
|
182
|
+
.aider*
|
|
183
|
+
uv.lock
|
dapi-0.5.1/AUTHORS.md
ADDED
dapi-0.5.1/CHANGELOG.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
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,0 +1,262 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<svg
|
|
3
|
+
width="151"
|
|
4
|
+
height="20"
|
|
5
|
+
role="img"
|
|
6
|
+
aria-label="|: Open in DesignSafe"
|
|
7
|
+
version="1.1"
|
|
8
|
+
id="svg854"
|
|
9
|
+
sodipodi:docname="DesignSafe-Badge.svg"
|
|
10
|
+
inkscape:version="1.1.1 (c3084ef, 2021-09-22)"
|
|
11
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
12
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
13
|
+
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
14
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
15
|
+
xmlns:svg="http://www.w3.org/2000/svg"
|
|
16
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
17
|
+
xmlns:cc="http://creativecommons.org/ns#"
|
|
18
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
|
19
|
+
<defs
|
|
20
|
+
id="defs858" />
|
|
21
|
+
<sodipodi:namedview
|
|
22
|
+
id="namedview856"
|
|
23
|
+
pagecolor="#ffffff"
|
|
24
|
+
bordercolor="#666666"
|
|
25
|
+
borderopacity="1.0"
|
|
26
|
+
inkscape:pageshadow="2"
|
|
27
|
+
inkscape:pageopacity="0.0"
|
|
28
|
+
inkscape:pagecheckerboard="0"
|
|
29
|
+
showgrid="false"
|
|
30
|
+
inkscape:zoom="7.6887417"
|
|
31
|
+
inkscape:cx="29.718777"
|
|
32
|
+
inkscape:cy="19.118863"
|
|
33
|
+
inkscape:window-width="1512"
|
|
34
|
+
inkscape:window-height="916"
|
|
35
|
+
inkscape:window-x="0"
|
|
36
|
+
inkscape:window-y="38"
|
|
37
|
+
inkscape:window-maximized="1"
|
|
38
|
+
inkscape:current-layer="svg854" />
|
|
39
|
+
<title
|
|
40
|
+
id="title824">|: Open in DesignSafe</title>
|
|
41
|
+
<linearGradient
|
|
42
|
+
id="s"
|
|
43
|
+
x2="0"
|
|
44
|
+
y2="54.954529"
|
|
45
|
+
gradientTransform="scale(2.7477263,0.36393726)"
|
|
46
|
+
x1="0"
|
|
47
|
+
y1="0"
|
|
48
|
+
gradientUnits="userSpaceOnUse">
|
|
49
|
+
<stop
|
|
50
|
+
offset="0"
|
|
51
|
+
stop-color="#bbb"
|
|
52
|
+
stop-opacity=".1"
|
|
53
|
+
id="stop826" />
|
|
54
|
+
<stop
|
|
55
|
+
offset="1"
|
|
56
|
+
stop-opacity=".1"
|
|
57
|
+
id="stop828" />
|
|
58
|
+
</linearGradient>
|
|
59
|
+
<clipPath
|
|
60
|
+
id="r">
|
|
61
|
+
<rect
|
|
62
|
+
width="151"
|
|
63
|
+
height="20"
|
|
64
|
+
rx="3"
|
|
65
|
+
fill="#ffffff"
|
|
66
|
+
id="rect831"
|
|
67
|
+
x="0"
|
|
68
|
+
y="0" />
|
|
69
|
+
</clipPath>
|
|
70
|
+
<g
|
|
71
|
+
clip-path="url(#r)"
|
|
72
|
+
id="g840">
|
|
73
|
+
<rect
|
|
74
|
+
width="32"
|
|
75
|
+
height="20"
|
|
76
|
+
fill="#555555"
|
|
77
|
+
id="rect834"
|
|
78
|
+
x="0"
|
|
79
|
+
y="0" />
|
|
80
|
+
<rect
|
|
81
|
+
x="32"
|
|
82
|
+
width="119"
|
|
83
|
+
height="20"
|
|
84
|
+
fill="#007ec6"
|
|
85
|
+
id="rect836"
|
|
86
|
+
y="0" />
|
|
87
|
+
<rect
|
|
88
|
+
width="151"
|
|
89
|
+
height="20"
|
|
90
|
+
fill="url(#s)"
|
|
91
|
+
id="rect838"
|
|
92
|
+
x="0"
|
|
93
|
+
y="0"
|
|
94
|
+
style="fill:url(#s)" />
|
|
95
|
+
</g>
|
|
96
|
+
<g
|
|
97
|
+
fill="#ffffff"
|
|
98
|
+
text-anchor="middle"
|
|
99
|
+
font-family="Verdana, Geneva, 'DejaVu Sans', sans-serif"
|
|
100
|
+
text-rendering="geometricPrecision"
|
|
101
|
+
font-size="110px"
|
|
102
|
+
id="g852">
|
|
103
|
+
<text
|
|
104
|
+
aria-hidden="true"
|
|
105
|
+
x="905"
|
|
106
|
+
y="150"
|
|
107
|
+
fill="#010101"
|
|
108
|
+
fill-opacity="0.3"
|
|
109
|
+
transform="scale(0.1)"
|
|
110
|
+
textLength="1090"
|
|
111
|
+
id="text848"
|
|
112
|
+
lengthAdjust="spacing">Open in DesignSafe</text>
|
|
113
|
+
<text
|
|
114
|
+
x="905"
|
|
115
|
+
y="140"
|
|
116
|
+
transform="scale(0.1)"
|
|
117
|
+
fill="#ffffff"
|
|
118
|
+
textLength="1090"
|
|
119
|
+
id="text850"
|
|
120
|
+
lengthAdjust="spacing">Open in DesignSafe</text>
|
|
121
|
+
</g>
|
|
122
|
+
<metadata
|
|
123
|
+
id="metadata940">
|
|
124
|
+
<rdf:RDF>
|
|
125
|
+
<cc:Work
|
|
126
|
+
rdf:about="">
|
|
127
|
+
<dc:title>|: Open in DesignSafe</dc:title>
|
|
128
|
+
</cc:Work>
|
|
129
|
+
</rdf:RDF>
|
|
130
|
+
</metadata>
|
|
131
|
+
<image
|
|
132
|
+
width="27.200001"
|
|
133
|
+
height="9.6000004"
|
|
134
|
+
preserveAspectRatio="none"
|
|
135
|
+
xlink:href="data:image/png;base64,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
|
|
257
|
+
AyBxax0eqTsCAAAAAElFTkSuQmCC
|
|
258
|
+
"
|
|
259
|
+
id="image3440"
|
|
260
|
+
x="2.3336773"
|
|
261
|
+
y="5.0845823" />
|
|
262
|
+
</svg>
|