{"id":19560580,"url":"https://github.com/buzzfeed/pytest_config","last_synced_at":"2026-03-06T00:32:08.708Z","repository":{"id":16827107,"uuid":"19586424","full_name":"buzzfeed/pytest_config","owner":"buzzfeed","description":"A plugin for pytest to aid setup and configuration.","archived":false,"fork":false,"pushed_at":"2018-03-04T21:50:06.000Z","size":725,"stargazers_count":3,"open_issues_count":1,"forks_count":2,"subscribers_count":267,"default_branch":"master","last_synced_at":"2025-11-09T13:24:11.021Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":false,"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/buzzfeed.png","metadata":{"files":{"readme":"README.rst","changelog":"HISTORY.rst","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-05-08T19:40:22.000Z","updated_at":"2024-12-07T13:40:36.000Z","dependencies_parsed_at":"2022-08-04T11:30:13.127Z","dependency_job_id":null,"html_url":"https://github.com/buzzfeed/pytest_config","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/buzzfeed/pytest_config","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buzzfeed%2Fpytest_config","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buzzfeed%2Fpytest_config/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buzzfeed%2Fpytest_config/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buzzfeed%2Fpytest_config/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/buzzfeed","download_url":"https://codeload.github.com/buzzfeed/pytest_config/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buzzfeed%2Fpytest_config/sbom","scorecard":{"id":259413,"data":{"date":"2025-08-11","repo":{"name":"github.com/buzzfeed/pytest_config","commit":"86bdc1fecec46d7b944998704534c73cb16ddd43"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.3,"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":"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":"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":"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":2,"reason":"Found 7/26 approved changesets -- score normalized to 2","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":"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":"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":"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: 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":"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 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-17T10:28:49.728Z","repository_id":16827107,"created_at":"2025-08-17T10:28:49.728Z","updated_at":"2025-08-17T10:28:49.728Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30156286,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T22:39:40.138Z","status":"ssl_error","status_checked_at":"2026-03-05T22:39:24.771Z","response_time":93,"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":[],"created_at":"2024-11-11T05:08:05.465Z","updated_at":"2026-03-06T00:32:08.690Z","avatar_url":"https://github.com/buzzfeed.png","language":"Python","readme":"pytest-config\n===============\n\n.. image:: https://pypip.in/v/pytest-config/badge.svg\n    :target: https://crate.io/packages/pytest-config/\n    :alt: Latest PyPI version\n\n.. image:: https://pypip.in/d/pytest-config/badge.png\n    :target: https://crate.io/packages/pytest-config/\n    :alt: Number of PyPI downloads\n\n.. image:: https://pypip.in/format/pytest-config/badge.png\n    :target: https://pypi.python.org/pypi/pytest-config/\n    :alt: Download format\n\nBase configurations and utilities for developing your Python project test suite.\n\nInstallation\n============\n\n.. code-block::\n\n    pip install git+git://github.com/buzzfeed/pytest_config.git@\u003cversion\u003e#egg=pytest_config==\u003cversion\u003e\n\nThis will install:\n\n- pytest_config ``py.test`` plugin\n- a simple django app that extends the ``django-admin.py startapp`` (under development).\n- a ``pytest_config.init`` command to initialize new config files\n- a ``pytest_config.update`` command to interactively update your config files\n  against the lates default values.\n\nFeatures\n========\n\nAutomatic fix for the sys.path known issue.\n-------------------------------------------\n\n``pytest_config`` takes care of the ``sys.path`` known issue_ between pytest and pytest-django\nby automatically adding the current working directory to the ``PYTHONPATH`` before tests run.\n\n.. _issue: http://pytest-django.readthedocs.org/en/latest/faq.html#i-see-an-error-saying-could-not-import-myproject-settings\n\nManagement of configuration files\n---------------------------------\n\n.. code-block::\n\n    $ pytest_config.init [options]\n\nThis command will copy all the configuration files needed to easily configure\n``py.test`` and ``coverage``. Beware of this command as **it will simply replace any\nexisting config files in you current directory**.\n\n.. code-block::\n\n    $ pytest_config.update [options]\n\nThis command will read the default configuration files and your customized\nconfiguration files. If any of the options in you custom configuration differs\nfrom the defaults, you will be prompted if you want to keep the current one.\nIf you decline, the default will be saved to your local configuration.\n\nAvailable options\n-----------------\n\nThe two previous commands share a few of their interface, which is as follows:\n\n- ``pytest_config.[init|update] -h`` prints the help page.\n- ``pytest_config.[init|update] --coverage`` makes the command apply its operations\n  only for the ``.coveragerc`` file.\n- ``pytest_config.[init|update] --pytest-ini`` makes the command apply its operations\n- only for the ``pytest.ini`` file.\n\n``pytest_config.update`` has additional options, though:\n\n- ``pytest_config.update -y`` silences the process so that you are not prompted\n  about anything. All the defaults will be automatically applied if you use this.\n\nAutomatic test marking\n----------------------\n\n``pytest_config`` automatically marks your tests at runtime with markers based on\nwhat directories the tests are in, so under this architecture:\n\n.. code-block::\n\n    project_root/\n        app_name/\n        tests/  # root `tests` directory\n            ├── __init__.py\n            └── app_name/\n                ├── __init__.py\n                ├── integration/\n                │   ├── __init__.py\n                │   └── test_foo.py\n                └── unit/\n                    ├── __init__.py\n                    └── test_bar.py\n\n- test functions/methods inside ``app_name/unit/*.py`` will be marked with\n  ``@pytest.mark.\u003capp_name\u003e`` and ``@pytest.mark.unit``\n- test functions/methods inside ``app_name/integration/*.py`` will be marked with\n  ``@pytest.mark.\u003capp_name\u003e`` and ``@pytest.mark.integration``\n\nand so on. This will allow you to run tests on a per-app and per-type basis by running:\n\n.. code-block::\n\n    $ py.test -m unit\n    $ py.test -m integration\n    $ py.test -m app_name\n    $ py.test -m 'app_name and \u003ctype\u003e'\n    $ py.test -m '\u003ctype\u003e and app_name'\n\nIntegration with Caliendo\n-------------------------\n\nThe following command line arguments have been added to `py.test` to integrate it\nsmoothly with Caliendo_:\n\n.. _Caliendo: https://github.com/buzzfeed/caliendo\n\n- ``py.test --caliendo``: Enable the overall use of `caliendo` in your tests.\n- ``py.test --caliendo-prefix path/to/caliendo/files``: Set the path to where the caliendo\n  files should live. If you are defining this yourself, it's recommended that you set it as a path\n  relative to your current working directory, i.e. ``caliendo``, ``./caliendo``,\n  ``whatever/caliendo`` and not as an absolute path. Defaults to ``$PWD/caliendo``.\n- ``py.test --caliendo --caliendo-purge``: Set the ``CALIENDO_PURGE`` environment variable so that\n  caliendo can get rid of unused cache, evs, etc.\n- ``py.test --caliendo --caliendo-prompt``: Set the ``CALIENDO_PROMPT`` environment variable\n  so that you may use the interactive prompt_ built in caliendo\n\n.. _prompt: https://github.com/buzzfeed/caliendo#configuration\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuzzfeed%2Fpytest_config","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbuzzfeed%2Fpytest_config","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuzzfeed%2Fpytest_config/lists"}