{"id":24641160,"url":"https://github.com/elixir-cloud-aai/cloud-storage-handler","last_synced_at":"2026-01-22T06:38:00.876Z","repository":{"id":246630742,"uuid":"821689498","full_name":"elixir-cloud-aai/cloud-storage-handler","owner":"elixir-cloud-aai","description":"File handler utilizing TUS and MinIO with DRS-Filer integration.","archived":false,"fork":false,"pushed_at":"2024-10-31T05:54:56.000Z","size":210,"stargazers_count":0,"open_issues_count":8,"forks_count":2,"subscribers_count":24,"default_branch":"main","last_synced_at":"2025-05-12T15:16:51.146Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/elixir-cloud-aai.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-06-29T06:48:52.000Z","updated_at":"2024-10-14T04:06:33.000Z","dependencies_parsed_at":"2024-06-29T08:37:25.271Z","dependency_job_id":"39358328-345e-4e3e-87ab-5c20b3d32c73","html_url":"https://github.com/elixir-cloud-aai/cloud-storage-handler","commit_stats":null,"previous_names":["elixir-cloud-aai/tus-storagehandler","elixir-cloud-aai/cloud-storage-handler","elixir-cloud-aai/tus_storagehandler"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/elixir-cloud-aai/cloud-storage-handler","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elixir-cloud-aai%2Fcloud-storage-handler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elixir-cloud-aai%2Fcloud-storage-handler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elixir-cloud-aai%2Fcloud-storage-handler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elixir-cloud-aai%2Fcloud-storage-handler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/elixir-cloud-aai","download_url":"https://codeload.github.com/elixir-cloud-aai/cloud-storage-handler/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elixir-cloud-aai%2Fcloud-storage-handler/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28657042,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T01:17:37.254Z","status":"online","status_checked_at":"2026-01-22T02:00:07.137Z","response_time":144,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-25T12:12:30.655Z","updated_at":"2026-01-22T06:38:00.863Z","avatar_url":"https://github.com/elixir-cloud-aai.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Bandit](https://img.shields.io/badge/security-bandit-yellow.svg)](https://bandit.readthedocs.io/en/latest/)\n[![codecov](https://codecov.io/gh/elixir-cloud-aai/cloud-storage-handler/branch/main/graph/badge.svg)](https://codecov.io/gh/elixir-cloud-aai/cloud-storage-handler)\n[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)][code-of-conduct]\n[![Documentation Status](https://readthedocs.org/projects/cloud-storage-handler/badge/?version=latest)](https://cloud-storage-handler.readthedocs.io/en/latest/?badge=latest)\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](./LICENSE)\n[![Python 3.11](https://img.shields.io/badge/python-3.11-blue.svg)](https://www.python.org/)\n[![GitHub contributors](https://img.shields.io/github/contributors/elixir-cloud-aai/cloud-storage-handler)](https://github.com/elixir-cloud-aai/cloud-storage-handler/graphs/contributors)\n[![Ruff](https://img.shields.io/badge/linter%20\u0026%20formatter-ruff-000000.svg)](https://docs.astral.sh/ruff/)\n[![Safety](https://img.shields.io/badge/security-safety-orange.svg)](https://safetycli.com/product/safety-cli)\n\n# Cloud Storage Handler\n\nFile handler utilizing TUS and MinIO with DRS-Filer integration.\n\n## Table of Contents\n\n- [Synopsis](#synopsis)\n- [Basic Usage](#basic-usage)\n- [Installation](#installation)\n- [Development](#development)\n- [Environment Variables](#environment-variables)\n- [Contributing](#contributing)\n- [Code of Conduct](#code-of-conduct)\n- [Versioning](#versioning)\n- [License](#license)\n- [Contact](#contact)\n\n## Synopsis\n\nThis application provides endpoints for uploading, downloading, and listing\nfiles in a MinIO bucket, with TUS protocol support for uploads, and CORS enabled\nfor cross-origin requests.\n\n## Basic Usage\n\n## Installation\n\n### Prerequisites\n\nThis Flask application requires a running instance of\n[MinIO](https://min.io/download).\n\nRun the MinIO instance by executing the following command in the location where\nMinIO is installed:\n\n```sh\nminio server /data --console-address \":9001\"\n```\n\n### Install Dependencies using Poetry\n\n1. **Clone the Repository**\n\n   To get started, first, clone the repository using the following command:\n\n   ```sh\n   git clone https://github.com/elixir-cloud-aai/cloud-storage-handler.git\n   ```\n\n1. **Navigate to the package folder**\n\n   Navigate to the folder `cloud-storage-handler`:\n\n   ```sh\n   cd cloud-storage-handler\n   ```\n\n1. **Install Poetry**\n\n   If you haven't already, install Poetry by following the instructions on the\n   [Poetry website](https://python-poetry.org/docs/#installation).\n\n1. **Create and Activate a Virtual Environment (optional)**\n\n   Poetry automatically creates and manages a virtual environment for your\n   project. You can activate it using:\n\n   ```sh\n   poetry shell\n   ```\n\n1. **Install Dependencies**\n\n   Run the following command to install the dependencies defined in the\n   `pyproject.toml` file:\n\n   ```sh\n   poetry install\n   ```\n\n## Development\n\nFor ease of use, certain scripts have been abbreviated in `Makefile`, make sure\nthat you have installed the dependencies before running the commands.\n\n\u003e **Note**: `make` commands are only available for Unix-based systems.\n\nTo view the commands available, run:\n\n```sh\nmake\n```\n\nHere are certain commands that you might find useful:\n\n- Make a virtual environment\n\n```sh\nmake v\n```\n\n- Install all dependencies including optional dependencies\n\n```sh\nmake i\n```\n\n\u003e **Note**: This project uses optional dependency groups such as `types`,\n\u003e `code_quality`, `docs`, `vulnerability`, `test`, and `misc`. To install stubs\n\u003e or types for the dependencies, you **must** use the following command:\n\u003e\n\u003e ```sh\n\u003e poetry add types-foo --group types\n\u003e ```\n\u003e\n\u003e Replace `types-foo` with the name of the package for the types. All runtime\n\u003e dependencies should be added to the `default` group. For example, to install\n\u003e `requests` and its type stubs, run:\n\u003e\n\u003e ```sh\n\u003e poetry add requests\n\u003e poetry add types-requests --group types\n\u003e ```\n\u003e\n\u003e This ensures that the type checker functions correctly.\n\u003e\n\u003e **Note**: Since the dependencies are segregated into groups, if you add a new\n\u003e group make sure to add it in `make install` command in [Makefile](Makefile).\n\n- Run tests\n\n```sh\nmake t\n```\n\n- Run linter, formatter and spell checker\n\n```sh\nmake fl\n```\n\n- Build the documentation\n\n```sh\nmake d\n```\n\n\u003e **Note**: If you make changes to the code, make sure to generate and push the\n\u003e documentation using above command, else the documentation check CI will fail.\n\u003e Do NOT edit auto-generated documentation manually.\n\n- Run type checker\n\n```sh\nmake tc\n```\n\n- Run all pre-commit checks\n\n```sh\nmake pc\n```\n\n- Update the cookiecutter template\n\n```sh\nmake u\n```\n\n\u003e **Note**: This is not the complete list of commands, run `make` to find out if\n\u003e more have been added.\n\n## Environment Variables\n\n\u003c!-- markdownlint-disable line-length --\u003e\n\n| **Environment Variable** | **Description** | **Usage** | **Error Handling** |\n|--|--|--|--| | `CSH_FOCA_CONFIG_PATH` | Specifies the path to the configuration\nfile for the FOCA app. | The FOCA app uses this environment variable to locate\nthe configuration file. If not set, it defaults to `dev`. | If the configuration\nfile is not found at the specified or default path, a `FileNotFoundError` will\nbe raised. |\n\n\u003c!-- markdownlint-enable line-length --\u003e\n\n## Contributing\n\nThis project is a community effort and lives off _your_ contributions, be it in\nthe form of bug reports, feature requests, discussions, fixes or any other form\nof contribution!\n\nPlease refer to the guidelines available at [`CONTRIBUTING.md`][contributing] if\nyou are interested in contributing.\n\n## Code of Conduct\n\nWe kindly request all contributors to abide by our\n[organization's Code of Conduct][code-of-conduct]. Please also refer to this\ndocument if you want to report an incident with respect to conduct in our\ncommunity. Thank you for your cooperation.\n\n## Versioning\n\nThe project adopts the [semantic versioning][semver] scheme for versioning.\nCurrently the software is in a pre-release stage, so changes to the API,\nincluding breaking changes, may occur at any time without further notice.\n\n## License\n\nThis project is distributed under the [Apache License 2.0][badge-license-url], a\ncopy of which is also available in [`LICENSE`][license].\n\n## Contact\n\nThe project is maintained by [ELIXIR Cloud \u0026 AAI][elixir-cloud-aai], a Driver\nProject of the [Global Alliance for Genomics and Health (GA4GH)][ga4gh], under\nthe umbrella of the [ELIXIR] [Compute Platform][elixir-compute].\n\nTo get in touch with us, please use one of the following routes:\n\n- For filing bug reports, feature requests or other code-related issues, please\n  make use of the project's [issue tracker][issue-tracker].\n- For private/personal issues, more involved communication, or if you would like\n  to join our team as a regular contributor, you can either join our\n  [chat board][badge-chat-url] or [email] the community leaders.\n\n[![logo-elixir]][elixir] [![logo-elixir-cloud-aai]][elixir-cloud-aai]\n\n[badge-chat-url]: https://join.slack.com/t/elixir-cloud/shared_invite/enQtNzA3NTQ5Mzg2NjQ3LTZjZGI1OGQ5ZTRiOTRkY2ExMGUxNmQyODAxMDdjM2EyZDQ1YWM0ZGFjOTJhNzg5NjE0YmJiZTZhZDVhOWE4MWM\n[badge-license-url]: http://www.apache.org/licenses/LICENSE-2.0\n[code-of-conduct]: https://elixir-cloud-aai.github.io/about/code-of-conduct/\n[contributing]: https://elixir-cloud-aai.github.io/guides/guide-contributor/\n[elixir]: https://elixir-europe.org/\n[elixir-cloud-aai]: https://elixir-cloud.dcc.sib.swiss/\n[elixir-compute]: https://elixir-europe.org/platforms/compute\n[email]: mailto:cloud-service@elixir-europe.org\n[ga4gh]: https://ga4gh.org/\n[issue-tracker]: https://github.com/elixir-cloud-aai/cloud-storage-handler/issues\n[license]: LICENSE\n[logo-elixir]: images/logo-elixir.svg\n[logo-elixir-cloud-aai]: images/logo-elixir-cloud-aai.svg\n[semver]: https://semver.org/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felixir-cloud-aai%2Fcloud-storage-handler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felixir-cloud-aai%2Fcloud-storage-handler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felixir-cloud-aai%2Fcloud-storage-handler/lists"}