Skip to main content

Environment variable helpers

Project description

Roskarl

Is a tiny module for environment variables.

Requires

Python 3.11.0+

How to install

pip install roskarl

Example usage

from roskarl import (
    env_var,
    env_var_bool,
    env_var_cron,
    env_var_float,
    env_var_int,
    env_var_iso8601_datetime,
    env_var_list,
    env_var_rfc3339_datetime,
    env_var_tz,
    env_var_dsn,
    DSN
)

All functions return None if the variable is not set. An optional default parameter can be provided to return a fallback value instead.

value = env_var(name="STR_VAR", default="fallback")

str

value = env_var(name="STR_VAR")

returns str

bool

value = env_var_bool(name="BOOL_VAR")

returns bool — accepts true or false (case insensitive)

tz

value = env_var_tz(name="TZ_VAR")

returns str if value is a valid IANA timezone (e.g. Europe/Stockholm)

list

value = env_var_list(name="LIST_VAR", separator="|")

returns list[str] if value is splittable by separator

int

value = env_var_int(name="INT_VAR")

returns int if value is numeric

float

value = env_var_float(name="FLOAT_VAR")

returns float if value is a float

cron

value = env_var_cron(name="CRON_EXPRESSION_VAR")

returns str if value is a valid cron expression

datetime (ISO8601)

value = env_var_iso8601_datetime(name="DATETIME_VAR")

returns datetime if value is a valid ISO8601 datetime string — timezone is optional

2026-01-01T00:00:00
2026-01-01T00:00:00+00:00

datetime (RFC3339)

value = env_var_rfc3339_datetime(name="DATETIME_VAR")

returns datetime if value is a valid RFC3339 datetime string — timezone is required

2026-01-01T00:00:00+00:00

DSN

Note: Special characters in passwords must be URL-encoded.

from urllib.parse import quote
password = 'My$ecret!Pass@2024'
encoded = quote(password, safe='')
print(encoded)  # My%24ecret%21Pass%402024 <--- use this
value = env_var_dsn(name="DSN_VAR")

returns DSN object if value is a valid DSN string, formatted as:

postgresql://username:password@hostname:5432/database_name

The DSN object exposes the following attributes:

Attribute Type Example
scheme str postgresql
host str hostname
port int 5432
username str username
password str password
database str database_name

Marshal

Marshals environment variables into typed configuration objects. Requires croniter:

pip install croniter
from roskarl.marshal import load_env_config

env = load_env_config()

Raises ValueError if both CRON_ENABLED and BACKFILL_ENABLED are true.

Env vars

Env var Type Description
MODEL_NAME str Model name
CRON_ENABLED bool Enable cron mode
CRON_EXPRESSION str Valid cron expression
BACKFILL_ENABLED bool Enable backfill mode
BACKFILL_SINCE datetime ISO8601 UTC datetime
BACKFILL_UNTIL datetime ISO8601 UTC datetime
BACKFILL_BATCH_SIZE int Batch size

CronConfig

since and until are derived from CRON_EXPRESSION based on the latest fully elapsed interval — e.g. 0 * * * * at 14:35 → since=13:00, until=14:00.

BackfillConfig

since and until read from env as ISO8601 UTC datetimes. CRON_ENABLED and BACKFILL_ENABLED are mutually exclusive.

with_env_config

A decorator that calls load_env_config() and injects the result as the first argument. Useful for pipeline entrypoints.

from roskarl.decorators import with_env_config
from roskarl.marshal import EnvConfig

@with_env_config
def run(env: EnvConfig) -> None:
    if env.backfill.enabled:
        run_backfill(
            model=env.model_name,
            since=env.backfill.since,
            until=env.backfill.until,
            batch_size=env.backfill.batch_size,
        )
    else:
        run_incremental(
            model=env.model_name,
            since=env.cron.since,
            until=env.cron.until,
        )

run()

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

roskarl-3.0.1.tar.gz (8.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

roskarl-3.0.1-py3-none-any.whl (6.7 kB view details)

Uploaded Python 3

File details

Details for the file roskarl-3.0.1.tar.gz.

File metadata

  • Download URL: roskarl-3.0.1.tar.gz
  • Upload date:
  • Size: 8.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for roskarl-3.0.1.tar.gz
Algorithm Hash digest
SHA256 fb5b410932ef1434fc63ddc9cf16cbc13bfc427904e382215aad7d0e35e777cb
MD5 04803c6f112782e6c3346b086c97d3f8
BLAKE2b-256 43f6bc0b511294239c211168c0c0835c84542d2e06ab469bce1b46329197e0cd

See more details on using hashes here.

File details

Details for the file roskarl-3.0.1-py3-none-any.whl.

File metadata

  • Download URL: roskarl-3.0.1-py3-none-any.whl
  • Upload date:
  • Size: 6.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for roskarl-3.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0ab438f06203b20609c27e6712566b46430b7cf77cfab6af17dfb1f5a3c450f1
MD5 289e78f1f2f8180e1391d25e2505e30a
BLAKE2b-256 7d9058cf5406fbdcd8a77ca44ac3771fb38c649487768ba5fcda620244471c43

See more details on using hashes here.

Supported by

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