Name | mattstash JSON |
Version |
0.1.0
JSON |
| download |
home_page | None |
Summary | Tiny KeePass-powered secrets accessor with optional S3 helper and Postgres URL builder. |
upload_time | 2025-08-25 19:32:48 |
maintainer | None |
docs_url | None |
author | Matthew Kingsbury |
requires_python | >=3.9 |
license | MIT License
Copyright (c) 2025 Matthew Kingsbury
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. |
keywords |
cli
connection-string
credentials-store
keepass
password-manager
postgres
s3
secrets
|
VCS |
 |
bugtrack_url |
|
requirements |
pykeepass
boto3
botocore
pytest
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
## License
`mattstash` itself is licensed under the [MIT License](LICENSE).
### Dependency Note
This project depends on [`pykeepass`](https://github.com/libkeepass/pykeepass), which is licensed under the GNU General Public License v3 (GPL-3.0).
Because of this dependency, **any redistribution of `mattstash` or derivative works must also comply with the GPL-3.0 terms**.
In plain English:
- You can freely use, modify, and integrate `mattstash` in your own projects.
- If you distribute software that includes `mattstash`, the GPL-3.0 requirements from `pykeepass` will apply to your project.
- If you only use `mattstash` internally (not distributing your product), you are not affected by the GPL redistribution terms.
[`boto3`](https://github.com/boto/boto3), which is used for optional S3 client support, is licensed under the Apache 2.0 license, which is permissive and fully compatible with MIT.
## CLI
After installation, a `mattstash` command is available.
### Installation
```bash
pip install "mattstash" # core only
pip install "mattstash[s3]" # core + boto3 for S3 helpers
```
### Defaults & bootstrap
- Default DB path: `~/.credentials/mattstash.kdbx`
- Default sidecar password file: `~/.credentials/.mattstash.txt`
- On first run, if **both** files are missing, `mattstash` bootstraps them:
- Generates a strong password, writes the sidecar with `0600` permissions
- Creates an empty KeePass database at the default path
You can also run `mattstash setup` explicitly to force bootstrapping and configuration. This command creates the database and sidecar password file at the default location unless overridden with `--db`.
```bash
mattstash setup
```
You can override the DB path globally with `--db PATH` or via the Python API `MattStash(path=...)`.
### Commands
```bash
# List all entries
mattstash list
mattstash list --json
mattstash list --show-password
# Get one entry by title (supports two modes)
# 1) Simple key/value secret style (CredStash-like), where only the password field is used
mattstash get "MySecret"
mattstash get "MySecret" --json
mattstash get "MySecret" --show-password
# 2) Full credential dict style with username, password, url, notes
mattstash get "My Service"
mattstash get "My Service" --json
mattstash get "My Service" --show-password
# Add or update an entry (supports two modes)
# 1) Simple key/value secret style (CredStash-like), only password provided with --value
mattstash put "MySecret" --value SECRET_PASSWORD
# 2) Full credential dict style with username, password, url, notes
mattstash put "My Service" --username USERNAME --password PASSWORD --url URL --notes NOTES
# Delete an entry
mattstash delete "My Service"
# List all keys (entry titles)
mattstash keys
# Show versions/history of an entry
mattstash versions "My Service"
mattstash versions "My Service" --json
# Use `get_s3_client(...)` to build a ready-to-use boto3 S3 client from a KeePass entry
mattstash s3-test "Hetzner S3" --bucket my-bucket
mattstash s3-test "Hetzner S3" --addressing virtual --region us-east-1
mattstash s3-test "Hetzner S3" --quiet # no output, exit code only
# Build a database connection URL from a KeePass entry
mattstash db-url "My Database" --database mydb
```
### Adding S3 credentials
To add a credential specifically for S3 connectivity, use the `put` command with the following fields:
- `--username` for the AWS access key ID
- `--password` for the AWS secret access key
- `--url` for the S3 endpoint URL
- `--notes` for any additional information
Example:
```bash
mattstash put "Hetzner S3" --username KEY --password SECRET --url https://endpoint --notes "Hetzner S3 storage"
```
The `s3-test` command expects the AWS-style key, secret, and endpoint to be stored in these fields in the KeePass entry.
You can also use the Python API to fetch S3 credentials and create a boto3 client using the helper function `get_s3_client`, which returns a ready-to-use authenticated boto3 S3 client.
Example using the module-level helper:
```python
from mattstash.s3 import get_s3_client
from mattstash.core import MattStash
client = get_s3_client("Hetzner S3")
# Upload a file
client.upload_file('localfile.txt', 'my-bucket', 'remote/path/localfile.txt')
```
Or using the instance method:
```python
from mattstash.core import MattStash
stash = MattStash()
client = stash.get_s3_client("Hetzner S3")
# Upload a file
client.upload_file('localfile.txt', 'my-bucket', 'remote/path/localfile.txt')
```
### Adding database credentials
To add a credential for database connectivity, use the `put` command with these fields:
- `--username` for the database user
- `--password` for the database password
- `--url` for the database host URL (must include port)
- `--notes` for any additional information
Example:
```bash
mattstash put "My Database" --username dbuser --password dbpass --url 127.0.0.1:5432 --notes "Postgres DB"
```
You can then build a Postgres/SQLAlchemy connection URL using the `db-url` command:
```bash
mattstash db-url "My Database" --database mydb
```
The tool validates the URL format and requires that the `url` field includes a port number.
Global options:
- `--db PATH` — path to the `.kdbx` database (default: `~/.credentials/mattstash.kdbx`)
- `--password VALUE` — override DB password (otherwise read from sidecar or `KDBX_PASSWORD`)
- `--verbose` — extra logging (CLI subcommands may also support `--quiet`)
Subcommand options:
- `list`: `--json`, `--show-password`
- `get`: `--json`, `--show-password`
- `keys`: (no options)
- `put`: `--value`, `--username`, `--password`, `--url`, `--notes`
- `delete`: (no options)
- `versions`: `--json`
- `s3-test`: `--region`, `--addressing {path,virtual}`, `--signature-version`, `--retries-max-attempts`, `--bucket`, `--quiet`
- `db-url`: `--database` (required; database name), `--mask-password` (optional, default true)
### Exit codes
- `0` — success
- `2` — entry not found (for `get`)
- `3` — failed to create S3 client
- `4` — S3 HeadBucket failed
### Examples
```bash
# Minimal list
mattstash list
# Get a credential as JSON (good for scripting)
mattstash get "CI Token" --json
# List all keys (entry titles)
mattstash keys
# Add or update an S3 credential
mattstash put "Hetzner S3" --username KEY --password SECRET --url https://endpoint
# Delete an old key
mattstash delete "old-key"
# Show versions/history for an entry
mattstash versions "Hetzner S3"
# S3 test against a Hetzner/MinIO-style endpoint stored in KeePass entry "objectstore"
mattstash s3-test "objectstore" --bucket cornyhorse-data
# Build a Postgres connection URL from a KeePass entry
mattstash db-url "My Database" --database mydb
```
## Python API usage
You can also use `mattstash` programmatically with the Python API. Here are examples that mirror the CLI commands:
```python
from mattstash.core import MattStash
stash = MattStash()
# List all entries
for entry in stash.list():
print(entry['title'])
# List all entries as JSON (dictionary)
entries = list(stash.list())
print(entries)
# Get one entry by title (returns dict with fields)
entry = stash.get("My Service")
print(entry)
# Get a simple secret (password only)
secret = stash.get("MySecret") # returns dict with 'password' field
# Add or update an entry (full credential dict style)
stash.put("My Service", username="user", password="pass", url="https://example.com", notes="notes")
# Add or update a simple secret (password only)
stash.put("MySecret", value="mysecretpassword")
# Delete an entry
stash.delete("My Service")
# List all keys (entry titles)
keys = stash.keys()
print(keys)
# Show versions/history of an entry
versions = stash.versions("My Service")
for version in versions:
print(version)
# Use `get_s3_client(...)` to create a ready-to-use boto3 S3 client from a KeePass entry
from mattstash.s3 import get_s3_client
client = get_s3_client("Hetzner S3")
# Example: upload a file
client.upload_file('localfile.txt', 'my-bucket', 'remote/path/localfile.txt')
# Or using the instance method
client2 = stash.get_s3_client("Hetzner S3")
client2.upload_file('localfile.txt', 'my-bucket', 'remote/path/localfile.txt')
```
### Database connection URL support
You can add database credentials similarly using `--username`, `--password`, `--url` (including port), and `--notes` fields:
```python
stash.put("My Database", username="dbuser", password="dbpass", url="127.0.0.1:5432", notes="Postgres DB")
```
To build a full SQLAlchemy/Postgres connection URL, use the `get_db_url` method:
```python
# Build a connection URL with password masked (default)
url = stash.get_db_url("My Database", database="mydb")
print(url) # e.g. postgresql://dbuser:****@127.0.0.1:5432/mydb
# Build a connection URL with password visible
url_unmasked = stash.get_db_url("My Database", database="mydb", mask_password=False)
print(url_unmasked) # e.g. postgresql://dbuser:dbpass@127.0.0.1:5432/mydb
```
Note that the tool validates that the `url` field includes a port and that the resulting URL is valid for your database driver.
Raw data
{
"_id": null,
"home_page": null,
"name": "mattstash",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "cli, connection-string, credentials-store, keepass, password-manager, postgres, s3, secrets",
"author": "Matthew Kingsbury",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/88/ed/9dfe504ce5a3640ad41adf5ef58fc6266660c1ee680d1ef98c45ba58c9f7/mattstash-0.1.0.tar.gz",
"platform": null,
"description": "## License\n\n`mattstash` itself is licensed under the [MIT License](LICENSE).\n\n### Dependency Note\nThis project depends on [`pykeepass`](https://github.com/libkeepass/pykeepass), which is licensed under the GNU General Public License v3 (GPL-3.0).\nBecause of this dependency, **any redistribution of `mattstash` or derivative works must also comply with the GPL-3.0 terms**.\n\nIn plain English:\n- You can freely use, modify, and integrate `mattstash` in your own projects.\n- If you distribute software that includes `mattstash`, the GPL-3.0 requirements from `pykeepass` will apply to your project.\n- If you only use `mattstash` internally (not distributing your product), you are not affected by the GPL redistribution terms.\n\n[`boto3`](https://github.com/boto/boto3), which is used for optional S3 client support, is licensed under the Apache 2.0 license, which is permissive and fully compatible with MIT.\n\n## CLI\n\nAfter installation, a `mattstash` command is available.\n\n### Installation\n\n```bash\npip install \"mattstash\" # core only\npip install \"mattstash[s3]\" # core + boto3 for S3 helpers\n```\n\n### Defaults & bootstrap\n\n- Default DB path: `~/.credentials/mattstash.kdbx`\n- Default sidecar password file: `~/.credentials/.mattstash.txt`\n- On first run, if **both** files are missing, `mattstash` bootstraps them:\n - Generates a strong password, writes the sidecar with `0600` permissions\n - Creates an empty KeePass database at the default path\n\nYou can also run `mattstash setup` explicitly to force bootstrapping and configuration. This command creates the database and sidecar password file at the default location unless overridden with `--db`.\n\n```bash\nmattstash setup\n```\n\nYou can override the DB path globally with `--db PATH` or via the Python API `MattStash(path=...)`.\n\n### Commands\n\n```bash\n# List all entries\nmattstash list\nmattstash list --json\nmattstash list --show-password\n\n# Get one entry by title (supports two modes)\n# 1) Simple key/value secret style (CredStash-like), where only the password field is used\nmattstash get \"MySecret\"\nmattstash get \"MySecret\" --json\nmattstash get \"MySecret\" --show-password\n\n# 2) Full credential dict style with username, password, url, notes\nmattstash get \"My Service\"\nmattstash get \"My Service\" --json\nmattstash get \"My Service\" --show-password\n\n# Add or update an entry (supports two modes)\n# 1) Simple key/value secret style (CredStash-like), only password provided with --value\nmattstash put \"MySecret\" --value SECRET_PASSWORD\n\n# 2) Full credential dict style with username, password, url, notes\nmattstash put \"My Service\" --username USERNAME --password PASSWORD --url URL --notes NOTES\n\n# Delete an entry\nmattstash delete \"My Service\"\n\n# List all keys (entry titles)\nmattstash keys\n\n# Show versions/history of an entry\nmattstash versions \"My Service\"\nmattstash versions \"My Service\" --json\n\n# Use `get_s3_client(...)` to build a ready-to-use boto3 S3 client from a KeePass entry\nmattstash s3-test \"Hetzner S3\" --bucket my-bucket\nmattstash s3-test \"Hetzner S3\" --addressing virtual --region us-east-1\nmattstash s3-test \"Hetzner S3\" --quiet # no output, exit code only\n\n# Build a database connection URL from a KeePass entry\nmattstash db-url \"My Database\" --database mydb\n```\n\n### Adding S3 credentials\n\nTo add a credential specifically for S3 connectivity, use the `put` command with the following fields:\n\n- `--username` for the AWS access key ID\n- `--password` for the AWS secret access key\n- `--url` for the S3 endpoint URL\n- `--notes` for any additional information\n\nExample:\n\n```bash\nmattstash put \"Hetzner S3\" --username KEY --password SECRET --url https://endpoint --notes \"Hetzner S3 storage\"\n```\n\nThe `s3-test` command expects the AWS-style key, secret, and endpoint to be stored in these fields in the KeePass entry.\n\nYou can also use the Python API to fetch S3 credentials and create a boto3 client using the helper function `get_s3_client`, which returns a ready-to-use authenticated boto3 S3 client.\n\nExample using the module-level helper:\n\n```python\nfrom mattstash.s3 import get_s3_client\nfrom mattstash.core import MattStash\n\nclient = get_s3_client(\"Hetzner S3\")\n# Upload a file\nclient.upload_file('localfile.txt', 'my-bucket', 'remote/path/localfile.txt')\n```\n\nOr using the instance method:\n\n```python\nfrom mattstash.core import MattStash\n\nstash = MattStash()\nclient = stash.get_s3_client(\"Hetzner S3\")\n# Upload a file\nclient.upload_file('localfile.txt', 'my-bucket', 'remote/path/localfile.txt')\n```\n\n### Adding database credentials\n\nTo add a credential for database connectivity, use the `put` command with these fields:\n\n- `--username` for the database user\n- `--password` for the database password\n- `--url` for the database host URL (must include port)\n- `--notes` for any additional information\n\nExample:\n\n```bash\nmattstash put \"My Database\" --username dbuser --password dbpass --url 127.0.0.1:5432 --notes \"Postgres DB\"\n```\n\nYou can then build a Postgres/SQLAlchemy connection URL using the `db-url` command:\n\n```bash\nmattstash db-url \"My Database\" --database mydb\n```\n\nThe tool validates the URL format and requires that the `url` field includes a port number.\n\nGlobal options:\n\n- `--db PATH` \u2014 path to the `.kdbx` database (default: `~/.credentials/mattstash.kdbx`)\n- `--password VALUE` \u2014 override DB password (otherwise read from sidecar or `KDBX_PASSWORD`)\n- `--verbose` \u2014 extra logging (CLI subcommands may also support `--quiet`)\n\nSubcommand options:\n\n- `list`: `--json`, `--show-password`\n- `get`: `--json`, `--show-password`\n- `keys`: (no options)\n- `put`: `--value`, `--username`, `--password`, `--url`, `--notes`\n- `delete`: (no options)\n- `versions`: `--json`\n- `s3-test`: `--region`, `--addressing {path,virtual}`, `--signature-version`, `--retries-max-attempts`, `--bucket`, `--quiet`\n- `db-url`: `--database` (required; database name), `--mask-password` (optional, default true)\n\n### Exit codes\n\n- `0` \u2014 success\n- `2` \u2014 entry not found (for `get`)\n- `3` \u2014 failed to create S3 client\n- `4` \u2014 S3 HeadBucket failed\n\n### Examples\n\n```bash\n# Minimal list\nmattstash list\n\n# Get a credential as JSON (good for scripting)\nmattstash get \"CI Token\" --json\n\n# List all keys (entry titles)\nmattstash keys\n\n# Add or update an S3 credential\nmattstash put \"Hetzner S3\" --username KEY --password SECRET --url https://endpoint\n\n# Delete an old key\nmattstash delete \"old-key\"\n\n# Show versions/history for an entry\nmattstash versions \"Hetzner S3\"\n\n# S3 test against a Hetzner/MinIO-style endpoint stored in KeePass entry \"objectstore\"\nmattstash s3-test \"objectstore\" --bucket cornyhorse-data\n\n# Build a Postgres connection URL from a KeePass entry\nmattstash db-url \"My Database\" --database mydb\n```\n\n## Python API usage\n\nYou can also use `mattstash` programmatically with the Python API. Here are examples that mirror the CLI commands:\n\n```python\nfrom mattstash.core import MattStash\n\nstash = MattStash()\n\n# List all entries\nfor entry in stash.list():\n print(entry['title'])\n\n# List all entries as JSON (dictionary)\nentries = list(stash.list())\nprint(entries)\n\n# Get one entry by title (returns dict with fields)\nentry = stash.get(\"My Service\")\nprint(entry)\n\n# Get a simple secret (password only)\nsecret = stash.get(\"MySecret\") # returns dict with 'password' field\n\n# Add or update an entry (full credential dict style)\nstash.put(\"My Service\", username=\"user\", password=\"pass\", url=\"https://example.com\", notes=\"notes\")\n\n# Add or update a simple secret (password only)\nstash.put(\"MySecret\", value=\"mysecretpassword\")\n\n# Delete an entry\nstash.delete(\"My Service\")\n\n# List all keys (entry titles)\nkeys = stash.keys()\nprint(keys)\n\n# Show versions/history of an entry\nversions = stash.versions(\"My Service\")\nfor version in versions:\n print(version)\n\n# Use `get_s3_client(...)` to create a ready-to-use boto3 S3 client from a KeePass entry\n\nfrom mattstash.s3 import get_s3_client\n\nclient = get_s3_client(\"Hetzner S3\")\n# Example: upload a file\nclient.upload_file('localfile.txt', 'my-bucket', 'remote/path/localfile.txt')\n\n# Or using the instance method\nclient2 = stash.get_s3_client(\"Hetzner S3\")\nclient2.upload_file('localfile.txt', 'my-bucket', 'remote/path/localfile.txt')\n```\n\n### Database connection URL support\n\nYou can add database credentials similarly using `--username`, `--password`, `--url` (including port), and `--notes` fields:\n\n```python\nstash.put(\"My Database\", username=\"dbuser\", password=\"dbpass\", url=\"127.0.0.1:5432\", notes=\"Postgres DB\")\n```\n\nTo build a full SQLAlchemy/Postgres connection URL, use the `get_db_url` method:\n\n```python\n# Build a connection URL with password masked (default)\nurl = stash.get_db_url(\"My Database\", database=\"mydb\")\nprint(url) # e.g. postgresql://dbuser:****@127.0.0.1:5432/mydb\n\n# Build a connection URL with password visible\nurl_unmasked = stash.get_db_url(\"My Database\", database=\"mydb\", mask_password=False)\nprint(url_unmasked) # e.g. postgresql://dbuser:dbpass@127.0.0.1:5432/mydb\n```\n\nNote that the tool validates that the `url` field includes a port and that the resulting URL is valid for your database driver.\n",
"bugtrack_url": null,
"license": "MIT License\n \n Copyright (c) 2025 Matthew Kingsbury\n \n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.",
"summary": "Tiny KeePass-powered secrets accessor with optional S3 helper and Postgres URL builder.",
"version": "0.1.0",
"project_urls": {
"Changelog": "https://github.com/cornyhorse/mattstash/releases",
"Homepage": "https://github.com/cornyhorse/mattstash",
"Issues": "https://github.com/cornyhorse/mattstash/issues",
"Repository": "https://github.com/cornyhorse/mattstash"
},
"split_keywords": [
"cli",
" connection-string",
" credentials-store",
" keepass",
" password-manager",
" postgres",
" s3",
" secrets"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "3ae8185199ba40f66b972c2288989bd34d0d13203b7f58bb074d96272f86bef8",
"md5": "a1b2d5648960ad68dd0a3f10dac0c098",
"sha256": "22bf450eb1729b9ed9e6bbd06c6259f2b788e2bbe9ec439ffbfa45984395fe89"
},
"downloads": -1,
"filename": "mattstash-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "a1b2d5648960ad68dd0a3f10dac0c098",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 16220,
"upload_time": "2025-08-25T19:32:46",
"upload_time_iso_8601": "2025-08-25T19:32:46.979343Z",
"url": "https://files.pythonhosted.org/packages/3a/e8/185199ba40f66b972c2288989bd34d0d13203b7f58bb074d96272f86bef8/mattstash-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "88ed9dfe504ce5a3640ad41adf5ef58fc6266660c1ee680d1ef98c45ba58c9f7",
"md5": "59106f2fa8914db09bf2864f6eb93df4",
"sha256": "fef3708bdbc8174b3941f4b649631afa103573a12f257673d4f20bcfa0dba87d"
},
"downloads": -1,
"filename": "mattstash-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "59106f2fa8914db09bf2864f6eb93df4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 20315,
"upload_time": "2025-08-25T19:32:48",
"upload_time_iso_8601": "2025-08-25T19:32:48.475812Z",
"url": "https://files.pythonhosted.org/packages/88/ed/9dfe504ce5a3640ad41adf5ef58fc6266660c1ee680d1ef98c45ba58c9f7/mattstash-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-25 19:32:48",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "cornyhorse",
"github_project": "mattstash",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "pykeepass",
"specs": []
},
{
"name": "boto3",
"specs": []
},
{
"name": "botocore",
"specs": []
},
{
"name": "pytest",
"specs": []
}
],
"lcname": "mattstash"
}