# Key Vault Python SDK
A Python SDK for securely accessing your Key Vault API keys and secrets.
## Installation
```bash
pip install amay-key-vault-sdk
```
## Quick Start
```python
from key_vault_sdk import KeyVault
# Initialize the SDK
kv = KeyVault(
api_url="https://yourdomain.com/api",
token="your-api-token"
)
# Get a key by name
api_key = kv.get_key_by_name("folder-id", "stripe-secret-key")
print(f"API Key: {api_key}")
# List all keys in a folder
result = kv.list_keys(folder_id="folder-id", limit=50)
print(f"Found {len(result['keys'])} keys")
# Get multiple keys at once
keys = kv.get_multiple_keys(
folder_id="folder-id",
key_names=["stripe-key", "database-password", "api-secret"]
)
print(f"Retrieved {len(keys)} keys")
```
## Features
- 🔐 **Secure Access**: All keys are encrypted and securely transmitted
- 📁 **Folder Support**: Organize keys in hierarchical folders
- 🔍 **Search & Filter**: Find keys by name, type, or tags
- 📊 **Statistics**: Get usage statistics and folder information
- 🔄 **Auto Refresh**: Automatic token refresh handling
- 🛡️ **Error Handling**: Comprehensive error handling with specific exceptions
## API Reference
### Authentication
```python
from key_vault_sdk import KeyVault
kv = KeyVault(
api_url="https://yourdomain.com/api",
token="your-api-token",
timeout=30 # Optional: request timeout in seconds
)
```
### Key Operations
#### Get Key by Name
```python
# Get a key's value by name (convenience method)
api_key = kv.get_key_by_name("folder-id", "stripe-secret-key")
```
#### Get Key by ID
```python
# Get key metadata only
key = kv.get_key("key-id")
# Get key with decrypted value
key_with_value = kv.get_key("key-id", include_value=True)
print(f"Key: {key_with_value['name']}, Value: {key_with_value['value']}")
```
#### List Keys
```python
# List keys in a folder with pagination
result = kv.list_keys(
folder_id="folder-id",
limit=20, # Number of keys to return
offset=0 # Number of keys to skip
)
print(f"Found {result['total']} keys")
for key in result['keys']:
print(f"- {key['name']} ({key['type']})")
```
#### Get Multiple Keys
```python
# Get multiple keys by name
keys = kv.get_multiple_keys(
folder_id="folder-id",
key_names=["stripe-key", "database-password", "api-secret"]
)
for name, value in keys.items():
if value:
print(f"{name}: {value}")
else:
print(f"{name}: Not found")
```
### Folder Operations
#### List Folders
```python
# List all folders with hierarchical structure
folders = kv.list_folders()
print(f"Found {len(folders['folders'])} root folders")
# List folders within a specific project
project_folders = kv.list_folders(project_id="project-id")
```
#### List Projects
```python
# List only root folders (projects)
projects = kv.list_projects()
for project in projects:
print(f"Project: {project['name']} (ID: {project['id']})")
```
#### Get Folder Details
```python
# Get a specific folder with its contents
folder_data = kv.get_folder("folder-id")
print(f"Folder: {folder_data['folder']['name']}")
print(f"Contains {len(folder_data['keys'])} keys")
```
### Search Operations
#### Search Keys
```python
# Search for keys across all folders
results = kv.search_keys(
search="database",
key_type="PASSWORD",
favorite=True,
limit=20
)
print(f"Found {len(results['keys'])} database passwords")
```
### Utility Methods
#### Test Connection
```python
# Test the connection to the Key Vault API
if kv.test_connection():
print("Connection successful!")
else:
print("Connection failed!")
```
#### Get Statistics
```python
# Get folder and key statistics
stats = kv.get_stats()
print(f"Total keys: {stats['totalKeys']}")
print(f"Total folders: {stats['folders']}")
```
## Error Handling
The SDK provides specific exception types for different error scenarios:
```python
from key_vault_sdk import KeyVaultError, KeyVaultAuthError, KeyVaultNotFoundError
try:
key = kv.get_key("key-id")
except KeyVaultAuthError:
print("Authentication failed - check your token")
except KeyVaultNotFoundError:
print("Key not found")
except KeyVaultError as e:
print(f"API error: {e}")
```
## Examples
### Complete Example
```python
from key_vault_sdk import KeyVault
def main():
# Initialize SDK
kv = KeyVault(
api_url="https://yourdomain.com/api",
token="your-api-token"
)
try:
# Test connection
if not kv.test_connection():
print("Failed to connect to Key Vault")
return
# List projects
projects = kv.list_projects()
print(f"Available projects: {len(projects)}")
# Get keys from first project
if projects:
project_id = projects[0]['id']
result = kv.list_keys(folder_id=project_id, limit=10)
print(f"Keys in {projects[0]['name']}:")
for key in result['keys']:
print(f"- {key['name']} ({key['type']})")
# Get key value if needed
if key['type'] == 'API_KEY':
key_with_value = kv.get_key(key['id'], include_value=True)
print(f" Value: {key_with_value['value']}")
except Exception as e:
print(f"Error: {e}")
if __name__ == "__main__":
main()
```
## Development
### Local Testing
For local development, use the local server URL:
```python
kv = KeyVault(
api_url="http://localhost:3000/api",
token="your-local-token"
)
```
### Running Tests
```bash
cd python-sdk
python -m pytest tests/
```
## License
MIT License - see LICENSE file for details.
## Support
- GitHub Issues: https://github.com/amaykorade/key-vault/issues
- Documentation: https://github.com/amaykorade/key-vault#readme
Raw data
{
"_id": null,
"home_page": "https://github.com/amaykorade/key-vault",
"name": "amay-key-vault-sdk",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "keyvault, sdk, secrets, api, vault, python",
"author": "Amay Korade",
"author_email": "amaykorade5@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/f5/eb/75fb31edfbb5d79ac59d78a2c7424fd602d3bf303ecaf9451945c1962c51/amay_key_vault_sdk-1.0.2.tar.gz",
"platform": null,
"description": "# Key Vault Python SDK\n\nA Python SDK for securely accessing your Key Vault API keys and secrets.\n\n## Installation\n\n```bash\npip install amay-key-vault-sdk\n```\n\n## Quick Start\n\n```python\nfrom key_vault_sdk import KeyVault\n\n# Initialize the SDK\nkv = KeyVault(\n api_url=\"https://yourdomain.com/api\",\n token=\"your-api-token\"\n)\n\n# Get a key by name\napi_key = kv.get_key_by_name(\"folder-id\", \"stripe-secret-key\")\nprint(f\"API Key: {api_key}\")\n\n# List all keys in a folder\nresult = kv.list_keys(folder_id=\"folder-id\", limit=50)\nprint(f\"Found {len(result['keys'])} keys\")\n\n# Get multiple keys at once\nkeys = kv.get_multiple_keys(\n folder_id=\"folder-id\",\n key_names=[\"stripe-key\", \"database-password\", \"api-secret\"]\n)\nprint(f\"Retrieved {len(keys)} keys\")\n```\n\n## Features\n\n- \ud83d\udd10 **Secure Access**: All keys are encrypted and securely transmitted\n- \ud83d\udcc1 **Folder Support**: Organize keys in hierarchical folders\n- \ud83d\udd0d **Search & Filter**: Find keys by name, type, or tags\n- \ud83d\udcca **Statistics**: Get usage statistics and folder information\n- \ud83d\udd04 **Auto Refresh**: Automatic token refresh handling\n- \ud83d\udee1\ufe0f **Error Handling**: Comprehensive error handling with specific exceptions\n\n## API Reference\n\n### Authentication\n\n```python\nfrom key_vault_sdk import KeyVault\n\nkv = KeyVault(\n api_url=\"https://yourdomain.com/api\",\n token=\"your-api-token\",\n timeout=30 # Optional: request timeout in seconds\n)\n```\n\n### Key Operations\n\n#### Get Key by Name\n```python\n# Get a key's value by name (convenience method)\napi_key = kv.get_key_by_name(\"folder-id\", \"stripe-secret-key\")\n```\n\n#### Get Key by ID\n```python\n# Get key metadata only\nkey = kv.get_key(\"key-id\")\n\n# Get key with decrypted value\nkey_with_value = kv.get_key(\"key-id\", include_value=True)\nprint(f\"Key: {key_with_value['name']}, Value: {key_with_value['value']}\")\n```\n\n#### List Keys\n```python\n# List keys in a folder with pagination\nresult = kv.list_keys(\n folder_id=\"folder-id\",\n limit=20, # Number of keys to return\n offset=0 # Number of keys to skip\n)\n\nprint(f\"Found {result['total']} keys\")\nfor key in result['keys']:\n print(f\"- {key['name']} ({key['type']})\")\n```\n\n#### Get Multiple Keys\n```python\n# Get multiple keys by name\nkeys = kv.get_multiple_keys(\n folder_id=\"folder-id\",\n key_names=[\"stripe-key\", \"database-password\", \"api-secret\"]\n)\n\nfor name, value in keys.items():\n if value:\n print(f\"{name}: {value}\")\n else:\n print(f\"{name}: Not found\")\n```\n\n### Folder Operations\n\n#### List Folders\n```python\n# List all folders with hierarchical structure\nfolders = kv.list_folders()\nprint(f\"Found {len(folders['folders'])} root folders\")\n\n# List folders within a specific project\nproject_folders = kv.list_folders(project_id=\"project-id\")\n```\n\n#### List Projects\n```python\n# List only root folders (projects)\nprojects = kv.list_projects()\nfor project in projects:\n print(f\"Project: {project['name']} (ID: {project['id']})\")\n```\n\n#### Get Folder Details\n```python\n# Get a specific folder with its contents\nfolder_data = kv.get_folder(\"folder-id\")\nprint(f\"Folder: {folder_data['folder']['name']}\")\nprint(f\"Contains {len(folder_data['keys'])} keys\")\n```\n\n### Search Operations\n\n#### Search Keys\n```python\n# Search for keys across all folders\nresults = kv.search_keys(\n search=\"database\",\n key_type=\"PASSWORD\",\n favorite=True,\n limit=20\n)\n\nprint(f\"Found {len(results['keys'])} database passwords\")\n```\n\n### Utility Methods\n\n#### Test Connection\n```python\n# Test the connection to the Key Vault API\nif kv.test_connection():\n print(\"Connection successful!\")\nelse:\n print(\"Connection failed!\")\n```\n\n#### Get Statistics\n```python\n# Get folder and key statistics\nstats = kv.get_stats()\nprint(f\"Total keys: {stats['totalKeys']}\")\nprint(f\"Total folders: {stats['folders']}\")\n```\n\n## Error Handling\n\nThe SDK provides specific exception types for different error scenarios:\n\n```python\nfrom key_vault_sdk import KeyVaultError, KeyVaultAuthError, KeyVaultNotFoundError\n\ntry:\n key = kv.get_key(\"key-id\")\nexcept KeyVaultAuthError:\n print(\"Authentication failed - check your token\")\nexcept KeyVaultNotFoundError:\n print(\"Key not found\")\nexcept KeyVaultError as e:\n print(f\"API error: {e}\")\n```\n\n## Examples\n\n### Complete Example\n```python\nfrom key_vault_sdk import KeyVault\n\ndef main():\n # Initialize SDK\n kv = KeyVault(\n api_url=\"https://yourdomain.com/api\",\n token=\"your-api-token\"\n )\n \n try:\n # Test connection\n if not kv.test_connection():\n print(\"Failed to connect to Key Vault\")\n return\n \n # List projects\n projects = kv.list_projects()\n print(f\"Available projects: {len(projects)}\")\n \n # Get keys from first project\n if projects:\n project_id = projects[0]['id']\n result = kv.list_keys(folder_id=project_id, limit=10)\n \n print(f\"Keys in {projects[0]['name']}:\")\n for key in result['keys']:\n print(f\"- {key['name']} ({key['type']})\")\n \n # Get key value if needed\n if key['type'] == 'API_KEY':\n key_with_value = kv.get_key(key['id'], include_value=True)\n print(f\" Value: {key_with_value['value']}\")\n \n except Exception as e:\n print(f\"Error: {e}\")\n\nif __name__ == \"__main__\":\n main()\n```\n\n## Development\n\n### Local Testing\nFor local development, use the local server URL:\n\n```python\nkv = KeyVault(\n api_url=\"http://localhost:3000/api\",\n token=\"your-local-token\"\n)\n```\n\n### Running Tests\n```bash\ncd python-sdk\npython -m pytest tests/\n```\n\n## License\n\nMIT License - see LICENSE file for details.\n\n## Support\n\n- GitHub Issues: https://github.com/amaykorade/key-vault/issues\n- Documentation: https://github.com/amaykorade/key-vault#readme \n",
"bugtrack_url": null,
"license": null,
"summary": "Python SDK for accessing Key Vault API keys and values",
"version": "1.0.2",
"project_urls": {
"Bug Reports": "https://github.com/amaykorade/key-vault/issues",
"Documentation": "https://github.com/amaykorade/key-vault#readme",
"Homepage": "https://github.com/amaykorade/key-vault",
"Source": "https://github.com/amaykorade/key-vault"
},
"split_keywords": [
"keyvault",
" sdk",
" secrets",
" api",
" vault",
" python"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "f794633f3a89044a734075f29743c03821064cf9f01c2e71b7d26e18639adb4d",
"md5": "987730cc427175b49ab57c9bddd877e5",
"sha256": "71cf9a97246e1e4da65727525015ebd3da0c0c1d0a7990759afed1b0f5cc162e"
},
"downloads": -1,
"filename": "amay_key_vault_sdk-1.0.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "987730cc427175b49ab57c9bddd877e5",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 8644,
"upload_time": "2025-08-06T19:12:11",
"upload_time_iso_8601": "2025-08-06T19:12:11.864715Z",
"url": "https://files.pythonhosted.org/packages/f7/94/633f3a89044a734075f29743c03821064cf9f01c2e71b7d26e18639adb4d/amay_key_vault_sdk-1.0.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f5eb75fb31edfbb5d79ac59d78a2c7424fd602d3bf303ecaf9451945c1962c51",
"md5": "776a8cf07ee09194ea6cd1c5e1d0ad48",
"sha256": "bd8e7cee77605756996c8fa8dfdb8f3affd208e46effe7433268987156632890"
},
"downloads": -1,
"filename": "amay_key_vault_sdk-1.0.2.tar.gz",
"has_sig": false,
"md5_digest": "776a8cf07ee09194ea6cd1c5e1d0ad48",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 8018,
"upload_time": "2025-08-06T19:12:13",
"upload_time_iso_8601": "2025-08-06T19:12:13.284552Z",
"url": "https://files.pythonhosted.org/packages/f5/eb/75fb31edfbb5d79ac59d78a2c7424fd602d3bf303ecaf9451945c1962c51/amay_key_vault_sdk-1.0.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-06 19:12:13",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "amaykorade",
"github_project": "key-vault",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "amay-key-vault-sdk"
}