# aind-codeocean-utils
[](LICENSE)

[](https://github.com/semantic-release/semantic-release)



Library to contain useful utility methods to interface with Code Ocean.
## Installation
To use the package, you can install it from `pypi`:
```bash
pip install aind-codeocean-utils
```
To install the package from source, in the root directory, run
```bash
pip install -e .
```
To develop the code, run
```bash
pip install -e .[dev]
```
## Usage
The package includes helper functions to interact with Code Ocean:
### `APIHandler`
This class enables one to:
1. Update asset tags in Code Ocean
2. Find external data assets that do not exist in S3
3. Find external data assets
```python
import os
from codeocean.client import CodeOcean
from aind_codeocean_utils.api_handler import APIHandler
# Get token and domain parameters for CodeOcean client
CO_TOKEN = os.environ["CO_TOKEN"]
CO_DOMAIN = os.environ["CO_DOMAIN"]
co_client = CodeOcean(domain=CO_DOMAIN, token=CO_TOKEN)
api_handler = APIHandler(co_client)
data_assets = [
co_client.data_assets.get_data_asset(data_asset_id="abc"),
co_client.data_assets.get_data_asset(data_asset_id="def")
]
api_handler.update_tags(
tags_to_remove=["test"],
tags_to_add=["new_tag"],
data_assets=data_assets,
)
```
## Contributing
### Linters and testing
There are several libraries used to run linters, check documentation, and run tests.
- Please test your changes using the **coverage** library, which will run the tests and log a coverage report:
```bash
coverage run -m unittest discover && coverage report
```
- Use **interrogate** to check that modules, methods, etc. have been documented thoroughly:
```bash
interrogate .
```
- Use **flake8** to check that code is up to standards (no unused imports, etc.):
```bash
flake8 .
```
- Use **black** to automatically format the code into PEP standards:
```bash
black .
```
- Use **isort** to automatically sort import statements:
```bash
isort .
```
### Pull requests
For internal members, please create a branch. For external members, please fork the repository and open a pull request from the fork. We'll primarily use [Angular](https://github.com/angular/angular/blob/main/CONTRIBUTING.md#commit) style for commit messages. Roughly, they should follow the pattern:
```text
<type>(<scope>): <short summary>
```
where scope (optional) describes the packages affected by the code changes and type (mandatory) is one of:
- **build**: Changes that affect build tools or external dependencies (example scopes: pyproject.toml, setup.py)
- **ci**: Changes to our CI configuration files and scripts (examples: .github/workflows/ci.yml)
- **docs**: Documentation only changes
- **feat**: A new feature
- **fix**: A bugfix
- **perf**: A code change that improves performance
- **refactor**: A code change that neither fixes a bug nor adds a feature
- **test**: Adding missing tests or correcting existing tests
### Semantic Release
The table below, from [semantic release](https://github.com/semantic-release/semantic-release), shows which commit message gets you which release type when `semantic-release` runs (using the default configuration):
| Commit message | Release type |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- |
| `fix(pencil): stop graphite breaking when too much pressure applied` | ~~Patch~~ Fix Release, Default release |
| `feat(pencil): add 'graphiteWidth' option` | ~~Minor~~ Feature Release |
| `perf(pencil): remove graphiteWidth option`<br><br>`BREAKING CHANGE: The graphiteWidth option has been removed.`<br>`The default graphite width of 10mm is always used for performance reasons.` | ~~Major~~ Breaking Release <br /> (Note that the `BREAKING CHANGE: ` token must be in the footer of the commit) |
### Documentation
To generate the rst files source files for documentation, run
```bash
sphinx-apidoc -o doc_template/source/ src
```
Then to create the documentation HTML files, run
```bash
sphinx-build -b html doc_template/source/ doc_template/build/html
```
More info on sphinx installation can be found [here](https://www.sphinx-doc.org/en/master/usage/installation.html).
Raw data
{
"_id": null,
"home_page": null,
"name": "aind-codeocean-utils",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": null,
"author": "Allen Institute for Neural Dynamics",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/af/6c/04dbc4131c1587ac868cb205dfab5e2487dc0fe7143eb8a733b842192a10/aind_codeocean_utils-0.2.3.tar.gz",
"platform": null,
"description": "# aind-codeocean-utils\n\n[](LICENSE)\n\n[](https://github.com/semantic-release/semantic-release)\n\n\n\n\nLibrary to contain useful utility methods to interface with Code Ocean.\n\n## Installation\n\nTo use the package, you can install it from `pypi`:\n```bash\npip install aind-codeocean-utils\n```\n\n\nTo install the package from source, in the root directory, run\n```bash\npip install -e .\n```\n\nTo develop the code, run\n```bash\npip install -e .[dev]\n```\n\n## Usage\n\nThe package includes helper functions to interact with Code Ocean:\n\n### `APIHandler`\n\nThis class enables one to:\n\n1. Update asset tags in Code Ocean\n2. Find external data assets that do not exist in S3\n3. Find external data assets\n\n\n```python\nimport os\n\nfrom codeocean.client import CodeOcean\nfrom aind_codeocean_utils.api_handler import APIHandler\n\n# Get token and domain parameters for CodeOcean client\nCO_TOKEN = os.environ[\"CO_TOKEN\"]\nCO_DOMAIN = os.environ[\"CO_DOMAIN\"]\n\nco_client = CodeOcean(domain=CO_DOMAIN, token=CO_TOKEN)\n\napi_handler = APIHandler(co_client)\n\ndata_assets = [\n co_client.data_assets.get_data_asset(data_asset_id=\"abc\"),\n co_client.data_assets.get_data_asset(data_asset_id=\"def\")\n]\n\napi_handler.update_tags(\n tags_to_remove=[\"test\"],\n tags_to_add=[\"new_tag\"],\n data_assets=data_assets,\n)\n```\n\n## Contributing\n\n### Linters and testing\n\nThere are several libraries used to run linters, check documentation, and run tests.\n\n- Please test your changes using the **coverage** library, which will run the tests and log a coverage report:\n\n```bash\ncoverage run -m unittest discover && coverage report\n```\n\n- Use **interrogate** to check that modules, methods, etc. have been documented thoroughly:\n\n```bash\ninterrogate .\n```\n\n- Use **flake8** to check that code is up to standards (no unused imports, etc.):\n```bash\nflake8 .\n```\n\n- Use **black** to automatically format the code into PEP standards:\n```bash\nblack .\n```\n\n- Use **isort** to automatically sort import statements:\n```bash\nisort .\n```\n\n### Pull requests\n\nFor internal members, please create a branch. For external members, please fork the repository and open a pull request from the fork. We'll primarily use [Angular](https://github.com/angular/angular/blob/main/CONTRIBUTING.md#commit) style for commit messages. Roughly, they should follow the pattern:\n```text\n<type>(<scope>): <short summary>\n```\n\nwhere scope (optional) describes the packages affected by the code changes and type (mandatory) is one of:\n\n- **build**: Changes that affect build tools or external dependencies (example scopes: pyproject.toml, setup.py)\n- **ci**: Changes to our CI configuration files and scripts (examples: .github/workflows/ci.yml)\n- **docs**: Documentation only changes\n- **feat**: A new feature\n- **fix**: A bugfix\n- **perf**: A code change that improves performance\n- **refactor**: A code change that neither fixes a bug nor adds a feature\n- **test**: Adding missing tests or correcting existing tests\n\n### Semantic Release\n\nThe table below, from [semantic release](https://github.com/semantic-release/semantic-release), shows which commit message gets you which release type when `semantic-release` runs (using the default configuration):\n\n| Commit message | Release type |\n| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- |\n| `fix(pencil): stop graphite breaking when too much pressure applied` | ~~Patch~~ Fix Release, Default release |\n| `feat(pencil): add 'graphiteWidth' option` | ~~Minor~~ Feature Release |\n| `perf(pencil): remove graphiteWidth option`<br><br>`BREAKING CHANGE: The graphiteWidth option has been removed.`<br>`The default graphite width of 10mm is always used for performance reasons.` | ~~Major~~ Breaking Release <br /> (Note that the `BREAKING CHANGE: ` token must be in the footer of the commit) |\n\n### Documentation\nTo generate the rst files source files for documentation, run\n```bash\nsphinx-apidoc -o doc_template/source/ src \n```\nThen to create the documentation HTML files, run\n```bash\nsphinx-build -b html doc_template/source/ doc_template/build/html\n```\nMore info on sphinx installation can be found [here](https://www.sphinx-doc.org/en/master/usage/installation.html).\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Generated from aind-library-template",
"version": "0.2.3",
"project_urls": null,
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "808c867d524af2360da6cb1b6dabf7cfa5a1d0a3bc6eca36916b35b71561ab16",
"md5": "b59e3c7d758b7678bc11d4f43e717d2f",
"sha256": "5aa9be00d468dc8c3e329cf8e6feb011b8eddbb23c29824952855efa3448a233"
},
"downloads": -1,
"filename": "aind_codeocean_utils-0.2.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b59e3c7d758b7678bc11d4f43e717d2f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 7545,
"upload_time": "2025-01-23T00:26:58",
"upload_time_iso_8601": "2025-01-23T00:26:58.403804Z",
"url": "https://files.pythonhosted.org/packages/80/8c/867d524af2360da6cb1b6dabf7cfa5a1d0a3bc6eca36916b35b71561ab16/aind_codeocean_utils-0.2.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "af6c04dbc4131c1587ac868cb205dfab5e2487dc0fe7143eb8a733b842192a10",
"md5": "325c7f86d57279d6efcf837ac067a97d",
"sha256": "f33a8a4c92a5f5acbd3f68180e4723abadf0725eac595dd6ba7480890b006276"
},
"downloads": -1,
"filename": "aind_codeocean_utils-0.2.3.tar.gz",
"has_sig": false,
"md5_digest": "325c7f86d57279d6efcf837ac067a97d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 39408,
"upload_time": "2025-01-23T00:27:00",
"upload_time_iso_8601": "2025-01-23T00:27:00.106560Z",
"url": "https://files.pythonhosted.org/packages/af/6c/04dbc4131c1587ac868cb205dfab5e2487dc0fe7143eb8a733b842192a10/aind_codeocean_utils-0.2.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-23 00:27:00",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "aind-codeocean-utils"
}