{"id":325940,"name":"snail","description":"A Python package to help with analysis of the potential impacts of climate hazards and other perils on infrastructure networks.","url":"https://github.com/nismod/snail","last_synced_at":"2026-05-12T12:00:30.182Z","repository":{"id":46424557,"uuid":"292800384","full_name":"nismod/snail","owner":"nismod","description":"spatial networks impact assessment library 🐌","archived":false,"fork":false,"pushed_at":"2025-10-29T18:54:44.000Z","size":5467,"stargazers_count":11,"open_issues_count":18,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-05-08T10:03:18.962Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://nismod.github.io/snail/","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nismod.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2020-09-04T08:58:20.000Z","updated_at":"2026-03-15T13:18:24.000Z","dependencies_parsed_at":"2023-11-27T16:52:24.514Z","dependency_job_id":"fdb1e2ba-d4aa-4d0c-9650-01bb603e4115","html_url":"https://github.com/nismod/snail","commit_stats":{"total_commits":280,"total_committers":6,"mean_commits":"46.666666666666664","dds":"0.42500000000000004","last_synced_commit":"2ada0cf952e4357aa1512bd226efbe923dd269f2"},"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/nismod/snail","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nismod","download_url":"https://codeload.github.com/nismod/snail/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/sbom","scorecard":{"id":689074,"data":{"date":"2025-08-11","repo":{"name":"github.com/nismod/snail","commit":"352e11efd72ecc29fee70b1d44c5250f3fc5960a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.2,"checks":[{"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/docs.yml:9","Warn: no topLevel permission defined: .github/workflows/package.yml:1","Info: no jobLevel write permissions found"],"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":0,"reason":"Found 2/24 approved changesets -- score normalized to 0","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":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","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":"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":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:58: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:61: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yml:62: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/package.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/package.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/package.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/package.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/package.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/package.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:62: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/package.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/package.yml:68: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/package.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:67","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:68","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:72","Warn: pipCommand not pinned by hash: .github/workflows/docs.yml:37","Warn: pipCommand not pinned by hash: .github/workflows/docs.yml:38","Info:   0 out of  14 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   5 pipCommand dependencies pinned"],"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":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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/package.yml:50"],"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":"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":"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 9 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-22T01:50:41.658Z","repository_id":46424557,"created_at":"2025-08-22T01:50:41.658Z","updated_at":"2025-08-22T01:50:41.658Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32938003,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-12T09:19:52.626Z","status":"ssl_error","status_checked_at":"2026-05-12T09:17:33.438Z","response_time":102,"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"}},"owner":{"login":"nismod","name":"National Infrastructure Systems Model","uuid":"21081508","kind":"organization","description":"","email":null,"website":"www.itrc.org.uk","location":"United Kingdom","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/21081508?v=4","repositories_count":30,"last_synced_at":"2023-02-28T18:04:50.433Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/nismod","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2022-11-11T19:45:27.922Z","updated_at":"2023-02-28T18:04:50.441Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nismod","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nismod/repositories"},"packages":[{"id":2819401,"name":"nismod-snail","ecosystem":"pypi","description":"The spatial networks impact assessment library","homepage":"https://github.com/nismod/snail","licenses":"MIT License  Copyright (c) 2020 Tom Russell and snail contributors  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","normalized_licenses":["Other"],"repository_url":"https://github.com/nismod/snail","keywords_array":[],"namespace":null,"versions_count":12,"first_release_published_at":"2021-11-09T17:52:49.000Z","latest_release_published_at":"2024-12-17T13:01:11.000Z","latest_release_number":"0.5.4","last_synced_at":"2026-05-10T12:34:43.771Z","created_at":"2022-04-10T11:45:25.310Z","updated_at":"2026-05-10T13:15:00.925Z","registry_url":"https://pypi.org/project/nismod-snail/","install_command":"pip install nismod-snail --index-url https://pypi.org/simple","documentation_url":"https://nismod.github.io/snail/","metadata":{"funding":null,"documentation":"https://nismod.github.io/snail/","classifiers":["Development Status :: 4 - Beta","Intended Audience :: Science/Research","License :: OSI Approved :: MIT License","Programming Language :: Python","Programming Language :: Python :: 3","Topic :: Scientific/Engineering :: GIS","Topic :: Utilities"],"normalized_name":"nismod-snail","project_status":null},"repo_metadata":{"id":46424557,"uuid":"292800384","full_name":"nismod/snail","owner":"nismod","description":"spatial networks impact assessment library 🐌","archived":false,"fork":false,"pushed_at":"2025-10-29T18:54:44.000Z","size":5467,"stargazers_count":11,"open_issues_count":18,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-22T02:03:17.089Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://nismod.github.io/snail/","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nismod.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2020-09-04T08:58:20.000Z","updated_at":"2026-03-15T13:18:24.000Z","dependencies_parsed_at":"2023-11-27T16:52:24.514Z","dependency_job_id":"fdb1e2ba-d4aa-4d0c-9650-01bb603e4115","html_url":"https://github.com/nismod/snail","commit_stats":{"total_commits":280,"total_committers":6,"mean_commits":"46.666666666666664","dds":"0.42500000000000004","last_synced_commit":"2ada0cf952e4357aa1512bd226efbe923dd269f2"},"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/nismod/snail","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nismod","download_url":"https://codeload.github.com/nismod/snail/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/sbom","scorecard":{"id":689074,"data":{"date":"2025-08-11","repo":{"name":"github.com/nismod/snail","commit":"352e11efd72ecc29fee70b1d44c5250f3fc5960a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.2,"checks":[{"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/docs.yml:9","Warn: no topLevel permission defined: .github/workflows/package.yml:1","Info: no jobLevel write permissions found"],"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":0,"reason":"Found 2/24 approved changesets -- score normalized to 0","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":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","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":"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":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:58: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:61: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yml:62: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docs.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/package.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/package.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/package.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/package.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/package.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/package.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:62: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/package.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/package.yml:68: update your workflow using https://app.stepsecurity.io/secureworkflow/nismod/snail/package.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:67","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:68","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:72","Warn: pipCommand not pinned by hash: .github/workflows/docs.yml:37","Warn: pipCommand not pinned by hash: .github/workflows/docs.yml:38","Info:   0 out of  14 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   5 pipCommand dependencies pinned"],"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":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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/package.yml:50"],"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":"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":"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 9 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-22T01:50:41.658Z","repository_id":46424557,"created_at":"2025-08-22T01:50:41.658Z","updated_at":"2025-08-22T01:50:41.658Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32285283,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T18:29:39.964Z","status":"online","status_checked_at":"2026-04-26T02:00:05.962Z","response_time":129,"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"},"owner_record":{"login":"nismod","name":"National Infrastructure Systems Model","uuid":"21081508","kind":"organization","description":"","email":null,"website":"www.itrc.org.uk","location":"United Kingdom","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/21081508?v=4","repositories_count":30,"last_synced_at":"2023-02-28T18:04:50.433Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/nismod","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2022-11-11T19:45:27.922Z","updated_at":"2023-02-28T18:04:50.441Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nismod","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nismod/repositories"},"tags":[{"name":"v0.5.4","sha":"7d236b6226f5c55289e54c1c48dc948602300a71","kind":"commit","published_at":"2024-12-17T12:50:52.000Z","download_url":"https://codeload.github.com/nismod/snail/tar.gz/v0.5.4","html_url":"https://github.com/nismod/snail/releases/tag/v0.5.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/nismod/snail@v0.5.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.5.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.5.4/manifests"},{"name":"v0.5.3","sha":"6ff55db4124b19a7244756b429dbb095b74d9cd6","kind":"commit","published_at":"2024-09-24T14:46:55.000Z","download_url":"https://codeload.github.com/nismod/snail/tar.gz/v0.5.3","html_url":"https://github.com/nismod/snail/releases/tag/v0.5.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/nismod/snail@v0.5.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.5.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.5.3/manifests"},{"name":"v0.5.2","sha":"1c330be33bd92b663e1691c0467f7a664f2799af","kind":"commit","published_at":"2024-06-26T16:52:30.000Z","download_url":"https://codeload.github.com/nismod/snail/tar.gz/v0.5.2","html_url":"https://github.com/nismod/snail/releases/tag/v0.5.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/nismod/snail@v0.5.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.5.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.5.2/manifests"},{"name":"v0.5.1-post2","sha":"82e99edad475889d20e6d05b583bcf3b97a251b4","kind":"commit","published_at":"2024-05-24T17:37:34.000Z","download_url":"https://codeload.github.com/nismod/snail/tar.gz/v0.5.1-post2","html_url":"https://github.com/nismod/snail/releases/tag/v0.5.1-post2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/nismod/snail@v0.5.1-post2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.5.1-post2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.5.1-post2/manifests"},{"name":"v0.5.1-post1","sha":"db79d69e4596efa4445091e8a704b794229bf2c7","kind":"commit","published_at":"2024-05-24T17:19:17.000Z","download_url":"https://codeload.github.com/nismod/snail/tar.gz/v0.5.1-post1","html_url":"https://github.com/nismod/snail/releases/tag/v0.5.1-post1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/nismod/snail@v0.5.1-post1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.5.1-post1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.5.1-post1/manifests"},{"name":"v0.5.1","sha":"f9410196ca4fa7899f0862cb0652ead57fb06e0a","kind":"commit","published_at":"2024-05-24T17:02:34.000Z","download_url":"https://codeload.github.com/nismod/snail/tar.gz/v0.5.1","html_url":"https://github.com/nismod/snail/releases/tag/v0.5.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/nismod/snail@v0.5.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.5.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.5.1/manifests"},{"name":"v0.5.0","sha":"e4b53b25291bb083d32849c03d687340d34fb040","kind":"commit","published_at":"2023-11-27T16:16:07.000Z","download_url":"https://codeload.github.com/nismod/snail/tar.gz/v0.5.0","html_url":"https://github.com/nismod/snail/releases/tag/v0.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/nismod/snail@v0.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.5.0/manifests"},{"name":"v0.4.1","sha":"0fd8e06aacdeab4b09d01d9247df462fa934d536","kind":"commit","published_at":"2023-08-09T16:27:28.000Z","download_url":"https://codeload.github.com/nismod/snail/tar.gz/v0.4.1","html_url":"https://github.com/nismod/snail/releases/tag/v0.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/nismod/snail@v0.4.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.4.1/manifests"},{"name":"v0.4.0","sha":"e1bfe95affeacbee9e330d84b680142866c1e3ab","kind":"commit","published_at":"2023-08-03T22:32:04.000Z","download_url":"https://codeload.github.com/nismod/snail/tar.gz/v0.4.0","html_url":"https://github.com/nismod/snail/releases/tag/v0.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/nismod/snail@v0.4.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.4.0/manifests"},{"name":"v0.3.2","sha":"1f857ea1473c279ab6c8f9c1127860f1dd5c1429","kind":"tag","published_at":"2023-06-21T10:43:17.000Z","download_url":"https://codeload.github.com/nismod/snail/tar.gz/v0.3.2","html_url":"https://github.com/nismod/snail/releases/tag/v0.3.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/nismod/snail@v0.3.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.3.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.3.2/manifests"},{"name":"v0.3.1","sha":"ba3884910a873b0399d950cec0e77088898aa039","kind":"commit","published_at":"2023-06-15T10:50:22.000Z","download_url":"https://codeload.github.com/nismod/snail/tar.gz/v0.3.1","html_url":"https://github.com/nismod/snail/releases/tag/v0.3.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/nismod/snail@v0.3.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.3.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.3.1/manifests"},{"name":"v0.3.0","sha":"f53db5f1e5ab842fa119b12346c01cc095e685f7","kind":"tag","published_at":"2023-04-17T11:12:46.000Z","download_url":"https://codeload.github.com/nismod/snail/tar.gz/v0.3.0","html_url":"https://github.com/nismod/snail/releases/tag/v0.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/nismod/snail@v0.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.3.0/manifests"},{"name":"v0.2.1","sha":"11eea772a2444e639f3bf0dc3331e0f688d93f86","kind":"tag","published_at":"2021-11-11T16:20:58.000Z","download_url":"https://codeload.github.com/nismod/snail/tar.gz/v0.2.1","html_url":"https://github.com/nismod/snail/releases/tag/v0.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/nismod/snail@v0.2.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.2.1/manifests"},{"name":"v0.2.0","sha":"8299a31f7d58af2b34ac8beb887d62bff83ac00d","kind":"tag","published_at":"2021-11-09T17:43:39.000Z","download_url":"https://codeload.github.com/nismod/snail/tar.gz/v0.2.0","html_url":"https://github.com/nismod/snail/releases/tag/v0.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/nismod/snail@v0.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.2.0/manifests"},{"name":"v0.1","sha":"a1e194eb368a9b01436f9a6237ded6d4f5e53915","kind":"commit","published_at":"2021-03-29T14:24:45.000Z","download_url":"https://codeload.github.com/nismod/snail/tar.gz/v0.1","html_url":"https://github.com/nismod/snail/releases/tag/v0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/nismod/snail@v0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/tags/v0.1/manifests"}]},"repo_metadata_updated_at":"2026-05-10T13:15:00.898Z","dependent_packages_count":0,"downloads":573,"downloads_period":"last-month","dependent_repos_count":1,"rankings":{"downloads":9.268194765719093,"dependent_repos_count":21.651284228076918,"dependent_packages_count":10.043613850122084,"stargazers_count":23.047448604992656,"forks_count":29.755066921606115,"docker_downloads_count":null,"average":18.753121674103376},"purl":"pkg:pypi/nismod-snail","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/nismod-snail","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/pypi/nismod-snail","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/nismod-snail/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2026-04-22T02:02:08.761Z","issues_count":41,"pull_requests_count":34,"avg_time_to_close_issue":14504317.347826088,"avg_time_to_close_pull_request":383204.6451612903,"issues_closed_count":23,"pull_requests_closed_count":31,"pull_request_authors_count":5,"issue_authors_count":5,"avg_comments_per_issue":0.7804878048780488,"avg_comments_per_pull_request":0.2647058823529412,"merged_pull_requests_count":31,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":1,"past_year_pull_requests_count":2,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":1,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":1.0,"past_year_avg_comments_per_pull_request":1.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/issues","maintainers":[{"login":"tomalrussell","count":45,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/tomalrussell"}],"active_maintainers":[{"login":"tomalrussell","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/tomalrussell"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/nismod-snail/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/nismod-snail/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/nismod-snail/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/nismod-snail/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/nismod-snail/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/nismod-snail/codemeta","maintainers":[{"uuid":"tomalrussell","login":"tomalrussell","name":null,"email":null,"url":null,"packages_count":11,"html_url":"https://pypi.org/user/tomalrussell/","role":null,"created_at":"2023-02-24T19:26:54.831Z","updated_at":"2023-02-24T19:26:54.831Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/tomalrussell/packages"},{"uuid":"fred_thomas","login":"fred_thomas","name":null,"email":null,"url":null,"packages_count":6,"html_url":"https://pypi.org/user/fred_thomas/","role":null,"created_at":"2023-04-17T15:22:10.432Z","updated_at":"2023-04-17T15:22:10.432Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/fred_thomas/packages"}],"registry":{"name":"pypi.org","url":"https://pypi.org","ecosystem":"pypi","default":true,"packages_count":861831,"maintainers_count":368203,"namespaces_count":0,"keywords_count":271316,"github":"pypi","metadata":{"funded_packages_count":53172},"icon_url":"https://github.com/pypi.png","created_at":"2022-04-04T15:19:23.364Z","updated_at":"2026-04-09T05:08:03.587Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/namespaces"}}],"commits":{"id":618582,"full_name":"nismod/snail","default_branch":"main","total_commits":417,"total_committers":8,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":52.125,"dds":0.44124700239808157,"past_year_total_commits":13,"past_year_total_committers":1,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":13.0,"past_year_dds":0.0,"last_synced_at":"2026-05-10T11:01:19.099Z","last_synced_commit":"e08f0181bbe02bb0852914c8eef770e384f59f30","created_at":"2023-03-09T07:48:59.884Z","updated_at":"2026-05-10T11:01:15.551Z","committers":[{"name":"Tom Russell","email":"tom.russell@ouce.ox.ac.uk","login":"tomalrussell","count":233},{"name":"Thibault Lestang","email":"thibault.lestang@cs.ox.ac.uk","login":"tlestang","count":161},{"name":"lenaisabel","email":"30930888+lenaisabel","login":"lenaisabel","count":7},{"name":"Ivann Schlosser","email":"ivann.schlosser.19@ucl.ac.uk","login":"ischlo","count":7},{"name":"Sarah Gall","email":"SarahG42","login":"SarahG42","count":5},{"name":"Raghav Pant","email":"raghavp@gmail.com","login":"itrcrisks","count":2},{"name":"Szabolcs Horvát","email":"szhorvat@gmail.com","login":"szhorvat","count":1},{"name":"Nadia Leonova","email":"nnleon@Nadias-MacBook-Pro.local","login":null,"count":1}],"past_year_committers":[{"name":"Tom Russell","email":"tom.russell@ouce.ox.ac.uk","login":"tomalrussell","count":13}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-12T00:00:09.062Z","repositories_count":6233307,"commits_count":894841666,"contributors_count":34898852,"owners_count":1151822,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"nismod/snail","html_url":"https://github.com/nismod/snail","last_synced_at":"2026-04-22T02:02:08.761Z","status":"error","issues_count":41,"pull_requests_count":34,"avg_time_to_close_issue":14504317.347826088,"avg_time_to_close_pull_request":383204.6451612903,"issues_closed_count":23,"pull_requests_closed_count":31,"pull_request_authors_count":5,"issue_authors_count":5,"avg_comments_per_issue":0.7804878048780488,"avg_comments_per_pull_request":0.2647058823529412,"merged_pull_requests_count":31,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":1,"past_year_pull_requests_count":2,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":1,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":1.0,"past_year_avg_comments_per_pull_request":1.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"created_at":"2023-05-14T18:36:52.688Z","updated_at":"2026-04-22T02:02:08.762Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/nismod%2Fsnail/issues","issue_labels_count":{"feature":12,"bug":5,"big":3},"pull_request_labels_count":{},"issue_author_associations_count":{"MEMBER":32,"NONE":6,"CONTRIBUTOR":3},"pull_request_author_associations_count":{"CONTRIBUTOR":17,"MEMBER":13,"NONE":4},"issue_authors":{"tomalrussell":32,"thomas-fred":5,"tlestang":2,"ischlo":1,"dianajjaramillo":1},"pull_request_authors":{"tlestang":16,"tomalrussell":13,"ischlo":2,"nnleonova":2,"szhorvat":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-12T00:00:09.018Z","repositories_count":14586219,"issues_count":34345838,"pull_requests_count":112445996,"authors_count":11260016,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{"feature":1},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{"MEMBER":1},"past_year_pull_request_author_associations_count":{"MEMBER":2},"past_year_issue_authors":{"tomalrussell":1},"past_year_pull_request_authors":{"tomalrussell":2},"maintainers":[{"login":"tomalrussell","count":45,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/tomalrussell"}],"active_maintainers":[{"login":"tomalrussell","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/tomalrussell"}]},"events":{"total":{"CreateEvent":6,"IssuesEvent":2,"ReleaseEvent":4,"WatchEvent":1,"DeleteEvent":4,"IssueCommentEvent":2,"PushEvent":8,"PullRequestEvent":2},"last_year":{"IssuesEvent":2,"WatchEvent":1,"IssueCommentEvent":2,"PushEvent":2,"PullRequestEvent":2,"CreateEvent":2}},"keywords":[],"dependencies":[{"ecosystem":"actions","filepath":".github/workflows/build.yml","sha":null,"kind":"manifest","created_at":"2023-02-16T20:30:48.103Z","updated_at":"2023-02-16T20:30:48.103Z","repository_link":"https://github.com/nismod/snail/blob/main/.github/workflows/build.yml","dependencies":[{"id":7723369827,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7723369828,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/package.yml","sha":null,"kind":"manifest","created_at":"2023-02-16T20:30:48.509Z","updated_at":"2023-02-16T20:30:48.509Z","repository_link":"https://github.com/nismod/snail/blob/main/.github/workflows/package.yml","dependencies":[{"id":7723371006,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7723371007,"package_name":"actions/upload-artifact","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7723371008,"package_name":"pypa/cibuildwheel","ecosystem":"actions","requirements":"v2.2.0","direct":true,"kind":"composite","optional":false},{"id":7723371009,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7723371010,"package_name":"actions/download-artifact","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7723371011,"package_name":"pypa/gh-action-pypi-publish","ecosystem":"actions","requirements":"release/v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/docs.yml","sha":null,"kind":"manifest","created_at":"2023-11-27T16:52:20.185Z","updated_at":"2023-11-27T16:52:20.185Z","repository_link":"https://github.com/nismod/snail/blob/main/.github/workflows/docs.yml","dependencies":[{"id":14758535357,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":14758535358,"package_name":"actions/configure-pages","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":14758535359,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":14758535360,"package_name":"actions/upload-pages-artifact","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":14758535361,"package_name":"actions/deploy-pages","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"pyproject.toml","sha":null,"kind":"manifest","created_at":"2023-11-27T16:52:20.452Z","updated_at":"2023-11-27T16:52:20.452Z","repository_link":"https://github.com/nismod/snail/blob/main/pyproject.toml","dependencies":[{"id":14758535396,"package_name":"geopandas","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":14758535397,"package_name":"matplotlib","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":14758535398,"package_name":"openpyxl","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":14758535399,"package_name":"pandera","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":14758535400,"package_name":"pyarrow","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":14758535401,"package_name":"pyogrio","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":14758535766,"package_name":"python-igraph","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":14758535767,"package_name":"rasterio","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":14758535768,"package_name":"shapely","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":14758535769,"package_name":"scipy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]}],"score":11.802845032362201,"created_at":"2025-10-04T00:28:42.834Z","updated_at":"2026-05-12T12:00:30.196Z","avatar_url":"https://github.com/nismod.png","language":"Jupyter Notebook","category":"Climate Change","sub_category":"Natural Hazard and Storms","monthly_downloads":573,"total_dependent_repos":1,"total_dependent_packages":0,"readme":"\u003cp align=\"center\"\u003e\n\u003ca href=\"https://github.com/nismod/snail/tree/main/tutorials\"\u003eTutorials\u003c/a\u003e |\n\u003ca href=\"https://github.com/nismod/snail/issues\"\u003eIssues\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"./images/snail.svg\" alt=\"snail\" /\u003e\n\u003c/p\u003e\n\n[![PyPI version](https://img.shields.io/pypi/v/nismod-snail.svg)](https://pypi.org/project/nismod-snail/)\n[![Build](https://github.com/nismod/snail/actions/workflows/build.yml/badge.svg)](https://github.com/nismod/snail/actions/workflows/build.yml)\n[![License](https://img.shields.io/pypi/l/nismod-snail.svg)](https://opensource.org/licenses/MIT)\n\n# 🤔 What is this?\n\nThis is a Python package to help with analysis of the potential impacts of\nclimate hazards and other perils on infrastructure networks.\n\n## Installation\n\nInstall using pip:\n\n    pip install nismod-snail\n\nThis should bring all dependencies with it. If any of these cause difficulties,\ntry using a [conda](https://docs.conda.io/en/latest/miniconda.html) environment:\n\n    conda env create -n snail_env \\\n        python=3.11 geopandas shapely rasterio python-igraph\n    conda activate snail_env\n    pip install nismod-snail\n\nIf all worked okay, you should be able to run python and import snail:\n\n    $ python\n    \u003e\u003e\u003e import snail\n    \u003e\u003e\u003e help(snail)\n    Help on package snail:\n\n    NAME\n        snail - snail - the spatial networks impact assessment library\n\n## Using the `snail` command\n\nOnce installed, you can use `snail` directly from the command line.\n\nSplit features on a grid defined by its transform, width and height:\n\n```bash\nsnail split \\\n    --features input.shp \\\n    --transform 1 0 -180 0 -1 90 \\\n    --width 360 \\\n    --height 180 \\\n    --output split.gpkg\n```\n\nSplit features on a grid defined by a GeoTIFF, optionally adding the values from each raster band to each split feature as a new attribute:\n\n```bash\nsnail split \\\n    --features lines.geojson \\\n    --raster gridded_data.tif \\\n    --attribute \\\n    --output split_lines_with_raster_values.geojson\n```\n\nSplit multiple vector feature files along the grids defined by multiple raster files, attributing all raster values:\n\n```bash\nsnail process -fs features.csv -rs rasters.csv\n```\n\nWhere at a minimum, each CSV has a column `path` with the path to each file.\n\n### Transform\n\nA note on `transform` - these six numbers define the transform from `i,j` cell index (column/row) coordinates in the rectangular grid to `x,y` geographic coordinates, in the coordinate reference system of the input and output files. They effectively form the first two rows of a 3x3 matrix:\n\n```\n| x |   | a  b  c | | i |\n| y | = | d  e  f | | j |\n| 1 |   | 0  0  1 | | 1 |\n```\n\nIn cases without shear or rotation, `a` and `e` define scaling or grid cell size, while `c` and `f` define the offset or grid upper-left corner:\n\n```\n| x_scale 0       x_offset |\n| 0       y_scale y_offset |\n| 0       0       1        |\n```\n\nSee [`rasterio/affine`](https://github.com/rasterio/affine#usage) and [GDAL Raster Data Model](https://gdal.org/user/raster_data_model.html#affine-geotransform) for more documentation.\n\n## Development\n\nClone this repository using [GitHub Desktop](https://desktop.github.com/) or on\nthe command line:\n\n    git clone git@github.com:nismod/snail.git\n\nChange directory into the root of the project:\n\n    cd snail\n\nTo create and activate a conda environment with snail's dependencies installed:\n\n    conda env create -f environment.yml\n    conda activate snail-dev\n\nRun this to install the source code as a package:\n\n    pip install .\n\nIf you're working on snail itself, install it as \"editable\" along with test and\ndevelopment packages:\n\n    pip install -e .[dev]\n\nRun tests using [pytest](https://docs.pytest.org/en/latest/) and\n[pytest-cov](https://pytest-cov.readthedocs.io) to check coverage:\n\n    pytest --cov=snail --cov-report=term-missing\n\nRun a formatter ([black](https://github.com/psf/black)) to fix code\nformatting:\n\n    black src/snail\n\nBuild the docs:\n\n    rm -r docs/build\n    rm -r docs/source/tutorials\n    cp -r tutorials docs/source/\n    pushd docs\n    sphinx-apidoc -M -o source/api ../src/snail/ --force\n    make html\n    popd\n\nServe the HTML docs locally:\n\n    cd docs/build/html\n    python -m http.server\n\n### C++ library\n\nThe C++ library in `extension/src` contains the core routines to find intersections of\nlines with raster grids.\n\nBefore working on the C++ library, fetch source code for Catch2 unit testing\nlibrary (this is included as a git submodule):\n\n    git submodule update --init --recursive\n\nBuild the library and run tests:\n\n    cmake -Bbuild ./extension\n    cmake --build build/\n    ./build/run_tests\n\nRun code style auto-formatting:\n\n    clang-format -i extension/src/*.{cpp,hpp}\n\nRun lints and checks:\n\n    clang-tidy --checks 'cppcoreguidelines-*' extension/src/*.{cpp,hpp}\n\nThis may need some includes for `pybind11` - which will vary depending on your\npython installation. For example, with python via miniconda:\n\n    clang-tidy --checks 'cppcoreguidelines-*' extension/src/* -- \\\n        -I/home/username/miniconda3/include/python3.11/ \\\n        -I./pybind11/include/\n\nOr with C++ headers installed on a Linux machine:\n\n    clang-tidy --checks 'cppcoreguidelines-*' extension/src/* -- \\\n        -std=c++14  \\\n        -I/usr/include/x86_64-linux-gnu/c++/11 \\\n        -I/usr/include/c++/11 \\\n        -I{$PWD}/extension/extern/pybind11/include \\\n        -I/usr/include/python3.10\n\n### Integration of C++ and Python using pybind11\n\nThe `snail.core.intersections` module is built using `pybind11` with\n`scikit-build-core` (see [docs](https://scikit-build-core.readthedocs.io/en/latest/))\n\n- `extension/src/intersections.cpp` defines the module interface using the\n  `PYBIND11_MODULE` macro\n- `pyproject.toml` defines the build requirements for snail, which includes\n  pybind11 and scikit-build-core\n\n## Acknowledgments\n\n\u003e MIT License\n\u003e\n\u003e Copyright (c) 2020-23 Tom Russell and all [snail contributors](https://github.com/nismod/snail/graphs/contributors)\n\nThis library is developed by researchers in the [Oxford Programme for Sustainable\nInfrastructure Systems](https://opsis.eci.ox.ac.uk/) at the University of Oxford,\nfunded by multiple research projects.\n\nThis research received funding from the FCDO Climate Compatible Growth Programme.\nThe views expressed here do not necessarily reflect the UK government's official\npolicies.\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":[],"project_url":"https://ost.ecosyste.ms/api/v1/projects/325940","html_url":"https://ost.ecosyste.ms/projects/325940"}