No project description provided
Project description
Envolved
Envolved is a library to make environment variable parsing powerful and effortless.
from envolved import EnvVar
# create an env var with an int value
foo: EnvVar[int] = EnvVar('FOO', type=int, default=0)
value_of_foo = foo.get() # this method will check for the environment variable FOO, and parse it as an int
# we can also have some more complex parsers
from typing import List, Optional
from envolved.parsers import JsonParser
foo = EnvVar('FOO', type=JsonParser(List[float]))
foo.get() # now we will parse the value of FOO as a JSON list, and ensure that all its inner values are numbers
# we can also use schemas to combine multiple environment variables
from envolved import Schema
from dataclasses import dataclass
@dataclass
# say we want the environment to describe a ConnectionSetting
class ConnectionSetting:
host: str
port: int
user: Optional[str]
password: Optional[str]
# note that schemas work with any factory or class that annotates its constructor, dataclass is used for simplicity
class ConnectionSettingSchema(Schema, type=ConnectionSetting):
host = EnvVar('hostname')
# we now define an env var inside the schema. Its suffix will be "hostname", and its type will be inferred from the
# type's annotation
port = EnvVar() # if we like the parameter name as the env var suffix, we can leave the env var empty
user: str = EnvVar('username') # we can annotate the schema members to override the type inference
password = EnvVar(type=str, default=None) # we can set a default to show that the type var may be missing
connection_settings: EnvVar[ConnectionSetting] = EnvVar('service_', type=ConnectionSettingSchema)
service_connection_settings: ConnectionSetting = connection_settings.get()
# this will look in 4 environment variables:
# host will be extracted from service_hostname
# port will be extracted from service_port, then converted to an int
# user will be extracted from service_username
# password will be extracted from service_password, and will default to None
# finally, ConnectionSetting will be called with the parameters
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
envolved-0.1.1.tar.gz
(11.0 kB
view details)
Built Distribution
envolved-0.1.1-py3-none-any.whl
(12.7 kB
view details)
File details
Details for the file envolved-0.1.1.tar.gz
.
File metadata
- Download URL: envolved-0.1.1.tar.gz
- Upload date:
- Size: 11.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.4 CPython/3.8.6 Linux/5.4.0-1032-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6b3be21f3f8f8c7faad4f563023fd9992f3243bf1ba43ff4a5ede54aa0322306 |
|
MD5 | 39f5516f7eb9e9f1e2e4dcd1a6b7265b |
|
BLAKE2b-256 | 4a54da02208a0fceeb1852c8bcc96e267826a12008a5e1532f41e09b41a496bb |
File details
Details for the file envolved-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: envolved-0.1.1-py3-none-any.whl
- Upload date:
- Size: 12.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.4 CPython/3.8.6 Linux/5.4.0-1032-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5c78fd977c7210ea4a782f35d4dd832e4eed9512aa7b1c34dd5ecd0d80dcb5f4 |
|
MD5 | 0e51c8aab47dd7ad3e49ef8dd75ba388 |
|
BLAKE2b-256 | c43e9fdf20a13efc1969af2543f7becf4ca138972566f1a8a551ee12c757ed09 |