pip install --upgrade git+https://github.com/ablaternae/python-dotenv-typecastfrom dotenv_typecast import read_dotenv
env = read_dotenv()
example = env.str("EXAMPLE_STRING")Скрипт расширяет возможности известной библиотеки dotenv методами приведения типов.
Получается почти как environs, но не тащит за собой в зависимостях 350кб marshmallow.
Инициализация плагина выполняется при импорте
import dotenv_typecastВсе функции можно импортировать как из dotenv, так и из dotenv_typecast
import dotenv_typecast
from dotenv import dotenv_values, load_dotenv, read_dotenvили
from dotenv_typecast import dotenv_values, load_dotenv, read_dotenvПосле инициализации к модулю dotenv будет добавлена функция read_dotenv, которая работает аналогично другим функциям, но возвращает объект DotEnv
def read_dotenv(
dotenv_path: Optional[StrPath] = None,
stream: Optional[IO[str]] = None,
verbose: bool = False,
override: bool = False,
interpolate: bool = True,
encoding: Optional[str] = "utf-8",
) -> DotEnv:env = read_dotenv(".env", override=True)
data_dir = env.path("DATA_DIR", default="my_data_dir")- Добавлен метод
DotEvn.env(key, default)получения данных не из внутреннего массива (который формируется из файла или строки), а из переменных окружения, как это делаетos.getenv(key, default) - Весь каст теперь идёт через него, а не оригинальный метод
DotEvn.get - Таким образом, параметр
overrideвыглядит более логичным - Версия повышена до стабильной
имеют схожую сигнатуру и обрабатываются через DotEnv.__getattr__
def typecast_method(env_name: str, default_value = None, *args, **kwargs) -> Anyсписок методов, в целом, аналогичен environs:
env.strenv.boolenv.intenv.floatenv.decimalenv.list(accepts optionalsubcastanddelimiterkeyword arguments)env.json(casts to aJSON object)env.datetime(uses fromisoformat() method)env.date(uses fromisoformat() method)env.time(uses fromisoformat() method)env.timedelta(assumes value is an int\float in seconds)env.timestamp(assumes value is an int\float in seconds)env.url(recommended to specify the scheme)env.uuid(assumes value is string of 36 char or 32 without dash; casts to aUUID object)env.path(casts to apathlib.Path)