{"id":30178135,"url":"https://github.com/cytoscape/py4cytoscape","last_synced_at":"2026-02-01T00:30:19.734Z","repository":{"id":37256008,"uuid":"235479903","full_name":"cytoscape/py4cytoscape","owner":"cytoscape","description":"Python library for calling Cytoscape Automation via CyREST","archived":false,"fork":false,"pushed_at":"2026-01-30T22:06:05.000Z","size":31368,"stargazers_count":85,"open_issues_count":28,"forks_count":16,"subscribers_count":29,"default_branch":"master","last_synced_at":"2026-01-31T09:43:40.023Z","etag":null,"topics":["cytoscape","cytoscape-interfaces","py2cytoscape","python","workflow","workflow-automation"],"latest_commit_sha":null,"homepage":"https://Py4Cytoscape.readthedocs.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cytoscape.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.rst","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-01-22T01:59:28.000Z","updated_at":"2026-01-24T15:43:19.000Z","dependencies_parsed_at":"2023-10-11T06:55:11.984Z","dependency_job_id":"266ef01c-945e-4d6d-9f4d-c0784dccdcb0","html_url":"https://github.com/cytoscape/py4cytoscape","commit_stats":{"total_commits":965,"total_committers":13,"mean_commits":74.23076923076923,"dds":"0.20207253886010368","last_synced_commit":"d6f5225eda93c0863eb48a23e693aaa3ec58025c"},"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/cytoscape/py4cytoscape","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cytoscape%2Fpy4cytoscape","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cytoscape%2Fpy4cytoscape/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cytoscape%2Fpy4cytoscape/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cytoscape%2Fpy4cytoscape/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cytoscape","download_url":"https://codeload.github.com/cytoscape/py4cytoscape/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cytoscape%2Fpy4cytoscape/sbom","scorecard":{"id":314847,"data":{"date":"2025-08-11","repo":{"name":"github.com/cytoscape/py4cytoscape","commit":"33fc3ea975807bcd4bd31a8651511ef76c5cc954"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.6,"checks":[{"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/27 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":"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":"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":"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":"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":"Binary-Artifacts","score":7,"reason":"binaries present in source code","details":["Warn: binary detected: tests/test_utils/__init__.pyc:1","Warn: binary detected: tests/test_utils/__pycache__/__init__.cpython-38.pyc:1","Warn: binary detected: tests/test_utils/__pycache__/helpers.cpython-38.pyc:1"],"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":"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":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE.rst:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"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":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"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":"Vulnerabilities","score":0,"reason":"11 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-cpwx-vrp4-4pq7","Warn: Project is vulnerable to: GHSA-gmj6-6f8f-6699","Warn: Project is vulnerable to: GHSA-h5c8-rqwp-cp95","Warn: Project is vulnerable to: GHSA-h75v-3vvj-5mfj","Warn: Project is vulnerable to: GHSA-q2x7-8rv6-6q7h","Warn: Project is vulnerable to: PYSEC-2020-73","Warn: Project is vulnerable to: PYSEC-2014-14 / GHSA-652x-xj99-gmcc","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-9wx4-h78v-vm56","Warn: Project is vulnerable to: PYSEC-2014-13 / GHSA-cfj3-7x9c-4p3h","Warn: Project is vulnerable to: PYSEC-2018-28 / GHSA-x84v-xcm2-53pg"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 7 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-17T23:58:01.327Z","repository_id":37256008,"created_at":"2025-08-17T23:58:01.327Z","updated_at":"2025-08-17T23:58:01.327Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28961936,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T23:03:11.038Z","status":"ssl_error","status_checked_at":"2026-01-31T22:56:44.691Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["cytoscape","cytoscape-interfaces","py2cytoscape","python","workflow","workflow-automation"],"created_at":"2025-08-12T05:17:38.665Z","updated_at":"2026-02-01T00:30:19.719Z","avatar_url":"https://github.com/cytoscape.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# py4cytoscape\n\nThis project recreates the [R-based ``RCy3`` Cytoscape Automation library](https://github.com/cytoscape/RCy3) as a Python package. The idea is to allow a Cytoscape workflow to be written in one language (R or Python) and translated to another language (Python or R) without having to learn different Cytoscape interfaces. The previous Cytoscape Python interface ([Py2Cytoscape](https://github.com/cytoscape/py2cytoscape)) has different features than the Cytoscape R library, and is therefore deprecated.\n\nAdditionally, this project attempts to maintain the same [function signatures](https://docs.google.com/spreadsheets/d/1XLWsKxGLqcBWLzoW2y6HyAUU2jMXaEaWw7QLn3NE5nY/edit#gid=1999503690), return values, function implementation and module structure as the RCy3, thereby enabling smooth maintenance and evolution of both ``RCy3`` and ``py4cytoscape``.\n\nThis project uses PyCharm because of its excellent code management and debugging features.\n\nOver time, py4cytoscape functionality should match RCy3 functionality. Once that occurs, novel Py2Cytoscape functions will be added to both as appropriate. The official Automation API definition met by both RCy3 and py4cytoscape is [here](https://docs.google.com/spreadsheets/d/1XLWsKxGLqcBWLzoW2y6HyAUU2jMXaEaWw7QLn3NE5nY/edit?usp=sharing). The API is versioned, and you can see which API version RCy3 or py4cytoscape implements by executing the cytoscape_version_info() or cytoscapeVersionInfo() function.\n\nAn overall scorecard comparing Py2Cytoscape, ``RCy3`` and ``py4cytoscape`` can be found [here](https://docs.google.com/spreadsheets/d/1uhBTbOMI4QMKUpLaOTuf6BP5wgqU6-pOzkj6BNmC4CY/edit?usp=sharing). Pay close attention to columns E and F, which show how much of RCy3 is reflected in py4cytoscape.\n\n\n# Documentation\n\nTo understand the API structure and see calling examples, see the ``py4cytoscape`` [documentation](https://py4cytoscape.readthedocs.io/en/latest/).\n\n# Quick Start\n\nThe quickest way to see ``py4cytoscape`` in action is via the [Overview of py4cytoscape](https://github.com/cytoscape/cytoscape-automation/blob/master/for-scripters/Python/Overview-of-py4cytoscape.ipynb) Jupyter-based workflow.\n\nYou can avoid installing Python or ``py4cytoscape`` by clicking on the *Open in Colab* button, and running the Python workflow in the Google Cloud, though you will still have to install Cytoscape on your workstation. \n\nYou can follow the notes in the Jupyter Notebook as the workflow automates Cytoscape execution.\n \n## How to install and test\n\nFor an explanation of ``py4cytoscape`` installation and testing, see the [INSTALL.rst](INSTALL.rst) file.\n\n## How to learn more about ``py4cytoscape``\n\nA broad set of Cytoscape Automation samples and tutorials is available on the [Cytoscape Automation Wiki](https://github.com/cytoscape/cytoscape-automation/wiki).\n\n## How to configure logging\n\n``py4cytoscape`` logging is based on the Python ``logging`` package, which is based on the Java ``logging`` framework. \n\nFor an explanation of log configuration and use, see the [LOGGING.rst](LOGGING.rst) file.\n\n## How to build and release\n\n``py4cytoscape`` maintainers can build a new release using the process in [BUILDING.rst](BUILDING.rst).\n\n## How to test\n\n``py4cytoscape`` has extensive test suites. Maintainers can learn more about testing in the [TESTING.rst](TESTING.rst) file.\n\n \n \n\n\n## License\n\n``py4cytoscape`` is released under the MIT License (see [LICENSE.rst](LICENSE.rst) file):\n\n```\n    Copyright (c) 2018-2022 The Cytoscape Consortium\n    Barry Demchak \u003cbdemchak@ucsd.edu\u003e\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcytoscape%2Fpy4cytoscape","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcytoscape%2Fpy4cytoscape","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcytoscape%2Fpy4cytoscape/lists"}