# slurmformspawner
JupyterHub SlurmSpawner with a dynamic spawn form
## Requirements
- Python >= 3.7
- JupyterHub >= 4.0.0
- batchspawner>= 1.3.0
- cachetools
- traitlets
## Configuration
### SlurmFormSpawner
| Variable | Type | Description | Default |
| --------------------------------- | :------ | :---------------------------------------------- | ------- |
| `c.SlurmFormSpawner.disable_form` | `CBool` | Disable the spawner input form, use only default values instead | `False` |
| `c.SlurmFormSpawner.error_template_path` | `Unicode` | Path to the Jinja2 template of the error page | `os.path.join(sys.prefix, 'share', 'slurmformspawner', 'templates', 'error.html')` |
| `c.SlurmFormSpawner.submit_template_path` | `Unicode` | Path to the Jinja2 template of the submit file | `os.path.join(sys.prefix, 'share', 'slurmformspawner', 'templates', 'submit.sh')` |
| `c.SlurmFormSpawner.ui_args` | `Dict` | Dictionary of dictionaries describing the UI options | refer to `ui_args` section |
#### `ui_args`
`ui_args` is a dictionary where the keys are labels that will be re-used in `SbatchForm.ui` and the values are dictionnaries describing how to launch the user interface.
Each option dictionary can have the following keys:
- `name` (required): string that will appear in the Spawner form
- `url` (optional): url user is being redirected to after spawning the single-user server (refer to `JUPYTERHUB_DEFAULT_URL` documentation)
- `args` (optional): list of flags and options that will be appended to jupyter single-user command that should redirect to the UI.
- `modules` (optional): list of module names that needs to be loaded to make the user interface work
Here is an example of a dictionary that would configure Jupyter Notebook, a terminal and RStudio.
```
c.SlurmFormSpawner.ui_args = {
'notebook' : {
'name': 'Jupyter Notebook'
},
'terminal' : {
'name': 'Terminal',
'url': '/terminal/1'
},
'rstudio' : {
'name': 'RStudio',
'url': '/rstudio',
'modules': ['rstudio-server']
}
}
```
### SbatchForm
| Variable | Type | Description | Default |
| --------------------------------- | :------ | :---------------------------------------------- | ------- |
| `c.SbatchForm.runtime` | `Dict({'max', 'min', 'step', 'lock', 'def'})` | Runtime widget parameters | refer to `form.py` |
| `c.SbatchForm.nprocs` | `Dict({'max', 'min', 'step', 'lock', 'def'})` | Number of cores widget parameters | refer to `form.py` |
| `c.SbatchForm.memory` | `Dict({'max', 'min', 'step', 'lock', 'def'})` | Memory (MB) widget parameters | refer to `form.py` |
| `c.SbatchForm.oversubscribe` | `Dict({'def', 'lock'})` | Oversubscribe widget parameters | refer to `form.py` |
| `c.SbatchForm.gpus` | `Dict({'def', 'choices', 'lock'})` | GPUs widget parameters | refer to `form.py` |
| `c.SbatchForm.ui` | `Dict({'def', 'choices', 'lock'})` | User interface widget parameters | refer to `form.py` |
| `c.SbatchForm.reservation` | `Dict({'def', 'choices', 'lock'})` | Reservation widget parameters | refer to `form.py` |
| `c.SbatchForm.account` | `Dict({'def', 'choices', 'lock'})` | Account widget parameters | refer to `form.py` |
| `c.SbatchForm.partition` | `Dict({'def', 'choices', 'lock'})` | Slurm partition parameters | refer to `form.py` |
| `c.SbatchForm.form_template_path` | `Unicode` | Path to the Jinja2 template of the form | `os.path.join(sys.prefix, 'share', 'slurmformspawner', 'templates', 'form.html')` |
### SlurmAPI
| Variable | Type | Description | Default |
| --------------------------------- | :-------- | :---------------------------------------------------------------- | ------- |
| `c.SlurmAPI.info_cache_ttl` | `Integer` | Slurm sinfo output cache time-to-live (seconds) | 300 |
| `c.SlurmAPI.acct_cache_ttl` | `Integer` | Slurm sacct output cache time-to-live (seconds) | 300 |
| `c.SlurmAPI.acct_cache_size` | `Integer` | Slurm sacct output cache size (number of users) | 100 |
| `c.SlurmAPI.res_cache_ttl` | `Integer` | Slurm scontrol (reservations) output cache time-to-live (seconds) | 300 |
## screenshot
![form_screenshot](screenshot.png "Form screenshot")
Raw data
{
"_id": null,
"home_page": "https://github.com/cmd-ntrf/slurmformspawner",
"name": "slurmformspawner",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "Interactive, Web, JupyterHub",
"author": "F\u00e9lix-Antoine Fortin",
"author_email": "felix-antoine.fortin@calculquebec.ca",
"download_url": "https://files.pythonhosted.org/packages/c9/54/851efc7dd4e5b63f5e3393d1daad98dcab84a49f21a2e4dd0301ce39d2df/slurmformspawner-2.6.0.tar.gz",
"platform": "Linux",
"description": "# slurmformspawner\nJupyterHub SlurmSpawner with a dynamic spawn form\n\n## Requirements\n\n- Python >= 3.7\n- JupyterHub >= 4.0.0\n- batchspawner>= 1.3.0\n- cachetools\n- traitlets\n\n## Configuration\n\n### SlurmFormSpawner\n\n| Variable | Type | Description | Default |\n| --------------------------------- | :------ | :---------------------------------------------- | ------- |\n| `c.SlurmFormSpawner.disable_form` | `CBool` | Disable the spawner input form, use only default values instead | `False` |\n| `c.SlurmFormSpawner.error_template_path` | `Unicode` | Path to the Jinja2 template of the error page | `os.path.join(sys.prefix, 'share', 'slurmformspawner', 'templates', 'error.html')` |\n| `c.SlurmFormSpawner.submit_template_path` | `Unicode` | Path to the Jinja2 template of the submit file | `os.path.join(sys.prefix, 'share', 'slurmformspawner', 'templates', 'submit.sh')` |\n| `c.SlurmFormSpawner.ui_args` | `Dict` | Dictionary of dictionaries describing the UI options | refer to `ui_args` section |\n\n#### `ui_args`\n\n`ui_args` is a dictionary where the keys are labels that will be re-used in `SbatchForm.ui` and the values are dictionnaries describing how to launch the user interface.\nEach option dictionary can have the following keys:\n- `name` (required): string that will appear in the Spawner form\n- `url` (optional): url user is being redirected to after spawning the single-user server (refer to `JUPYTERHUB_DEFAULT_URL` documentation)\n- `args` (optional): list of flags and options that will be appended to jupyter single-user command that should redirect to the UI.\n- `modules` (optional): list of module names that needs to be loaded to make the user interface work\n\nHere is an example of a dictionary that would configure Jupyter Notebook, a terminal and RStudio.\n```\nc.SlurmFormSpawner.ui_args = {\n 'notebook' : {\n 'name': 'Jupyter Notebook'\n },\n 'terminal' : {\n 'name': 'Terminal',\n 'url': '/terminal/1'\n },\n 'rstudio' : {\n 'name': 'RStudio',\n 'url': '/rstudio',\n 'modules': ['rstudio-server']\n }\n}\n```\n\n### SbatchForm\n\n| Variable | Type | Description | Default |\n| --------------------------------- | :------ | :---------------------------------------------- | ------- |\n| `c.SbatchForm.runtime` | `Dict({'max', 'min', 'step', 'lock', 'def'})`\u00a0| Runtime widget parameters | refer to `form.py` |\n| `c.SbatchForm.nprocs` | `Dict({'max', 'min', 'step', 'lock', 'def'})`\u00a0| Number of cores widget parameters | refer to `form.py` |\n| `c.SbatchForm.memory` | `Dict({'max', 'min', 'step', 'lock', 'def'})` | Memory (MB) widget parameters | refer to `form.py` |\n| `c.SbatchForm.oversubscribe` | `Dict({'def', 'lock'})` | Oversubscribe widget parameters | refer to `form.py` |\n| `c.SbatchForm.gpus` | `Dict({'def', 'choices', 'lock'})` | GPUs widget parameters | refer to `form.py` |\n| `c.SbatchForm.ui` | `Dict({'def', 'choices', 'lock'})` | User interface widget parameters | refer to `form.py` |\n| `c.SbatchForm.reservation` | `Dict({'def', 'choices', 'lock'})` | Reservation widget parameters | refer to `form.py` |\n| `c.SbatchForm.account` | `Dict({'def', 'choices', 'lock'})` | Account widget parameters | refer to `form.py` |\n| `c.SbatchForm.partition` | `Dict({'def', 'choices', 'lock'})` | Slurm partition parameters | refer to `form.py` |\n| `c.SbatchForm.form_template_path` | `Unicode` | Path to the Jinja2 template of the form | `os.path.join(sys.prefix, 'share', 'slurmformspawner', 'templates', 'form.html')` |\n\n### SlurmAPI\n\n| Variable | Type | Description | Default |\n| --------------------------------- | :-------- | :---------------------------------------------------------------- | ------- |\n| `c.SlurmAPI.info_cache_ttl` | `Integer`\u00a0| Slurm sinfo output cache time-to-live (seconds) | 300 |\n| `c.SlurmAPI.acct_cache_ttl` | `Integer`\u00a0| Slurm sacct output cache time-to-live (seconds) | 300 |\n| `c.SlurmAPI.acct_cache_size` | `Integer`\u00a0| Slurm sacct output cache size (number of users) | 100 |\n| `c.SlurmAPI.res_cache_ttl` | `Integer`\u00a0| Slurm scontrol (reservations) output cache time-to-live (seconds) | 300 |\n\n## screenshot\n\n![form_screenshot](screenshot.png \"Form screenshot\")\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "slurmformspawner: JupyterHub SlurmSpawner with a dynamic spawn form",
"version": "2.6.0",
"project_urls": {
"Homepage": "https://github.com/cmd-ntrf/slurmformspawner"
},
"split_keywords": [
"interactive",
" web",
" jupyterhub"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "2f521eb11165d1322f9e0bd628fca7ea63aa30c4654dd07d4c4f722e5e3275f0",
"md5": "0c54a25a5d5d4c84890606dd7643e41a",
"sha256": "60a2c7a67cc83ec4fd52a2256e4a4ea89f1e690b3ad90efe6b6cbbefb408d43e"
},
"downloads": -1,
"filename": "slurmformspawner-2.6.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "0c54a25a5d5d4c84890606dd7643e41a",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 19930,
"upload_time": "2024-04-04T20:19:43",
"upload_time_iso_8601": "2024-04-04T20:19:43.311461Z",
"url": "https://files.pythonhosted.org/packages/2f/52/1eb11165d1322f9e0bd628fca7ea63aa30c4654dd07d4c4f722e5e3275f0/slurmformspawner-2.6.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c954851efc7dd4e5b63f5e3393d1daad98dcab84a49f21a2e4dd0301ce39d2df",
"md5": "ffed0cf8a4aa842b0a32af35ea1dae64",
"sha256": "8cef6cda6c3cb7ba571d09e0c5f0d11537a5c33b2d377d18fe2e3a0382f6f573"
},
"downloads": -1,
"filename": "slurmformspawner-2.6.0.tar.gz",
"has_sig": false,
"md5_digest": "ffed0cf8a4aa842b0a32af35ea1dae64",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 20174,
"upload_time": "2024-04-04T20:19:49",
"upload_time_iso_8601": "2024-04-04T20:19:49.574174Z",
"url": "https://files.pythonhosted.org/packages/c9/54/851efc7dd4e5b63f5e3393d1daad98dcab84a49f21a2e4dd0301ce39d2df/slurmformspawner-2.6.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-04-04 20:19:49",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "cmd-ntrf",
"github_project": "slurmformspawner",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "slurmformspawner"
}