Source code for msdss_base_dotenv.core
import os
from .tools import *
[docs]class DotEnv:
"""
Class to manage environmental variables.
Parameters
----------
env_file : str
The path of the file with environmental variables.
key_path : str
The path of the key file for the ``env_file``.
defaults : dict
Key and value pairs representing default environment values to be loaded. These will be loaded if ones in the ``env_file`` do not exist or are unset.
**kwargs
Keyword arguments defining the environmental variable name mappings for this object:
* Each key represents an alias name referring to an environmental variable
* Each value represents the environmental variable name
* This allows changing env vars to refer to the same keys
Attributes
----------
env_file : str
Same as parameter ``env_file``.
key_path : str
Same as parameter ``key_path``.
defaults : dict
Same as parameter ``defaults``.
mappings : dict
Dictionary of key and values relative to ``kwargs``.
Author
------
Richard Wen <rrwen.dev@gmail.com>
Example
-------
.. jupyter-execute::
from msdss_base_dotenv import DotEnv
# Create env
env = DotEnv(secret='MSDSS_SECRET', password='PASSWORD')
# Set an env var
env.set('password', 'msdss123')
# Get an existing env var
password = env.get('password')
print('password: ' + password)
# Get a non-existent env var
# Will print the default value 'secret-default'
secret = env.get('secret', 'secret-default')
print('secret: ' + secret)
# Del the password
env.delete('password')
password = env.get('password')
print('password_after_del: ' + str(password))
# Set the password
env.set('password', 'new-password')
password = env.get('password')
print('password_after_set: ' + str(password))
# Save the env file
env.save()
# Load the saved env file
env.load()
# Remove the env files
env.clear()
"""
def __init__(
self,
env_file='./.env',
key_path=None,
defaults={},
**kwargs):
self.env_file = env_file
self.key_path = key_path
self.defaults = defaults
self.mappings = kwargs
[docs] def clear(self):
"""
Delete env and key files.
Author
------
Richard Wen <rrwen.dev@gmail.com>
Example
-------
.. jupyter-execute::
from msdss_base_dotenv import *
# Create env
env = DotEnv(secret='MSDSS_SECRET', password='PASSWORD')
# Set an env var
env.set('password', 'msdss123')
# Save the current specified env vars to an encrypted file
env.save()
# Create files
env.clear()
"""
clear_env_file(env_file=self.env_file, key_path=self.key_path)
[docs] def delete(self, key, throw_error=False):
"""
Delete an environment variable if it exists.
Parameters
----------
key : str
The key to delete a reference env var.
throw_error : bool
Throw an error if the environment variable does not exist.
Author
------
Richard Wen <rrwen.dev@gmail.com>
Example
-------
.. jupyter-execute::
from msdss_base_dotenv import *
# Create default key value env
env = DotEnv(user='USER', password='PASSWORD')
# Set env var values
env.set('user', 'msdss')
env.set('password', 'msdss123')
before_delete = env.get('password')
# Delete an env var based on key alias
env.delete('password')
after_delete = env.get('password')
# Print results
print('before_delete: ' + before_delete)
print('after_delete: ' + str(after_delete))
"""
name = self.mappings[key]
if name in os.environ:
del os.environ[name]
elif throw_error:
raise ValueError(f'Environment variable {name} does not exist')
[docs] def exists(self):
"""
Check if a set of env vars exist based on the env and key files.
Return
------
bool
Whether the env exists or not.
Author
------
Richard Wen <rrwen.dev@gmail.com>
Example
-------
.. jupyter-execute::
from msdss_base_dotenv import *
# Create default key value env
env = DotEnv(user='USER', password='PASSWORD')
# Set env var values
env.set('user', 'msdss')
env.set('password', 'msdss123')
# Check that env exists
env.save()
before_clear = env.exists()
# Clear and check again
env.clear()
after_clear = env.exists()
# Print results
print('before_clear: ' + str(before_clear))
print('after_clear: ' + str(after_clear))
"""
out = env_exists(env_file=self.env_file, key_path=self.key_path)
return out
[docs] def get(self, key, default=None):
"""
Obtain the value of an env var.
Parameters
----------
key : str
The key to get a reference env var.
default : str or None
A default value if there is no value set for the env var. If ``None``, it will use the value set in attribute ``.defaults`` before defaulting to ``None``.
Author
------
Richard Wen <rrwen.dev@gmail.com>
Example
-------
.. jupyter-execute::
from msdss_base_dotenv import *
# Create default key value env
env = DotEnv(
someuser='SOME_USER',
password='PASSWORD',
defaults=dict(
someuser='default-user'
)
)
# Set env var values
env.set('password', 'msdss123')
# Get the PASSWORD var
password = env.get('password')
print('password: ' + password)
# Check if user is set
user_is_set = env.is_set('someuser')
print('user_is_set: ' + str(user_is_set))
# Get the USER var
# Will be default since it does not exist
user = env.get('someuser')
print('user: ' + user)
"""
name = self.mappings[key]
default = default if default else self.defaults[key] if key in self.defaults else default
out = os.getenv(name, default)
return out
[docs] def is_set(self, key):
"""
Check whether an environment variable is set.
Parameters
----------
key : str
The key to get a reference env var.
Returns
-------
bool
Whether or not the environment variable from ``key`` is set.
Author
------
Richard Wen <rrwen.dev@gmail.com>
Example
-------
.. jupyter-execute::
from msdss_base_dotenv import *
# Create default key value env
env = DotEnv(
someuser='SOME_USER',
password='PASSWORD',
defaults=dict(
someuser='default-user'
)
)
# Get the USER var
user_is_set = env.is_set('someuser')
print('user_is_set: ' + str(user_is_set))
# Get the USER var again
env.set('someuser', 'new-user')
user_is_set = env.is_set('someuser')
print('user_is_set_after: ' + str(user_is_set))
"""
name = self.mappings[key]
out = name in os.environ
return out
[docs] def load(self):
"""
Load env vars from the saved env file.
Author
------
Richard Wen <rrwen.dev@gmail.com>
Example
-------
.. jupyter-execute::
from msdss_base_dotenv import *
# Create default key value env
env = DotEnv(user='USER', password='PASSWORD')
env.set('user', 'new-user')
# Save the env vars
env.save()
# Load and see env vars
env.load()
user = env.get('user')
print('user: ' + user)
# Clear env files
env.clear()
"""
load_env_file(env_file=self.env_file, key_path=self.key_path, defaults=self.defaults)
[docs] def save(self):
"""
Save env vars to a file.
Author
------
Richard Wen <rrwen.dev@gmail.com>
Example
-------
.. jupyter-execute::
from msdss_base_dotenv import *
# Create default key value env
env = DotEnv(user='USER', password='PASSWORD')
env.set('user', 'new-user')
# Save the env vars
env.save()
# Load and see env vars
env.load()
user = env.get('user')
print('user: ' + user)
# Clear env files
env.clear()
"""
# (DotEnv_save_current) Gather current env vars
current_vars = {}
for k in self.mappings:
name = self.mappings[k]
if name in os.environ:
current_vars[name] = os.environ[name]
# (DotEnv_save_file) Save current env vars to a file
save_env_file(current_vars, self.env_file, self.key_path)
current_vars.clear()
[docs] def set(self, key, value):
"""
Sets an env var and saves it in the file.
Parameters
----------
key : str
The key to get a reference env var.
value : str
A value to set for the env var.
Author
------
Richard Wen <rrwen.dev@gmail.com>
Example
-------
.. jupyter-execute::
from msdss_base_dotenv import *
# Create default key value env
env = DotEnv(user='USER', password='PASSWORD')
# Set env var values
env.set('user', 'msdss')
env.set('password', 'msdss123')
# Get env var values to check
user = env.get('user')
password = env.get('password')
print('user: ' + user)
print('password: ' + password)
"""
name = self.mappings[key]
os.environ[name] = str(value)