{"id":15406312,"url":"https://github.com/jantman/psread","last_synced_at":"2026-04-28T08:39:38.511Z","repository":{"id":62578215,"uuid":"354135645","full_name":"jantman/psread","owner":"jantman","description":"Quick, simple AWS Parameter Store CLI for listing/reading params with tab completion","archived":false,"fork":false,"pushed_at":"2021-05-24T12:02:36.000Z","size":205,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-14T18:48:14.700Z","etag":null,"topics":["aws","aws-parameter-store","cli","parameter-store","python","python3"],"latest_commit_sha":null,"homepage":"","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/jantman.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGES.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":"2021-04-02T21:19:06.000Z","updated_at":"2023-09-08T18:20:40.000Z","dependencies_parsed_at":"2022-11-03T19:45:10.101Z","dependency_job_id":null,"html_url":"https://github.com/jantman/psread","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/jantman/psread","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jantman%2Fpsread","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jantman%2Fpsread/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jantman%2Fpsread/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jantman%2Fpsread/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jantman","download_url":"https://codeload.github.com/jantman/psread/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jantman%2Fpsread/sbom","scorecard":{"id":505724,"data":{"date":"2025-08-11","repo":{"name":"github.com/jantman/psread","commit":"f672c76115712ea1a157415ffe19154cfb2055fe"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/7 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":"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":"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":"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":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"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":"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":"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":"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":"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":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: 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":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"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"}}]},"last_synced_at":"2025-08-19T23:12:30.050Z","repository_id":62578215,"created_at":"2025-08-19T23:12:30.050Z","updated_at":"2025-08-19T23:12:30.050Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32373514,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-27T20:07:02.737Z","status":"online","status_checked_at":"2026-04-28T02:00:07.250Z","response_time":56,"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":["aws","aws-parameter-store","cli","parameter-store","python","python3"],"created_at":"2024-10-01T16:20:51.626Z","updated_at":"2026-04-28T08:39:38.494Z","avatar_url":"https://github.com/jantman.png","language":"Python","readme":"psread\n======\n\nQuick, simple AWS Parameter Store CLI for listing/reading params with tab completion\n\n.. image:: asciinema.gif\n  :width: 590\n  :alt: screen recording of psread usage example\n\n.. image:: https://www.repostatus.org/badges/latest/wip.svg\n   :alt: Project Status: WIP – Initial development is in progress, but there has not yet been a stable, usable release suitable for the public.\n   :target: https://www.repostatus.org/#wip\n\nBackground\n----------\n\nThe AWS-provided tools for using Parameter Store (the web UI and awscli) are fine if you know *exactly* what you're trying to find. They're not so good if you're... looking... for something, and want to explore your Parameter Store parameters like a filesystem, or hierarchical datastore. This is a dead-simple, quick, and rather ugly hack of a CLI built in Python and largely inspired by the `Hashicorp Vault \u003chttps://www.vaultproject.io/\u003e`_ CLI, plus shell completion for parameter paths. This doesn't write parameters or do other \"fancy\" things. It's mainly intended for teams who are also using Parameter Store to replace human-centered secret stores (i.e. Vault, KeePass, random encrypted files, etc.) and often have only a vague idea of the exact parameter name they're looking for.\n\nStatus\n------\n\nThis is a somewhat-tipsy Friday evening quarantine project. There are (it's almost painful to write this) no unit tests, and it's largely cargo-culted from previous work of mine. I'll gladly accept PRs assuming they look correct, meet PEP8/PyFlakes style, and are relatively straightforward and working. That's about the end of \"support\".\n\nRequirements\n------------\n\nThis project **requires** Python 3.6 or later, as it makes use of both `PEP484 type hints \u003chttps://www.python.org/dev/peps/pep-0484/\u003e`_ and `PEP498 f-strings \u003chttps://www.python.org/dev/peps/pep-0498/\u003e`_. It also requires `boto3 \u003chttps://pypi.org/project/boto3/\u003e`_, `argcomplete \u003chttps://pypi.org/project/argcomplete/\u003e`__, and `appdirs \u003chttps://pypi.org/project/appdirs/\u003e`_.\n\nInstallation\n------------\n\npsread can be installed with ``pip install psread`` or ``python -mpip install psread``\n\nTo set up autocompletion in your shell, either `activate global completion for argcomplete \u003chttps://pypi.org/project/argcomplete/#activating-global-completion\u003e`_, or for bash, set up completion for this project specifically. To do that in just your current shell:\n\n.. code-block:: bash\n\n    eval \"$(psread --bash-wrapper)\"\n\nTo do that permanently (recommended):\n\n.. code-block:: bash\n\n    echo -e \"eval \\\"\\$($(which psread) --bash-wrapper)\\\"\" \u003e\u003e ~/.bashrc\n\nUsage\n-----\n\nThere are two main functionalities: listing parameters and reading parameters. Shell tab completion is included, primarily for **bash**, via the `argcomplete \u003chttps://pypi.org/project/argcomplete/\u003e`__ package.\n\n.. code-block:: bash\n\n    $ psread -h\n    usage: psread [-h] [-v] [-w] [-V] [-R] [--called-from-wrapper] [{ls,list,read,get}] [PARAM]\n\n    Quick, simple AWS Parameter Store CLI for listing/reading params with tab completion\n\n    positional arguments:\n      {ls,read,get}         Action to perform\n      PARAM                 Parameter (or parameter path) to list or read\n\n    optional arguments:\n      -h, --help            show this help message and exit\n      -v, --verbose         verbose output. specify twice for debug-level output.\n      -w, --bash-wrapper    print bash wrapper function to STDOUT and exit\n      -V, --version         Print version number and exit\n      -R, --recache         re-cache parameters for this region of this account\n      --called-from-wrapper\n                            DO NOT USE\n\nParameter Caching\n+++++++++++++++++\n\npsread caches the Names (and only the names) of all parameters in each region of each account that you use it with; this is effectively required for sane tab-completion speeds. The parameters are cached in a Pickle file at a platform-specific path, which can be seen in the ``psread -V`` output. This path can be overridden with the ``PSREAD_CACHE_PATH`` environment variable, which should specify the absolute path to write the pkl file at.\n\nBy default, parameter names are cached for 86400 seconds (1 day); this can be overridden by setting the ``PSREAD_CACHE_TTL`` environment variable to an integer cache TTL in seconds.\n\nRe-caching of the current region of the current account can be forced by running psread with the ``-R`` or ``--recache`` option.\n\nDebugging\n---------\n\nIn order to enable debug logging before normal command-line options and arguments are parsed, such as during tab completion: ``export PSREAD_LOG=DEBUG``\n\nRelease Process\n---------------\n\nCompletely manual right now:\n\n1. Bump the version in ``psread.py`` and update the Changelog.\n2. ``python setup.py sdist \u0026\u0026 python setup.py bdist_wheel``\n3. ``twine upload dist/*``\n4. ``git push``\n5. ``git tag -s -a X.Y.Z -m 'X.Y.Z released YYYY-mm-dd' \u0026\u0026 git tag -v X.Y.Z \u0026\u0026 git push origin X.Y.Z``\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjantman%2Fpsread","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjantman%2Fpsread","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjantman%2Fpsread/lists"}