Skip to content
This repository has been archived by the owner on Oct 30, 2023. It is now read-only.

phodge/envo

Repository files navigation

envo - smart environment variables handling

Define environmental variables in python and activate hot reloaded shells for them.

Features

  • Initialisation of variables in a given directory (creates common variables file too)
user@pc:/project$ envo local --init  # creates local environment python files
  • Easy and dynamic handling in .py files (See documentation to learn more)
  • Provides addons like handling virtual environments
user@pc:/project$ envo local --init=venv  # will add .venv to PATH
  • Automatic env variables generation based on defined python variables
  • Hot reload. Activated shell will reload environmental variables when files change.
  • Activating shells for a given environment
user@pc:/project$ envo local
🐣(project)user@pc:/project$
🐣(project)user@pc:/project$ exit
user@pc:/project$ envo prod
🔥(project)user@pc:/project$
  • Saving variables to a regular .env file
user@pc:/project$ envo local --save
  • Printing variables (handy for non interactive CLIs like CI or docker)
user@pc:/project$ envo local --dry-run
  • Detects undefined variables.
  • Perfect for switching kubernetes contexts and devops tasks

Example

Initialising environment

user@pc:/project$ envo local --init

Will create env_comm.py and env_local.py

# env_comm.py
@dataclass
class ProjectEnvComm(Env):
    @dataclass
    class Python(BaseEnv):
        version: str

    class Meta:
        raw = ["kubeconfig"]  # disable namespacing

    python: Python
    number: int
    kubeconfig: Path
    # Add more variables here

    def __init__(self) -> None:
        super().__init__(root=Path(os.path.realpath(__file__)).parent)
        self.name = "proj"
        self.python = self.Python(version="3.8.2")
        self.kubeconfig = self.root / f"{self.stage}/kubeconfig.yaml"

# env_local.py
@dataclass
class ProjectEnv(ProjectEnvComm):
    def __init__(self) -> None:
        self.stage = "test"
        self.emoji = "🛠️"
        super().__init__()

        self.number = 12

Env = ProjectEnv

Example usage:

user@pc:/project$ envo  # short for "envo local"
🐣(project)user@pc:/project$ echo $PROJ_PYTHON_VERSION
3.8.2
🐣(project)user@pc:/project$echo $PROJ_NUMBER
12

TODO: Major: * Refactor start_in * restore wordking dir * Add file hooks * Add bootstrap (versioning etc) * Fix git log bug * Add reload command * magic function args validator

Minor: * Shell should highlight envo commands on green * Unnecessary prompt rendered again aftet Ctr-d * work on public/private fields and methods * add examples * print hooks for repr

Bugs:

Improvements: * type checking ?

About

Smart environments handling

Resources

Stars

Watchers

Forks

Packages

No packages published