Skip to main content

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


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)

Uploaded Source

Built Distribution

envolved-0.1.1-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

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

Hashes for envolved-0.1.1.tar.gz
Algorithm Hash digest
SHA256 6b3be21f3f8f8c7faad4f563023fd9992f3243bf1ba43ff4a5ede54aa0322306
MD5 39f5516f7eb9e9f1e2e4dcd1a6b7265b
BLAKE2b-256 4a54da02208a0fceeb1852c8bcc96e267826a12008a5e1532f41e09b41a496bb

See more details on using hashes here.

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

Hashes for envolved-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5c78fd977c7210ea4a782f35d4dd832e4eed9512aa7b1c34dd5ecd0d80dcb5f4
MD5 0e51c8aab47dd7ad3e49ef8dd75ba388
BLAKE2b-256 c43e9fdf20a13efc1969af2543f7becf4ca138972566f1a8a551ee12c757ed09

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page