{"id":13721495,"url":"https://github.com/gabrielfalcao/lettuce","last_synced_at":"2026-10-19T14:15:00.496Z","repository":{"id":1017653,"uuid":"577245","full_name":"gabrielfalcao/lettuce","owner":"gabrielfalcao","description":"Behavior-driven-development tool for python, inspired by Cucumber for Ruby ⛺","archived":false,"fork":false,"pushed_at":"2020-12-29T05:50:58.000Z","size":15123,"stargazers_count":1277,"open_issues_count":101,"forks_count":322,"subscribers_count":48,"default_branch":"master","last_synced_at":"2026-07-24T01:00:13.917Z","etag":null,"topics":["bdd","behavior-driven-development","python"],"latest_commit_sha":null,"homepage":"http://lettuce.it","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gabrielfalcao.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2010-03-24T10:30:22.000Z","updated_at":"2026-07-16T03:31:12.000Z","dependencies_parsed_at":"2022-08-16T11:50:19.583Z","dependency_job_id":null,"html_url":"https://github.com/gabrielfalcao/lettuce","commit_stats":null,"previous_names":[],"tags_count":63,"template":false,"template_full_name":null,"purl":"pkg:github/gabrielfalcao/lettuce","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrielfalcao%2Flettuce","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrielfalcao%2Flettuce/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrielfalcao%2Flettuce/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrielfalcao%2Flettuce/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gabrielfalcao","download_url":"https://codeload.github.com/gabrielfalcao/lettuce/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrielfalcao%2Flettuce/sbom","scorecard":{"id":416587,"data":{"date":"2025-08-11","repo":{"name":"github.com/gabrielfalcao/lettuce","commit":"f79d8f1bdbb119c423753dd958134fcef3995a93"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.7,"checks":[{"name":"Code-Review","score":7,"reason":"Found 17/23 approved changesets -- score normalized to 7","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":"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":"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":"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":"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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: COPYING:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: COPYING:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"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":"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 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"}},{"name":"Vulnerabilities","score":0,"reason":"26 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2021-98 / GHSA-68w8-qjq3-2gfm","Warn: Project is vulnerable to: GHSA-7xr5-9hcq-chf9","Warn: Project is vulnerable to: GHSA-8x94-hmjh-97hq","Warn: Project is vulnerable to: GHSA-hmr4-m2h5-33qx","Warn: Project is vulnerable to: GHSA-rrqc-c2jx-6jgv","Warn: Project is vulnerable to: GHSA-vfq6-hq5r-27r6","Warn: Project is vulnerable to: GHSA-cpwx-vrp4-4pq7","Warn: Project is vulnerable to: PYSEC-2021-66 / GHSA-g3rq-g295-4j3m","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: GHSA-55x5-fj6c-h6m8","Warn: Project is vulnerable to: PYSEC-2021-19 / GHSA-jq4v-f5q6-mjqq","Warn: Project is vulnerable to: PYSEC-2020-62 / GHSA-pgww-xf46-h92r","Warn: Project is vulnerable to: PYSEC-2022-230 / GHSA-wrxv-2j5q-m38w","Warn: Project is vulnerable to: PYSEC-2018-12 / GHSA-xp26-p53h-6h2p","Warn: Project is vulnerable to: PYSEC-2021-140 / GHSA-9w8r-397f-prfh","Warn: Project is vulnerable to: PYSEC-2016-32 / GHSA-fff8-4w9p-7v76","Warn: Project is vulnerable to: PYSEC-2023-117 / GHSA-mrwq-x4v8-fh7p","Warn: Project is vulnerable to: PYSEC-2021-141 / GHSA-pq64-v7f5-gqh8","Warn: Project is vulnerable to: GHSA-753j-mpmx-qq6g","Warn: Project is vulnerable to: GHSA-7cx3-6m66-7c5m","Warn: Project is vulnerable to: GHSA-8w49-h785-mj3c","Warn: Project is vulnerable to: PYSEC-2023-75 / GHSA-hj3f-6gcp-jg8j","Warn: Project is vulnerable to: GHSA-qppv-j76h-2rpx","Warn: Project is vulnerable to: GHSA-w235-7p84-xx57"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-19T00:02:17.777Z","repository_id":1017653,"created_at":"2025-08-19T00:02:17.777Z","updated_at":"2025-08-19T00:02:17.777Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38357901,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-19T02:00:06.414Z","response_time":53,"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":["bdd","behavior-driven-development","python"],"created_at":"2024-08-03T01:01:17.850Z","updated_at":"2026-10-19T14:14:58.078Z","avatar_url":"https://github.com/gabrielfalcao.png","language":"Python","funding_links":[],"categories":["Python","Uncategorized","Tools","Python decorator in the wild","Popular Frameworks","Behavior-driven Development"],"sub_categories":["Uncategorized","Python","Behavior Driven Development (BDD)"],"readme":"# lettuce\n\u003e Version 0.2.23 - kryptonite\n\n[![Build Status](https://secure.travis-ci.org/gabrielfalcao/lettuce.png)](http://travis-ci.org/gabrielfalcao/lettuce)\n\n## On release names\n\nLettuce release names will be inspired by any green stuff.\n\nBarium: In form of \"barium nitrate\" is commonly used to make green fireworks. Such a good name for a first version :)\n\n# What\n\nLettuce is a [BDD](http://en.wikipedia.org/wiki/Behavior_Driven_Development) tool for python, 100% inspired on [cucumber](http://cukes.info/ \"BDD with elegance and joy\").\n\n# Motivation\n\n1. [Cucumber](http://cukes.info/) makes [Ruby](http://www.ruby-lang.org/) even more sexy. Python needed something like it.\n2. Testing must be funny and easy.\n3. Most python developers code in python, not ruby.\n4. Ruby has Capistrano, Python has Fabric. Ruby has cucumber, Python has lettuce.\n5. I personally don't like mixing many languages in small projects. Keeping all in python is better.\n6. I love python, and ever did. But I also ever missed something that make writing tests easier and funnier.\n7. I like [nose](https://github.com/nose-devs/nose), which is a unittest pythonic framework. However, as the project I work on grows, so do the tests, and it becomes harder to understand them.\n\n# Documentation\n\nSee full documentation on [http://lettuce.it/](http://lettuce.it/)\n\n# Dependencies\n\n**you will need to install these dependencies in order to** *hack* **lettuce** :)\nall them are used within lettuce tests\n\n## you could use a virtualenv:\n\n    \u003e mkvirtualenv lettuce\n    \u003e workon lettuce\n    \u003e pip install -r requirements.txt\nnote this uses [virtualenvwrapper](https://virtualenvwrapper.readthedocs.io/en/latest/) to save some virtualenv handling hassle. you can also use virtualenv the regular way.\n## or just install manually:\n\n    \u003e sudo pip install -r requirements.txt\n\n## or do it really from scratch:\n\n* [nose](https://github.com/nose-devs/nose)\n    \u003e [sudo] pip install nose\n* [mox](http://code.google.com/p/pymox/)\n    \u003e [sudo] pip install mox\n* [sphinx](http://sphinx.pocoo.org/)\n    \u003e [sudo] pip install sphinx\n* [lxml](http://codespeak.net/lxml/)\n    \u003e [sudo] pip install lxml\n* [tornado](http://tornadoweb.org/)\n    \u003e [sudo] pip install tornado\n* [django](http://djangoproject.com/)\n    \u003e [sudo] pip install django\n\n# mailing list\n\n## for users\n\n[http://groups.google.com/group/lettuce-users](http://groups.google.com/group/lettuce-users)\n\n## for developers\n\n[http://groups.google.com/group/lettuce-developers](http://groups.google.com/group/lettuce-developers)\n\n# Special thanks\n\n1. [Cucumber](http://cukes.info/) crew, for creating such a AWESOME project, and for inspiring [Lettuce](http://lettuce.it/).\n2. [Tatiana](http://github.com/tatiana) for helping a lot with documentation.\n3. [Django](http://djangoproject.com) which documentation structure was borrowed.\n4. [Andres Jaan Tack](http://github.com/ajtack) for his awesome contributions\n4. [Erlis Vidal](http://github.com/erlis) for creating a tutorial of how to install lettuce on windows.\n\n# Known issues\n\n## windows support\n\n[erlis](https://github.com/erlis) have made a awesome job by making\nlettuce work on windows. He posted\n[here](http://www.erlisvidal.com/2010/10/how-install-lettuce-windows.html)\nhow to install lettuce on windows.\n\n\n# License\n\n    \u003cLettuce - Behaviour Driven Development for python\u003e\n    Copyright (C) \u003c2010-2020\u003e  Gabriel Falcão \u003cgabriel@nacaolivre.org\u003e\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see \u003chttp://www.gnu.org/licenses/\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabrielfalcao%2Flettuce","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgabrielfalcao%2Flettuce","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabrielfalcao%2Flettuce/lists"}