{"id":24641188,"url":"https://github.com/elixir-cloud-aai/trs-filer","last_synced_at":"2025-05-12T15:00:21.972Z","repository":{"id":43059447,"uuid":"276441606","full_name":"elixir-cloud-aai/trs-filer","owner":"elixir-cloud-aai","description":"Lightweight, flexible Flask/Gunicorn-based GA4GH TRS implementation","archived":false,"fork":false,"pushed_at":"2025-04-27T04:59:21.000Z","size":185,"stargazers_count":8,"open_issues_count":11,"forks_count":6,"subscribers_count":27,"default_branch":"dev","last_synced_at":"2025-04-27T05:30:09.953Z","etag":null,"topics":["hacktoberfest"],"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":"2020-07-01T17:26:46.000Z","updated_at":"2024-07-16T13:59:14.000Z","dependencies_parsed_at":"2024-07-15T07:45:21.437Z","dependency_job_id":"677982ce-8cf7-476b-a131-54e35df47b14","html_url":"https://github.com/elixir-cloud-aai/trs-filer","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elixir-cloud-aai%2Ftrs-filer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elixir-cloud-aai%2Ftrs-filer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elixir-cloud-aai%2Ftrs-filer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elixir-cloud-aai%2Ftrs-filer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/elixir-cloud-aai","download_url":"https://codeload.github.com/elixir-cloud-aai/trs-filer/tar.gz/refs/heads/dev","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253761639,"owners_count":21960189,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["hacktoberfest"],"created_at":"2025-01-25T12:12:34.878Z","updated_at":"2025-05-12T15:00:21.850Z","avatar_url":"https://github.com/elixir-cloud-aai.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TRS-Filer\n\n[![License][badge-license]][badge-url-license]\n[![Build_status][badge-build-status]][badge-url-build-status]\n[![Coverage][badge-coverage]][badge-url-coverage]\n\nLightweight, flexible implementation of the [Global Alliance for Genomics \u0026\nHealth's (GA4GH)][ga4gh] [Tool Registry Service (TRS) API][ga4gh-trs] for\nlisting and describing tools and workflows.\n\n## Description\n\n_**TRS-Filer is complete**_\n\nNext to the endpoints defined by the GA4GH TRS API (see\n[specification][ga4gh-trs] and additional\n[documentation][ga4gh-trs-docs]), TRS-Filer provides endpoints to register\ntools, tool versions, tool classes and update the service info.\n\n\u003e Note that TRS-Filer is currently not yet 100% compliant with the TRS\n\u003e specification. See the [issue tracker][trs-filer-issues] to find out which\n\u003e features are still missing!\n\n_**TRS-Filer is extensible**_\n\nTRS-Filer makes use of the [FOCA][res-foca] microservice archetype, which is\nbased on the [Flask][res-flask] / [OpenAPI][res-openapi] /\n[Connexion][res-connexion] tool stack. As FOCA abstracts a lot of boilerplate\ncode away, the TRS-Filer codebase is very small and consists almost exlusively\nof business logic, making it easy to [adapt, extend and maintain](#extension).\n\n_**TRS-Filer is versatile**_\n\nTRS-Filer was not built on top of a specific tool registry. In cases where the\n[TRS specification][ga4gh-trs] leaves things up for implementers, we tried\nour best to support multiple [configurable options](#configuration).\n\nYou can use TRS-Filer as a ready-made, low maintenance shim around your own\ntool registry and thus make it available to the [GA4GH Cloud][ga4gh-cloud]\ncommunity. But you can just as well use it to index an available third-party\ntool registry to have it integrate seamlessly with your [GA4GH\nCloud][ga4gh-cloud] ecosystem, or use it to internally represent tools and\nworkflows in your microservice-based web application!\n\n_**TRS-Filer is free**_\n\nTRS-Filer is released under a [permissive license][license] that lets everyone\nuse it, in every way, for whatever purpose, including commercial.\n\n## Usage\n\nOnce [deployed](#installation), the API is served here:\n\n```console\nhttp://localhost:8080/ga4gh/trs/v2/\n```\n\n\u003e Note that host (`localhost`) and port (`8080`) in the URL above may differ,\n\u003e depending on how the service was deployed. Indicated values are for\n\u003e `docker-compose`-based installations using the default\n\u003e [configuration][trs-filer-compose-config].\n\nThe easiest way to explore available endpoints is via the\n[Swagger UI][res-swagger-ui]:\n\n```console\nhttp://localhost:8080/ga4gh/trs/v2/ui\n```\n\nYou can also access TRS-Filer's [OpenAPI][res-openapi] specification:\n\n```console\nhttp://localhost:8080/ga4gh/trs/v2/openapi.json\n``` \n\nTRS-Filer endpoints can be queried by sending appropriate HTTP requests to URLs\ncomposed of the root API path and an endpoint-specific suffix. For instance,\nyou can list available tools in a TRS-Filer deployment by sending a `GET` HTTP\nrequest to the `/tools` route, e.g., via `curl`:\n\n```bash\ncurl -X GET \"http://localhost:8080/ga4gh/trs/v2/tools\" -H \"accept: application/json\"\n```\n\n\u003e Convenient clients that help with sending HTTP requests and processing\n\u003e responses are available for any major programming language. If you are new\n\u003e to web programming, we recommend you to read up on\n\u003e [HTTP methods][res-http-methods] and [web APIs][res-web-apis].\n\n## Installation\n\nTo quickly install the service for development/testing purposes, we recommend\ndeployment via [`docker-compose`][res-docker-compose], as described below. For\nmore durable deployments on cloud native infrastructure, we also provide a\n[Helm][res-helm] chart and [basic deployment instructions][trs-filer-deployment] (details may need to be adapted for your specific infrastructure).\n\n### Requirements\n\nThe following software needs to be available on your system:\n\n- [`git`][res-git] `v2.17.1`\n- [`docker`][res-docker] `v18.09.6`\n- [`docker-compose`][res-docker-compose] `v1.23.1`\n\n\u003e Indicated versions were used during development. Other versions may work as\n\u003e well, especially newer ones.\n\n### Deployment\n\nFirst, clone the repository and traverse into the service's root directory\nwith:\n\n```bash\ngit clone git@github.com:elixir-cloud-aai/trs-filer.git\ncd trs-filer\n```\n\nThen simply start up the service with:\n\n```bash\ndocker-compose up --build -d\n```\n\n_**That's it!**_\n\nYou should now be able to use/explore the API as described in the [usage\nsection](#usage).\n\n### Other useful commands\n\nTo shut down the service, run:\n\n```bash\ndocker-compose down\n```\n\nIf you need to inspect the logs, call:\n\n```bash\ndocker-compose logs\n```\n\n## Configuration\n\nThe app's configuration is centralized in the file\n[`trs_filer/config.yaml`][trs-filer-config]. As the format follows the one\nexpected by [FOCA][res-foca], refer to the FOCA documentation for a description\nof the various configuration options.\n\nThe only exception to this is the custom section `endpoints`, which lists all\nthe configuration options that are specific to TRS-Filer. These are:\n\n* `service`: The parameters in this section are used to construct self\n  references/anchors as required by the [TRS specification][ga4gh-trs] and need\n  to be replaced with the corresponding values of each individual TRS-Filer\n  deployment.\n* `service-info`: The parameters in this section are used to populate the\n  service info database collection if such a collection does not yet exist,\n  usually when a new app instance is deployed. The default values should be\n  replaced for each individual deployment, in accordance with the schemas and\n  documentation provided in the [GA4GH Service Info\n  specification][ga4gh-service-info].\n* `tool`, `version` \u0026 `toolclass`: The parameters in these sections define the\n  behavior for generating the `id` and `meta_version` identifiers for tools,\n  tool versions and tool classes, respectively, as required by the [TRS\n  specification][ga4gh-trs].\n  * For `id`-type identifiers, random strings of a specified `length` are\n    generated from a set of allowed characters (`charset`). The latter option\n    accepts either a string, indicating the allowed characters, or a Python\n    expression that evaluates to such a string.\n  * For `meta_version`-type identifiers, increasing natural numbers are\n    generated that start with the value of `init` and are increased by\n    `increment` for each new resource.\n\n## Extension\n\nIt is easy to add additional endpoints or modify the behavior of existing ones.\n\nAll OpenAPI specifications are available in [`trs_filer.api`][trs-filer-api].\nCustom endpoints, i.e., those that are not specified in either the [GA4GH\nTRS][ga4gh-trs] or the [GA4GH Service Info][ga4gh-service-info] specifications,\nare included in file [`additions.openapi.yaml`][trs-filer-api-custom].\n\nWhen specifying new endpoints, the `operationId` directive indicates the name\nof the corresponding controller. By default, all controllers need to be\nimplemented in the [`ga4gh.trs.server`][trs-filer-controllers] module. For\nexample, when specifying an `operationId` of `myController` for a new endpoint\nin [`additions.openapi.yaml`][trs-filer-api-custom], the application would\nexpect the corresponding controller to be implemented in function/class\n`ga4gh.trs.server.myController()`.\n\n\u003e If necessary, the default location of the module containing the controllers\n\u003e can be customized following instructions provided by [FOCA][res-foca],\n\u003e [Connexion][res-connexion] and [OpenAPI][res-openapi].\n\nCustom errors can be specified in module\n[`errors.exceptions`][trs-filer-exceptions]. Just follow the existing structure\nand refer the [FOCA][res-foca] documentation on exception handling in case of\ndoubt.\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, or fixes and other code\nchanges. Please refer to our organization's [contribution\nguidelines][elixir-cloud-contributing] if you are interested in contributing.\nPlease mind the [code of conduct][elixir-cloud-coc] for all interactions with\nthe community.\n\n## Versioning\n\nThe project adopts the [semantic versioning][res-semver] scheme for versioning.\nCurrently the service is in beta stage, so the API may change without further\nnotice.\n\n## License\n\nThis project is covered by the [Apache License 2.0][license-apache] also\n[shipped with this repository][license].\n\n## Contact\n\nThe project is a collaborative effort under the umbrella of [ELIXIR Cloud \u0026\nAAI][elixir-cloud]. Follow the link to get in touch with us via chat or email.\nPlease mention the name of this service for any inquiry, proposal, question\netc. Alternatively, you can also make use of the [issue\ntracker][trs-filer-issues] to request features or report bugs.\n\n![Logo_banner][img-logo-banner]\n\n[badge-build-status]:\u003chttps://travis-ci.com/elixir-cloud-aai/trs-filer.svg?branch=dev\u003e\n[badge-coverage]:\u003chttps://img.shields.io/coveralls/github/elixir-cloud-aai/trs-filer\u003e\n[badge-license]:\u003chttps://img.shields.io/badge/license-Apache%202.0-blue.svg\u003e\n[badge-url-build-status]:\u003chttps://travis-ci.com/elixir-cloud-aai/trs-filer\u003e\n[badge-url-coverage]:\u003chttps://coveralls.io/github/elixir-cloud-aai/trs-filer\u003e\n[badge-url-license]:\u003chttp://www.apache.org/licenses/LICENSE-2.0\u003e\n[elixir-cloud]: \u003chttps://github.com/elixir-cloud-aai/elixir-cloud-aai\u003e\n[elixir-cloud-coc]: \u003chttps://github.com/elixir-cloud-aai/elixir-cloud-aai/blob/dev/CODE_OF_CONDUCT.md\u003e\n[elixir-cloud-contributing]: \u003chttps://github.com/elixir-cloud-aai/elixir-cloud-aai/blob/dev/CONTRIBUTING.md\u003e\n[ga4gh]: \u003chttps://ga4gh.org\u003e\n[ga4gh-cloud]: \u003chttps://www.ga4gh.org/work_stream/cloud/\u003e\n[ga4gh-service-info]: \u003chttps://github.com/ga4gh-discovery/ga4gh-service-info\u003e\n[ga4gh-trs]: \u003chttps://github.com/ga4gh/tool-registry-service-schemas\u003e\n[ga4gh-trs-docs]: \u003chttps://ga4gh.github.io/tool-registry-service-schemas/\u003e\n[img-logo-banner]: images/logo-banner.svg\n[license]: LICENSE\n[license-apache]: \u003chttps://www.apache.org/licenses/LICENSE-2.0\u003e\n[res-connexion]: \u003chttps://github.com/zalando/connexion\u003e\n[res-docker]: \u003chttps://docs.docker.com/get-docker/\u003e\n[res-docker-compose]: \u003chttps://docs.docker.com/compose/install/\u003e\n[res-flask]: \u003chttps://flask.palletsprojects.com/\u003e\n[res-foca]: \u003chttps://github.com/elixir-cloud-aai/foca\u003e\n[res-git]: \u003chttps://git-scm.com/book/en/v2/Getting-Started-Installing-Git\u003e\n[res-helm]: \u003chttps://helm.sh/\u003e\n[res-http-methods]: \u003chttps://developer.mozilla.org/en-US/docs/Web/HTTP/Methods\u003e\n[res-openapi]: \u003chttps://www.openapis.org/\u003e\n[res-semver]: \u003chttps://semver.org/\u003e\n[res-swagger-ui]: \u003chttps://swagger.io/tools/swagger-ui/\u003e\n[res-web-apis]: \u003chttps://developer.mozilla.org/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Introduction\u003e\n[trs-filer-api]: trs_filer/api\n[trs-filer-api-custom]: trs_filer/api/additions.openapi.yaml\n[trs-filer-compose-config]: docker-compose.yaml\n[trs-filer-config]: trs_filer/config.yaml\n[trs-filer-controllers]: trs_filer/ga4gh/trs/server.py\n[trs-filer-controllers-subpackage]: trs_filer/ga4gh/trs/endpoints\n[trs-filer-deployment]: deployment/README.md\n[trs-filer-exceptions]: trs_filer/errors/exceptions.py\n[trs-filer-issues]: \u003chttps://github.com/elixir-cloud-aai/trs-filer/issues\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felixir-cloud-aai%2Ftrs-filer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felixir-cloud-aai%2Ftrs-filer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felixir-cloud-aai%2Ftrs-filer/lists"}