{"id":20074643,"url":"https://github.com/greenelab/tribe-client","last_synced_at":"2026-06-24T21:31:11.614Z","repository":{"id":62585247,"uuid":"99031348","full_name":"greenelab/tribe-client","owner":"greenelab","description":"A client for an open-source web app that allows creating, sharing, and analyzing gene sets","archived":false,"fork":false,"pushed_at":"2017-11-02T20:54:05.000Z","size":137,"stargazers_count":0,"open_issues_count":3,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-10-29T20:59:41.178Z","etag":null,"topics":["gene-sets","tool"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/greenelab.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-08-01T18:28:16.000Z","updated_at":"2020-09-29T19:54:46.000Z","dependencies_parsed_at":"2022-11-03T22:06:03.413Z","dependency_job_id":null,"html_url":"https://github.com/greenelab/tribe-client","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/greenelab/tribe-client","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greenelab%2Ftribe-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greenelab%2Ftribe-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greenelab%2Ftribe-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greenelab%2Ftribe-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/greenelab","download_url":"https://codeload.github.com/greenelab/tribe-client/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greenelab%2Ftribe-client/sbom","scorecard":{"id":444536,"data":{"date":"2025-08-11","repo":{"name":"github.com/greenelab/tribe-client","commit":"cfda532cff34331141bc8c73137bbb405e3c3682"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.2,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":1,"reason":"Found 3/18 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 15 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-19T06:21:55.319Z","repository_id":62585247,"created_at":"2025-08-19T06:21:55.319Z","updated_at":"2025-08-19T06:21:55.319Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34750952,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-24T02:00:07.484Z","response_time":106,"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":["gene-sets","tool"],"created_at":"2024-11-13T14:53:12.957Z","updated_at":"2026-06-24T21:31:11.595Z","avatar_url":"https://github.com/greenelab.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"====================\nTribe-Client\n====================\n\nTribe-client is a portable Python app to connect your bioinformatics server\nor tool to the 'Tribe' web service (located at https://tribe.greenelab.com).\n\nThis package allows web servers created using\n`Django \u003chttps://docs.djangoprojects.com/en/dev/\u003e`_ to connect directly\nto Tribe and make use of its resources. Users of the client web server or tool\ncan access their Tribe resources via Tribe `OAuth2 \u003chttp://oauth.net/2/\u003e`_\nauthentication.\n\n\nRequirements\n------------\nIf you are using tribe-client in a web server that uses Django, we recommend\nyou use Django version 1.8 or newer.\n\n\nDownload and Install\n---------------------\nTribe-client is registered as \"tribe-client\" in PyPI and is pip\ninstallable:\n\n.. code-block:: shell\n\n\tpip install tribe-client\n\n\n\nQuick Start with Django\n------------------------\n\n\n1. Add ``tribe_client`` to your ``INSTALLED_APPS`` setting:\n\n.. code-block:: python\n\n    INSTALLED_APPS = (\n        ...\n        'tribe_client',\n    )\n\n\n2. Include the tribe-client URLconf in your project's URLconf (usually\n``urls.py``):\n\n.. code-block:: python\n\n    from django.conf.urls import url, patterns, include\n\n    urlpatterns = patterns('',\n      ...\n      (r'^tribe_client/', include('tribe_client.urls')),\n    )\n\n\n3. Register your client server at\nhttps://tribe.greenelab.com/oauth2/applications/. Make sure to:\n\n  a. Be logged-in using your Tribe account\n  b. Select \"Confidential\" under ``Client type`` and\n  c. Select \"Authorization Code\" under ``Authorization grant type``\n  d. Enter your client server's address plus \"/tribe_client/get_token\" in the ``Redirect uris`` box. If your client server's current address is http://example.com, enter **http://example.com/tribe_client/get_token**\n\n  .. note:: Currently, Tribe supports the following ``Authorization grant types``:\n\n      * Authorization code\n      * Resource owner password-based\n\n    and does not support the following:\n\n      * Implicit\n      * Client credentials\n\n\n4. Write down the Client ID in the ``TRIBE_ID`` setting and the Client secret\nin the ``TRIBE_SECRET`` setting in your ``settings.py`` file like so:\n\n.. code-block:: python\n\n    TRIBE_ID = '*****Tribe Client ID*****'\n    TRIBE_SECRET = '*****Tribe Client Secret*****'\n\n\n5. The ``TRIBE_REDIRECT_URI`` setting should be the address of the client\nserver plus \"/tribe_client/get_token\".\n\n.. code-block:: python\n\n    TRIBE_REDIRECT_URI = 'http://example.com/tribe_client/get_token'\n\n\n6. Define in your settings the scope that your client server should have\nfor Tribe resources. The two options are: 'read' and 'write'.The default\nis 'read'. **Note:** The 'write' scope includes the 'read' scope access. \n\n.. code-block:: python\n\n    TRIBE_SCOPE = 'write'  # Or 'read'\n\n\n7. (Optional) If you want to use tribe_client's templates, make sure you have\na base template (which gets extended by your other templates and contains\nthe ``{% block content %}   {% endblock %}`` statements) that the tribe_client\ntemplates can extend, and specify its name in your settings. The name of this\nsetting is ``TRIBE_CLIENT_BASE_TEMPLATE``. By default, tribe_client will\nlook for a template called ``base.html``.\n\n.. code-block:: python\n\n    TRIBE_CLIENT_BASE_TEMPLATE = 'name_of_your_main_template.html'\n\n\n8. (Optional) If you want to use tribe_client's built-in login templates and\nurls, make a link that takes the user to the ``connect_to_tribe`` url in your\nwebsite. This url will show users the built-in Tribe login page.\nBelow is an example of this type of link in the webpage's navbar:\n\n.. code-block:: html\n\n    \u003cdiv class=\"collapse navbar-collapse\"\u003e\n      \u003cul class=\"nav navbar-nav navbar-right\"\u003e\n        \u003cli\u003e\u003ca href=\"{% url \"connect_to_tribe\" %}\"\u003eLogin with Tribe\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/div\u003e\n\n\n9. (Optional) If you want to redirect your users to somewhere other than\nthe ``/tribe_client/display_genesets`` url after they have logged in,\nyou can define this in the ``TRIBE_LOGIN_REDIRECT`` setting in your\n``settings.py`` file. **Note:** If you are not using the tribe-client\nbuilt-in templates (see above), you will need to define this setting so\nyour users have somewhere to go after they log in.\n\n.. code-block:: python\n\n    TRIBE_LOGIN_REDIRECT = '/place-to-go-after-login'\n\n\n10. (Optional) If you want to redirect your users to somewhere other than\nthe ``/tribe_client`` url after they log out, you can define this in the\n``TRIBE_LOGOUT_REDIRECT`` setting in your ``settings.py`` file.\n**Note:** If you are not using the tribe-client built-in templates (see above),\nyou will need to define this setting so your users have somewhere to go after\nthey log out.\n\n.. code-block:: python\n\n    TRIBE_LOGOUT_REDIRECT = '/place-to-go-after-logout'\n\n\n11. (Optional) If you want to download and pickle gene sets/collections from\nTribe by using the ``tribe_client_pickle_public_genesets`` management command,\nyou must customize the following setting in ``settings.py``:\n\n.. code-block:: python\n    \n    # Location of folder where pickled gene set files will be saved to.\n    # This can be a subdirectory in your server's path (as shown here),\n    # or not.\n    PUBLIC_GENESET_FOLDER = os.path.join(\n        \u003cserver directory\u003e, \u003cfolder for pickled gene sets files\u003e)\n\n\nand run the following management command: \n\n.. code-block:: shell\n\n    python manage.py tribe_client_pickle_public_genesets\n\n\nThis will download and pickle all the public Tribe collections for every\norganism in your database. This is handy in case you want to do many gene\nset enrichment analyses across thousands of gene sets saved in Tribe, or any\nother task that would require making frequent, large, time-consuming requests\nfor gene sets.\n\n\nA Closer Look\n-----------------------------\n\nUnder the hood, tribe-client has functions that:\n\n1) Get an access token (via the `OAuth2 \u003chttp://oauth.net/2/\u003e`_ protocol) that\nallows users to access and create resources in Tribe.\n\n2) Retrieves public and private collections (and their versions) and displays\nthem on the client server using views and templates included in the package.\n\n3) Allows users to create new collections and versions remotely, from the\nclient server.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgreenelab%2Ftribe-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgreenelab%2Ftribe-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgreenelab%2Ftribe-client/lists"}