Skip to main content

Manage environment variables in a simple and elegant way

Project description

EnvClass

python_versions gnu version testing

Manage environment variables in a simple and elegant way

Made from 100% pure Python

Why does this exist

To manage environment variables in an easy way that works for any device (like a cell phone with termux)

If you intend to run in production, use pydantic-settings

Installation

pip install envclass

Quick Start

.env

HOST=0.0.0.0
PORT=1234

CONFIG_FILE=
from envclass import EnvClass


# When declaring the class with _env_file it
# reads the file and casts all attributes
class MyEnv(EnvClass):
    _env_file = '.env'

    TESTING: bool = False

    HOST: str = 'localhost'
    PORT: int

    CONFIG_FILE: str


# Return: '0.0.0.0'
MyEnv.HOST

# Return: False
MyEnv.TESTING

# Return: 1234
MyEnv.PORT

# Return: None
MyEnv.CONFIG_FILE

Supported Types

Currently, only primitive types have been tested, such as:

  • str
  • int
  • bool
  • float

Booleans

Attributes follow Python language conventions for conversion, but bool attributes have specific interpretations when reading environment variables:

bool attributes can be:

  • True, true, or 1 for true.
  • False, false, or 0 for false.

Read Only Attributes

When this configuration is defined, it is not possible to change the attributes

Example:

from envclass import EnvClass


class EnvLock(EnvClass)
    KEY: str = None

# Generates an AttributeError stating 
# that it is read-only
EnvLock.KEY = 'Value'

Lower Attrubutes

Lowercase attributes work the same way, I just thought leaving everything capitalized would look better

Since the name is closest to the environment variable read

Example:

.env

LOWER_KEY='lower'
from envclass import EnvClass

class EnvLower(EnvClass):
    _env_file = '.env'
    lower_key = 'upper'

# Return: 'lower'
EnvLower.lower_key

See your variables

The class is seen this way:

.env

ENV_A=3
ENV_B=1
ENV_C=10
from envclass import EnvClass

class Env(EnvClass):
    _env_file = '.env'
    _prefix = 'ENV'

    A: str
    B: bool = False
    C: int

print(Env)

Output:

ENV_A='3'
ENV_B=True
ENV_C=10

Special Attributes

Env File

By default, this is set to None.

It is used to read the file like .env

Example:

# file: no_load_env.py

from envclass import EnvClass


class NoEnv(EnvClass):
    WAIT_TIME: int = 10


print(NoEnv.WAIT_TIME)

Execution on Linux:

$ WAIT_TIME=5 python no_load_env.py
5

Strict Mode

By default, this is set to True.

This allows using environ[key] to signal when an environment variable is not defined, generating the default KeyError error if the variable does not have a default value. If set to False, attributes that do not exist will return None.

Examples:

from envclass import EnvClass

# Disabled strict mode
class NotStrict(EnvClass):
    _strict = False
    NOT_EXISTS: str

# Returns None
NotStrict.NOT_EXISTS


# Enabled strict mode
# Generates a KeyError
class Strict(EnvClass):
    _strict = True
    NOT_EXISTS: str

Prefix

By default, there is None

This allows adding a string at the beginning of the environment variable name, making it easier to organize.

Example:

.env

DB_USER=dev_user
DB_KEY=dev_key_123
from envclass import EnvClass

class DataBase(EnvClass):
    _env_file = '.env'
    _prefix = 'DB'

    NAME: str = 'Dev'
    HOST: str = 'localhost'

    USER: str
    KEY: str

# Return: 'Dev'
DataBase.NAME

# Return: dev_key_123
DataBase.KEY

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

envclass-1.1.0.tar.gz (17.8 kB view details)

Uploaded Source

Built Distribution

envclass-1.1.0-py3-none-any.whl (16.7 kB view details)

Uploaded Python 3

File details

Details for the file envclass-1.1.0.tar.gz.

File metadata

  • Download URL: envclass-1.1.0.tar.gz
  • Upload date:
  • Size: 17.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for envclass-1.1.0.tar.gz
Algorithm Hash digest
SHA256 bc4b66b31b5aac0cc9b760936c03809dd7e73aae0f7766ca31e03d6d8bbcc29d
MD5 8557bd7b28a99789ea97cdf5e811ceaa
BLAKE2b-256 b48778e1fb1472eb51db46060fc3d75928ea54e3b00632b885f18f47e22e8e5b

See more details on using hashes here.

File details

Details for the file envclass-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: envclass-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 16.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for envclass-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e9750a789c1635e85b1077ca7d89c84cf5fccd1eb316921fa9a0038394bea8d4
MD5 766a524838a4037f1bd6762a7343e01f
BLAKE2b-256 5e2c098625ef89beb47fd87fce524a3bafd738603cc56c9e338ae099567afc14

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