env-use 1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,401 @@
1
+ Metadata-Version: 2.4
2
+ Name: env-use
3
+ Version: 1.0.0
4
+ Summary: Environment file processor with extensible secret providers
5
+ Author-email: Developer <dev@example.com>
6
+ License: MIT
7
+ Keywords: cli,configuration,devops,environment,secrets
8
+ Classifier: Development Status :: 4 - Beta
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: License :: OSI Approved :: MIT License
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Programming Language :: Python :: 3.13
14
+ Requires-Python: >=3.12
15
+ Requires-Dist: pydantic>=2.0
16
+ Requires-Dist: pyyaml>=6.0
17
+ Requires-Dist: rich>=13.0
18
+ Provides-Extra: 1password
19
+ Requires-Dist: aiohttp>=3.9.0; extra == '1password'
20
+ Provides-Extra: all
21
+ Requires-Dist: aiohttp>=3.9.0; extra == 'all'
22
+ Requires-Dist: azure-identity>=1.15.0; extra == 'all'
23
+ Requires-Dist: azure-keyvault-secrets>=4.8.0; extra == 'all'
24
+ Requires-Dist: boto3>=1.34.0; extra == 'all'
25
+ Requires-Dist: google-cloud-secret-manager>=2.20.0; extra == 'all'
26
+ Requires-Dist: hvac>=2.1.0; extra == 'all'
27
+ Provides-Extra: aws
28
+ Requires-Dist: boto3>=1.34.0; extra == 'aws'
29
+ Provides-Extra: azure
30
+ Requires-Dist: azure-identity>=1.15.0; extra == 'azure'
31
+ Requires-Dist: azure-keyvault-secrets>=4.8.0; extra == 'azure'
32
+ Provides-Extra: dev
33
+ Requires-Dist: coverage[toml]>=7.0; extra == 'dev'
34
+ Requires-Dist: mypy>=1.8; extra == 'dev'
35
+ Requires-Dist: pytest-cov>=5.0; extra == 'dev'
36
+ Requires-Dist: pytest-mock>=3.12; extra == 'dev'
37
+ Requires-Dist: pytest>=8.0; extra == 'dev'
38
+ Requires-Dist: python-semantic-release>=9.0; extra == 'dev'
39
+ Requires-Dist: ruff>=0.4; extra == 'dev'
40
+ Provides-Extra: gcp
41
+ Requires-Dist: google-cloud-secret-manager>=2.20.0; extra == 'gcp'
42
+ Provides-Extra: vault
43
+ Requires-Dist: hvac>=2.1.0; extra == 'vault'
44
+ Description-Content-Type: text/markdown
45
+
46
+ # use-env
47
+
48
+ [![Release](https://github.com/SamCullin/use-env/actions/workflows/release.yml/badge.svg)](https://github.com/SamCullin/use-env/actions/workflows/release.yml)
49
+ [![CI](https://github.com/SamCullin/use-env/actions/workflows/ci.yml/badge.svg)](https://github.com/SamCullin/use-env/actions/workflows/ci.yml)
50
+ [![PyPI version](https://badge.fury.io/py/env-use.svg)](https://badge.fury.io/py/env-use)
51
+ [![GitHub Release](https://img.shields.io/github/v/release/SamCullin/use-env)](https://github.com/SamCullin/use-env/releases)
52
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
53
+ [![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/SamCullin/use-env/graphs/commit-activity)
54
+ [![Downloads](https://img.shields.io/pypi/dm/env-use.svg)](https://pypi.org/project/env-use/)
55
+ [![GitHub issues](https://img.shields.io/github/issues/SamCullin/use-env.svg)](https://github.com/SamCullin/use-env/issues)
56
+ [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat)](https://makeapullrequest.com)
57
+ [![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-%23FE5196?logo=conventionalcommits&logoColor=white)](https://conventionalcommits.org)
58
+ [![semantic-release: angular](https://img.shields.io/badge/semantic--release-angular-e10079?logo=semantic-release)](https://github.com/semantic-release/semantic-release)
59
+
60
+ [use-env](/) > [use_env](/use_env/) > [providers](/use_env/providers/) > [tests](/tests/) > [.github](/.github/) > [docs](/docs/) > [examples](/examples/)
61
+
62
+ [!['Buy Me A Coffee'](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/samcullin)
63
+
64
+ ## Summary
65
+ **Environment file processor with extensible secret providers.**
66
+
67
+
68
+ `use-env` is a CLI tool for developers that processes environment files with secret references and resolves them from various providers (vault, environment variables, files, etc.).
69
+
70
+ ## Features
71
+
72
+ - **Extensible Provider System**: Add custom providers for any secret source
73
+ - **Built-in Providers**: Support for environment variables and files (no external dependencies)
74
+ - **Optional Cloud Providers**: Azure, AWS, GCP, HashiCorp Vault, 1Password (install only what you need)
75
+ - **Configuration**: YAML-based configuration for custom providers
76
+ - **Type Safety**: Written in Python with full type annotations
77
+ - **Test Coverage**: Comprehensive test suite
78
+
79
+ ## Installation
80
+
81
+ ```bash
82
+ # Core package only (env and file providers)
83
+ pip install env-use
84
+
85
+ # Or using uv
86
+ uv pip install env-use
87
+ ```
88
+
89
+ ### Optional Cloud Providers
90
+
91
+ Install only the providers you need:
92
+
93
+ ```bash
94
+ # Azure Key Vault (Python SDK)
95
+ pip install env-use[azure]
96
+
97
+ # AWS Secrets Manager
98
+ pip install env-use[aws]
99
+
100
+ # Google Cloud Secret Manager
101
+ pip install env-use[gcp]
102
+
103
+ # HashiCorp Vault
104
+ pip install env-use[vault]
105
+
106
+ # 1Password Connect
107
+ pip install env-use[1password]
108
+
109
+ # All cloud providers
110
+ pip install env-use[all]
111
+ ```
112
+
113
+ ## Quick Start
114
+
115
+ ### Basic Usage
116
+
117
+ ```bash
118
+ # Process .env.dev and output .env
119
+ use-env .env.dev
120
+
121
+ # Specify output file
122
+ use-env .env.prod -o .env.production
123
+
124
+ # List available providers
125
+ use-env --list-providers
126
+ ```
127
+
128
+ ### Environment File Example
129
+
130
+ Create a `.env.dev` file:
131
+
132
+ ```bash
133
+ # Regular values
134
+ DATABASE_HOST=localhost
135
+ DATABASE_PORT=5432
136
+
137
+ # Environment variable reference
138
+ API_KEY=${env:MY_API_KEY}
139
+
140
+ # File-based secret (Docker secrets, etc.)
141
+ DB_PASSWORD=${file:/run/secrets/db_password}
142
+
143
+ # Azure Key Vault (requires env-use[azure])
144
+ # Format: ${azure-keyvault:<vault_name>/<secret_name>}
145
+ SECRET_KEY=${azure-keyvault:my-keyvault/db-password}
146
+
147
+ # AWS Secrets Manager (requires env-use[aws])
148
+ # Format: ${aws-secrets:<region>/<secret_name>}
149
+ DB_PASSWORD=${aws-secrets:us-east-1/my-app/database}
150
+
151
+ # GCP Secret Manager (requires env-use[gcp])
152
+ # Format: ${gcp-secrets:<project_id>/<secret_name>}
153
+ API_KEY=${gcp-secrets:my-project/api-key}
154
+
155
+ # HashiCorp Vault (requires env-use[vault])
156
+ # Format: ${vault:<mount_point>/<path>}
157
+ DB_PASSWORD=${vault:secret/my-app/database}
158
+
159
+ # 1Password (requires env-use[1password])
160
+ # Format: ${1password:<vault_id>/<item_id>/<field>}
161
+ API_KEY=${1password:vault-id/item-id/api-key}
162
+ ```
163
+
164
+ Run the tool:
165
+
166
+ ```bash
167
+ use-env .env.dev
168
+ ```
169
+
170
+ This will create a `.env` file with all references resolved.
171
+
172
+ ### Piping Support
173
+
174
+ The tool supports piping for flexible workflows:
175
+
176
+ ```bash
177
+ # Pipe input from stdin, output to stdout
178
+ cat .env.dev | use-env
179
+
180
+ # Pipe input, save output to file
181
+ cat .env.dev | use-env > .env
182
+
183
+ # Pipe output to another command
184
+ use-env .env.prod | grep DB_HOST
185
+
186
+ # Chain with other tools
187
+ cat .env.staging | use-env | jq '.DATABASE_'
188
+ ```
189
+
190
+ When input comes from stdin, output automatically goes to stdout. This enables standard Unix workflows.
191
+
192
+ ## Core Providers (No Extra Dependencies)
193
+
194
+ ### Environment Provider (`env`)
195
+
196
+ Reference environment variables:
197
+
198
+ ```bash
199
+ API_KEY=${env:API_KEY}
200
+ ```
201
+
202
+ ### File Provider (`file`)
203
+
204
+ Read secrets from files:
205
+
206
+ ```bash
207
+ # Absolute path
208
+ DB_PASSWORD=${file:/run/secrets/db_password}
209
+
210
+ # Relative path (relative to config or current directory)
211
+ API_KEY=${file:./secrets/api_key.txt}
212
+ ```
213
+
214
+ ## Optional Cloud Providers
215
+
216
+ ### Azure Key Vault (`azure-keyvault`)
217
+
218
+ Requires: `pip install env-use[azure]`
219
+
220
+ ```bash
221
+ # Format: ${azure-keyvault:<vault_name>/<secret_name>}
222
+ DB_PASSWORD=${azure-keyvault:my-keyvault/db-password}
223
+ ```
224
+
225
+ Configuration (in `.use-env.yaml`):
226
+
227
+ ```yaml
228
+ providers:
229
+ - name: azure
230
+ type: azure-keyvault
231
+ enabled: true
232
+ config:
233
+ tenant_id: "your-tenant-id" # Optional, uses default credential
234
+ client_id: "your-client-id" # Optional
235
+ client_secret: "your-secret" # Optional
236
+ ```
237
+
238
+ ### AWS Secrets Manager (`aws-secrets`)
239
+
240
+ Requires: `pip install env-use[aws]`
241
+
242
+ ```bash
243
+ # Format: ${aws-secrets:<region>/<secret_name>}
244
+ DB_PASSWORD=${aws-secrets:us-east-1/my-app/database}
245
+ ```
246
+
247
+ Configuration:
248
+
249
+ ```yaml
250
+ providers:
251
+ - name: aws
252
+ type: aws-secrets
253
+ enabled: true
254
+ config:
255
+ region: "us-east-1" # Optional, uses default session
256
+ profile: "my-aws-profile" # Optional
257
+ ```
258
+
259
+ ### GCP Secret Manager (`gcp-secrets`)
260
+
261
+ Requires: `pip install env-use[gcp]`
262
+
263
+ ```bash
264
+ # Format: ${gcp-secrets:<project_id>/<secret_name>}
265
+ API_KEY=${gcp-secrets:my-project/api-key}
266
+ ```
267
+
268
+ Configuration:
269
+
270
+ ```yaml
271
+ providers:
272
+ - name: gcp
273
+ type: gcp-secrets
274
+ enabled: true
275
+ config:
276
+ project_id: "my-gcp-project" # Optional, uses default
277
+ ```
278
+
279
+ ### HashiCorp Vault (`vault`)
280
+
281
+ Requires: `pip install env-use[vault]`
282
+
283
+ ```bash
284
+ # Format: ${vault:<mount_point>/<path>}
285
+ DB_PASSWORD=${vault:secret/my-app/database}
286
+ DB_HOST=${vault:secret/my-app/host} # Returns specific field if secret is JSON
287
+ ```
288
+
289
+ Configuration:
290
+
291
+ ```yaml
292
+ providers:
293
+ - name: vault
294
+ type: vault
295
+ enabled: true
296
+ config:
297
+ url: "http://127.0.0.1:8200" # Optional, uses VAULT_ADDR env var
298
+ token: "your-vault-token" # Optional, uses VAULT_TOKEN env var
299
+ namespace: "your-namespace" # Optional, for Enterprise Vault
300
+ mount_point: "secret" # Optional, default mount point
301
+ ```
302
+
303
+ ### 1Password Connect (`1password`)
304
+
305
+ Requires: `pip install env-use[1password]`
306
+
307
+ ```bash
308
+ # Format: ${1password:<vault_id>/<item_id>/<field>}
309
+ API_KEY=${1password:vault-uuid/item-uuid/api-key}
310
+ ```
311
+
312
+ Configuration:
313
+
314
+ ```yaml
315
+ providers:
316
+ - name: onepassword
317
+ type: 1password
318
+ enabled: true
319
+ config:
320
+ connect_url: "http://localhost:8080" # Optional, uses OP_CONNECT_HOST
321
+ connect_token: "your-token" # Optional, uses OP_CONNECT_TOKEN
322
+ ```
323
+
324
+ ## Configuration
325
+
326
+ Create a `.use-env.yaml` file to configure providers:
327
+
328
+ ```yaml
329
+ providers:
330
+ - name: azure
331
+ type: azure-keyvault
332
+ enabled: true
333
+ config:
334
+ tenant_id: "your-tenant-id"
335
+
336
+ - name: aws
337
+ type: aws-secrets
338
+ enabled: true
339
+ config:
340
+ region: "us-east-1"
341
+
342
+ options:
343
+ strict: true
344
+ verbose: 1
345
+ ```
346
+
347
+ ## Adding Custom Providers
348
+
349
+ See [Provider Development Guide](docs/provider_development.md) for detailed instructions.
350
+
351
+ ## Documentation
352
+
353
+ - [Architecture](docs/architecture.md) - Internal design and components
354
+ - [Provider Development](docs/provider_development.md) - Guide for creating custom providers
355
+ - [Usage Guide](docs/usage.md) - Detailed usage instructions
356
+
357
+ ## Testing
358
+
359
+ ```bash
360
+ # Run all tests
361
+ pytest
362
+
363
+ # Run with coverage
364
+ pytest --cov=use_env
365
+
366
+ # Run specific test file
367
+ pytest tests/test_providers.py
368
+ ```
369
+
370
+ ## CI/CD
371
+
372
+ This project uses GitHub Actions for continuous integration and deployment:
373
+
374
+ ### Pull Requests
375
+ - Runs on Python 3.12 and 3.13
376
+ - Ruff linting and formatting checks
377
+ - MyPy type checking
378
+ - Pytest with coverage
379
+ - Coverage uploaded to Codecov
380
+
381
+ ### Releases
382
+ - Automatically versions using [python-semantic-release](https://python-semantic-release.readthedocs.io/)
383
+ - Maintains a release PR branch from `main`/`master`
384
+ - Pushes a new version tag when a release PR is merged
385
+ - Publishes to PyPI and creates a GitHub Release on version tags
386
+
387
+ ### Commit Convention
388
+
389
+ This project uses [Conventional Commits](https://www.conventionalcommits.org/):
390
+
391
+ ```
392
+ feat: add new provider
393
+ fix: resolve caching issue
394
+ docs: update documentation
395
+ ```
396
+
397
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines.
398
+
399
+ ## License
400
+
401
+ MIT License - see LICENSE file for details.
@@ -0,0 +1,17 @@
1
+ use_env/__init__.py,sha256=LKBkbMvFb-4AZhPNL0nIpBSXsPqK4AqeEudxmbtDnoU,652
2
+ use_env/cli.py,sha256=Nre42EmYawP36l30MaE5XLSMzEVkAjoj2cFIbdTV83E,7608
3
+ use_env/config.py,sha256=WXhR3fqH_hxi2sP8uAzg8JMKJFVOiLggQUJmwad9Neo,3431
4
+ use_env/loader.py,sha256=v2NyT6tgpL6hWSDraKUKO8T0v0swbJ3RsWswUnVSLwU,9231
5
+ use_env/providers/__init__.py,sha256=kxlGNqRXIA-32EXdUweKx-r_RqQqOqt7_fQCe1uTm5Q,9431
6
+ use_env/providers/aws.py,sha256=BkwEVQEEYvfnsX8S6scJ_-nJjy42kCeE-CoH5pLQRHw,6535
7
+ use_env/providers/azure.py,sha256=MjXArZVLHI5I_hAJFbETX9YYLpKjRyH-pCQX68g-EYQ,4820
8
+ use_env/providers/built_in.py,sha256=BHYEowIXON1NHuGbo3qds-RVi_J0kMSw7HRS74IWgNg,1025
9
+ use_env/providers/env.py,sha256=ggw65BZm1RmPDCFXTOImWNRXTQ-X5_cVZPsIkjrlP4A,4613
10
+ use_env/providers/file.py,sha256=ozGsORr-aJ3qTlyBIThQKWdCku35Px9eSPF-kxUUxOk,4156
11
+ use_env/providers/gcp.py,sha256=XZclWDrdk7aF2rZ3CRZghhTnH6GchImJwOF4ToTB6I8,4378
12
+ use_env/providers/hashicorp.py,sha256=tjU0pBNHz-tu0sy_kFdddgreHIPetmpbs_mMFtTytag,6906
13
+ use_env/providers/onepassword.py,sha256=DtbsOkcRgejD7kRHQaJIcnWyTf1yh2eDWw-3droZa6Q,6630
14
+ env_use-1.0.0.dist-info/METADATA,sha256=uP4EqAELc4jZkfQzBpPAOhEHHatPkfdBvO16OaQ7Wmk,11002
15
+ env_use-1.0.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
16
+ env_use-1.0.0.dist-info/entry_points.txt,sha256=G9Q_GaxH_AZx89h3EzkBVAVUQ-ZwfAh3CO539_W3haE,45
17
+ env_use-1.0.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.29.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ use-env = use_env.cli:main
use_env/__init__.py ADDED
@@ -0,0 +1,27 @@
1
+ """
2
+ use-env: Environment file processor with extensible secret providers.
3
+
4
+ This tool allows developers to define environment files with secret references
5
+ that can be resolved from various providers (vault, environment variables, files, etc.).
6
+
7
+ Basic Usage:
8
+ use-env .env.dev
9
+
10
+ For more information, see:
11
+ https://github.com/yourusername/use-env
12
+ """
13
+
14
+ from .cli import main
15
+ from .config import UseEnvConfig
16
+ from .loader import EnvLoader
17
+ from .providers import Provider, ProviderError, ProviderRegistry
18
+
19
+ __version__ = "1.0.0"
20
+ __all__ = [
21
+ "main",
22
+ "UseEnvConfig",
23
+ "EnvLoader",
24
+ "Provider",
25
+ "ProviderRegistry",
26
+ "ProviderError",
27
+ ]